@ljoukov/llm 4.0.2 → 4.0.3

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/index.d.cts CHANGED
@@ -115,11 +115,11 @@ type LlmToolCallCompletedEvent = {
115
115
  type LlmToolCallStreamEvent = LlmToolCallStartedEvent | LlmToolCallCompletedEvent;
116
116
  type LlmStreamEvent = LlmTextDeltaEvent | LlmUsageEvent | LlmModelEvent | LlmBlockedEvent | LlmToolCallStreamEvent;
117
117
  type LlmProvider = "openai" | "chatgpt" | "gemini" | "fireworks";
118
- declare const LLM_TEXT_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest"];
118
+ declare const LLM_TEXT_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest"];
119
119
  type LlmTextModelId = (typeof LLM_TEXT_MODEL_IDS)[number];
120
120
  declare const LLM_IMAGE_MODEL_IDS: readonly ["gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
121
121
  type LlmImageModelId = (typeof LLM_IMAGE_MODEL_IDS)[number];
122
- declare const LLM_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest", "gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
122
+ declare const LLM_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest", "gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
123
123
  type LlmModelId = (typeof LLM_MODEL_IDS)[number];
124
124
  declare function isLlmTextModelId(value: string): value is LlmTextModelId;
125
125
  declare function isLlmImageModelId(value: string): value is LlmImageModelId;
@@ -848,10 +848,10 @@ declare function refreshChatGptOauthToken(refreshToken: string, fallback?: {
848
848
  }): Promise<ChatGptAuthProfile>;
849
849
  declare function getChatGptAuthProfile(): Promise<ChatGptAuthProfile>;
850
850
 
851
- declare const OPENAI_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini"];
851
+ declare const OPENAI_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini"];
852
852
  type OpenAiModelId = (typeof OPENAI_MODEL_IDS)[number];
853
853
  declare function isOpenAiModelId(value: string): value is OpenAiModelId;
854
- declare const CHATGPT_MODEL_IDS: readonly ["chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini"];
854
+ declare const CHATGPT_MODEL_IDS: readonly ["chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini"];
855
855
  type ChatGptModelId = (typeof CHATGPT_MODEL_IDS)[number];
856
856
  declare function isChatGptModelId(value: string): value is ChatGptModelId;
857
857
 
package/dist/index.d.ts CHANGED
@@ -115,11 +115,11 @@ type LlmToolCallCompletedEvent = {
115
115
  type LlmToolCallStreamEvent = LlmToolCallStartedEvent | LlmToolCallCompletedEvent;
116
116
  type LlmStreamEvent = LlmTextDeltaEvent | LlmUsageEvent | LlmModelEvent | LlmBlockedEvent | LlmToolCallStreamEvent;
117
117
  type LlmProvider = "openai" | "chatgpt" | "gemini" | "fireworks";
118
- declare const LLM_TEXT_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest"];
118
+ declare const LLM_TEXT_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest"];
119
119
  type LlmTextModelId = (typeof LLM_TEXT_MODEL_IDS)[number];
120
120
  declare const LLM_IMAGE_MODEL_IDS: readonly ["gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
121
121
  type LlmImageModelId = (typeof LLM_IMAGE_MODEL_IDS)[number];
122
- declare const LLM_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest", "gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
122
+ declare const LLM_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini", "chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini", "kimi-k2.5", "glm-5", "minimax-m2.1", "gpt-oss-120b", "gemini-3.1-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-flash-latest", "gemini-flash-lite-latest", "gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"];
123
123
  type LlmModelId = (typeof LLM_MODEL_IDS)[number];
124
124
  declare function isLlmTextModelId(value: string): value is LlmTextModelId;
125
125
  declare function isLlmImageModelId(value: string): value is LlmImageModelId;
@@ -848,10 +848,10 @@ declare function refreshChatGptOauthToken(refreshToken: string, fallback?: {
848
848
  }): Promise<ChatGptAuthProfile>;
849
849
  declare function getChatGptAuthProfile(): Promise<ChatGptAuthProfile>;
850
850
 
851
- declare const OPENAI_MODEL_IDS: readonly ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini"];
851
+ declare const OPENAI_MODEL_IDS: readonly ["gpt-5.4", "gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini"];
852
852
  type OpenAiModelId = (typeof OPENAI_MODEL_IDS)[number];
853
853
  declare function isOpenAiModelId(value: string): value is OpenAiModelId;
854
- declare const CHATGPT_MODEL_IDS: readonly ["chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini"];
854
+ declare const CHATGPT_MODEL_IDS: readonly ["chatgpt-gpt-5.4", "chatgpt-gpt-5.4-fast", "chatgpt-gpt-5.3-codex", "chatgpt-gpt-5.3-codex-spark", "chatgpt-gpt-5.2", "chatgpt-gpt-5.1-codex-mini"];
855
855
  type ChatGptModelId = (typeof CHATGPT_MODEL_IDS)[number];
856
856
  declare function isChatGptModelId(value: string): value is ChatGptModelId;
857
857
 
package/dist/index.js CHANGED
@@ -205,6 +205,16 @@ var OPENAI_GPT_52_PRICING = {
205
205
  cachedRate: 0.175 / 1e6,
206
206
  outputRate: 14 / 1e6
207
207
  };
208
+ var OPENAI_GPT_54_PRICING = {
209
+ inputRate: 2.5 / 1e6,
210
+ cachedRate: 0.25 / 1e6,
211
+ outputRate: 15 / 1e6
212
+ };
213
+ var OPENAI_GPT_54_PRIORITY_PRICING = {
214
+ inputRate: 5 / 1e6,
215
+ cachedRate: 0.5 / 1e6,
216
+ outputRate: 30 / 1e6
217
+ };
208
218
  var OPENAI_GPT_53_CODEX_PRICING = {
209
219
  inputRate: 1.25 / 1e6,
210
220
  cachedRate: 0.125 / 1e6,
@@ -216,6 +226,12 @@ var OPENAI_GPT_5_MINI_PRICING = {
216
226
  outputRate: 2 / 1e6
217
227
  };
218
228
  function getOpenAiPricing(modelId) {
229
+ if (modelId.includes("gpt-5.4-fast")) {
230
+ return OPENAI_GPT_54_PRIORITY_PRICING;
231
+ }
232
+ if (modelId.includes("gpt-5.4")) {
233
+ return OPENAI_GPT_54_PRICING;
234
+ }
219
235
  if (modelId.includes("gpt-5.3-codex-spark")) {
220
236
  return OPENAI_GPT_5_MINI_PRICING;
221
237
  }
@@ -2626,11 +2642,18 @@ async function runOpenAiCall(fn, modelId, runOptions) {
2626
2642
  }
2627
2643
 
2628
2644
  // src/openai/models.ts
2629
- var OPENAI_MODEL_IDS = ["gpt-5.3-codex", "gpt-5.2", "gpt-5.1-codex-mini"];
2645
+ var OPENAI_MODEL_IDS = [
2646
+ "gpt-5.4",
2647
+ "gpt-5.3-codex",
2648
+ "gpt-5.2",
2649
+ "gpt-5.1-codex-mini"
2650
+ ];
2630
2651
  function isOpenAiModelId(value) {
2631
2652
  return OPENAI_MODEL_IDS.includes(value);
2632
2653
  }
2633
2654
  var CHATGPT_MODEL_IDS = [
2655
+ "chatgpt-gpt-5.4",
2656
+ "chatgpt-gpt-5.4-fast",
2634
2657
  "chatgpt-gpt-5.3-codex",
2635
2658
  "chatgpt-gpt-5.3-codex-spark",
2636
2659
  "chatgpt-gpt-5.2",
@@ -2642,6 +2665,17 @@ function isChatGptModelId(value) {
2642
2665
  function stripChatGptPrefix(model) {
2643
2666
  return model.slice("chatgpt-".length);
2644
2667
  }
2668
+ function resolveChatGptProviderModel(model) {
2669
+ switch (model) {
2670
+ case "chatgpt-gpt-5.4-fast":
2671
+ return "gpt-5.4";
2672
+ default:
2673
+ return stripChatGptPrefix(model);
2674
+ }
2675
+ }
2676
+ function resolveChatGptServiceTier(model) {
2677
+ return model === "chatgpt-gpt-5.4-fast" ? "priority" : void 0;
2678
+ }
2645
2679
 
2646
2680
  // src/agentLogging.ts
2647
2681
  import { AsyncLocalStorage } from "async_hooks";
@@ -3390,7 +3424,11 @@ function convertLlmContentToGeminiContent(content) {
3390
3424
  }
3391
3425
  function resolveProvider(model) {
3392
3426
  if (isChatGptModelId(model)) {
3393
- return { provider: "chatgpt", model: stripChatGptPrefix(model) };
3427
+ return {
3428
+ provider: "chatgpt",
3429
+ model: resolveChatGptProviderModel(model),
3430
+ serviceTier: resolveChatGptServiceTier(model)
3431
+ };
3394
3432
  }
3395
3433
  if (isGeminiTextModelId(model) || isGeminiImageModelId(model)) {
3396
3434
  return { provider: "gemini", model };
@@ -5101,6 +5139,7 @@ async function runTextCall(params) {
5101
5139
  model: modelForProvider,
5102
5140
  store: false,
5103
5141
  stream: true,
5142
+ ...providerInfo.serviceTier ? { service_tier: providerInfo.serviceTier } : {},
5104
5143
  instructions: chatGptInput.instructions ?? "You are a helpful assistant.",
5105
5144
  input: chatGptInput.input,
5106
5145
  include: ["reasoning.encrypted_content"],
@@ -5135,7 +5174,7 @@ async function runTextCall(params) {
5135
5174
  queue.push({ type: "blocked" });
5136
5175
  }
5137
5176
  if (result.model) {
5138
- modelVersion = `chatgpt-${result.model}`;
5177
+ modelVersion = providerInfo.serviceTier ? request.model : `chatgpt-${result.model}`;
5139
5178
  queue.push({ type: "model", modelVersion });
5140
5179
  }
5141
5180
  latestUsage = extractChatGptUsageTokens(result.usage);
@@ -6097,6 +6136,7 @@ async function runToolLoop(request) {
6097
6136
  model: providerInfo.model,
6098
6137
  store: false,
6099
6138
  stream: true,
6139
+ ...providerInfo.serviceTier ? { service_tier: providerInfo.serviceTier } : {},
6100
6140
  instructions: toolLoopInput.instructions ?? "You are a helpful assistant.",
6101
6141
  input,
6102
6142
  prompt_cache_key: promptCacheKey,
@@ -6137,7 +6177,7 @@ async function runToolLoop(request) {
6137
6177
  }
6138
6178
  });
6139
6179
  const modelCompletedAtMs = Date.now();
6140
- modelVersion = response.model ? `chatgpt-${response.model}` : request.model;
6180
+ modelVersion = response.model && !providerInfo.serviceTier ? `chatgpt-${response.model}` : request.model;
6141
6181
  usageTokens = extractChatGptUsageTokens(response.usage);
6142
6182
  const stepCostUsd = estimateCallCostUsd({
6143
6183
  modelId: modelVersion,