Skip to content

Commit 88f62b2

Browse files
committed
LLM switch refactored
1 parent 81b055a commit 88f62b2

1 file changed

Lines changed: 27 additions & 8 deletions

File tree

  • zsmith/src/main/java/airhacks/zsmith/llm/control

zsmith/src/main/java/airhacks/zsmith/llm/control/LLM.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,35 @@
99

1010
public interface LLM {
1111

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+
}
1438
}
1539

1640
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);
2342
}
2443
}

0 commit comments

Comments
 (0)