@jaypie/llm 1.2.31 → 1.2.32
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/index.cjs
CHANGED
|
@@ -1199,11 +1199,11 @@ const NOT_RETRYABLE_ERROR_NAMES = [
|
|
|
1199
1199
|
// Patterns (not exact names) so dated variants and future releases are covered
|
|
1200
1200
|
// without code changes — Anthropic is trending toward removing temperature on
|
|
1201
1201
|
// newer Claude models.
|
|
1202
|
-
const MODELS_WITHOUT_TEMPERATURE = [
|
|
1202
|
+
const MODELS_WITHOUT_TEMPERATURE$1 = [
|
|
1203
1203
|
/^claude-opus-4-[789]/,
|
|
1204
1204
|
/^claude-opus-[5-9]/,
|
|
1205
1205
|
];
|
|
1206
|
-
function isTemperatureDeprecationError(error) {
|
|
1206
|
+
function isTemperatureDeprecationError$1(error) {
|
|
1207
1207
|
if (!error || typeof error !== "object")
|
|
1208
1208
|
return false;
|
|
1209
1209
|
const err = error;
|
|
@@ -1273,7 +1273,7 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1273
1273
|
supportsTemperature(model) {
|
|
1274
1274
|
if (this.runtimeNoTemperatureModels.has(model))
|
|
1275
1275
|
return false;
|
|
1276
|
-
return !MODELS_WITHOUT_TEMPERATURE.some((pattern) => pattern.test(model));
|
|
1276
|
+
return !MODELS_WITHOUT_TEMPERATURE$1.some((pattern) => pattern.test(model));
|
|
1277
1277
|
}
|
|
1278
1278
|
supportsStructuredOutput(model) {
|
|
1279
1279
|
return !this.runtimeNoStructuredOutputModels.has(model);
|
|
@@ -1451,7 +1451,7 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1451
1451
|
return undefined;
|
|
1452
1452
|
// If the model rejected `temperature`, cache it and retry without the param
|
|
1453
1453
|
if (anthropicRequest.temperature !== undefined &&
|
|
1454
|
-
isTemperatureDeprecationError(error)) {
|
|
1454
|
+
isTemperatureDeprecationError$1(error)) {
|
|
1455
1455
|
this.rememberModelRejectsTemperature(anthropicRequest.model);
|
|
1456
1456
|
const retryRequest = { ...anthropicRequest };
|
|
1457
1457
|
delete retryRequest.temperature;
|
|
@@ -1512,7 +1512,7 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1512
1512
|
}
|
|
1513
1513
|
catch (error) {
|
|
1514
1514
|
if (streamRequest.temperature !== undefined &&
|
|
1515
|
-
isTemperatureDeprecationError(error)) {
|
|
1515
|
+
isTemperatureDeprecationError$1(error)) {
|
|
1516
1516
|
this.rememberModelRejectsTemperature(streamRequest.model);
|
|
1517
1517
|
streamRequest = {
|
|
1518
1518
|
...streamRequest,
|
|
@@ -2663,6 +2663,27 @@ const NOT_RETRYABLE_ERROR_TYPES = [
|
|
|
2663
2663
|
openai.RateLimitError,
|
|
2664
2664
|
openai.UnprocessableEntityError,
|
|
2665
2665
|
];
|
|
2666
|
+
// Models known not to accept `temperature`.
|
|
2667
|
+
// Patterns (not exact names) so dated variants and future releases are covered
|
|
2668
|
+
// without code changes — OpenAI is removing temperature on newer reasoning
|
|
2669
|
+
// models.
|
|
2670
|
+
const MODELS_WITHOUT_TEMPERATURE = [
|
|
2671
|
+
/^gpt-5\.5/, // gpt-5.5 series deprecated temperature
|
|
2672
|
+
/^o\d/, // o-series reasoning models (o1, o3, o4, ...)
|
|
2673
|
+
];
|
|
2674
|
+
function isTemperatureDeprecationError(error) {
|
|
2675
|
+
if (!error || typeof error !== "object")
|
|
2676
|
+
return false;
|
|
2677
|
+
if (!(error instanceof openai.BadRequestError) &&
|
|
2678
|
+
error.status !== 400) {
|
|
2679
|
+
return false;
|
|
2680
|
+
}
|
|
2681
|
+
const messages = [
|
|
2682
|
+
error.message,
|
|
2683
|
+
error.error?.message,
|
|
2684
|
+
].filter((m) => typeof m === "string");
|
|
2685
|
+
return messages.some((m) => m.toLowerCase().includes("temperature"));
|
|
2686
|
+
}
|
|
2666
2687
|
//
|
|
2667
2688
|
//
|
|
2668
2689
|
// Main
|
|
@@ -2677,6 +2698,20 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
2677
2698
|
super(...arguments);
|
|
2678
2699
|
this.name = PROVIDER.OPENAI.NAME;
|
|
2679
2700
|
this.defaultModel = PROVIDER.OPENAI.MODEL.DEFAULT;
|
|
2701
|
+
// Session-level cache of models observed to reject `temperature` at runtime.
|
|
2702
|
+
// Populated by executeRequest on 400 errors so repeat calls skip the param.
|
|
2703
|
+
this.runtimeNoTemperatureModels = new Set();
|
|
2704
|
+
}
|
|
2705
|
+
rememberModelRejectsTemperature(model) {
|
|
2706
|
+
this.runtimeNoTemperatureModels.add(model);
|
|
2707
|
+
}
|
|
2708
|
+
clearRuntimeNoTemperatureModels() {
|
|
2709
|
+
this.runtimeNoTemperatureModels.clear();
|
|
2710
|
+
}
|
|
2711
|
+
supportsTemperature(model) {
|
|
2712
|
+
if (this.runtimeNoTemperatureModels.has(model))
|
|
2713
|
+
return false;
|
|
2714
|
+
return !MODELS_WITHOUT_TEMPERATURE.some((pattern) => pattern.test(model));
|
|
2680
2715
|
}
|
|
2681
2716
|
//
|
|
2682
2717
|
// Request Building
|
|
@@ -2720,6 +2755,11 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
2720
2755
|
if (request.temperature !== undefined) {
|
|
2721
2756
|
openaiRequest.temperature = request.temperature;
|
|
2722
2757
|
}
|
|
2758
|
+
// Strip temperature for models that don't support it (denylist + runtime cache)
|
|
2759
|
+
if (openaiRequest.temperature !== undefined &&
|
|
2760
|
+
!this.supportsTemperature(openaiRequest.model)) {
|
|
2761
|
+
delete openaiRequest.temperature;
|
|
2762
|
+
}
|
|
2723
2763
|
return openaiRequest;
|
|
2724
2764
|
}
|
|
2725
2765
|
formatTools(toolkit, _outputSchema) {
|
|
@@ -2769,14 +2809,21 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
2769
2809
|
//
|
|
2770
2810
|
async executeRequest(client, request, signal) {
|
|
2771
2811
|
const openai = client;
|
|
2812
|
+
const openaiRequest = request;
|
|
2772
2813
|
try {
|
|
2773
|
-
return await openai.responses.create(
|
|
2774
|
-
// @ts-expect-error OpenAI SDK types don't match our request format exactly
|
|
2775
|
-
request, signal ? { signal } : undefined);
|
|
2814
|
+
return await openai.responses.create(openaiRequest, signal ? { signal } : undefined);
|
|
2776
2815
|
}
|
|
2777
2816
|
catch (error) {
|
|
2778
2817
|
if (signal?.aborted)
|
|
2779
2818
|
return undefined;
|
|
2819
|
+
// If the model rejected `temperature`, cache it and retry without the param
|
|
2820
|
+
if (openaiRequest.temperature !== undefined &&
|
|
2821
|
+
isTemperatureDeprecationError(error)) {
|
|
2822
|
+
this.rememberModelRejectsTemperature(openaiRequest.model);
|
|
2823
|
+
const retryRequest = { ...openaiRequest };
|
|
2824
|
+
delete retryRequest.temperature;
|
|
2825
|
+
return await openai.responses.create(retryRequest, signal ? { signal } : undefined);
|
|
2826
|
+
}
|
|
2780
2827
|
throw error;
|
|
2781
2828
|
}
|
|
2782
2829
|
}
|