|
21 | 21 |
|
22 | 22 | public interface Claude { |
23 | 23 |
|
24 | | - String ANTHROPIC_VERSION = ZCfg.requiredString("anthropic.version"); |
25 | | - String ANTHROPIC_API_KEY = ZCfg.requiredString("anthropic.api.key"); |
26 | 24 | Models defaultModel = Models.CLAUDE_47_OPUS; |
27 | 25 | String fallbackModelName = "claude-sonnet-4-6"; |
28 | 26 |
|
| 27 | + static String apiKey() { |
| 28 | + return ZCfg.requiredString("anthropic.api.key"); |
| 29 | + } |
| 30 | + |
| 31 | + static String apiVersion() { |
| 32 | + return ZCfg.requiredString("anthropic.version"); |
| 33 | + } |
| 34 | + |
29 | 35 | enum Models { |
30 | 36 | CLAUDE_47_OPUS("claude-opus-4-7", Claude.fallbackModelName, false, true, true, 32_000), |
31 | 37 | CLAUDE_46_OPUS("claude-opus-4-6", Claude.fallbackModelName, true, true, true, 32_000), |
@@ -96,9 +102,17 @@ public static Optional<Models> fromPartialMatch(String partialName) { |
96 | 102 | } |
97 | 103 |
|
98 | 104 | HttpClient client = HttpClient.newHttpClient(); |
99 | | - URI uri = URI.create("https://api.anthropic.com/v1/messages"); |
| 105 | + URI uri = endpoint(); |
100 | 106 | Models currentModel = Models.fromSystemProperty(); |
101 | 107 |
|
| 108 | + static URI endpoint() { |
| 109 | + var scheme = ZCfg.string("claude.scheme", "https"); |
| 110 | + var host = ZCfg.string("claude.host", "api.anthropic.com"); |
| 111 | + var port = ZCfg.integer("claude.port", -1); |
| 112 | + var authority = port > 0 ? host + ":" + port : host; |
| 113 | + return URI.create("%s://%s/v1/messages".formatted(scheme, authority)); |
| 114 | + } |
| 115 | + |
102 | 116 | static JSONObject invoke(String system, JSONArray messages, JSONArray tools, float temperature) { |
103 | 117 | var payloadJSON = claudeMessage(messages, temperature, system); |
104 | 118 | payloadJSON.put("model", currentModel.modelName()); |
@@ -249,9 +263,9 @@ static String replaceModel(String message, String originalModel, String fallback |
249 | 263 | static HttpResponse<String> send(String message) { |
250 | 264 | var request = HttpRequest.newBuilder(uri) |
251 | 265 | .POST(BodyPublishers.ofString(message)) |
252 | | - .header("x-api-key", ANTHROPIC_API_KEY) |
| 266 | + .header("x-api-key", apiKey()) |
253 | 267 | .header("content-type", "application/json") |
254 | | - .header("anthropic-version", ANTHROPIC_VERSION) |
| 268 | + .header("anthropic-version", apiVersion()) |
255 | 269 | .build(); |
256 | 270 | try { |
257 | 271 | return client.send(request, BodyHandlers.ofString()); |
|
0 commit comments