@ax-llm/ax 11.0.35 → 11.0.37

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/index.js CHANGED
@@ -735,7 +735,7 @@ var AxBaseAI = class {
735
735
  this.models = models;
736
736
  this.id = crypto.randomUUID();
737
737
  const model = this.getModel(defaults.model) ?? defaults.model;
738
- const embedModel = this.getEmbedModel(defaults.embedModel);
738
+ const embedModel = this.getEmbedModel(defaults.embedModel) ?? defaults.embedModel;
739
739
  this.defaults = { model, embedModel };
740
740
  if (!defaults.model || typeof defaults.model !== "string" || defaults.model === "") {
741
741
  throw new Error("No model defined");
@@ -837,12 +837,6 @@ var AxBaseAI = class {
837
837
  }
838
838
  return models;
839
839
  }
840
- getDefaultModels() {
841
- return {
842
- model: this.defaults.model,
843
- embedModel: this.defaults.embedModel
844
- };
845
- }
846
840
  getName() {
847
841
  return this.name;
848
842
  }
@@ -999,13 +993,18 @@ var AxBaseAI = class {
999
993
  if (!this.aiImpl.createChatStreamResp) {
1000
994
  throw new Error("generateChatResp not implemented");
1001
995
  }
1002
- const respFn = this.aiImpl.createChatStreamResp;
996
+ const respFn = this.aiImpl.createChatStreamResp.bind(this);
1003
997
  const wrappedRespFn = (state) => (resp) => {
1004
998
  const res2 = respFn(resp, state);
1005
999
  res2.sessionId = options?.sessionId;
1006
- if (res2.modelUsage) {
1007
- this.modelUsage = res2.modelUsage;
1000
+ if (!res2.modelUsage) {
1001
+ res2.modelUsage = {
1002
+ ai: this.name,
1003
+ model,
1004
+ tokens: this.aiImpl.getTokenUsage()
1005
+ };
1008
1006
  }
1007
+ this.modelUsage = res2.modelUsage;
1009
1008
  if (span?.isRecording()) {
1010
1009
  setResponseAttr(res2, span);
1011
1010
  }
@@ -1111,17 +1110,19 @@ var AxBaseAI = class {
1111
1110
  );
1112
1111
  return res2;
1113
1112
  };
1114
- const resValue = this.rt ? await this.rt(fn, { embedModelUsage: this.embedModelUsage }) : await fn();
1113
+ const resValue = this.rt ? await this.rt(fn, { modelUsage: this.embedModelUsage }) : await fn();
1115
1114
  const res = this.aiImpl.createEmbedResp(resValue);
1116
1115
  res.sessionId = options?.sessionId;
1116
+ if (!res.modelUsage) {
1117
+ res.modelUsage = {
1118
+ ai: this.name,
1119
+ model: embedModel,
1120
+ tokens: this.aiImpl.getTokenUsage()
1121
+ };
1122
+ }
1123
+ this.embedModelUsage = res.modelUsage;
1117
1124
  if (span?.isRecording()) {
1118
- if (res.modelUsage) {
1119
- this.embedModelUsage = res.modelUsage;
1120
- span.setAttributes({
1121
- [axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.completionTokens ?? 0,
1122
- [axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.promptTokens
1123
- });
1124
- }
1125
+ setResponseAttr(res, span);
1125
1126
  }
1126
1127
  span?.end();
1127
1128
  return res;
@@ -1148,8 +1149,8 @@ var AxBaseAI = class {
1148
1149
  function setResponseAttr(res, span) {
1149
1150
  if (res.modelUsage) {
1150
1151
  span.setAttributes({
1151
- [axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.completionTokens ?? 0,
1152
- [axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.promptTokens
1152
+ [axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.tokens?.completionTokens ?? 0,
1153
+ [axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.tokens?.promptTokens
1153
1154
  });
1154
1155
  }
1155
1156
  }
@@ -1204,14 +1205,14 @@ var AxAIAnthropicModel = /* @__PURE__ */ ((AxAIAnthropicModel2) => {
1204
1205
  AxAIAnthropicModel2["ClaudeInstant12"] = "claude-instant-1.2";
1205
1206
  return AxAIAnthropicModel2;
1206
1207
  })(AxAIAnthropicModel || {});
1207
- var AxAIAnthropicVertexModel = /* @__PURE__ */ ((AxAIAnthropicVertexModel3) => {
1208
- AxAIAnthropicVertexModel3["Claude37Sonnet"] = "claude-3-7-sonnet";
1209
- AxAIAnthropicVertexModel3["Claude35Haiku"] = "claude-3-5-haiku";
1210
- AxAIAnthropicVertexModel3["Claude35Sonnet"] = "claude-3-5-sonnet";
1211
- AxAIAnthropicVertexModel3["Claude35SonnetV2"] = "claude-3-5-sonnet-v2";
1212
- AxAIAnthropicVertexModel3["Claude3Haiku"] = "claude-3-haiku";
1213
- AxAIAnthropicVertexModel3["Claude3Opus"] = "claude-3-opus";
1214
- return AxAIAnthropicVertexModel3;
1208
+ var AxAIAnthropicVertexModel = /* @__PURE__ */ ((AxAIAnthropicVertexModel2) => {
1209
+ AxAIAnthropicVertexModel2["Claude37Sonnet"] = "claude-3-7-sonnet";
1210
+ AxAIAnthropicVertexModel2["Claude35Haiku"] = "claude-3-5-haiku";
1211
+ AxAIAnthropicVertexModel2["Claude35Sonnet"] = "claude-3-5-sonnet";
1212
+ AxAIAnthropicVertexModel2["Claude35SonnetV2"] = "claude-3-5-sonnet-v2";
1213
+ AxAIAnthropicVertexModel2["Claude3Haiku"] = "claude-3-haiku";
1214
+ AxAIAnthropicVertexModel2["Claude3Opus"] = "claude-3-opus";
1215
+ return AxAIAnthropicVertexModel2;
1215
1216
  })(AxAIAnthropicVertexModel || {});
1216
1217
 
1217
1218
  // ai/anthropic/info.ts
@@ -1265,7 +1266,11 @@ var axModelInfoAnthropic = [
1265
1266
 
1266
1267
  // ai/anthropic/api.ts
1267
1268
  var axAIAnthropicDefaultConfig = () => structuredClone({
1268
- model: "claude-3-5-sonnet-latest" /* Claude35Sonnet */,
1269
+ model: "claude-3-7-sonnet-latest" /* Claude37Sonnet */,
1270
+ ...axBaseAIDefaultConfig()
1271
+ });
1272
+ var axAIAnthropicVertexDefaultConfig = () => structuredClone({
1273
+ model: "claude-3-7-sonnet" /* Claude37Sonnet */,
1269
1274
  ...axBaseAIDefaultConfig()
1270
1275
  });
1271
1276
  var AxAIAnthropicImpl = class {
@@ -1273,6 +1278,10 @@ var AxAIAnthropicImpl = class {
1273
1278
  this.config = config;
1274
1279
  this.isVertex = isVertex;
1275
1280
  }
1281
+ tokensUsed;
1282
+ getTokenUsage() {
1283
+ return this.tokensUsed;
1284
+ }
1276
1285
  getModelConfig() {
1277
1286
  const { config } = this;
1278
1287
  return {
@@ -1382,16 +1391,12 @@ var AxAIAnthropicImpl = class {
1382
1391
  finishReason
1383
1392
  };
1384
1393
  });
1385
- const modelUsage = {
1394
+ this.tokensUsed = {
1386
1395
  promptTokens: resp.usage.input_tokens,
1387
1396
  completionTokens: resp.usage.output_tokens,
1388
1397
  totalTokens: resp.usage.input_tokens + resp.usage.output_tokens
1389
1398
  };
1390
- return {
1391
- results,
1392
- modelUsage,
1393
- remoteId: resp.id
1394
- };
1399
+ return { results, remoteId: resp.id };
1395
1400
  };
1396
1401
  createChatStreamResp = (resp, state) => {
1397
1402
  if (!("type" in resp)) {
@@ -1408,15 +1413,12 @@ var AxAIAnthropicImpl = class {
1408
1413
  if (resp.type === "message_start") {
1409
1414
  const { message } = resp;
1410
1415
  const results = [{ content: "", id: message.id }];
1411
- const modelUsage = {
1416
+ this.tokensUsed = {
1412
1417
  promptTokens: message.usage?.input_tokens ?? 0,
1413
1418
  completionTokens: message.usage?.output_tokens ?? 0,
1414
1419
  totalTokens: (message.usage?.input_tokens ?? 0) + (message.usage?.output_tokens ?? 0)
1415
1420
  };
1416
- return {
1417
- results,
1418
- modelUsage
1419
- };
1421
+ return { results };
1420
1422
  }
1421
1423
  if (resp.type === "content_block_start") {
1422
1424
  const { content_block: contentBlock } = resp;
@@ -1473,19 +1475,15 @@ var AxAIAnthropicImpl = class {
1473
1475
  }
1474
1476
  if (resp.type === "message_delta") {
1475
1477
  const { delta, usage } = resp;
1476
- return {
1477
- results: [
1478
- {
1479
- content: "",
1480
- finishReason: mapFinishReason(delta.stop_reason)
1481
- }
1482
- ],
1483
- modelUsage: {
1484
- promptTokens: 0,
1485
- completionTokens: usage.output_tokens,
1486
- totalTokens: usage.output_tokens
1487
- }
1478
+ this.tokensUsed = {
1479
+ promptTokens: 0,
1480
+ completionTokens: usage.output_tokens,
1481
+ totalTokens: usage.output_tokens
1488
1482
  };
1483
+ const results = [
1484
+ { content: "", finishReason: mapFinishReason(delta.stop_reason) }
1485
+ ];
1486
+ return { results };
1489
1487
  }
1490
1488
  return {
1491
1489
  results: [{ content: "" }]
@@ -1676,6 +1674,7 @@ var AxAIOpenAIModel = /* @__PURE__ */ ((AxAIOpenAIModel2) => {
1676
1674
  AxAIOpenAIModel2["O4Mini"] = "o4-mini";
1677
1675
  AxAIOpenAIModel2["GPT4"] = "gpt-4";
1678
1676
  AxAIOpenAIModel2["GPT41"] = "gpt-4.1";
1677
+ AxAIOpenAIModel2["GPT41Mini"] = "gpt-4.1-mini";
1679
1678
  AxAIOpenAIModel2["GPT4O"] = "gpt-4o";
1680
1679
  AxAIOpenAIModel2["GPT4OMini"] = "gpt-4o-mini";
1681
1680
  AxAIOpenAIModel2["GPT4ChatGPT4O"] = "chatgpt-4o-latest";
@@ -1732,6 +1731,12 @@ var axModelInfoOpenAI = [
1732
1731
  promptTokenCostPer1M: 2,
1733
1732
  completionTokenCostPer1M: 8
1734
1733
  },
1734
+ {
1735
+ name: "gpt-4.1-mini" /* GPT41Mini */,
1736
+ currency: "usd",
1737
+ promptTokenCostPer1M: 0.4,
1738
+ completionTokenCostPer1M: 1.6
1739
+ },
1735
1740
  {
1736
1741
  name: "gpt-4o" /* GPT4O */,
1737
1742
  currency: "usd",
@@ -1784,28 +1789,32 @@ var axModelInfoOpenAI = [
1784
1789
 
1785
1790
  // ai/openai/api.ts
1786
1791
  var axAIOpenAIDefaultConfig = () => structuredClone({
1787
- model: "gpt-4o" /* GPT4O */,
1792
+ model: "gpt-4.1" /* GPT41 */,
1788
1793
  embedModel: "text-embedding-3-small" /* TextEmbedding3Small */,
1789
1794
  ...axBaseAIDefaultConfig()
1790
1795
  });
1791
1796
  var axAIOpenAIBestConfig = () => structuredClone({
1792
1797
  ...axAIOpenAIDefaultConfig(),
1793
- model: "gpt-4o" /* GPT4O */
1798
+ model: "gpt-4.1" /* GPT41 */
1794
1799
  });
1795
1800
  var axAIOpenAICreativeConfig = () => structuredClone({
1796
- model: "gpt-4o" /* GPT4O */,
1801
+ model: "gpt-4.1" /* GPT41 */,
1797
1802
  embedModel: "text-embedding-3-small" /* TextEmbedding3Small */,
1798
1803
  ...axBaseAIDefaultCreativeConfig()
1799
1804
  });
1800
1805
  var axAIOpenAIFastConfig = () => ({
1801
1806
  ...axAIOpenAIDefaultConfig(),
1802
- model: "gpt-4o-mini" /* GPT4OMini */
1807
+ model: "gpt-4.1-mini" /* GPT41Mini */
1803
1808
  });
1804
1809
  var AxAIOpenAIImpl = class {
1805
1810
  constructor(config, streamingUsage) {
1806
1811
  this.config = config;
1807
1812
  this.streamingUsage = streamingUsage;
1808
1813
  }
1814
+ tokensUsed;
1815
+ getTokenUsage() {
1816
+ return this.tokensUsed;
1817
+ }
1809
1818
  getModelConfig() {
1810
1819
  const { config } = this;
1811
1820
  return {
@@ -1885,7 +1894,7 @@ var AxAIOpenAIImpl = class {
1885
1894
  if (error) {
1886
1895
  throw error;
1887
1896
  }
1888
- const modelUsage = usage ? {
1897
+ this.tokensUsed = usage ? {
1889
1898
  promptTokens: usage.prompt_tokens,
1890
1899
  completionTokens: usage.completion_tokens,
1891
1900
  totalTokens: usage.total_tokens
@@ -1907,14 +1916,13 @@ var AxAIOpenAIImpl = class {
1907
1916
  };
1908
1917
  });
1909
1918
  return {
1910
- modelUsage,
1911
1919
  results,
1912
1920
  remoteId: id
1913
1921
  };
1914
1922
  }
1915
1923
  createChatStreamResp(resp, state) {
1916
1924
  const { id, usage, choices } = resp;
1917
- const modelUsage = usage ? {
1925
+ this.tokensUsed = usage ? {
1918
1926
  promptTokens: usage.prompt_tokens,
1919
1927
  completionTokens: usage.completion_tokens,
1920
1928
  totalTokens: usage.total_tokens
@@ -1952,22 +1960,16 @@ var AxAIOpenAIImpl = class {
1952
1960
  };
1953
1961
  }
1954
1962
  );
1955
- return {
1956
- results,
1957
- modelUsage
1958
- };
1963
+ return { results };
1959
1964
  }
1960
1965
  createEmbedResp(resp) {
1961
1966
  const { data, usage } = resp;
1962
- const modelUsage = usage ? {
1967
+ this.tokensUsed = usage ? {
1963
1968
  promptTokens: usage.prompt_tokens,
1964
1969
  completionTokens: usage.completion_tokens,
1965
1970
  totalTokens: usage.total_tokens
1966
1971
  } : void 0;
1967
- return {
1968
- embeddings: data.map((v) => v.embedding),
1969
- modelUsage
1970
- };
1972
+ return { embeddings: data.map((v) => v.embedding) };
1971
1973
  }
1972
1974
  };
1973
1975
  var mapFinishReason2 = (finishReason) => {
@@ -2232,6 +2234,10 @@ var AxAICohereImpl = class {
2232
2234
  constructor(config) {
2233
2235
  this.config = config;
2234
2236
  }
2237
+ tokensUsed;
2238
+ getTokenUsage() {
2239
+ return this.tokensUsed;
2240
+ }
2235
2241
  getModelConfig() {
2236
2242
  const { config } = this;
2237
2243
  return {
@@ -2323,7 +2329,7 @@ var AxAICohereImpl = class {
2323
2329
  return [apiConfig, reqValue];
2324
2330
  };
2325
2331
  createChatResp = (resp) => {
2326
- const modelUsage = resp.meta.billed_units ? {
2332
+ this.tokensUsed = resp.meta.billed_units ? {
2327
2333
  promptTokens: resp.meta.billed_units.input_tokens,
2328
2334
  completionTokens: resp.meta.billed_units.output_tokens,
2329
2335
  totalTokens: resp.meta.billed_units.input_tokens + resp.meta.billed_units.output_tokens
@@ -2366,17 +2372,18 @@ var AxAICohereImpl = class {
2366
2372
  finishReason
2367
2373
  }
2368
2374
  ];
2369
- return {
2370
- results,
2371
- modelUsage,
2372
- remoteId: resp.response_id
2373
- };
2375
+ return { results, remoteId: resp.response_id };
2374
2376
  };
2375
2377
  createChatStreamResp = (resp, state) => {
2376
2378
  const ss = state;
2377
2379
  if (resp.event_type === "stream-start") {
2378
2380
  ss.generation_id = resp.generation_id;
2379
2381
  }
2382
+ this.tokensUsed = {
2383
+ promptTokens: 0,
2384
+ completionTokens: resp.meta.billed_units?.output_tokens ?? 0,
2385
+ totalTokens: resp.meta.billed_units?.output_tokens ?? 0
2386
+ };
2380
2387
  const { results } = this.createChatResp(resp);
2381
2388
  const result = results[0];
2382
2389
  if (!result) {
@@ -2670,13 +2677,13 @@ var safetySettings = [
2670
2677
  ];
2671
2678
  var axAIGoogleGeminiDefaultConfig = () => structuredClone({
2672
2679
  model: "gemini-2.0-flash" /* Gemini20Flash */,
2673
- embedModel: "text-embedding-004" /* TextEmbedding004 */,
2680
+ embedModel: "text-embedding-005" /* TextEmbedding005 */,
2674
2681
  safetySettings,
2675
2682
  ...axBaseAIDefaultConfig()
2676
2683
  });
2677
2684
  var axAIGoogleGeminiDefaultCreativeConfig = () => structuredClone({
2678
2685
  model: "gemini-2.0-flash" /* Gemini20Flash */,
2679
- embedModel: "text-embedding-004" /* TextEmbedding004 */,
2686
+ embedModel: "text-embedding-005" /* TextEmbedding005 */,
2680
2687
  safetySettings,
2681
2688
  ...axBaseAIDefaultCreativeConfig()
2682
2689
  });
@@ -2691,6 +2698,10 @@ var AxAIGoogleGeminiImpl = class {
2691
2698
  throw new Error("Auto truncate is not supported for GoogleGemini");
2692
2699
  }
2693
2700
  }
2701
+ tokensUsed;
2702
+ getTokenUsage() {
2703
+ return this.tokensUsed;
2704
+ }
2694
2705
  getModelConfig() {
2695
2706
  const { config } = this;
2696
2707
  return {
@@ -2953,18 +2964,14 @@ var AxAIGoogleGeminiImpl = class {
2953
2964
  return result;
2954
2965
  }
2955
2966
  );
2956
- let modelUsage;
2957
2967
  if (resp.usageMetadata) {
2958
- modelUsage = {
2968
+ this.tokensUsed = {
2959
2969
  totalTokens: resp.usageMetadata.totalTokenCount,
2960
2970
  promptTokens: resp.usageMetadata.promptTokenCount,
2961
2971
  completionTokens: resp.usageMetadata.candidatesTokenCount
2962
2972
  };
2963
2973
  }
2964
- return {
2965
- results,
2966
- modelUsage
2967
- };
2974
+ return { results };
2968
2975
  };
2969
2976
  createChatStreamResp = (resp) => {
2970
2977
  return this.createChatResp(resp);
@@ -3182,7 +3189,7 @@ var AxAIGroq = class extends AxAIOpenAIBase {
3182
3189
  debug: options?.debug
3183
3190
  });
3184
3191
  const rtFunc = async (func, info) => {
3185
- const totalTokens = info.modelUsage?.totalTokens || 0;
3192
+ const totalTokens = info.modelUsage?.tokens?.totalTokens || 0;
3186
3193
  await rt.acquire(totalTokens);
3187
3194
  return await func();
3188
3195
  };
@@ -3212,6 +3219,10 @@ var AxAIHuggingFaceImpl = class {
3212
3219
  constructor(config) {
3213
3220
  this.config = config;
3214
3221
  }
3222
+ tokensUsed;
3223
+ getTokenUsage() {
3224
+ return this.tokensUsed;
3225
+ }
3215
3226
  getModelConfig() {
3216
3227
  const { config } = this;
3217
3228
  return {
@@ -3505,6 +3516,10 @@ var AxAIRekaImpl = class {
3505
3516
  constructor(config) {
3506
3517
  this.config = config;
3507
3518
  }
3519
+ tokensUsed;
3520
+ getTokenUsage() {
3521
+ return this.tokensUsed;
3522
+ }
3508
3523
  getModelConfig() {
3509
3524
  const { config } = this;
3510
3525
  return {
@@ -3545,7 +3560,7 @@ var AxAIRekaImpl = class {
3545
3560
  };
3546
3561
  createChatResp = (resp) => {
3547
3562
  const { id, usage, responses } = resp;
3548
- const modelUsage = usage ? {
3563
+ this.tokensUsed = usage ? {
3549
3564
  promptTokens: usage.input_tokens,
3550
3565
  completionTokens: usage.output_tokens,
3551
3566
  totalTokens: usage.input_tokens + usage.output_tokens
@@ -3564,15 +3579,11 @@ var AxAIRekaImpl = class {
3564
3579
  finishReason
3565
3580
  };
3566
3581
  });
3567
- return {
3568
- modelUsage,
3569
- results,
3570
- remoteId: id
3571
- };
3582
+ return { results, remoteId: id };
3572
3583
  };
3573
3584
  createChatStreamResp = (resp) => {
3574
3585
  const { id, usage, responses } = resp;
3575
- const modelUsage = usage ? {
3586
+ this.tokensUsed = usage ? {
3576
3587
  promptTokens: usage.input_tokens,
3577
3588
  completionTokens: usage.output_tokens,
3578
3589
  totalTokens: usage.input_tokens + usage.output_tokens
@@ -3591,10 +3602,7 @@ var AxAIRekaImpl = class {
3591
3602
  finishReason
3592
3603
  };
3593
3604
  });
3594
- return {
3595
- results,
3596
- modelUsage
3597
- };
3605
+ return { results };
3598
3606
  };
3599
3607
  };
3600
3608
  var mapFinishReason3 = (finishReason) => {
@@ -3780,9 +3788,6 @@ var AxAI = class {
3780
3788
  getModelList() {
3781
3789
  return this.ai.getModelList();
3782
3790
  }
3783
- getDefaultModels() {
3784
- return this.ai.getDefaultModels();
3785
- }
3786
3791
  getMetrics() {
3787
3792
  return this.ai.getMetrics();
3788
3793
  }
@@ -4719,9 +4724,15 @@ function mergeProgramUsage(usages) {
4719
4724
  }
4720
4725
  const currentUsage = usageMap[key];
4721
4726
  if (currentUsage) {
4722
- currentUsage.promptTokens += usage.promptTokens;
4723
- currentUsage.completionTokens += usage.completionTokens;
4724
- currentUsage.totalTokens += usage.totalTokens;
4727
+ const tokens = currentUsage.tokens ?? {
4728
+ promptTokens: 0,
4729
+ completionTokens: 0,
4730
+ totalTokens: 0
4731
+ };
4732
+ tokens.promptTokens += usage?.tokens?.promptTokens ?? 0;
4733
+ tokens.completionTokens += usage?.tokens?.completionTokens ?? 0;
4734
+ tokens.totalTokens += usage?.tokens?.totalTokens ?? 0;
4735
+ currentUsage.tokens = tokens;
4725
4736
  }
4726
4737
  }
4727
4738
  return Object.values(usageMap);
@@ -6241,13 +6252,9 @@ var AxGen = class extends AxProgramWithSignature {
6241
6252
  mem,
6242
6253
  options
6243
6254
  }) {
6244
- const { sessionId, traceId, model, functions: _functions } = options ?? {};
6255
+ const { sessionId, traceId, functions: _functions } = options ?? {};
6245
6256
  const fastFail = options?.fastFail ?? this.options?.fastFail;
6246
- const modelName = model ?? ai.getDefaultModels().model;
6247
- const usageInfo = {
6248
- ai: ai.getName(),
6249
- model: modelName
6250
- };
6257
+ const model = options.model;
6251
6258
  const functions = _functions?.map((f) => "toFunction" in f ? f.toFunction() : f)?.flat();
6252
6259
  const res = await this.forwardSendRequest({
6253
6260
  ai,
@@ -6259,7 +6266,6 @@ var AxGen = class extends AxProgramWithSignature {
6259
6266
  ai,
6260
6267
  model,
6261
6268
  res,
6262
- usageInfo,
6263
6269
  mem,
6264
6270
  traceId,
6265
6271
  sessionId,
@@ -6271,7 +6277,6 @@ var AxGen = class extends AxProgramWithSignature {
6271
6277
  ai,
6272
6278
  model,
6273
6279
  res,
6274
- usageInfo,
6275
6280
  mem,
6276
6281
  traceId,
6277
6282
  sessionId,
@@ -6283,14 +6288,13 @@ var AxGen = class extends AxProgramWithSignature {
6283
6288
  ai,
6284
6289
  model,
6285
6290
  res,
6286
- usageInfo,
6287
6291
  mem,
6288
6292
  sessionId,
6289
6293
  traceId,
6290
6294
  functions,
6291
6295
  fastFail
6292
6296
  }) {
6293
- const streamingValidation = fastFail ?? ai.getFeatures().functionCot !== true;
6297
+ const streamingValidation = fastFail ?? ai.getFeatures(model).functionCot !== true;
6294
6298
  const functionCalls = [];
6295
6299
  const values = {};
6296
6300
  const xstate = {
@@ -6305,7 +6309,7 @@ var AxGen = class extends AxProgramWithSignature {
6305
6309
  continue;
6306
6310
  }
6307
6311
  if (v.modelUsage) {
6308
- this.usage.push({ ...usageInfo, ...v.modelUsage });
6312
+ this.usage.push(v.modelUsage);
6309
6313
  }
6310
6314
  if (result.functionCalls) {
6311
6315
  mergeFunctionCalls(functionCalls, result.functionCalls);
@@ -6406,7 +6410,6 @@ var AxGen = class extends AxProgramWithSignature {
6406
6410
  async processResponse({
6407
6411
  ai,
6408
6412
  res,
6409
- usageInfo,
6410
6413
  mem,
6411
6414
  sessionId,
6412
6415
  traceId,
@@ -6419,7 +6422,7 @@ var AxGen = class extends AxProgramWithSignature {
6419
6422
  }
6420
6423
  for (const result of results) {
6421
6424
  if (res.modelUsage) {
6422
- this.usage.push({ ...usageInfo, ...res.modelUsage });
6425
+ this.usage.push(res.modelUsage);
6423
6426
  }
6424
6427
  mem.addResult(result, sessionId);
6425
6428
  if (result.functionCalls?.length) {
@@ -7011,9 +7014,6 @@ var AxBalancer = class _AxBalancer {
7011
7014
  getModelList() {
7012
7015
  return this.currentService.getModelList();
7013
7016
  }
7014
- getDefaultModels() {
7015
- return this.currentService.getDefaultModels();
7016
- }
7017
7017
  getNextService() {
7018
7018
  const cs = this.services[++this.currentServiceIndex];
7019
7019
  if (cs === void 0) {
@@ -9165,12 +9165,6 @@ var AxMockAIService = class {
9165
9165
  getModelList() {
9166
9166
  return this.config.models;
9167
9167
  }
9168
- getDefaultModels() {
9169
- return {
9170
- model: this.config.modelInfo?.name ?? "mock-model",
9171
- embedModel: this.config.embedModelInfo?.name
9172
- };
9173
- }
9174
9168
  getMetrics() {
9175
9169
  return this.metrics;
9176
9170
  }
@@ -9193,9 +9187,13 @@ var AxMockAIService = class {
9193
9187
  }
9194
9188
  ],
9195
9189
  modelUsage: {
9196
- promptTokens: 10,
9197
- completionTokens: 5,
9198
- totalTokens: 15
9190
+ ai: this.getName(),
9191
+ model: "mock-model",
9192
+ tokens: {
9193
+ promptTokens: 10,
9194
+ completionTokens: 5,
9195
+ totalTokens: 15
9196
+ }
9199
9197
  }
9200
9198
  };
9201
9199
  }
@@ -9213,9 +9211,13 @@ var AxMockAIService = class {
9213
9211
  return this.config.embedResponse ?? {
9214
9212
  embeddings: [[0.1, 0.2, 0.3]],
9215
9213
  modelUsage: {
9216
- promptTokens: 5,
9217
- completionTokens: 0,
9218
- totalTokens: 5
9214
+ ai: this.getName(),
9215
+ model: "mock-model",
9216
+ tokens: {
9217
+ promptTokens: 5,
9218
+ completionTokens: 0,
9219
+ totalTokens: 5
9220
+ }
9219
9221
  }
9220
9222
  };
9221
9223
  }
@@ -11179,11 +11181,6 @@ var AxMultiServiceRouter = class {
11179
11181
  }
11180
11182
  });
11181
11183
  }
11182
- getDefaultModels() {
11183
- throw new Error(
11184
- "getDefaultModels is not supported for multi-service router."
11185
- );
11186
- }
11187
11184
  /**
11188
11185
  * If a model key is provided, delegate to the corresponding service's features.
11189
11186
  * Otherwise, returns a default feature set.
@@ -11345,6 +11342,7 @@ export {
11345
11342
  AxStringUtil,
11346
11343
  AxTestPrompt,
11347
11344
  axAIAnthropicDefaultConfig,
11345
+ axAIAnthropicVertexDefaultConfig,
11348
11346
  axAIAzureOpenAIBestConfig,
11349
11347
  axAIAzureOpenAICreativeConfig,
11350
11348
  axAIAzureOpenAIDefaultConfig,