@ljoukov/llm 7.0.9 → 7.0.11
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/README.md +5 -5
- package/dist/index.cjs +91 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -12
- package/dist/index.d.ts +16 -12
- package/dist/index.js +89 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -450,19 +450,19 @@ Use a `chatgpt-` prefix:
|
|
|
450
450
|
import { generateText } from "@ljoukov/llm";
|
|
451
451
|
|
|
452
452
|
const result = await generateText({
|
|
453
|
-
model: "chatgpt-gpt-5.
|
|
453
|
+
model: "chatgpt-gpt-5.5",
|
|
454
454
|
input: "Return exactly: OK",
|
|
455
455
|
});
|
|
456
456
|
|
|
457
457
|
console.log(result.text);
|
|
458
458
|
```
|
|
459
459
|
|
|
460
|
-
`chatgpt-gpt-5.
|
|
460
|
+
`gpt-5.5-fast` and `chatgpt-gpt-5.5-fast` are also supported as convenience aliases for `gpt-5.5` with priority processing enabled (`service_tier="priority"`), matching Codex `/fast` semantics.
|
|
461
461
|
|
|
462
462
|
Supported OpenAI text model ids are fixed literal unions in code, not arbitrary strings:
|
|
463
463
|
|
|
464
|
-
- OpenAI API: `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`
|
|
465
|
-
- ChatGPT auth: `chatgpt-gpt-5.4`, `chatgpt-gpt-5.4-fast`, `chatgpt-gpt-5.4-mini`, `chatgpt-gpt-5.3-codex-spark`
|
|
464
|
+
- OpenAI API: `gpt-5.5`, `gpt-5.5-fast`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`
|
|
465
|
+
- ChatGPT auth: `chatgpt-gpt-5.5`, `chatgpt-gpt-5.5-fast`, `chatgpt-gpt-5.4`, `chatgpt-gpt-5.4-fast`, `chatgpt-gpt-5.4-mini`, `chatgpt-gpt-5.3-codex-spark`
|
|
466
466
|
|
|
467
467
|
## JSON outputs
|
|
468
468
|
|
|
@@ -742,7 +742,7 @@ console.log(result.text);
|
|
|
742
742
|
For read/search/write tasks in a workspace, enable `filesystemTool`. The library auto-selects a tool profile by model
|
|
743
743
|
when `profile: "auto"`:
|
|
744
744
|
|
|
745
|
-
- Codex-like models (`gpt-5.4`, `chatgpt-gpt-5.4`, `chatgpt-gpt-5.4-fast`, and `chatgpt-gpt-5.3-codex-spark`): Codex-compatible filesystem tool shape.
|
|
745
|
+
- Codex-like models (`gpt-5.5`, `gpt-5.5-fast`, `chatgpt-gpt-5.5`, `chatgpt-gpt-5.5-fast`, `gpt-5.4`, `chatgpt-gpt-5.4`, `chatgpt-gpt-5.4-fast`, and `chatgpt-gpt-5.3-codex-spark`): Codex-compatible filesystem tool shape.
|
|
746
746
|
- Gemini models: Gemini-compatible filesystem tool shape.
|
|
747
747
|
- Other models: model-agnostic profile (currently Gemini-style).
|
|
748
748
|
|
package/dist/index.cjs
CHANGED
|
@@ -36,6 +36,7 @@ __export(index_exports, {
|
|
|
36
36
|
CODEX_APPLY_PATCH_LARK_GRAMMAR: () => CODEX_APPLY_PATCH_LARK_GRAMMAR,
|
|
37
37
|
DEFAULT_FILE_TTL_SECONDS: () => DEFAULT_FILE_TTL_SECONDS,
|
|
38
38
|
DEFAULT_SIGNED_URL_TTL_SECONDS: () => DEFAULT_SIGNED_URL_TTL_SECONDS,
|
|
39
|
+
EXPERIMENTAL_CHATGPT_MODEL_PREFIX: () => EXPERIMENTAL_CHATGPT_MODEL_PREFIX,
|
|
39
40
|
FIREWORKS_DEFAULT_GLM_MODEL: () => FIREWORKS_DEFAULT_GLM_MODEL,
|
|
40
41
|
FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL: () => FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL,
|
|
41
42
|
FIREWORKS_DEFAULT_KIMI_MODEL: () => FIREWORKS_DEFAULT_KIMI_MODEL,
|
|
@@ -90,6 +91,7 @@ __export(index_exports, {
|
|
|
90
91
|
getChatGptAuthProfile: () => getChatGptAuthProfile,
|
|
91
92
|
getCurrentToolCallContext: () => getCurrentToolCallContext,
|
|
92
93
|
isChatGptModelId: () => isChatGptModelId,
|
|
94
|
+
isExperimentalChatGptModelId: () => isExperimentalChatGptModelId,
|
|
93
95
|
isFireworksModelId: () => isFireworksModelId,
|
|
94
96
|
isGeminiImageModelId: () => isGeminiImageModelId,
|
|
95
97
|
isGeminiModelId: () => isGeminiModelId,
|
|
@@ -318,7 +320,61 @@ function getGeminiImagePricing(modelId) {
|
|
|
318
320
|
return void 0;
|
|
319
321
|
}
|
|
320
322
|
|
|
323
|
+
// src/openai/models.ts
|
|
324
|
+
var OPENAI_MODEL_IDS = [
|
|
325
|
+
"gpt-5.5",
|
|
326
|
+
"gpt-5.5-fast",
|
|
327
|
+
"gpt-5.4",
|
|
328
|
+
"gpt-5.4-mini",
|
|
329
|
+
"gpt-5.4-nano"
|
|
330
|
+
];
|
|
331
|
+
function isOpenAiModelId(value) {
|
|
332
|
+
return OPENAI_MODEL_IDS.includes(value);
|
|
333
|
+
}
|
|
334
|
+
var CHATGPT_MODEL_IDS = [
|
|
335
|
+
"chatgpt-gpt-5.5",
|
|
336
|
+
"chatgpt-gpt-5.5-fast",
|
|
337
|
+
"chatgpt-gpt-5.4",
|
|
338
|
+
"chatgpt-gpt-5.4-fast",
|
|
339
|
+
"chatgpt-gpt-5.4-mini",
|
|
340
|
+
"chatgpt-gpt-5.3-codex-spark"
|
|
341
|
+
];
|
|
342
|
+
var FAST_MODEL_SUFFIX = "-fast";
|
|
343
|
+
var OPENAI_PRIORITY_MODEL_IDS = ["gpt-5.5-fast"];
|
|
344
|
+
var CHATGPT_PRIORITY_MODEL_IDS = ["chatgpt-gpt-5.5-fast", "chatgpt-gpt-5.4-fast"];
|
|
345
|
+
var EXPERIMENTAL_CHATGPT_MODEL_PREFIX = "experimental-chatgpt-";
|
|
346
|
+
function isExperimentalChatGptModelId(value) {
|
|
347
|
+
return value.startsWith(EXPERIMENTAL_CHATGPT_MODEL_PREFIX) && value.length > EXPERIMENTAL_CHATGPT_MODEL_PREFIX.length;
|
|
348
|
+
}
|
|
349
|
+
function isChatGptModelId(value) {
|
|
350
|
+
return CHATGPT_MODEL_IDS.includes(value) || isExperimentalChatGptModelId(value);
|
|
351
|
+
}
|
|
352
|
+
function stripFastSuffix(model) {
|
|
353
|
+
return model.endsWith(FAST_MODEL_SUFFIX) ? model.slice(0, -FAST_MODEL_SUFFIX.length) : model;
|
|
354
|
+
}
|
|
355
|
+
function resolveOpenAiProviderModel(model) {
|
|
356
|
+
return OPENAI_PRIORITY_MODEL_IDS.includes(model) ? stripFastSuffix(model) : model;
|
|
357
|
+
}
|
|
358
|
+
function resolveOpenAiServiceTier(model) {
|
|
359
|
+
return OPENAI_PRIORITY_MODEL_IDS.includes(model) ? "priority" : void 0;
|
|
360
|
+
}
|
|
361
|
+
function stripChatGptPrefix(model) {
|
|
362
|
+
if (isExperimentalChatGptModelId(model)) {
|
|
363
|
+
return model.slice(EXPERIMENTAL_CHATGPT_MODEL_PREFIX.length);
|
|
364
|
+
}
|
|
365
|
+
return model.slice("chatgpt-".length);
|
|
366
|
+
}
|
|
367
|
+
function resolveChatGptProviderModel(model) {
|
|
368
|
+
const providerModel = stripChatGptPrefix(model);
|
|
369
|
+
return CHATGPT_PRIORITY_MODEL_IDS.includes(model) ? stripFastSuffix(providerModel) : providerModel;
|
|
370
|
+
}
|
|
371
|
+
function resolveChatGptServiceTier(model) {
|
|
372
|
+
return CHATGPT_PRIORITY_MODEL_IDS.includes(model) ? "priority" : void 0;
|
|
373
|
+
}
|
|
374
|
+
|
|
321
375
|
// src/openai/pricing.ts
|
|
376
|
+
var OPENAI_GPT_55_FAST_MODEL_IDS = ["gpt-5.5-fast", "chatgpt-gpt-5.5-fast"];
|
|
377
|
+
var OPENAI_GPT_55_STANDARD_MODEL_IDS = ["gpt-5.5", "chatgpt-gpt-5.5"];
|
|
322
378
|
var OPENAI_GPT_54_FAST_MODEL_IDS = ["gpt-5.4-fast", "chatgpt-gpt-5.4-fast"];
|
|
323
379
|
var OPENAI_GPT_54_MINI_MODEL_IDS = ["gpt-5.4-mini", "chatgpt-gpt-5.4-mini"];
|
|
324
380
|
var OPENAI_GPT_54_NANO_MODEL_IDS = ["gpt-5.4-nano"];
|
|
@@ -327,6 +383,16 @@ var OPENAI_GPT_53_CODEX_SPARK_MODEL_IDS = [
|
|
|
327
383
|
"chatgpt-gpt-5.3-codex-spark"
|
|
328
384
|
];
|
|
329
385
|
var OPENAI_GPT_54_STANDARD_MODEL_IDS = ["gpt-5.4", "chatgpt-gpt-5.4"];
|
|
386
|
+
var OPENAI_GPT_55_PRICING = {
|
|
387
|
+
inputRate: 5 / 1e6,
|
|
388
|
+
cachedRate: 0.5 / 1e6,
|
|
389
|
+
outputRate: 30 / 1e6
|
|
390
|
+
};
|
|
391
|
+
var OPENAI_GPT_55_PRIORITY_PRICING = {
|
|
392
|
+
inputRate: 12.5 / 1e6,
|
|
393
|
+
cachedRate: 1.25 / 1e6,
|
|
394
|
+
outputRate: 75 / 1e6
|
|
395
|
+
};
|
|
330
396
|
var OPENAI_GPT_54_PRICING = {
|
|
331
397
|
inputRate: 2.5 / 1e6,
|
|
332
398
|
cachedRate: 0.25 / 1e6,
|
|
@@ -348,6 +414,15 @@ var OPENAI_GPT_54_NANO_PRICING = {
|
|
|
348
414
|
outputRate: 0.4 / 1e6
|
|
349
415
|
};
|
|
350
416
|
function getOpenAiPricing(modelId) {
|
|
417
|
+
if (isExperimentalChatGptModelId(modelId)) {
|
|
418
|
+
return OPENAI_GPT_54_PRICING;
|
|
419
|
+
}
|
|
420
|
+
if (OPENAI_GPT_55_FAST_MODEL_IDS.includes(modelId)) {
|
|
421
|
+
return OPENAI_GPT_55_PRIORITY_PRICING;
|
|
422
|
+
}
|
|
423
|
+
if (OPENAI_GPT_55_STANDARD_MODEL_IDS.includes(modelId)) {
|
|
424
|
+
return OPENAI_GPT_55_PRICING;
|
|
425
|
+
}
|
|
351
426
|
if (OPENAI_GPT_54_FAST_MODEL_IDS.includes(modelId)) {
|
|
352
427
|
return OPENAI_GPT_54_PRIORITY_PRICING;
|
|
353
428
|
}
|
|
@@ -2832,35 +2907,6 @@ async function runOpenAiCall(fn, modelId, runOptions) {
|
|
|
2832
2907
|
return getSchedulerForModel3(modelId).run(async () => fn(getOpenAiClient()), runOptions);
|
|
2833
2908
|
}
|
|
2834
2909
|
|
|
2835
|
-
// src/openai/models.ts
|
|
2836
|
-
var OPENAI_MODEL_IDS = ["gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano"];
|
|
2837
|
-
function isOpenAiModelId(value) {
|
|
2838
|
-
return OPENAI_MODEL_IDS.includes(value);
|
|
2839
|
-
}
|
|
2840
|
-
var CHATGPT_MODEL_IDS = [
|
|
2841
|
-
"chatgpt-gpt-5.4",
|
|
2842
|
-
"chatgpt-gpt-5.4-fast",
|
|
2843
|
-
"chatgpt-gpt-5.4-mini",
|
|
2844
|
-
"chatgpt-gpt-5.3-codex-spark"
|
|
2845
|
-
];
|
|
2846
|
-
function isChatGptModelId(value) {
|
|
2847
|
-
return CHATGPT_MODEL_IDS.includes(value);
|
|
2848
|
-
}
|
|
2849
|
-
function stripChatGptPrefix(model) {
|
|
2850
|
-
return model.slice("chatgpt-".length);
|
|
2851
|
-
}
|
|
2852
|
-
function resolveChatGptProviderModel(model) {
|
|
2853
|
-
switch (model) {
|
|
2854
|
-
case "chatgpt-gpt-5.4-fast":
|
|
2855
|
-
return "gpt-5.4";
|
|
2856
|
-
default:
|
|
2857
|
-
return stripChatGptPrefix(model);
|
|
2858
|
-
}
|
|
2859
|
-
}
|
|
2860
|
-
function resolveChatGptServiceTier(model) {
|
|
2861
|
-
return model === "chatgpt-gpt-5.4-fast" ? "priority" : void 0;
|
|
2862
|
-
}
|
|
2863
|
-
|
|
2864
2910
|
// src/agentLogging.ts
|
|
2865
2911
|
var import_node_async_hooks = require("async_hooks");
|
|
2866
2912
|
var import_node_buffer2 = require("buffer");
|
|
@@ -5058,7 +5104,11 @@ function resolveProvider(model) {
|
|
|
5058
5104
|
}
|
|
5059
5105
|
}
|
|
5060
5106
|
if (isOpenAiModelId(model)) {
|
|
5061
|
-
return {
|
|
5107
|
+
return {
|
|
5108
|
+
provider: "openai",
|
|
5109
|
+
model: resolveOpenAiProviderModel(model),
|
|
5110
|
+
serviceTier: resolveOpenAiServiceTier(model)
|
|
5111
|
+
};
|
|
5062
5112
|
}
|
|
5063
5113
|
throw new Error(`Unsupported text model: ${model}`);
|
|
5064
5114
|
}
|
|
@@ -7832,6 +7882,7 @@ async function runTextCall(params) {
|
|
|
7832
7882
|
{
|
|
7833
7883
|
model: modelForProvider,
|
|
7834
7884
|
input: openAiInput,
|
|
7885
|
+
...providerInfo.serviceTier ? { service_tier: providerInfo.serviceTier } : {},
|
|
7835
7886
|
reasoning,
|
|
7836
7887
|
text: openAiTextConfig,
|
|
7837
7888
|
...openAiTools ? { tools: openAiTools } : {},
|
|
@@ -7936,7 +7987,7 @@ async function runTextCall(params) {
|
|
|
7936
7987
|
pushEvent({ type: "blocked" });
|
|
7937
7988
|
}
|
|
7938
7989
|
if (result2.model) {
|
|
7939
|
-
modelVersion = providerInfo.serviceTier ? request.model : `chatgpt-${result2.model}`;
|
|
7990
|
+
modelVersion = providerInfo.serviceTier || isExperimentalChatGptModelId(request.model) ? request.model : `chatgpt-${result2.model}`;
|
|
7940
7991
|
pushEvent({ type: "model", modelVersion });
|
|
7941
7992
|
}
|
|
7942
7993
|
latestUsage = extractChatGptUsageTokens(result2.usage);
|
|
@@ -8717,6 +8768,7 @@ async function runToolLoop(request) {
|
|
|
8717
8768
|
const stepRequestPayload = {
|
|
8718
8769
|
model: providerInfo.model,
|
|
8719
8770
|
input: preparedInput,
|
|
8771
|
+
...providerInfo.serviceTier ? { service_tier: providerInfo.serviceTier } : {},
|
|
8720
8772
|
...previousResponseId ? { previous_response_id: previousResponseId } : {},
|
|
8721
8773
|
...openAiTools.length > 0 ? { tools: openAiTools } : {},
|
|
8722
8774
|
...openAiTools.length > 0 ? { parallel_tool_calls: true } : {},
|
|
@@ -8745,6 +8797,7 @@ async function runToolLoop(request) {
|
|
|
8745
8797
|
{
|
|
8746
8798
|
model: providerInfo.model,
|
|
8747
8799
|
input: preparedInput,
|
|
8800
|
+
...providerInfo.serviceTier ? { service_tier: providerInfo.serviceTier } : {},
|
|
8748
8801
|
...previousResponseId ? { previous_response_id: previousResponseId } : {},
|
|
8749
8802
|
...openAiTools.length > 0 ? { tools: openAiTools } : {},
|
|
8750
8803
|
...openAiTools.length > 0 ? { parallel_tool_calls: true } : {},
|
|
@@ -9142,7 +9195,7 @@ async function runToolLoop(request) {
|
|
|
9142
9195
|
}
|
|
9143
9196
|
});
|
|
9144
9197
|
const modelCompletedAtMs = Date.now();
|
|
9145
|
-
modelVersion = response.model && !providerInfo.serviceTier ? `chatgpt-${response.model}` : request.model;
|
|
9198
|
+
modelVersion = response.model && !providerInfo.serviceTier && !isExperimentalChatGptModelId(request.model) ? `chatgpt-${response.model}` : request.model;
|
|
9146
9199
|
usageTokens = extractChatGptUsageTokens(response.usage);
|
|
9147
9200
|
const stepCostUsd = estimateCallCostUsd({
|
|
9148
9201
|
modelId: modelVersion,
|
|
@@ -12752,8 +12805,11 @@ async function runAccessHook2(runtime, context) {
|
|
|
12752
12805
|
await runtime.checkAccess(context);
|
|
12753
12806
|
}
|
|
12754
12807
|
function isCodexModel(model) {
|
|
12808
|
+
if (model.startsWith("experimental-chatgpt-")) {
|
|
12809
|
+
return true;
|
|
12810
|
+
}
|
|
12755
12811
|
const normalized = model.startsWith("chatgpt-") ? model.slice("chatgpt-".length) : model;
|
|
12756
|
-
return normalized.includes("codex") || normalized === "gpt-5.4" || normalized === "gpt-5.4-fast";
|
|
12812
|
+
return normalized.includes("codex") || normalized === "gpt-5.5" || normalized === "gpt-5.5-fast" || normalized === "gpt-5.4" || normalized === "gpt-5.4-fast";
|
|
12757
12813
|
}
|
|
12758
12814
|
function isGeminiModel(model) {
|
|
12759
12815
|
return model.startsWith("gemini-");
|
|
@@ -14192,6 +14248,7 @@ async function runCandidateEvolution(options) {
|
|
|
14192
14248
|
CODEX_APPLY_PATCH_LARK_GRAMMAR,
|
|
14193
14249
|
DEFAULT_FILE_TTL_SECONDS,
|
|
14194
14250
|
DEFAULT_SIGNED_URL_TTL_SECONDS,
|
|
14251
|
+
EXPERIMENTAL_CHATGPT_MODEL_PREFIX,
|
|
14195
14252
|
FIREWORKS_DEFAULT_GLM_MODEL,
|
|
14196
14253
|
FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL,
|
|
14197
14254
|
FIREWORKS_DEFAULT_KIMI_MODEL,
|
|
@@ -14246,6 +14303,7 @@ async function runCandidateEvolution(options) {
|
|
|
14246
14303
|
getChatGptAuthProfile,
|
|
14247
14304
|
getCurrentToolCallContext,
|
|
14248
14305
|
isChatGptModelId,
|
|
14306
|
+
isExperimentalChatGptModelId,
|
|
14249
14307
|
isFireworksModelId,
|
|
14250
14308
|
isGeminiImageModelId,
|
|
14251
14309
|
isGeminiModelId,
|