@elizaos/plugin-openai 2.0.0-alpha.4 → 2.0.0-alpha.537

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.
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../models/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAItF,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,UAAU,CAAC;AAsG7D;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../models/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAItF,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,UAAU,CAAC;AAoM7D;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAOpC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAEpC"}
@@ -82,9 +82,24 @@ function getEmbeddingBaseURL(runtime) {
82
82
  function getSmallModel(runtime) {
83
83
  return getSetting(runtime, "OPENAI_SMALL_MODEL") ?? getSetting(runtime, "SMALL_MODEL") ?? "gpt-5-mini";
84
84
  }
85
+ function getNanoModel(runtime) {
86
+ return getSetting(runtime, "OPENAI_NANO_MODEL") ?? getSetting(runtime, "NANO_MODEL") ?? getSmallModel(runtime);
87
+ }
88
+ function getMediumModel(runtime) {
89
+ return getSetting(runtime, "OPENAI_MEDIUM_MODEL") ?? getSetting(runtime, "MEDIUM_MODEL") ?? getSmallModel(runtime);
90
+ }
85
91
  function getLargeModel(runtime) {
86
92
  return getSetting(runtime, "OPENAI_LARGE_MODEL") ?? getSetting(runtime, "LARGE_MODEL") ?? "gpt-5";
87
93
  }
94
+ function getMegaModel(runtime) {
95
+ return getSetting(runtime, "OPENAI_MEGA_MODEL") ?? getSetting(runtime, "MEGA_MODEL") ?? getLargeModel(runtime);
96
+ }
97
+ function getResponseHandlerModel(runtime) {
98
+ return getSetting(runtime, "OPENAI_RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "OPENAI_SHOULD_RESPOND_MODEL") ?? getSetting(runtime, "RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "SHOULD_RESPOND_MODEL") ?? getNanoModel(runtime);
99
+ }
100
+ function getActionPlannerModel(runtime) {
101
+ return getSetting(runtime, "OPENAI_ACTION_PLANNER_MODEL") ?? getSetting(runtime, "OPENAI_PLANNER_MODEL") ?? getSetting(runtime, "ACTION_PLANNER_MODEL") ?? getSetting(runtime, "PLANNER_MODEL") ?? getMediumModel(runtime);
102
+ }
88
103
  function getEmbeddingModel(runtime) {
89
104
  return getSetting(runtime, "OPENAI_EMBEDDING_MODEL") ?? "text-embedding-3-small";
90
105
  }
@@ -378,7 +393,7 @@ async function handleTextToSpeech(runtime, input) {
378
393
  return response.arrayBuffer();
379
394
  }
380
395
  // models/embedding.ts
381
- import { logger as logger5, MAX_EMBEDDING_TOKENS, ModelType, VECTOR_DIMS } from "@elizaos/core";
396
+ import { logger as logger5, ModelType, VECTOR_DIMS } from "@elizaos/core";
382
397
 
383
398
  // utils/events.ts
384
399
  import { EventType } from "@elizaos/core";
@@ -391,19 +406,24 @@ function truncatePrompt(prompt) {
391
406
  }
392
407
  function normalizeUsage(usage) {
393
408
  if ("promptTokens" in usage) {
409
+ const promptTokensDetails = "promptTokensDetails" in usage ? usage.promptTokensDetails : undefined;
410
+ const cachedPromptTokens = usage.cachedPromptTokens ?? promptTokensDetails?.cachedTokens;
394
411
  return {
395
412
  promptTokens: usage.promptTokens ?? 0,
396
413
  completionTokens: usage.completionTokens ?? 0,
397
- totalTokens: usage.totalTokens ?? (usage.promptTokens ?? 0) + (usage.completionTokens ?? 0)
414
+ totalTokens: usage.totalTokens ?? (usage.promptTokens ?? 0) + (usage.completionTokens ?? 0),
415
+ cachedPromptTokens
398
416
  };
399
417
  }
400
418
  if ("inputTokens" in usage || "outputTokens" in usage) {
401
419
  const input = usage.inputTokens ?? 0;
402
420
  const output = usage.outputTokens ?? 0;
421
+ const total = usage.totalTokens ?? input + output;
403
422
  return {
404
423
  promptTokens: input,
405
424
  completionTokens: output,
406
- totalTokens: input + output
425
+ totalTokens: total,
426
+ cachedPromptTokens: usage.cachedInputTokens
407
427
  };
408
428
  }
409
429
  return {
@@ -423,7 +443,8 @@ function emitModelUsageEvent(runtime, type, prompt, usage) {
423
443
  tokens: {
424
444
  prompt: normalized.promptTokens,
425
445
  completion: normalized.completionTokens,
426
- total: normalized.totalTokens
446
+ total: normalized.totalTokens,
447
+ ...normalized.cachedPromptTokens !== undefined ? { cached: normalized.cachedPromptTokens } : {}
427
448
  }
428
449
  };
429
450
  runtime.emitEvent(EventType.MODEL_USED, payload);
@@ -463,9 +484,9 @@ async function handleTextEmbedding(runtime, params) {
463
484
  if (trimmedText.length === 0) {
464
485
  throw new Error("Cannot generate embedding for empty text");
465
486
  }
466
- const maxChars = MAX_EMBEDDING_TOKENS * 4;
487
+ const maxChars = 8000 * 4;
467
488
  if (trimmedText.length > maxChars) {
468
- logger5.warn(`[OpenAI] Embedding input too long (~${Math.ceil(trimmedText.length / 4)} tokens), truncating to ~${MAX_EMBEDDING_TOKENS} tokens`);
489
+ logger5.warn(`[OpenAI] Embedding input too long (~${Math.ceil(trimmedText.length / 4)} tokens), truncating to ~8000 tokens`);
469
490
  trimmedText = trimmedText.slice(0, maxChars);
470
491
  }
471
492
  const baseURL = getEmbeddingBaseURL(runtime);
@@ -488,7 +509,7 @@ async function handleTextEmbedding(runtime, params) {
488
509
  }
489
510
  const data = await response.json();
490
511
  const firstResult = data?.data?.[0];
491
- if (!firstResult || !firstResult.embedding) {
512
+ if (!firstResult?.embedding) {
492
513
  throw new Error("OpenAI API returned invalid embedding response structure");
493
514
  }
494
515
  const embedding = firstResult.embedding;
@@ -514,7 +535,7 @@ async function handleImageGeneration(runtime, params) {
514
535
  const size = params.size ?? "1024x1024";
515
536
  const extendedParams = params;
516
537
  logger6.debug(`[OpenAI] Using IMAGE model: ${modelName}`);
517
- if (!params.prompt || params.prompt.trim().length === 0) {
538
+ if (params.prompt.trim().length === 0) {
518
539
  throw new Error("IMAGE generation requires a non-empty prompt");
519
540
  }
520
541
  if (count < 1 || count > 10) {
@@ -546,7 +567,7 @@ async function handleImageGeneration(runtime, params) {
546
567
  throw new Error(`OpenAI image generation failed: ${response.status} ${response.statusText} - ${errorText}`);
547
568
  }
548
569
  const data = await response.json();
549
- if (!data.data || data.data.length === 0) {
570
+ if (data.data.length === 0) {
550
571
  throw new Error("OpenAI API returned no images");
551
572
  }
552
573
  return data.data.map((item) => ({
@@ -674,7 +695,7 @@ async function generateObjectByModelType(runtime, params, modelType, getModelFn)
674
695
  const openai = createOpenAIClient(runtime);
675
696
  const modelName = getModelFn(runtime);
676
697
  logger8.debug(`[OpenAI] Using ${modelType} model: ${modelName}`);
677
- if (!params.prompt || params.prompt.trim().length === 0) {
698
+ if (params.prompt.trim().length === 0) {
678
699
  throw new Error("Object generation requires a non-empty prompt");
679
700
  }
680
701
  if (params.schema) {
@@ -913,30 +934,70 @@ async function handleResearch(runtime, params) {
913
934
  // models/text.ts
914
935
  import { logger as logger10, ModelType as ModelType4 } from "@elizaos/core";
915
936
  import { generateText, streamText } from "ai";
937
+ var TEXT_NANO_MODEL_TYPE = ModelType4.TEXT_NANO ?? "TEXT_NANO";
938
+ var TEXT_MEDIUM_MODEL_TYPE = ModelType4.TEXT_MEDIUM ?? "TEXT_MEDIUM";
939
+ var TEXT_MEGA_MODEL_TYPE = ModelType4.TEXT_MEGA ?? "TEXT_MEGA";
940
+ var RESPONSE_HANDLER_MODEL_TYPE = ModelType4.RESPONSE_HANDLER ?? "RESPONSE_HANDLER";
941
+ var ACTION_PLANNER_MODEL_TYPE = ModelType4.ACTION_PLANNER ?? "ACTION_PLANNER";
942
+ function buildUserContent(params) {
943
+ const content = [{ type: "text", text: params.prompt }];
944
+ for (const attachment of params.attachments ?? []) {
945
+ content.push({
946
+ type: "file",
947
+ data: attachment.data,
948
+ mediaType: attachment.mediaType,
949
+ ...attachment.filename ? { filename: attachment.filename } : {}
950
+ });
951
+ }
952
+ return content;
953
+ }
916
954
  function convertUsage(usage) {
917
955
  if (!usage) {
918
956
  return;
919
957
  }
920
958
  const promptTokens = usage.inputTokens ?? 0;
921
959
  const completionTokens = usage.outputTokens ?? 0;
960
+ const usageWithCache = usage;
922
961
  return {
923
962
  promptTokens,
924
963
  completionTokens,
925
- totalTokens: promptTokens + completionTokens
964
+ totalTokens: promptTokens + completionTokens,
965
+ cachedPromptTokens: usageWithCache.cachedInputTokens
966
+ };
967
+ }
968
+ function resolvePromptCacheOptions(params) {
969
+ const withOpenAIOptions = params;
970
+ return {
971
+ promptCacheKey: withOpenAIOptions.providerOptions?.openai?.promptCacheKey,
972
+ promptCacheRetention: withOpenAIOptions.providerOptions?.openai?.promptCacheRetention
926
973
  };
927
974
  }
928
975
  async function generateTextByModelType(runtime, params, modelType, getModelFn) {
976
+ const paramsWithAttachments = params;
929
977
  const openai = createOpenAIClient(runtime);
930
978
  const modelName = getModelFn(runtime);
931
979
  logger10.debug(`[OpenAI] Using ${modelType} model: ${modelName}`);
980
+ const promptCacheOptions = resolvePromptCacheOptions(params);
981
+ const hasAttachments = (paramsWithAttachments.attachments?.length ?? 0) > 0;
982
+ const userContent = hasAttachments ? buildUserContent(paramsWithAttachments) : undefined;
932
983
  const systemPrompt = runtime.character.system ?? undefined;
933
984
  const model = openai.chat(modelName);
934
985
  const generateParams = {
935
986
  model,
936
- prompt: params.prompt,
987
+ ...userContent ? { messages: [{ role: "user", content: userContent }] } : { prompt: params.prompt },
937
988
  system: systemPrompt,
938
989
  maxOutputTokens: params.maxTokens ?? 8192,
939
- experimental_telemetry: { isEnabled: getExperimentalTelemetry(runtime) }
990
+ experimental_telemetry: { isEnabled: getExperimentalTelemetry(runtime) },
991
+ ...promptCacheOptions.promptCacheKey || promptCacheOptions.promptCacheRetention ? {
992
+ providerOptions: {
993
+ openai: {
994
+ ...promptCacheOptions.promptCacheKey ? { promptCacheKey: promptCacheOptions.promptCacheKey } : {},
995
+ ...promptCacheOptions.promptCacheRetention ? {
996
+ promptCacheRetention: promptCacheOptions.promptCacheRetention
997
+ } : {}
998
+ }
999
+ }
1000
+ } : {}
940
1001
  };
941
1002
  if (params.stream) {
942
1003
  const result = streamText(generateParams);
@@ -956,9 +1017,24 @@ async function generateTextByModelType(runtime, params, modelType, getModelFn) {
956
1017
  async function handleTextSmall(runtime, params) {
957
1018
  return generateTextByModelType(runtime, params, ModelType4.TEXT_SMALL, getSmallModel);
958
1019
  }
1020
+ async function handleTextNano(runtime, params) {
1021
+ return generateTextByModelType(runtime, params, TEXT_NANO_MODEL_TYPE, getNanoModel);
1022
+ }
1023
+ async function handleTextMedium(runtime, params) {
1024
+ return generateTextByModelType(runtime, params, TEXT_MEDIUM_MODEL_TYPE, getMediumModel);
1025
+ }
959
1026
  async function handleTextLarge(runtime, params) {
960
1027
  return generateTextByModelType(runtime, params, ModelType4.TEXT_LARGE, getLargeModel);
961
1028
  }
1029
+ async function handleTextMega(runtime, params) {
1030
+ return generateTextByModelType(runtime, params, TEXT_MEGA_MODEL_TYPE, getMegaModel);
1031
+ }
1032
+ async function handleResponseHandler(runtime, params) {
1033
+ return generateTextByModelType(runtime, params, RESPONSE_HANDLER_MODEL_TYPE, getResponseHandlerModel);
1034
+ }
1035
+ async function handleActionPlanner(runtime, params) {
1036
+ return generateTextByModelType(runtime, params, ACTION_PLANNER_MODEL_TYPE, getActionPlannerModel);
1037
+ }
962
1038
  // models/tokenizer.ts
963
1039
  import { ModelType as ModelType6 } from "@elizaos/core";
964
1040
 
@@ -1026,16 +1102,35 @@ function getProcessEnv() {
1026
1102
  return process.env;
1027
1103
  }
1028
1104
  var env = getProcessEnv();
1105
+ var TEXT_NANO_MODEL_TYPE2 = ModelType7.TEXT_NANO ?? "TEXT_NANO";
1106
+ var TEXT_MEDIUM_MODEL_TYPE2 = ModelType7.TEXT_MEDIUM ?? "TEXT_MEDIUM";
1107
+ var TEXT_MEGA_MODEL_TYPE2 = ModelType7.TEXT_MEGA ?? "TEXT_MEGA";
1108
+ var RESPONSE_HANDLER_MODEL_TYPE2 = ModelType7.RESPONSE_HANDLER ?? "RESPONSE_HANDLER";
1109
+ var ACTION_PLANNER_MODEL_TYPE2 = ModelType7.ACTION_PLANNER ?? "ACTION_PLANNER";
1029
1110
  var openaiPlugin = {
1030
1111
  name: "openai",
1031
1112
  description: "OpenAI API integration for text, image, audio, and embedding models",
1032
1113
  config: {
1033
1114
  OPENAI_API_KEY: env.OPENAI_API_KEY ?? null,
1034
1115
  OPENAI_BASE_URL: env.OPENAI_BASE_URL ?? null,
1116
+ OPENAI_NANO_MODEL: env.OPENAI_NANO_MODEL ?? null,
1117
+ OPENAI_MEDIUM_MODEL: env.OPENAI_MEDIUM_MODEL ?? null,
1035
1118
  OPENAI_SMALL_MODEL: env.OPENAI_SMALL_MODEL ?? null,
1036
1119
  OPENAI_LARGE_MODEL: env.OPENAI_LARGE_MODEL ?? null,
1120
+ OPENAI_MEGA_MODEL: env.OPENAI_MEGA_MODEL ?? null,
1121
+ OPENAI_RESPONSE_HANDLER_MODEL: env.OPENAI_RESPONSE_HANDLER_MODEL ?? null,
1122
+ OPENAI_SHOULD_RESPOND_MODEL: env.OPENAI_SHOULD_RESPOND_MODEL ?? null,
1123
+ OPENAI_ACTION_PLANNER_MODEL: env.OPENAI_ACTION_PLANNER_MODEL ?? null,
1124
+ OPENAI_PLANNER_MODEL: env.OPENAI_PLANNER_MODEL ?? null,
1125
+ NANO_MODEL: env.NANO_MODEL ?? null,
1126
+ MEDIUM_MODEL: env.MEDIUM_MODEL ?? null,
1037
1127
  SMALL_MODEL: env.SMALL_MODEL ?? null,
1038
1128
  LARGE_MODEL: env.LARGE_MODEL ?? null,
1129
+ MEGA_MODEL: env.MEGA_MODEL ?? null,
1130
+ RESPONSE_HANDLER_MODEL: env.RESPONSE_HANDLER_MODEL ?? null,
1131
+ SHOULD_RESPOND_MODEL: env.SHOULD_RESPOND_MODEL ?? null,
1132
+ ACTION_PLANNER_MODEL: env.ACTION_PLANNER_MODEL ?? null,
1133
+ PLANNER_MODEL: env.PLANNER_MODEL ?? null,
1039
1134
  OPENAI_EMBEDDING_MODEL: env.OPENAI_EMBEDDING_MODEL ?? null,
1040
1135
  OPENAI_EMBEDDING_API_KEY: env.OPENAI_EMBEDDING_API_KEY ?? null,
1041
1136
  OPENAI_EMBEDDING_URL: env.OPENAI_EMBEDDING_URL ?? null,
@@ -1062,9 +1157,24 @@ var openaiPlugin = {
1062
1157
  [ModelType7.TEXT_SMALL]: async (runtime, params) => {
1063
1158
  return handleTextSmall(runtime, params);
1064
1159
  },
1160
+ [TEXT_NANO_MODEL_TYPE2]: async (runtime, params) => {
1161
+ return handleTextNano(runtime, params);
1162
+ },
1163
+ [TEXT_MEDIUM_MODEL_TYPE2]: async (runtime, params) => {
1164
+ return handleTextMedium(runtime, params);
1165
+ },
1065
1166
  [ModelType7.TEXT_LARGE]: async (runtime, params) => {
1066
1167
  return handleTextLarge(runtime, params);
1067
1168
  },
1169
+ [TEXT_MEGA_MODEL_TYPE2]: async (runtime, params) => {
1170
+ return handleTextMega(runtime, params);
1171
+ },
1172
+ [RESPONSE_HANDLER_MODEL_TYPE2]: async (runtime, params) => {
1173
+ return handleResponseHandler(runtime, params);
1174
+ },
1175
+ [ACTION_PLANNER_MODEL_TYPE2]: async (runtime, params) => {
1176
+ return handleActionPlanner(runtime, params);
1177
+ },
1068
1178
  [ModelType7.IMAGE]: async (runtime, params) => {
1069
1179
  return handleImageGeneration(runtime, params);
1070
1180
  },
@@ -1252,10 +1362,13 @@ var openaiPlugin = {
1252
1362
  }
1253
1363
  ]
1254
1364
  };
1255
- var typescript_default = openaiPlugin;
1365
+ var plugin_openai_default = openaiPlugin;
1366
+
1367
+ // index.node.ts
1368
+ var index_node_default = plugin_openai_default;
1256
1369
  export {
1257
1370
  openaiPlugin,
1258
- typescript_default as default
1371
+ index_node_default as default
1259
1372
  };
1260
1373
 
1261
- //# debugId=B9489C35D5CDD46D64756E2164756E21
1374
+ //# debugId=5F395DEFC0D15DB964756E2164756E21