@ljoukov/llm 7.0.0 → 7.0.2

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.cjs CHANGED
@@ -35,6 +35,7 @@ __export(index_exports, {
35
35
  CODEX_APPLY_PATCH_JSON_TOOL_DESCRIPTION: () => CODEX_APPLY_PATCH_JSON_TOOL_DESCRIPTION,
36
36
  CODEX_APPLY_PATCH_LARK_GRAMMAR: () => CODEX_APPLY_PATCH_LARK_GRAMMAR,
37
37
  DEFAULT_FILE_TTL_SECONDS: () => DEFAULT_FILE_TTL_SECONDS,
38
+ DEFAULT_SIGNED_URL_TTL_SECONDS: () => DEFAULT_SIGNED_URL_TTL_SECONDS,
38
39
  FIREWORKS_DEFAULT_GLM_MODEL: () => FIREWORKS_DEFAULT_GLM_MODEL,
39
40
  FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL: () => FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL,
40
41
  FIREWORKS_DEFAULT_KIMI_MODEL: () => FIREWORKS_DEFAULT_KIMI_MODEL,
@@ -318,6 +319,14 @@ function getGeminiImagePricing(modelId) {
318
319
  }
319
320
 
320
321
  // src/openai/pricing.ts
322
+ var OPENAI_GPT_54_FAST_MODEL_IDS = ["gpt-5.4-fast", "chatgpt-gpt-5.4-fast"];
323
+ var OPENAI_GPT_54_MINI_MODEL_IDS = ["gpt-5.4-mini", "chatgpt-gpt-5.4-mini"];
324
+ var OPENAI_GPT_54_NANO_MODEL_IDS = ["gpt-5.4-nano"];
325
+ var OPENAI_GPT_53_CODEX_SPARK_MODEL_IDS = [
326
+ "gpt-5.3-codex-spark",
327
+ "chatgpt-gpt-5.3-codex-spark"
328
+ ];
329
+ var OPENAI_GPT_54_STANDARD_MODEL_IDS = ["gpt-5.4", "chatgpt-gpt-5.4"];
321
330
  var OPENAI_GPT_54_PRICING = {
322
331
  inputRate: 2.5 / 1e6,
323
332
  cachedRate: 0.25 / 1e6,
@@ -339,19 +348,19 @@ var OPENAI_GPT_54_NANO_PRICING = {
339
348
  outputRate: 0.4 / 1e6
340
349
  };
341
350
  function getOpenAiPricing(modelId) {
342
- if (modelId.includes("gpt-5.4-fast")) {
351
+ if (OPENAI_GPT_54_FAST_MODEL_IDS.includes(modelId)) {
343
352
  return OPENAI_GPT_54_PRIORITY_PRICING;
344
353
  }
345
- if (modelId.includes("gpt-5.4-mini")) {
354
+ if (OPENAI_GPT_54_MINI_MODEL_IDS.includes(modelId)) {
346
355
  return OPENAI_GPT_54_MINI_PRICING;
347
356
  }
348
- if (modelId.includes("gpt-5.4-nano")) {
357
+ if (OPENAI_GPT_54_NANO_MODEL_IDS.includes(modelId)) {
349
358
  return OPENAI_GPT_54_NANO_PRICING;
350
359
  }
351
- if (modelId.includes("gpt-5.3-codex-spark")) {
360
+ if (OPENAI_GPT_53_CODEX_SPARK_MODEL_IDS.includes(modelId)) {
352
361
  return OPENAI_GPT_54_MINI_PRICING;
353
362
  }
354
- if (modelId.includes("gpt-5.4")) {
363
+ if (OPENAI_GPT_54_STANDARD_MODEL_IDS.includes(modelId)) {
355
364
  return OPENAI_GPT_54_PRICING;
356
365
  }
357
366
  return void 0;
@@ -2354,6 +2363,9 @@ function normaliseConfigValue(value) {
2354
2363
  }
2355
2364
  function resolveGeminiApiKey() {
2356
2365
  loadLocalEnv();
2366
+ if (normaliseConfigValue(process.env.GOOGLE_SERVICE_ACCOUNT_JSON)) {
2367
+ return void 0;
2368
+ }
2357
2369
  const raw = process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY;
2358
2370
  return normaliseConfigValue(raw);
2359
2371
  }
@@ -3362,6 +3374,7 @@ var import_promises3 = require("stream/promises");
3362
3374
  var import_storage = require("@google-cloud/storage");
3363
3375
  var import_mime = __toESM(require("mime"), 1);
3364
3376
  var DEFAULT_FILE_TTL_SECONDS = 48 * 60 * 60;
3377
+ var DEFAULT_SIGNED_URL_TTL_SECONDS = 6 * 60 * 60;
3365
3378
  var GEMINI_FILE_POLL_INTERVAL_MS = 1e3;
3366
3379
  var GEMINI_FILE_POLL_TIMEOUT_MS = 6e4;
3367
3380
  var FILES_TEMP_ROOT = import_node_path4.default.join(import_node_os3.default.tmpdir(), "ljoukov-llm-files");
@@ -4342,7 +4355,7 @@ async function getCanonicalFileSignedUrl(options) {
4342
4355
  const [signedUrl] = await getStorageClient().bucket(metadata.bucketName).file(metadata.objectName).getSignedUrl({
4343
4356
  version: "v4",
4344
4357
  action: "read",
4345
- expires: Date.now() + (options.expiresAfterSeconds ?? 15 * 60) * 1e3,
4358
+ expires: Date.now() + (options.expiresAfterSeconds ?? DEFAULT_SIGNED_URL_TTL_SECONDS) * 1e3,
4346
4359
  responseType: resolveCanonicalStorageContentType(metadata.filename, metadata.mimeType)
4347
4360
  });
4348
4361
  return signedUrl;
@@ -5088,7 +5101,7 @@ function isRetryableChatGptTransportError(error) {
5088
5101
  return false;
5089
5102
  }
5090
5103
  const message = error.message.toLowerCase();
5091
- return message === "terminated" || message.includes("socket hang up") || message.includes("fetch failed") || message.includes("network") || message.includes("responses websocket");
5104
+ return message === "terminated" || message.includes("socket hang up") || message.includes("fetch failed") || message.includes("failed to download file from") || message.includes("network") || message.includes("responses websocket");
5092
5105
  }
5093
5106
  async function collectChatGptCodexResponseWithRetry(options, maxAttempts = 3) {
5094
5107
  let attempt = 1;
@@ -14087,6 +14100,7 @@ async function runCandidateEvolution(options) {
14087
14100
  CODEX_APPLY_PATCH_JSON_TOOL_DESCRIPTION,
14088
14101
  CODEX_APPLY_PATCH_LARK_GRAMMAR,
14089
14102
  DEFAULT_FILE_TTL_SECONDS,
14103
+ DEFAULT_SIGNED_URL_TTL_SECONDS,
14090
14104
  FIREWORKS_DEFAULT_GLM_MODEL,
14091
14105
  FIREWORKS_DEFAULT_GPT_OSS_120B_MODEL,
14092
14106
  FIREWORKS_DEFAULT_KIMI_MODEL,