@ax-llm/ax 11.0.34 → 11.0.36
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.cjs +272 -208
- package/index.cjs.map +1 -1
- package/index.d.cts +45 -50
- package/index.d.ts +45 -50
- package/index.js +271 -208
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -734,8 +734,8 @@ var AxBaseAI = class {
|
|
|
734
734
|
this.modelInfo = modelInfo;
|
|
735
735
|
this.models = models;
|
|
736
736
|
this.id = crypto.randomUUID();
|
|
737
|
-
const model = this.
|
|
738
|
-
const embedModel = defaults.embedModel;
|
|
737
|
+
const model = this.getModel(defaults.model) ?? defaults.model;
|
|
738
|
+
const embedModel = this.getEmbedModel(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");
|
|
@@ -801,18 +801,10 @@ var AxBaseAI = class {
|
|
|
801
801
|
this.headers = headers;
|
|
802
802
|
}
|
|
803
803
|
setOptions(options) {
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
this.rt = options.rateLimiter;
|
|
809
|
-
}
|
|
810
|
-
if (options.fetch) {
|
|
811
|
-
this.fetch = options.fetch;
|
|
812
|
-
}
|
|
813
|
-
if (options.tracer) {
|
|
814
|
-
this.tracer = options.tracer;
|
|
815
|
-
}
|
|
804
|
+
this.debug = options.debug ?? false;
|
|
805
|
+
this.rt = options.rateLimiter;
|
|
806
|
+
this.fetch = options.fetch;
|
|
807
|
+
this.tracer = options.tracer;
|
|
816
808
|
}
|
|
817
809
|
getOptions() {
|
|
818
810
|
return {
|
|
@@ -823,17 +815,27 @@ var AxBaseAI = class {
|
|
|
823
815
|
};
|
|
824
816
|
}
|
|
825
817
|
getModelList() {
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
818
|
+
const models = [];
|
|
819
|
+
for (const model of this.models ?? []) {
|
|
820
|
+
if (model.isInternal) {
|
|
821
|
+
continue;
|
|
822
|
+
}
|
|
823
|
+
if ("model" in model && model.model) {
|
|
824
|
+
models.push({
|
|
825
|
+
key: model.key,
|
|
826
|
+
description: model.description,
|
|
827
|
+
model: model.model
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
if ("embedModel" in model && model.embedModel) {
|
|
831
|
+
models.push({
|
|
832
|
+
key: model.key,
|
|
833
|
+
description: model.description,
|
|
834
|
+
embedModel: model.embedModel
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
return models;
|
|
837
839
|
}
|
|
838
840
|
getName() {
|
|
839
841
|
return this.name;
|
|
@@ -888,7 +890,7 @@ var AxBaseAI = class {
|
|
|
888
890
|
}
|
|
889
891
|
}
|
|
890
892
|
async _chat1(req, options) {
|
|
891
|
-
const model =
|
|
893
|
+
const model = this.getModel(req.model) ?? req.model ?? this.defaults.model;
|
|
892
894
|
const modelConfig = {
|
|
893
895
|
...this.aiImpl.getModelConfig(),
|
|
894
896
|
...req.modelConfig
|
|
@@ -952,6 +954,7 @@ var AxBaseAI = class {
|
|
|
952
954
|
if (!this.aiImpl.createChatReq) {
|
|
953
955
|
throw new Error("generateChatReq not implemented");
|
|
954
956
|
}
|
|
957
|
+
const debug = options?.debug ?? this.debug;
|
|
955
958
|
let functions;
|
|
956
959
|
if (chatReq.functions && chatReq.functions.length > 0) {
|
|
957
960
|
functions = chatReq.functions.map((fn2) => this.cleanupFunctionSchema(fn2));
|
|
@@ -973,7 +976,7 @@ var AxBaseAI = class {
|
|
|
973
976
|
url: this.apiURL,
|
|
974
977
|
headers: await this.buildHeaders(apiConfig.headers),
|
|
975
978
|
stream: modelConfig.stream,
|
|
976
|
-
debug
|
|
979
|
+
debug,
|
|
977
980
|
fetch: this.fetch,
|
|
978
981
|
span
|
|
979
982
|
},
|
|
@@ -981,7 +984,7 @@ var AxBaseAI = class {
|
|
|
981
984
|
);
|
|
982
985
|
return res2;
|
|
983
986
|
};
|
|
984
|
-
if (
|
|
987
|
+
if (debug) {
|
|
985
988
|
logChatRequest(req.chatPrompt, options?.debugHideSystemPrompt);
|
|
986
989
|
}
|
|
987
990
|
const rt = options?.rateLimiter ?? this.rt;
|
|
@@ -990,23 +993,28 @@ var AxBaseAI = class {
|
|
|
990
993
|
if (!this.aiImpl.createChatStreamResp) {
|
|
991
994
|
throw new Error("generateChatResp not implemented");
|
|
992
995
|
}
|
|
993
|
-
const respFn = this.aiImpl.createChatStreamResp;
|
|
996
|
+
const respFn = this.aiImpl.createChatStreamResp.bind(this);
|
|
994
997
|
const wrappedRespFn = (state) => (resp) => {
|
|
995
998
|
const res2 = respFn(resp, state);
|
|
996
999
|
res2.sessionId = options?.sessionId;
|
|
997
|
-
if (res2.modelUsage) {
|
|
998
|
-
|
|
1000
|
+
if (!res2.modelUsage) {
|
|
1001
|
+
res2.modelUsage = {
|
|
1002
|
+
ai: this.name,
|
|
1003
|
+
model,
|
|
1004
|
+
tokens: this.aiImpl.getTokenUsage()
|
|
1005
|
+
};
|
|
999
1006
|
}
|
|
1007
|
+
this.modelUsage = res2.modelUsage;
|
|
1000
1008
|
if (span?.isRecording()) {
|
|
1001
1009
|
setResponseAttr(res2, span);
|
|
1002
1010
|
}
|
|
1003
|
-
if (
|
|
1011
|
+
if (debug) {
|
|
1004
1012
|
logResponse(res2);
|
|
1005
1013
|
}
|
|
1006
1014
|
return res2;
|
|
1007
1015
|
};
|
|
1008
1016
|
const doneCb = async (_values) => {
|
|
1009
|
-
if (
|
|
1017
|
+
if (debug) {
|
|
1010
1018
|
process.stdout.write("\n");
|
|
1011
1019
|
}
|
|
1012
1020
|
};
|
|
@@ -1029,7 +1037,7 @@ var AxBaseAI = class {
|
|
|
1029
1037
|
if (span?.isRecording()) {
|
|
1030
1038
|
setResponseAttr(res, span);
|
|
1031
1039
|
}
|
|
1032
|
-
if (
|
|
1040
|
+
if (debug) {
|
|
1033
1041
|
logResponse(res);
|
|
1034
1042
|
}
|
|
1035
1043
|
span?.end();
|
|
@@ -1050,7 +1058,7 @@ var AxBaseAI = class {
|
|
|
1050
1058
|
}
|
|
1051
1059
|
}
|
|
1052
1060
|
async _embed1(req, options) {
|
|
1053
|
-
const embedModel = req.embedModel ?? this.defaults.embedModel;
|
|
1061
|
+
const embedModel = this.getEmbedModel(req.embedModel) ?? req.embedModel ?? this.defaults.embedModel;
|
|
1054
1062
|
if (!embedModel) {
|
|
1055
1063
|
throw new Error("No embed model defined");
|
|
1056
1064
|
}
|
|
@@ -1082,6 +1090,7 @@ var AxBaseAI = class {
|
|
|
1082
1090
|
if (!this.aiImpl.createEmbedResp) {
|
|
1083
1091
|
throw new Error("generateEmbedResp not implemented");
|
|
1084
1092
|
}
|
|
1093
|
+
const debug = options?.debug ?? this.debug;
|
|
1085
1094
|
const req = {
|
|
1086
1095
|
...embedReq,
|
|
1087
1096
|
embedModel
|
|
@@ -1093,7 +1102,7 @@ var AxBaseAI = class {
|
|
|
1093
1102
|
name: apiConfig.name,
|
|
1094
1103
|
url: this.apiURL,
|
|
1095
1104
|
headers: await this.buildHeaders(apiConfig.headers),
|
|
1096
|
-
debug
|
|
1105
|
+
debug,
|
|
1097
1106
|
fetch: this.fetch,
|
|
1098
1107
|
span
|
|
1099
1108
|
},
|
|
@@ -1101,15 +1110,23 @@ var AxBaseAI = class {
|
|
|
1101
1110
|
);
|
|
1102
1111
|
return res2;
|
|
1103
1112
|
};
|
|
1104
|
-
const resValue = this.rt ? await this.rt(fn, {
|
|
1113
|
+
const resValue = this.rt ? await this.rt(fn, { modelUsage: this.embedModelUsage }) : await fn();
|
|
1105
1114
|
const res = this.aiImpl.createEmbedResp(resValue);
|
|
1106
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;
|
|
1107
1124
|
if (span?.isRecording()) {
|
|
1108
1125
|
if (res.modelUsage) {
|
|
1109
1126
|
this.embedModelUsage = res.modelUsage;
|
|
1110
1127
|
span.setAttributes({
|
|
1111
|
-
[axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.completionTokens ?? 0,
|
|
1112
|
-
[axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.promptTokens
|
|
1128
|
+
[axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.tokens?.completionTokens ?? 0,
|
|
1129
|
+
[axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.tokens?.promptTokens
|
|
1113
1130
|
});
|
|
1114
1131
|
}
|
|
1115
1132
|
}
|
|
@@ -1119,12 +1136,27 @@ var AxBaseAI = class {
|
|
|
1119
1136
|
async buildHeaders(headers = {}) {
|
|
1120
1137
|
return { ...headers, ...await this.headers() };
|
|
1121
1138
|
}
|
|
1139
|
+
getModelByKey(modelName) {
|
|
1140
|
+
if (!modelName) {
|
|
1141
|
+
return void 0;
|
|
1142
|
+
}
|
|
1143
|
+
const item = this.models?.find((v) => v.key === modelName);
|
|
1144
|
+
return item;
|
|
1145
|
+
}
|
|
1146
|
+
getModel(modelName) {
|
|
1147
|
+
const item = this.getModelByKey(modelName);
|
|
1148
|
+
return item && "model" in item ? item.model : void 0;
|
|
1149
|
+
}
|
|
1150
|
+
getEmbedModel(modelName) {
|
|
1151
|
+
const item = this.getModelByKey(modelName);
|
|
1152
|
+
return item && "embedModel" in item ? item.embedModel : void 0;
|
|
1153
|
+
}
|
|
1122
1154
|
};
|
|
1123
1155
|
function setResponseAttr(res, span) {
|
|
1124
1156
|
if (res.modelUsage) {
|
|
1125
1157
|
span.setAttributes({
|
|
1126
|
-
[axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.completionTokens ?? 0,
|
|
1127
|
-
[axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.promptTokens
|
|
1158
|
+
[axSpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: res.modelUsage.tokens?.completionTokens ?? 0,
|
|
1159
|
+
[axSpanAttributes.LLM_USAGE_PROMPT_TOKENS]: res.modelUsage.tokens?.promptTokens
|
|
1128
1160
|
});
|
|
1129
1161
|
}
|
|
1130
1162
|
}
|
|
@@ -1179,14 +1211,14 @@ var AxAIAnthropicModel = /* @__PURE__ */ ((AxAIAnthropicModel2) => {
|
|
|
1179
1211
|
AxAIAnthropicModel2["ClaudeInstant12"] = "claude-instant-1.2";
|
|
1180
1212
|
return AxAIAnthropicModel2;
|
|
1181
1213
|
})(AxAIAnthropicModel || {});
|
|
1182
|
-
var AxAIAnthropicVertexModel = /* @__PURE__ */ ((
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
return
|
|
1214
|
+
var AxAIAnthropicVertexModel = /* @__PURE__ */ ((AxAIAnthropicVertexModel2) => {
|
|
1215
|
+
AxAIAnthropicVertexModel2["Claude37Sonnet"] = "claude-3-7-sonnet";
|
|
1216
|
+
AxAIAnthropicVertexModel2["Claude35Haiku"] = "claude-3-5-haiku";
|
|
1217
|
+
AxAIAnthropicVertexModel2["Claude35Sonnet"] = "claude-3-5-sonnet";
|
|
1218
|
+
AxAIAnthropicVertexModel2["Claude35SonnetV2"] = "claude-3-5-sonnet-v2";
|
|
1219
|
+
AxAIAnthropicVertexModel2["Claude3Haiku"] = "claude-3-haiku";
|
|
1220
|
+
AxAIAnthropicVertexModel2["Claude3Opus"] = "claude-3-opus";
|
|
1221
|
+
return AxAIAnthropicVertexModel2;
|
|
1190
1222
|
})(AxAIAnthropicVertexModel || {});
|
|
1191
1223
|
|
|
1192
1224
|
// ai/anthropic/info.ts
|
|
@@ -1240,7 +1272,11 @@ var axModelInfoAnthropic = [
|
|
|
1240
1272
|
|
|
1241
1273
|
// ai/anthropic/api.ts
|
|
1242
1274
|
var axAIAnthropicDefaultConfig = () => structuredClone({
|
|
1243
|
-
model: "claude-3-
|
|
1275
|
+
model: "claude-3-7-sonnet-latest" /* Claude37Sonnet */,
|
|
1276
|
+
...axBaseAIDefaultConfig()
|
|
1277
|
+
});
|
|
1278
|
+
var axAIAnthropicVertexDefaultConfig = () => structuredClone({
|
|
1279
|
+
model: "claude-3-7-sonnet" /* Claude37Sonnet */,
|
|
1244
1280
|
...axBaseAIDefaultConfig()
|
|
1245
1281
|
});
|
|
1246
1282
|
var AxAIAnthropicImpl = class {
|
|
@@ -1248,6 +1284,10 @@ var AxAIAnthropicImpl = class {
|
|
|
1248
1284
|
this.config = config;
|
|
1249
1285
|
this.isVertex = isVertex;
|
|
1250
1286
|
}
|
|
1287
|
+
tokensUsed;
|
|
1288
|
+
getTokenUsage() {
|
|
1289
|
+
return this.tokensUsed;
|
|
1290
|
+
}
|
|
1251
1291
|
getModelConfig() {
|
|
1252
1292
|
const { config } = this;
|
|
1253
1293
|
return {
|
|
@@ -1357,16 +1397,12 @@ var AxAIAnthropicImpl = class {
|
|
|
1357
1397
|
finishReason
|
|
1358
1398
|
};
|
|
1359
1399
|
});
|
|
1360
|
-
|
|
1400
|
+
this.tokensUsed = {
|
|
1361
1401
|
promptTokens: resp.usage.input_tokens,
|
|
1362
1402
|
completionTokens: resp.usage.output_tokens,
|
|
1363
1403
|
totalTokens: resp.usage.input_tokens + resp.usage.output_tokens
|
|
1364
1404
|
};
|
|
1365
|
-
return {
|
|
1366
|
-
results,
|
|
1367
|
-
modelUsage,
|
|
1368
|
-
remoteId: resp.id
|
|
1369
|
-
};
|
|
1405
|
+
return { results, remoteId: resp.id };
|
|
1370
1406
|
};
|
|
1371
1407
|
createChatStreamResp = (resp, state) => {
|
|
1372
1408
|
if (!("type" in resp)) {
|
|
@@ -1383,15 +1419,12 @@ var AxAIAnthropicImpl = class {
|
|
|
1383
1419
|
if (resp.type === "message_start") {
|
|
1384
1420
|
const { message } = resp;
|
|
1385
1421
|
const results = [{ content: "", id: message.id }];
|
|
1386
|
-
|
|
1422
|
+
this.tokensUsed = {
|
|
1387
1423
|
promptTokens: message.usage?.input_tokens ?? 0,
|
|
1388
1424
|
completionTokens: message.usage?.output_tokens ?? 0,
|
|
1389
1425
|
totalTokens: (message.usage?.input_tokens ?? 0) + (message.usage?.output_tokens ?? 0)
|
|
1390
1426
|
};
|
|
1391
|
-
return {
|
|
1392
|
-
results,
|
|
1393
|
-
modelUsage
|
|
1394
|
-
};
|
|
1427
|
+
return { results };
|
|
1395
1428
|
}
|
|
1396
1429
|
if (resp.type === "content_block_start") {
|
|
1397
1430
|
const { content_block: contentBlock } = resp;
|
|
@@ -1448,19 +1481,15 @@ var AxAIAnthropicImpl = class {
|
|
|
1448
1481
|
}
|
|
1449
1482
|
if (resp.type === "message_delta") {
|
|
1450
1483
|
const { delta, usage } = resp;
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
finishReason: mapFinishReason(delta.stop_reason)
|
|
1456
|
-
}
|
|
1457
|
-
],
|
|
1458
|
-
modelUsage: {
|
|
1459
|
-
promptTokens: 0,
|
|
1460
|
-
completionTokens: usage.output_tokens,
|
|
1461
|
-
totalTokens: usage.output_tokens
|
|
1462
|
-
}
|
|
1484
|
+
this.tokensUsed = {
|
|
1485
|
+
promptTokens: 0,
|
|
1486
|
+
completionTokens: usage.output_tokens,
|
|
1487
|
+
totalTokens: usage.output_tokens
|
|
1463
1488
|
};
|
|
1489
|
+
const results = [
|
|
1490
|
+
{ content: "", finishReason: mapFinishReason(delta.stop_reason) }
|
|
1491
|
+
];
|
|
1492
|
+
return { results };
|
|
1464
1493
|
}
|
|
1465
1494
|
return {
|
|
1466
1495
|
results: [{ content: "" }]
|
|
@@ -1645,10 +1674,13 @@ function mapFinishReason(stopReason) {
|
|
|
1645
1674
|
// ai/openai/types.ts
|
|
1646
1675
|
var AxAIOpenAIModel = /* @__PURE__ */ ((AxAIOpenAIModel2) => {
|
|
1647
1676
|
AxAIOpenAIModel2["O1"] = "o1";
|
|
1677
|
+
AxAIOpenAIModel2["O3"] = "o3";
|
|
1648
1678
|
AxAIOpenAIModel2["O1Mini"] = "o1-mini";
|
|
1649
1679
|
AxAIOpenAIModel2["O3Mini"] = "o3-mini";
|
|
1680
|
+
AxAIOpenAIModel2["O4Mini"] = "o4-mini";
|
|
1650
1681
|
AxAIOpenAIModel2["GPT4"] = "gpt-4";
|
|
1651
|
-
AxAIOpenAIModel2["
|
|
1682
|
+
AxAIOpenAIModel2["GPT41"] = "gpt-4.1";
|
|
1683
|
+
AxAIOpenAIModel2["GPT41Mini"] = "gpt-4.1-mini";
|
|
1652
1684
|
AxAIOpenAIModel2["GPT4O"] = "gpt-4o";
|
|
1653
1685
|
AxAIOpenAIModel2["GPT4OMini"] = "gpt-4o-mini";
|
|
1654
1686
|
AxAIOpenAIModel2["GPT4ChatGPT4O"] = "chatgpt-4o-latest";
|
|
@@ -1669,12 +1701,6 @@ var AxAIOpenAIEmbedModel = /* @__PURE__ */ ((AxAIOpenAIEmbedModel2) => {
|
|
|
1669
1701
|
|
|
1670
1702
|
// ai/openai/info.ts
|
|
1671
1703
|
var axModelInfoOpenAI = [
|
|
1672
|
-
{
|
|
1673
|
-
name: "gpt-4.5-preview" /* GPT45 */,
|
|
1674
|
-
currency: "usd",
|
|
1675
|
-
promptTokenCostPer1M: 75,
|
|
1676
|
-
completionTokenCostPer1M: 150
|
|
1677
|
-
},
|
|
1678
1704
|
{
|
|
1679
1705
|
name: "o1" /* O1 */,
|
|
1680
1706
|
currency: "usd",
|
|
@@ -1693,12 +1719,30 @@ var axModelInfoOpenAI = [
|
|
|
1693
1719
|
promptTokenCostPer1M: 1.1,
|
|
1694
1720
|
completionTokenCostPer1M: 4.4
|
|
1695
1721
|
},
|
|
1722
|
+
{
|
|
1723
|
+
name: "o4-mini" /* O4Mini */,
|
|
1724
|
+
currency: "usd",
|
|
1725
|
+
promptTokenCostPer1M: 1.1,
|
|
1726
|
+
completionTokenCostPer1M: 4.4
|
|
1727
|
+
},
|
|
1696
1728
|
{
|
|
1697
1729
|
name: "gpt-4" /* GPT4 */,
|
|
1698
1730
|
currency: "usd",
|
|
1699
1731
|
promptTokenCostPer1M: 30,
|
|
1700
1732
|
completionTokenCostPer1M: 60
|
|
1701
1733
|
},
|
|
1734
|
+
{
|
|
1735
|
+
name: "gpt-4.1" /* GPT41 */,
|
|
1736
|
+
currency: "usd",
|
|
1737
|
+
promptTokenCostPer1M: 2,
|
|
1738
|
+
completionTokenCostPer1M: 8
|
|
1739
|
+
},
|
|
1740
|
+
{
|
|
1741
|
+
name: "gpt-4.1-mini" /* GPT41Mini */,
|
|
1742
|
+
currency: "usd",
|
|
1743
|
+
promptTokenCostPer1M: 0.4,
|
|
1744
|
+
completionTokenCostPer1M: 1.6
|
|
1745
|
+
},
|
|
1702
1746
|
{
|
|
1703
1747
|
name: "gpt-4o" /* GPT4O */,
|
|
1704
1748
|
currency: "usd",
|
|
@@ -1751,28 +1795,32 @@ var axModelInfoOpenAI = [
|
|
|
1751
1795
|
|
|
1752
1796
|
// ai/openai/api.ts
|
|
1753
1797
|
var axAIOpenAIDefaultConfig = () => structuredClone({
|
|
1754
|
-
model: "gpt-
|
|
1798
|
+
model: "gpt-4.1" /* GPT41 */,
|
|
1755
1799
|
embedModel: "text-embedding-3-small" /* TextEmbedding3Small */,
|
|
1756
1800
|
...axBaseAIDefaultConfig()
|
|
1757
1801
|
});
|
|
1758
1802
|
var axAIOpenAIBestConfig = () => structuredClone({
|
|
1759
1803
|
...axAIOpenAIDefaultConfig(),
|
|
1760
|
-
model: "gpt-
|
|
1804
|
+
model: "gpt-4.1" /* GPT41 */
|
|
1761
1805
|
});
|
|
1762
1806
|
var axAIOpenAICreativeConfig = () => structuredClone({
|
|
1763
|
-
model: "gpt-
|
|
1807
|
+
model: "gpt-4.1" /* GPT41 */,
|
|
1764
1808
|
embedModel: "text-embedding-3-small" /* TextEmbedding3Small */,
|
|
1765
1809
|
...axBaseAIDefaultCreativeConfig()
|
|
1766
1810
|
});
|
|
1767
1811
|
var axAIOpenAIFastConfig = () => ({
|
|
1768
1812
|
...axAIOpenAIDefaultConfig(),
|
|
1769
|
-
model: "gpt-
|
|
1813
|
+
model: "gpt-4.1-mini" /* GPT41Mini */
|
|
1770
1814
|
});
|
|
1771
1815
|
var AxAIOpenAIImpl = class {
|
|
1772
1816
|
constructor(config, streamingUsage) {
|
|
1773
1817
|
this.config = config;
|
|
1774
1818
|
this.streamingUsage = streamingUsage;
|
|
1775
1819
|
}
|
|
1820
|
+
tokensUsed;
|
|
1821
|
+
getTokenUsage() {
|
|
1822
|
+
return this.tokensUsed;
|
|
1823
|
+
}
|
|
1776
1824
|
getModelConfig() {
|
|
1777
1825
|
const { config } = this;
|
|
1778
1826
|
return {
|
|
@@ -1852,7 +1900,7 @@ var AxAIOpenAIImpl = class {
|
|
|
1852
1900
|
if (error) {
|
|
1853
1901
|
throw error;
|
|
1854
1902
|
}
|
|
1855
|
-
|
|
1903
|
+
this.tokensUsed = usage ? {
|
|
1856
1904
|
promptTokens: usage.prompt_tokens,
|
|
1857
1905
|
completionTokens: usage.completion_tokens,
|
|
1858
1906
|
totalTokens: usage.total_tokens
|
|
@@ -1874,14 +1922,13 @@ var AxAIOpenAIImpl = class {
|
|
|
1874
1922
|
};
|
|
1875
1923
|
});
|
|
1876
1924
|
return {
|
|
1877
|
-
modelUsage,
|
|
1878
1925
|
results,
|
|
1879
1926
|
remoteId: id
|
|
1880
1927
|
};
|
|
1881
1928
|
}
|
|
1882
1929
|
createChatStreamResp(resp, state) {
|
|
1883
1930
|
const { id, usage, choices } = resp;
|
|
1884
|
-
|
|
1931
|
+
this.tokensUsed = usage ? {
|
|
1885
1932
|
promptTokens: usage.prompt_tokens,
|
|
1886
1933
|
completionTokens: usage.completion_tokens,
|
|
1887
1934
|
totalTokens: usage.total_tokens
|
|
@@ -1919,22 +1966,16 @@ var AxAIOpenAIImpl = class {
|
|
|
1919
1966
|
};
|
|
1920
1967
|
}
|
|
1921
1968
|
);
|
|
1922
|
-
return {
|
|
1923
|
-
results,
|
|
1924
|
-
modelUsage
|
|
1925
|
-
};
|
|
1969
|
+
return { results };
|
|
1926
1970
|
}
|
|
1927
1971
|
createEmbedResp(resp) {
|
|
1928
1972
|
const { data, usage } = resp;
|
|
1929
|
-
|
|
1973
|
+
this.tokensUsed = usage ? {
|
|
1930
1974
|
promptTokens: usage.prompt_tokens,
|
|
1931
1975
|
completionTokens: usage.completion_tokens,
|
|
1932
1976
|
totalTokens: usage.total_tokens
|
|
1933
1977
|
} : void 0;
|
|
1934
|
-
return {
|
|
1935
|
-
embeddings: data.map((v) => v.embedding),
|
|
1936
|
-
modelUsage
|
|
1937
|
-
};
|
|
1978
|
+
return { embeddings: data.map((v) => v.embedding) };
|
|
1938
1979
|
}
|
|
1939
1980
|
};
|
|
1940
1981
|
var mapFinishReason2 = (finishReason) => {
|
|
@@ -2199,6 +2240,10 @@ var AxAICohereImpl = class {
|
|
|
2199
2240
|
constructor(config) {
|
|
2200
2241
|
this.config = config;
|
|
2201
2242
|
}
|
|
2243
|
+
tokensUsed;
|
|
2244
|
+
getTokenUsage() {
|
|
2245
|
+
return this.tokensUsed;
|
|
2246
|
+
}
|
|
2202
2247
|
getModelConfig() {
|
|
2203
2248
|
const { config } = this;
|
|
2204
2249
|
return {
|
|
@@ -2290,7 +2335,7 @@ var AxAICohereImpl = class {
|
|
|
2290
2335
|
return [apiConfig, reqValue];
|
|
2291
2336
|
};
|
|
2292
2337
|
createChatResp = (resp) => {
|
|
2293
|
-
|
|
2338
|
+
this.tokensUsed = resp.meta.billed_units ? {
|
|
2294
2339
|
promptTokens: resp.meta.billed_units.input_tokens,
|
|
2295
2340
|
completionTokens: resp.meta.billed_units.output_tokens,
|
|
2296
2341
|
totalTokens: resp.meta.billed_units.input_tokens + resp.meta.billed_units.output_tokens
|
|
@@ -2333,17 +2378,18 @@ var AxAICohereImpl = class {
|
|
|
2333
2378
|
finishReason
|
|
2334
2379
|
}
|
|
2335
2380
|
];
|
|
2336
|
-
return {
|
|
2337
|
-
results,
|
|
2338
|
-
modelUsage,
|
|
2339
|
-
remoteId: resp.response_id
|
|
2340
|
-
};
|
|
2381
|
+
return { results, remoteId: resp.response_id };
|
|
2341
2382
|
};
|
|
2342
2383
|
createChatStreamResp = (resp, state) => {
|
|
2343
2384
|
const ss = state;
|
|
2344
2385
|
if (resp.event_type === "stream-start") {
|
|
2345
2386
|
ss.generation_id = resp.generation_id;
|
|
2346
2387
|
}
|
|
2388
|
+
this.tokensUsed = {
|
|
2389
|
+
promptTokens: 0,
|
|
2390
|
+
completionTokens: resp.meta.billed_units?.output_tokens ?? 0,
|
|
2391
|
+
totalTokens: resp.meta.billed_units?.output_tokens ?? 0
|
|
2392
|
+
};
|
|
2347
2393
|
const { results } = this.createChatResp(resp);
|
|
2348
2394
|
const result = results[0];
|
|
2349
2395
|
if (!result) {
|
|
@@ -2503,8 +2549,8 @@ var AxAIDeepSeek = class extends AxAIOpenAIBase {
|
|
|
2503
2549
|
|
|
2504
2550
|
// ai/google-gemini/types.ts
|
|
2505
2551
|
var AxAIGoogleGeminiModel = /* @__PURE__ */ ((AxAIGoogleGeminiModel2) => {
|
|
2506
|
-
AxAIGoogleGeminiModel2["Gemini25Pro"] = "gemini-2.5-pro-
|
|
2507
|
-
AxAIGoogleGeminiModel2["
|
|
2552
|
+
AxAIGoogleGeminiModel2["Gemini25Pro"] = "gemini-2.5-pro-preview-03-25";
|
|
2553
|
+
AxAIGoogleGeminiModel2["Gemini25Flash"] = "gemini-2.5-flash-preview-04-17";
|
|
2508
2554
|
AxAIGoogleGeminiModel2["Gemini20Flash"] = "gemini-2.0-flash";
|
|
2509
2555
|
AxAIGoogleGeminiModel2["Gemini20FlashLite"] = "gemini-2.0-flash-lite-preview-02-05";
|
|
2510
2556
|
AxAIGoogleGeminiModel2["Gemini20FlashThinking"] = "gemini-2.0-flash-thinking-exp-01-21";
|
|
@@ -2552,11 +2598,18 @@ var AxAIGoogleGeminiEmbedTypes = /* @__PURE__ */ ((AxAIGoogleGeminiEmbedTypes2)
|
|
|
2552
2598
|
// ai/google-gemini/info.ts
|
|
2553
2599
|
var axModelInfoGoogleGemini = [
|
|
2554
2600
|
{
|
|
2555
|
-
name: "gemini-2.
|
|
2601
|
+
name: "gemini-2.5-pro-preview-03-25" /* Gemini25Pro */,
|
|
2556
2602
|
currency: "usd",
|
|
2557
2603
|
characterIsToken: false,
|
|
2558
|
-
promptTokenCostPer1M:
|
|
2559
|
-
completionTokenCostPer1M:
|
|
2604
|
+
promptTokenCostPer1M: 2.5,
|
|
2605
|
+
completionTokenCostPer1M: 15
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
name: "gemini-2.5-flash-preview-04-17" /* Gemini25Flash */,
|
|
2609
|
+
currency: "usd",
|
|
2610
|
+
characterIsToken: false,
|
|
2611
|
+
promptTokenCostPer1M: 15,
|
|
2612
|
+
completionTokenCostPer1M: 3.5
|
|
2560
2613
|
},
|
|
2561
2614
|
{
|
|
2562
2615
|
name: "gemini-2.0-flash" /* Gemini20Flash */,
|
|
@@ -2630,13 +2683,13 @@ var safetySettings = [
|
|
|
2630
2683
|
];
|
|
2631
2684
|
var axAIGoogleGeminiDefaultConfig = () => structuredClone({
|
|
2632
2685
|
model: "gemini-2.0-flash" /* Gemini20Flash */,
|
|
2633
|
-
embedModel: "text-embedding-
|
|
2686
|
+
embedModel: "text-embedding-005" /* TextEmbedding005 */,
|
|
2634
2687
|
safetySettings,
|
|
2635
2688
|
...axBaseAIDefaultConfig()
|
|
2636
2689
|
});
|
|
2637
2690
|
var axAIGoogleGeminiDefaultCreativeConfig = () => structuredClone({
|
|
2638
2691
|
model: "gemini-2.0-flash" /* Gemini20Flash */,
|
|
2639
|
-
embedModel: "text-embedding-
|
|
2692
|
+
embedModel: "text-embedding-005" /* TextEmbedding005 */,
|
|
2640
2693
|
safetySettings,
|
|
2641
2694
|
...axBaseAIDefaultCreativeConfig()
|
|
2642
2695
|
});
|
|
@@ -2651,6 +2704,10 @@ var AxAIGoogleGeminiImpl = class {
|
|
|
2651
2704
|
throw new Error("Auto truncate is not supported for GoogleGemini");
|
|
2652
2705
|
}
|
|
2653
2706
|
}
|
|
2707
|
+
tokensUsed;
|
|
2708
|
+
getTokenUsage() {
|
|
2709
|
+
return this.tokensUsed;
|
|
2710
|
+
}
|
|
2654
2711
|
getModelConfig() {
|
|
2655
2712
|
const { config } = this;
|
|
2656
2713
|
return {
|
|
@@ -2810,7 +2867,10 @@ var AxAIGoogleGeminiImpl = class {
|
|
|
2810
2867
|
frequencyPenalty: req.modelConfig?.frequencyPenalty ?? this.config.frequencyPenalty,
|
|
2811
2868
|
candidateCount: 1,
|
|
2812
2869
|
stopSequences: req.modelConfig?.stopSequences ?? this.config.stopSequences,
|
|
2813
|
-
responseMimeType: "text/plain"
|
|
2870
|
+
responseMimeType: "text/plain",
|
|
2871
|
+
...this.config.thinkingConfig && {
|
|
2872
|
+
thinkingConfig: this.config.thinkingConfig
|
|
2873
|
+
}
|
|
2814
2874
|
};
|
|
2815
2875
|
const safetySettings2 = this.config.safetySettings;
|
|
2816
2876
|
const reqValue = {
|
|
@@ -2910,18 +2970,14 @@ var AxAIGoogleGeminiImpl = class {
|
|
|
2910
2970
|
return result;
|
|
2911
2971
|
}
|
|
2912
2972
|
);
|
|
2913
|
-
let modelUsage;
|
|
2914
2973
|
if (resp.usageMetadata) {
|
|
2915
|
-
|
|
2974
|
+
this.tokensUsed = {
|
|
2916
2975
|
totalTokens: resp.usageMetadata.totalTokenCount,
|
|
2917
2976
|
promptTokens: resp.usageMetadata.promptTokenCount,
|
|
2918
2977
|
completionTokens: resp.usageMetadata.candidatesTokenCount
|
|
2919
2978
|
};
|
|
2920
2979
|
}
|
|
2921
|
-
return {
|
|
2922
|
-
results,
|
|
2923
|
-
modelUsage
|
|
2924
|
-
};
|
|
2980
|
+
return { results };
|
|
2925
2981
|
};
|
|
2926
2982
|
createChatStreamResp = (resp) => {
|
|
2927
2983
|
return this.createChatResp(resp);
|
|
@@ -3139,7 +3195,7 @@ var AxAIGroq = class extends AxAIOpenAIBase {
|
|
|
3139
3195
|
debug: options?.debug
|
|
3140
3196
|
});
|
|
3141
3197
|
const rtFunc = async (func, info) => {
|
|
3142
|
-
const totalTokens = info.modelUsage?.totalTokens || 0;
|
|
3198
|
+
const totalTokens = info.modelUsage?.tokens?.totalTokens || 0;
|
|
3143
3199
|
await rt.acquire(totalTokens);
|
|
3144
3200
|
return await func();
|
|
3145
3201
|
};
|
|
@@ -3169,6 +3225,10 @@ var AxAIHuggingFaceImpl = class {
|
|
|
3169
3225
|
constructor(config) {
|
|
3170
3226
|
this.config = config;
|
|
3171
3227
|
}
|
|
3228
|
+
tokensUsed;
|
|
3229
|
+
getTokenUsage() {
|
|
3230
|
+
return this.tokensUsed;
|
|
3231
|
+
}
|
|
3172
3232
|
getModelConfig() {
|
|
3173
3233
|
const { config } = this;
|
|
3174
3234
|
return {
|
|
@@ -3462,6 +3522,10 @@ var AxAIRekaImpl = class {
|
|
|
3462
3522
|
constructor(config) {
|
|
3463
3523
|
this.config = config;
|
|
3464
3524
|
}
|
|
3525
|
+
tokensUsed;
|
|
3526
|
+
getTokenUsage() {
|
|
3527
|
+
return this.tokensUsed;
|
|
3528
|
+
}
|
|
3465
3529
|
getModelConfig() {
|
|
3466
3530
|
const { config } = this;
|
|
3467
3531
|
return {
|
|
@@ -3502,7 +3566,7 @@ var AxAIRekaImpl = class {
|
|
|
3502
3566
|
};
|
|
3503
3567
|
createChatResp = (resp) => {
|
|
3504
3568
|
const { id, usage, responses } = resp;
|
|
3505
|
-
|
|
3569
|
+
this.tokensUsed = usage ? {
|
|
3506
3570
|
promptTokens: usage.input_tokens,
|
|
3507
3571
|
completionTokens: usage.output_tokens,
|
|
3508
3572
|
totalTokens: usage.input_tokens + usage.output_tokens
|
|
@@ -3521,15 +3585,11 @@ var AxAIRekaImpl = class {
|
|
|
3521
3585
|
finishReason
|
|
3522
3586
|
};
|
|
3523
3587
|
});
|
|
3524
|
-
return {
|
|
3525
|
-
modelUsage,
|
|
3526
|
-
results,
|
|
3527
|
-
remoteId: id
|
|
3528
|
-
};
|
|
3588
|
+
return { results, remoteId: id };
|
|
3529
3589
|
};
|
|
3530
3590
|
createChatStreamResp = (resp) => {
|
|
3531
3591
|
const { id, usage, responses } = resp;
|
|
3532
|
-
|
|
3592
|
+
this.tokensUsed = usage ? {
|
|
3533
3593
|
promptTokens: usage.input_tokens,
|
|
3534
3594
|
completionTokens: usage.output_tokens,
|
|
3535
3595
|
totalTokens: usage.input_tokens + usage.output_tokens
|
|
@@ -3548,10 +3608,7 @@ var AxAIRekaImpl = class {
|
|
|
3548
3608
|
finishReason
|
|
3549
3609
|
};
|
|
3550
3610
|
});
|
|
3551
|
-
return {
|
|
3552
|
-
results,
|
|
3553
|
-
modelUsage
|
|
3554
|
-
};
|
|
3611
|
+
return { results };
|
|
3555
3612
|
};
|
|
3556
3613
|
};
|
|
3557
3614
|
var mapFinishReason3 = (finishReason) => {
|
|
@@ -3737,9 +3794,6 @@ var AxAI = class {
|
|
|
3737
3794
|
getModelList() {
|
|
3738
3795
|
return this.ai.getModelList();
|
|
3739
3796
|
}
|
|
3740
|
-
getDefaultModels() {
|
|
3741
|
-
return this.ai.getDefaultModels();
|
|
3742
|
-
}
|
|
3743
3797
|
getMetrics() {
|
|
3744
3798
|
return this.ai.getMetrics();
|
|
3745
3799
|
}
|
|
@@ -4676,9 +4730,15 @@ function mergeProgramUsage(usages) {
|
|
|
4676
4730
|
}
|
|
4677
4731
|
const currentUsage = usageMap[key];
|
|
4678
4732
|
if (currentUsage) {
|
|
4679
|
-
currentUsage.
|
|
4680
|
-
|
|
4681
|
-
|
|
4733
|
+
const tokens = currentUsage.tokens ?? {
|
|
4734
|
+
promptTokens: 0,
|
|
4735
|
+
completionTokens: 0,
|
|
4736
|
+
totalTokens: 0
|
|
4737
|
+
};
|
|
4738
|
+
tokens.promptTokens += usage?.tokens?.promptTokens ?? 0;
|
|
4739
|
+
tokens.completionTokens += usage?.tokens?.completionTokens ?? 0;
|
|
4740
|
+
tokens.totalTokens += usage?.tokens?.totalTokens ?? 0;
|
|
4741
|
+
currentUsage.tokens = tokens;
|
|
4682
4742
|
}
|
|
4683
4743
|
}
|
|
4684
4744
|
return Object.values(usageMap);
|
|
@@ -6198,13 +6258,9 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6198
6258
|
mem,
|
|
6199
6259
|
options
|
|
6200
6260
|
}) {
|
|
6201
|
-
const { sessionId, traceId,
|
|
6261
|
+
const { sessionId, traceId, functions: _functions } = options ?? {};
|
|
6202
6262
|
const fastFail = options?.fastFail ?? this.options?.fastFail;
|
|
6203
|
-
const
|
|
6204
|
-
const usageInfo = {
|
|
6205
|
-
ai: ai.getName(),
|
|
6206
|
-
model: modelName
|
|
6207
|
-
};
|
|
6263
|
+
const model = options.model;
|
|
6208
6264
|
const functions = _functions?.map((f) => "toFunction" in f ? f.toFunction() : f)?.flat();
|
|
6209
6265
|
const res = await this.forwardSendRequest({
|
|
6210
6266
|
ai,
|
|
@@ -6216,7 +6272,6 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6216
6272
|
ai,
|
|
6217
6273
|
model,
|
|
6218
6274
|
res,
|
|
6219
|
-
usageInfo,
|
|
6220
6275
|
mem,
|
|
6221
6276
|
traceId,
|
|
6222
6277
|
sessionId,
|
|
@@ -6228,7 +6283,6 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6228
6283
|
ai,
|
|
6229
6284
|
model,
|
|
6230
6285
|
res,
|
|
6231
|
-
usageInfo,
|
|
6232
6286
|
mem,
|
|
6233
6287
|
traceId,
|
|
6234
6288
|
sessionId,
|
|
@@ -6240,14 +6294,13 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6240
6294
|
ai,
|
|
6241
6295
|
model,
|
|
6242
6296
|
res,
|
|
6243
|
-
usageInfo,
|
|
6244
6297
|
mem,
|
|
6245
6298
|
sessionId,
|
|
6246
6299
|
traceId,
|
|
6247
6300
|
functions,
|
|
6248
6301
|
fastFail
|
|
6249
6302
|
}) {
|
|
6250
|
-
const streamingValidation = fastFail ?? ai.getFeatures().functionCot !== true;
|
|
6303
|
+
const streamingValidation = fastFail ?? ai.getFeatures(model).functionCot !== true;
|
|
6251
6304
|
const functionCalls = [];
|
|
6252
6305
|
const values = {};
|
|
6253
6306
|
const xstate = {
|
|
@@ -6262,7 +6315,7 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6262
6315
|
continue;
|
|
6263
6316
|
}
|
|
6264
6317
|
if (v.modelUsage) {
|
|
6265
|
-
this.usage.push(
|
|
6318
|
+
this.usage.push(v.modelUsage);
|
|
6266
6319
|
}
|
|
6267
6320
|
if (result.functionCalls) {
|
|
6268
6321
|
mergeFunctionCalls(functionCalls, result.functionCalls);
|
|
@@ -6363,7 +6416,6 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6363
6416
|
async processResponse({
|
|
6364
6417
|
ai,
|
|
6365
6418
|
res,
|
|
6366
|
-
usageInfo,
|
|
6367
6419
|
mem,
|
|
6368
6420
|
sessionId,
|
|
6369
6421
|
traceId,
|
|
@@ -6376,7 +6428,7 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6376
6428
|
}
|
|
6377
6429
|
for (const result of results) {
|
|
6378
6430
|
if (res.modelUsage) {
|
|
6379
|
-
this.usage.push(
|
|
6431
|
+
this.usage.push(res.modelUsage);
|
|
6380
6432
|
}
|
|
6381
6433
|
mem.addResult(result, sessionId);
|
|
6382
6434
|
if (result.functionCalls?.length) {
|
|
@@ -6424,10 +6476,8 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6424
6476
|
const maxRetries = options.maxRetries ?? this.options?.maxRetries ?? 10;
|
|
6425
6477
|
const maxSteps = options.maxSteps ?? this.options?.maxSteps ?? 10;
|
|
6426
6478
|
const debug = options.debug ?? ai.getOptions().debug;
|
|
6427
|
-
const
|
|
6428
|
-
|
|
6429
|
-
debugHideSystemPrompt: options.debugHideSystemPrompt
|
|
6430
|
-
};
|
|
6479
|
+
const debugHideSystemPrompt = options.debugHideSystemPrompt;
|
|
6480
|
+
const memOptions = { debug, debugHideSystemPrompt };
|
|
6431
6481
|
const mem = options.mem ?? this.options?.mem ?? new AxMemory(1e4, memOptions);
|
|
6432
6482
|
let err;
|
|
6433
6483
|
if (options?.functions && options.functions.length > 0) {
|
|
@@ -6505,7 +6555,7 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6505
6555
|
return false;
|
|
6506
6556
|
}
|
|
6507
6557
|
async *_forward1(ai, values, options) {
|
|
6508
|
-
const tracer =
|
|
6558
|
+
const tracer = options?.tracer ?? this.options?.tracer;
|
|
6509
6559
|
let functions = this.functions;
|
|
6510
6560
|
if (options?.functions) {
|
|
6511
6561
|
functions = parseFunctions(options.functions, this.functions);
|
|
@@ -6541,9 +6591,7 @@ var AxGen = class extends AxProgramWithSignature {
|
|
|
6541
6591
|
}
|
|
6542
6592
|
}
|
|
6543
6593
|
async forward(ai, values, options) {
|
|
6544
|
-
const generator = this._forward1(ai, values, {
|
|
6545
|
-
...options
|
|
6546
|
-
});
|
|
6594
|
+
const generator = this._forward1(ai, values, options ?? {});
|
|
6547
6595
|
let buffer = {};
|
|
6548
6596
|
let currentVersion = 0;
|
|
6549
6597
|
for await (const item of generator) {
|
|
@@ -6972,9 +7020,6 @@ var AxBalancer = class _AxBalancer {
|
|
|
6972
7020
|
getModelList() {
|
|
6973
7021
|
return this.currentService.getModelList();
|
|
6974
7022
|
}
|
|
6975
|
-
getDefaultModels() {
|
|
6976
|
-
return this.currentService.getDefaultModels();
|
|
6977
|
-
}
|
|
6978
7023
|
getNextService() {
|
|
6979
7024
|
const cs = this.services[++this.currentServiceIndex];
|
|
6980
7025
|
if (cs === void 0) {
|
|
@@ -9126,12 +9171,6 @@ var AxMockAIService = class {
|
|
|
9126
9171
|
getModelList() {
|
|
9127
9172
|
return this.config.models;
|
|
9128
9173
|
}
|
|
9129
|
-
getDefaultModels() {
|
|
9130
|
-
return {
|
|
9131
|
-
model: this.config.modelInfo?.name ?? "mock-model",
|
|
9132
|
-
embedModel: this.config.embedModelInfo?.name
|
|
9133
|
-
};
|
|
9134
|
-
}
|
|
9135
9174
|
getMetrics() {
|
|
9136
9175
|
return this.metrics;
|
|
9137
9176
|
}
|
|
@@ -9154,9 +9193,13 @@ var AxMockAIService = class {
|
|
|
9154
9193
|
}
|
|
9155
9194
|
],
|
|
9156
9195
|
modelUsage: {
|
|
9157
|
-
|
|
9158
|
-
|
|
9159
|
-
|
|
9196
|
+
ai: this.getName(),
|
|
9197
|
+
model: "mock-model",
|
|
9198
|
+
tokens: {
|
|
9199
|
+
promptTokens: 10,
|
|
9200
|
+
completionTokens: 5,
|
|
9201
|
+
totalTokens: 15
|
|
9202
|
+
}
|
|
9160
9203
|
}
|
|
9161
9204
|
};
|
|
9162
9205
|
}
|
|
@@ -9174,9 +9217,13 @@ var AxMockAIService = class {
|
|
|
9174
9217
|
return this.config.embedResponse ?? {
|
|
9175
9218
|
embeddings: [[0.1, 0.2, 0.3]],
|
|
9176
9219
|
modelUsage: {
|
|
9177
|
-
|
|
9178
|
-
|
|
9179
|
-
|
|
9220
|
+
ai: this.getName(),
|
|
9221
|
+
model: "mock-model",
|
|
9222
|
+
tokens: {
|
|
9223
|
+
promptTokens: 5,
|
|
9224
|
+
completionTokens: 0,
|
|
9225
|
+
totalTokens: 5
|
|
9226
|
+
}
|
|
9180
9227
|
}
|
|
9181
9228
|
};
|
|
9182
9229
|
}
|
|
@@ -9207,7 +9254,7 @@ var AxMockAIService = class {
|
|
|
9207
9254
|
}
|
|
9208
9255
|
};
|
|
9209
9256
|
|
|
9210
|
-
// dsp/
|
|
9257
|
+
// dsp/classifier.ts
|
|
9211
9258
|
var colorLog6 = new ColorLog();
|
|
9212
9259
|
var AxSimpleClassifierClass = class {
|
|
9213
9260
|
name;
|
|
@@ -11016,6 +11063,7 @@ var AxMCPStdioTransport = class {
|
|
|
11016
11063
|
|
|
11017
11064
|
// ai/multiservice.ts
|
|
11018
11065
|
var AxMultiServiceRouter = class {
|
|
11066
|
+
options;
|
|
11019
11067
|
services = /* @__PURE__ */ new Map();
|
|
11020
11068
|
/**
|
|
11021
11069
|
* Constructs a new multi-service router.
|
|
@@ -11036,9 +11084,7 @@ var AxMultiServiceRouter = class {
|
|
|
11036
11084
|
this.services.set(item.key, {
|
|
11037
11085
|
service,
|
|
11038
11086
|
description,
|
|
11039
|
-
isInternal
|
|
11040
|
-
model: item.service.getDefaultModels().model,
|
|
11041
|
-
useDefaultModel: true
|
|
11087
|
+
isInternal
|
|
11042
11088
|
});
|
|
11043
11089
|
} else {
|
|
11044
11090
|
const modelList = item.getModelList();
|
|
@@ -11047,18 +11093,31 @@ var AxMultiServiceRouter = class {
|
|
|
11047
11093
|
`Service ${index} \`${item.getName()}\` has no model list.`
|
|
11048
11094
|
);
|
|
11049
11095
|
}
|
|
11050
|
-
for (const
|
|
11051
|
-
if (this.services.has(key)) {
|
|
11052
|
-
const otherService = this.services.get(key)?.service;
|
|
11096
|
+
for (const v of modelList) {
|
|
11097
|
+
if (this.services.has(v.key)) {
|
|
11098
|
+
const otherService = this.services.get(v.key)?.service;
|
|
11053
11099
|
throw new Error(
|
|
11054
|
-
`Service ${index} \`${item.getName()}\` has duplicate model key: ${key} as service ${otherService?.getName()}`
|
|
11100
|
+
`Service ${index} \`${item.getName()}\` has duplicate model key: ${v.key} as service ${otherService?.getName()}`
|
|
11055
11101
|
);
|
|
11102
|
+
} else {
|
|
11103
|
+
if ("model" in v && typeof v.model) {
|
|
11104
|
+
this.services.set(v.key, {
|
|
11105
|
+
description: v.description,
|
|
11106
|
+
service: item,
|
|
11107
|
+
model: v.model
|
|
11108
|
+
});
|
|
11109
|
+
} else if ("embedModel" in v && v.embedModel) {
|
|
11110
|
+
this.services.set(v.key, {
|
|
11111
|
+
description: v.description,
|
|
11112
|
+
service: item,
|
|
11113
|
+
embedModel: v.embedModel
|
|
11114
|
+
});
|
|
11115
|
+
} else {
|
|
11116
|
+
throw new Error(
|
|
11117
|
+
`Key ${v.key} in model list for service ${index} \`${item.getName()}\` is missing a model or embedModel property.`
|
|
11118
|
+
);
|
|
11119
|
+
}
|
|
11056
11120
|
}
|
|
11057
|
-
this.services.set(key, {
|
|
11058
|
-
description,
|
|
11059
|
-
service: item,
|
|
11060
|
-
model
|
|
11061
|
-
});
|
|
11062
11121
|
}
|
|
11063
11122
|
}
|
|
11064
11123
|
}
|
|
@@ -11075,25 +11134,32 @@ var AxMultiServiceRouter = class {
|
|
|
11075
11134
|
if (!item) {
|
|
11076
11135
|
throw new Error(`No service found for model key: ${modelKey}`);
|
|
11077
11136
|
}
|
|
11078
|
-
|
|
11079
|
-
|
|
11080
|
-
|
|
11137
|
+
if (!item.model) {
|
|
11138
|
+
const { model, ...reqWithoutModel } = req;
|
|
11139
|
+
return await item.service.chat(reqWithoutModel, options);
|
|
11140
|
+
}
|
|
11141
|
+
return await item.service.chat({ model: modelKey, ...req }, options);
|
|
11081
11142
|
}
|
|
11082
11143
|
/**
|
|
11083
11144
|
* Delegates the embed call to the service matching the provided embed model key.
|
|
11084
11145
|
*/
|
|
11085
11146
|
async embed(req, options) {
|
|
11086
|
-
const
|
|
11087
|
-
if (!
|
|
11147
|
+
const embedModelKey = req.embedModel;
|
|
11148
|
+
if (!embedModelKey) {
|
|
11088
11149
|
throw new Error("Embed model key must be specified for multi-service");
|
|
11089
11150
|
}
|
|
11090
|
-
const item = this.services.get(
|
|
11151
|
+
const item = this.services.get(embedModelKey);
|
|
11091
11152
|
if (!item) {
|
|
11092
|
-
throw new Error(`No service found for embed model key: ${
|
|
11153
|
+
throw new Error(`No service found for embed model key: ${embedModelKey}`);
|
|
11093
11154
|
}
|
|
11094
|
-
|
|
11095
|
-
|
|
11096
|
-
|
|
11155
|
+
if (!item.model) {
|
|
11156
|
+
const { embedModel, ...reqWithoutEmbedModel } = req;
|
|
11157
|
+
return await item.service.embed(reqWithoutEmbedModel, options);
|
|
11158
|
+
}
|
|
11159
|
+
return await item.service.embed(
|
|
11160
|
+
{ embedModel: embedModelKey, ...req },
|
|
11161
|
+
options
|
|
11162
|
+
);
|
|
11097
11163
|
}
|
|
11098
11164
|
/**
|
|
11099
11165
|
* Returns a composite ID built from the IDs of the underlying services.
|
|
@@ -11111,16 +11177,15 @@ var AxMultiServiceRouter = class {
|
|
|
11111
11177
|
* Aggregates all available models across the underlying services.
|
|
11112
11178
|
*/
|
|
11113
11179
|
getModelList() {
|
|
11114
|
-
return Array.from(this.services).filter(([, value]) => !value.isInternal).map(([key,
|
|
11115
|
-
|
|
11116
|
-
|
|
11117
|
-
|
|
11118
|
-
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11122
|
-
|
|
11123
|
-
);
|
|
11180
|
+
return Array.from(this.services).filter(([, value]) => !value.isInternal).map(([key, v]) => {
|
|
11181
|
+
if (v.model) {
|
|
11182
|
+
return { key, description: v.description, model: v.model };
|
|
11183
|
+
} else if (v.embedModel) {
|
|
11184
|
+
return { key, description: v.description, embedModel: v.embedModel };
|
|
11185
|
+
} else {
|
|
11186
|
+
throw new Error(`Service ${key} has no model or embedModel`);
|
|
11187
|
+
}
|
|
11188
|
+
});
|
|
11124
11189
|
}
|
|
11125
11190
|
/**
|
|
11126
11191
|
* If a model key is provided, delegate to the corresponding service's features.
|
|
@@ -11154,17 +11219,14 @@ var AxMultiServiceRouter = class {
|
|
|
11154
11219
|
for (const service of this.services.values()) {
|
|
11155
11220
|
service.service.setOptions(options);
|
|
11156
11221
|
}
|
|
11222
|
+
this.options = options;
|
|
11157
11223
|
}
|
|
11158
11224
|
/**
|
|
11159
11225
|
* Returns the options from the last used service,
|
|
11160
11226
|
* or falls back to the first service if none has been used.
|
|
11161
11227
|
*/
|
|
11162
11228
|
getOptions() {
|
|
11163
|
-
|
|
11164
|
-
if (!service) {
|
|
11165
|
-
throw new Error("No service available to get options.");
|
|
11166
|
-
}
|
|
11167
|
-
return service.service.getOptions();
|
|
11229
|
+
return this.options ?? {};
|
|
11168
11230
|
}
|
|
11169
11231
|
};
|
|
11170
11232
|
|
|
@@ -11286,6 +11348,7 @@ export {
|
|
|
11286
11348
|
AxStringUtil,
|
|
11287
11349
|
AxTestPrompt,
|
|
11288
11350
|
axAIAnthropicDefaultConfig,
|
|
11351
|
+
axAIAnthropicVertexDefaultConfig,
|
|
11289
11352
|
axAIAzureOpenAIBestConfig,
|
|
11290
11353
|
axAIAzureOpenAICreativeConfig,
|
|
11291
11354
|
axAIAzureOpenAIDefaultConfig,
|