@jaypie/llm 1.2.25 → 1.2.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/constants.d.ts +4 -4
- package/dist/cjs/index.cjs +67 -4
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/operate/adapters/AnthropicAdapter.d.ts +4 -0
- package/dist/esm/constants.d.ts +4 -4
- package/dist/esm/index.js +67 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/operate/adapters/AnthropicAdapter.d.ts +4 -0
- package/package.json +1 -1
|
@@ -14,6 +14,10 @@ import { BaseProviderAdapter } from "./ProviderAdapter.interface.js";
|
|
|
14
14
|
export declare class AnthropicAdapter extends BaseProviderAdapter {
|
|
15
15
|
readonly name: "anthropic";
|
|
16
16
|
readonly defaultModel: "claude-sonnet-4-6";
|
|
17
|
+
private runtimeNoTemperatureModels;
|
|
18
|
+
rememberModelRejectsTemperature(model: string): void;
|
|
19
|
+
clearRuntimeNoTemperatureModels(): void;
|
|
20
|
+
private supportsTemperature;
|
|
17
21
|
buildRequest(request: OperateRequest): Anthropic.MessageCreateParams;
|
|
18
22
|
formatTools(toolkit: Toolkit, outputSchema?: JsonObject): ProviderToolDefinition[];
|
|
19
23
|
formatOutputSchema(schema: JsonObject | NaturalSchema | z.ZodType): JsonObject;
|
package/dist/esm/constants.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const PROVIDER: {
|
|
|
5
5
|
};
|
|
6
6
|
readonly MODEL: {
|
|
7
7
|
readonly DEFAULT: "claude-sonnet-4-6";
|
|
8
|
-
readonly LARGE: "claude-opus-4-
|
|
8
|
+
readonly LARGE: "claude-opus-4-7";
|
|
9
9
|
readonly SMALL: "claude-sonnet-4-6";
|
|
10
10
|
readonly TINY: "claude-haiku-4-5";
|
|
11
11
|
};
|
|
@@ -51,7 +51,7 @@ export declare const PROVIDER: {
|
|
|
51
51
|
readonly OPENROUTER: {
|
|
52
52
|
readonly MODEL: {
|
|
53
53
|
readonly DEFAULT: "anthropic/claude-sonnet-4-6";
|
|
54
|
-
readonly LARGE: "anthropic/claude-opus-4-
|
|
54
|
+
readonly LARGE: "anthropic/claude-opus-4-7";
|
|
55
55
|
readonly SMALL: "anthropic/claude-sonnet-4-6";
|
|
56
56
|
readonly TINY: "anthropic/claude-haiku-4-5";
|
|
57
57
|
};
|
|
@@ -98,8 +98,8 @@ export declare const DEFAULT: {
|
|
|
98
98
|
};
|
|
99
99
|
export declare const ALL: {
|
|
100
100
|
readonly BASE: readonly ["claude-sonnet-4-6", "gemini-3.1-pro-preview", "gpt-5.4", "grok-4.20-0309-reasoning"];
|
|
101
|
-
readonly COMBINED: readonly ("claude-sonnet-4-6" | "claude-opus-4-
|
|
102
|
-
readonly LARGE: readonly ["claude-opus-4-
|
|
101
|
+
readonly COMBINED: readonly ("claude-sonnet-4-6" | "claude-opus-4-7" | "claude-haiku-4-5" | "gemini-3.1-pro-preview" | "gemini-3-flash-preview" | "gemini-3.1-flash-lite-preview" | "gpt-5.4" | "gpt-5.4-mini" | "gpt-5.4-nano" | "grok-4.20-0309-reasoning" | "grok-4.20-0309-non-reasoning" | "grok-4-1-fast-non-reasoning")[];
|
|
102
|
+
readonly LARGE: readonly ["claude-opus-4-7", "gemini-3.1-pro-preview", "gpt-5.4", "grok-4.20-0309-reasoning"];
|
|
103
103
|
readonly SMALL: readonly ["claude-sonnet-4-6", "gemini-3-flash-preview", "gpt-5.4-mini", "grok-4.20-0309-non-reasoning"];
|
|
104
104
|
readonly TINY: readonly ["claude-haiku-4-5", "gemini-3.1-flash-lite-preview", "gpt-5.4-nano", "grok-4-1-fast-non-reasoning"];
|
|
105
105
|
};
|
package/dist/esm/index.js
CHANGED
|
@@ -15,7 +15,7 @@ const FIRST_CLASS_PROVIDER = {
|
|
|
15
15
|
// https://docs.anthropic.com/en/docs/about-claude/models/overview
|
|
16
16
|
ANTHROPIC: {
|
|
17
17
|
DEFAULT: "claude-sonnet-4-6",
|
|
18
|
-
LARGE: "claude-opus-4-
|
|
18
|
+
LARGE: "claude-opus-4-7",
|
|
19
19
|
SMALL: "claude-sonnet-4-6",
|
|
20
20
|
TINY: "claude-haiku-4-5",
|
|
21
21
|
},
|
|
@@ -1063,6 +1063,24 @@ const NOT_RETRYABLE_ERROR_NAMES = [
|
|
|
1063
1063
|
"NotFoundError",
|
|
1064
1064
|
"PermissionDeniedError",
|
|
1065
1065
|
];
|
|
1066
|
+
// Models known not to accept `temperature`.
|
|
1067
|
+
// Patterns (not exact names) so dated variants and future releases are covered
|
|
1068
|
+
// without code changes — Anthropic is trending toward removing temperature on
|
|
1069
|
+
// newer Claude models.
|
|
1070
|
+
const MODELS_WITHOUT_TEMPERATURE = [
|
|
1071
|
+
/^claude-opus-4-[789]/,
|
|
1072
|
+
/^claude-opus-[5-9]/,
|
|
1073
|
+
];
|
|
1074
|
+
function isTemperatureDeprecationError(error) {
|
|
1075
|
+
if (!error || typeof error !== "object")
|
|
1076
|
+
return false;
|
|
1077
|
+
const err = error;
|
|
1078
|
+
const name = error?.constructor?.name;
|
|
1079
|
+
if (name !== "BadRequestError" && err.status !== 400)
|
|
1080
|
+
return false;
|
|
1081
|
+
const messages = [err.message, err.error?.message].filter((m) => typeof m === "string");
|
|
1082
|
+
return messages.some((m) => m.toLowerCase().includes("temperature"));
|
|
1083
|
+
}
|
|
1066
1084
|
//
|
|
1067
1085
|
//
|
|
1068
1086
|
// Main
|
|
@@ -1077,6 +1095,20 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1077
1095
|
super(...arguments);
|
|
1078
1096
|
this.name = PROVIDER.ANTHROPIC.NAME;
|
|
1079
1097
|
this.defaultModel = PROVIDER.ANTHROPIC.MODEL.DEFAULT;
|
|
1098
|
+
// Session-level cache of models observed to reject `temperature` at runtime.
|
|
1099
|
+
// Populated by executeRequest on 400 errors so repeat calls skip the param.
|
|
1100
|
+
this.runtimeNoTemperatureModels = new Set();
|
|
1101
|
+
}
|
|
1102
|
+
rememberModelRejectsTemperature(model) {
|
|
1103
|
+
this.runtimeNoTemperatureModels.add(model);
|
|
1104
|
+
}
|
|
1105
|
+
clearRuntimeNoTemperatureModels() {
|
|
1106
|
+
this.runtimeNoTemperatureModels.clear();
|
|
1107
|
+
}
|
|
1108
|
+
supportsTemperature(model) {
|
|
1109
|
+
if (this.runtimeNoTemperatureModels.has(model))
|
|
1110
|
+
return false;
|
|
1111
|
+
return !MODELS_WITHOUT_TEMPERATURE.some((pattern) => pattern.test(model));
|
|
1080
1112
|
}
|
|
1081
1113
|
//
|
|
1082
1114
|
// Request Building
|
|
@@ -1168,6 +1200,11 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1168
1200
|
if (request.temperature !== undefined) {
|
|
1169
1201
|
anthropicRequest.temperature = request.temperature;
|
|
1170
1202
|
}
|
|
1203
|
+
// Strip temperature for models that don't support it (denylist + runtime cache)
|
|
1204
|
+
if (anthropicRequest.temperature !== undefined &&
|
|
1205
|
+
!this.supportsTemperature(anthropicRequest.model)) {
|
|
1206
|
+
delete anthropicRequest.temperature;
|
|
1207
|
+
}
|
|
1171
1208
|
return anthropicRequest;
|
|
1172
1209
|
}
|
|
1173
1210
|
formatTools(toolkit, outputSchema) {
|
|
@@ -1218,22 +1255,48 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1218
1255
|
//
|
|
1219
1256
|
async executeRequest(client, request, signal) {
|
|
1220
1257
|
const anthropic = client;
|
|
1258
|
+
const anthropicRequest = request;
|
|
1221
1259
|
try {
|
|
1222
|
-
return (await anthropic.messages.create(
|
|
1260
|
+
return (await anthropic.messages.create(anthropicRequest, signal ? { signal } : undefined));
|
|
1223
1261
|
}
|
|
1224
1262
|
catch (error) {
|
|
1225
1263
|
if (signal?.aborted)
|
|
1226
1264
|
return undefined;
|
|
1265
|
+
// If the model rejected `temperature`, cache it and retry without the param
|
|
1266
|
+
if (anthropicRequest.temperature !== undefined &&
|
|
1267
|
+
isTemperatureDeprecationError(error)) {
|
|
1268
|
+
this.rememberModelRejectsTemperature(anthropicRequest.model);
|
|
1269
|
+
const retryRequest = { ...anthropicRequest };
|
|
1270
|
+
delete retryRequest.temperature;
|
|
1271
|
+
return (await anthropic.messages.create(retryRequest, signal ? { signal } : undefined));
|
|
1272
|
+
}
|
|
1227
1273
|
throw error;
|
|
1228
1274
|
}
|
|
1229
1275
|
}
|
|
1230
1276
|
async *executeStreamRequest(client, request, signal) {
|
|
1231
1277
|
const anthropic = client;
|
|
1232
|
-
|
|
1278
|
+
let streamRequest = {
|
|
1233
1279
|
...request,
|
|
1234
1280
|
stream: true,
|
|
1235
1281
|
};
|
|
1236
|
-
|
|
1282
|
+
let stream;
|
|
1283
|
+
try {
|
|
1284
|
+
stream = await anthropic.messages.create(streamRequest, signal ? { signal } : undefined);
|
|
1285
|
+
}
|
|
1286
|
+
catch (error) {
|
|
1287
|
+
if (streamRequest.temperature !== undefined &&
|
|
1288
|
+
isTemperatureDeprecationError(error)) {
|
|
1289
|
+
this.rememberModelRejectsTemperature(streamRequest.model);
|
|
1290
|
+
streamRequest = {
|
|
1291
|
+
...streamRequest,
|
|
1292
|
+
};
|
|
1293
|
+
delete streamRequest.temperature;
|
|
1294
|
+
stream = await anthropic.messages.create(streamRequest, signal ? { signal } : undefined);
|
|
1295
|
+
}
|
|
1296
|
+
else {
|
|
1297
|
+
throw error;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1237
1300
|
// Track current tool call being built
|
|
1238
1301
|
let currentToolCall = null;
|
|
1239
1302
|
// Track usage for final chunk
|