|
9 | 9 |
|
10 | 10 | public interface LLM { |
11 | 11 |
|
12 | | - static String provider() { |
13 | | - return ZCfg.string("llm.provider", "claude"); |
| 12 | + enum Provider { |
| 13 | + CLAUDE { |
| 14 | + @Override |
| 15 | + public JSONObject invoke(String system, JSONArray messages, JSONArray tools, float temperature) { |
| 16 | + return Claude.invoke(system, messages, tools, temperature); |
| 17 | + } |
| 18 | + }, |
| 19 | + OPENAI { |
| 20 | + @Override |
| 21 | + public JSONObject invoke(String system, JSONArray messages, JSONArray tools, float temperature) { |
| 22 | + return OpenAI.invoke(system, messages, tools, temperature); |
| 23 | + } |
| 24 | + }; |
| 25 | + |
| 26 | + public abstract JSONObject invoke(String system, JSONArray messages, JSONArray tools, float temperature); |
| 27 | + |
| 28 | + public static Provider fromConfig() { |
| 29 | + var configured = ZCfg.string("llm.provider", "claude"); |
| 30 | + try { |
| 31 | + return Provider.valueOf(configured.toUpperCase()); |
| 32 | + } catch (IllegalArgumentException e) { |
| 33 | + throw new IllegalStateException( |
| 34 | + "unknown llm.provider '%s' — expected one of %s" |
| 35 | + .formatted(configured, java.util.Arrays.toString(values()))); |
| 36 | + } |
| 37 | + } |
14 | 38 | } |
15 | 39 |
|
16 | 40 | static JSONObject invoke(String system, JSONArray messages, JSONArray tools, float temperature) { |
17 | | - return switch (provider()) { |
18 | | - case "openai" -> OpenAI.invoke(system, messages, tools, temperature); |
19 | | - case "claude" -> Claude.invoke(system, messages, tools, temperature); |
20 | | - default -> throw new IllegalStateException( |
21 | | - "unknown llm.provider '%s' — expected 'claude' or 'openai'".formatted(provider())); |
22 | | - }; |
| 41 | + return Provider.fromConfig().invoke(system, messages, tools, temperature); |
23 | 42 | } |
24 | 43 | } |
0 commit comments