@jaypie/llm 1.3.7 → 1.3.9
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/cjs/{src/constants.d.ts → constants.d.ts} +4 -4
- package/dist/cjs/index.cjs +116 -29
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +28 -8
- package/dist/{esm/src → cjs}/operate/hooks/HookRunner.d.ts +3 -0
- package/dist/cjs/{src/operate → operate}/types.d.ts +2 -0
- package/dist/{esm/src → cjs}/tools/Toolkit.class.d.ts +13 -1
- package/dist/{esm/src → cjs}/types/LlmProvider.interface.d.ts +11 -3
- package/dist/cjs/{src/util → util}/index.d.ts +1 -0
- package/dist/cjs/util/tallyOperate.d.ts +14 -0
- package/dist/esm/{src/constants.d.ts → constants.d.ts} +4 -4
- package/dist/esm/index.d.ts +28 -8
- package/dist/esm/index.js +116 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/{cjs/src → esm}/operate/hooks/HookRunner.d.ts +3 -0
- package/dist/esm/{src/operate → operate}/types.d.ts +2 -0
- package/dist/{cjs/src → esm}/tools/Toolkit.class.d.ts +13 -1
- package/dist/{cjs/src → esm}/types/LlmProvider.interface.d.ts +11 -3
- package/dist/esm/{src/util → util}/index.d.ts +1 -0
- package/dist/esm/util/tallyOperate.d.ts +14 -0
- package/package.json +1 -1
- package/dist/esm/src/index.d.ts +0 -17
- /package/dist/cjs/{src/Llm.d.ts → Llm.d.ts} +0 -0
- /package/dist/cjs/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/cjs/{src/observability → observability}/llmobs.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/OperateLoop.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/StreamLoop.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/AnthropicAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/BedrockAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/GoogleAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/OpenAiAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/OpenRouterAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/XaiAdapter.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/adapters/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/hooks/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/input/InputProcessor.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/input/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/progress/emitProgress.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/progress/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/response/ResponseBuilder.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/response/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/retry/RetryExecutor.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/retry/RetryPolicy.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/retry/createStaleRejectionGuard.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/retry/index.d.ts +0 -0
- /package/dist/cjs/{src/operate → operate}/retry/isTransientNetworkError.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/anthropic/client.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/anthropic/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/anthropic/types.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/anthropic/utils.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/bedrock/BedrockProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/bedrock/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/bedrock/utils.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/google/GoogleProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/google/client.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/google/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/google/types.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/google/utils.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/OpenAiProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/client.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/responseFormat.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/types.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openai/utils.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openrouter/client.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openrouter/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/openrouter/utils.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/xai/XaiProvider.class.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/xai/index.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/xai/utils.d.ts +0 -0
- /package/dist/cjs/{src/tools → tools}/index.d.ts +0 -0
- /package/dist/cjs/{src/tools → tools}/random.d.ts +0 -0
- /package/dist/cjs/{src/tools → tools}/roll.d.ts +0 -0
- /package/dist/cjs/{src/tools → tools}/time.d.ts +0 -0
- /package/dist/cjs/{src/tools → tools}/weather.d.ts +0 -0
- /package/dist/cjs/{src/types → types}/LlmOperateInput.guards.d.ts +0 -0
- /package/dist/cjs/{src/types → types}/LlmStreamChunk.interface.d.ts +0 -0
- /package/dist/cjs/{src/types → types}/LlmTool.interface.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/detectMimeType.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/extractPdfPages.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/index.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/loadLocalFile.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/loadS3File.d.ts +0 -0
- /package/dist/cjs/{src/upload → upload}/resolveOperateInput.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/determineModelProvider.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/extractReasoning.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/fillFormatArrays.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/formatOperateInput.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/formatOperateMessage.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/jsonSchema.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/jsonSchemaToOpenApi3.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/logger.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/maxOutputTokens.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/maxTurnsFromOptions.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/naturalZodSchema.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/random.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/repairFormatKeys.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/sse.d.ts +0 -0
- /package/dist/cjs/{src/util → util}/tryParseNumber.d.ts +0 -0
- /package/dist/esm/{src/Llm.d.ts → Llm.d.ts} +0 -0
- /package/dist/esm/{src/observability → observability}/llmobs.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/OperateLoop.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/StreamLoop.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/AnthropicAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/BedrockAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/GoogleAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/OpenAiAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/OpenRouterAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/XaiAdapter.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/adapters/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/hooks/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/input/InputProcessor.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/input/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/progress/emitProgress.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/progress/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/response/ResponseBuilder.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/response/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/retry/RetryExecutor.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/retry/RetryPolicy.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/retry/createStaleRejectionGuard.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/retry/index.d.ts +0 -0
- /package/dist/esm/{src/operate → operate}/retry/isTransientNetworkError.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/anthropic/client.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/anthropic/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/anthropic/types.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/anthropic/utils.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/bedrock/BedrockProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/bedrock/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/bedrock/utils.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/google/GoogleProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/google/client.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/google/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/google/types.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/google/utils.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/OpenAiProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/client.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/responseFormat.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/types.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openai/utils.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openrouter/client.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openrouter/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/openrouter/utils.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/xai/XaiProvider.class.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/xai/index.d.ts +0 -0
- /package/dist/esm/{src/providers → providers}/xai/utils.d.ts +0 -0
- /package/dist/esm/{src/tools → tools}/index.d.ts +0 -0
- /package/dist/esm/{src/tools → tools}/random.d.ts +0 -0
- /package/dist/esm/{src/tools → tools}/roll.d.ts +0 -0
- /package/dist/esm/{src/tools → tools}/time.d.ts +0 -0
- /package/dist/esm/{src/tools → tools}/weather.d.ts +0 -0
- /package/dist/esm/{src/types → types}/LlmOperateInput.guards.d.ts +0 -0
- /package/dist/esm/{src/types → types}/LlmStreamChunk.interface.d.ts +0 -0
- /package/dist/esm/{src/types → types}/LlmTool.interface.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/detectMimeType.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/extractPdfPages.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/index.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/loadLocalFile.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/loadS3File.d.ts +0 -0
- /package/dist/esm/{src/upload → upload}/resolveOperateInput.d.ts +0 -0
- /package/dist/esm/{src/util → util}/determineModelProvider.d.ts +0 -0
- /package/dist/esm/{src/util → util}/extractReasoning.d.ts +0 -0
- /package/dist/esm/{src/util → util}/fillFormatArrays.d.ts +0 -0
- /package/dist/esm/{src/util → util}/formatOperateInput.d.ts +0 -0
- /package/dist/esm/{src/util → util}/formatOperateMessage.d.ts +0 -0
- /package/dist/esm/{src/util → util}/jsonSchema.d.ts +0 -0
- /package/dist/esm/{src/util → util}/jsonSchemaToOpenApi3.d.ts +0 -0
- /package/dist/esm/{src/util → util}/logger.d.ts +0 -0
- /package/dist/esm/{src/util → util}/maxOutputTokens.d.ts +0 -0
- /package/dist/esm/{src/util → util}/maxTurnsFromOptions.d.ts +0 -0
- /package/dist/esm/{src/util → util}/naturalZodSchema.d.ts +0 -0
- /package/dist/esm/{src/util → util}/random.d.ts +0 -0
- /package/dist/esm/{src/util → util}/repairFormatKeys.d.ts +0 -0
- /package/dist/esm/{src/util → util}/sse.d.ts +0 -0
- /package/dist/esm/{src/util → util}/tryParseNumber.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare const MODEL: {
|
|
2
|
+
FABLE: string;
|
|
2
3
|
OPUS: string;
|
|
3
4
|
SONNET: string;
|
|
4
5
|
HAIKU: string;
|
|
5
|
-
FABLE: string;
|
|
6
6
|
MYTHOS: string;
|
|
7
7
|
GEMINI_FLASH: string;
|
|
8
8
|
GEMINI_FLASH_LITE: string;
|
|
@@ -109,7 +109,7 @@ export declare const PROVIDER: {
|
|
|
109
109
|
readonly BASE_URL: "https://api.x.ai/v1";
|
|
110
110
|
readonly MODEL: {
|
|
111
111
|
readonly DEFAULT: "grok-latest";
|
|
112
|
-
readonly LARGE: "grok-
|
|
112
|
+
readonly LARGE: "grok-latest";
|
|
113
113
|
readonly SMALL: "grok-4-1-fast-reasoning";
|
|
114
114
|
readonly TINY: "grok-4-1-fast-non-reasoning";
|
|
115
115
|
};
|
|
@@ -138,8 +138,8 @@ export declare const DEFAULT: {
|
|
|
138
138
|
};
|
|
139
139
|
export declare const ALL: {
|
|
140
140
|
readonly BASE: readonly ["claude-sonnet-4-6", "gemini-3.1-pro-preview", "gpt-5.4", "grok-latest"];
|
|
141
|
-
readonly COMBINED: readonly ("claude-sonnet-4-6" | "claude-opus-4-8" | "claude-haiku-4-5" | "gemini-3.1-pro-preview" | "gemini-3.5-flash" | "gemini-3.1-flash-lite" | "gpt-5.4" | "gpt-5.5" | "gpt-5.4-mini" | "gpt-5.4-nano" | "grok-latest" | "grok-4
|
|
142
|
-
readonly LARGE: readonly ["claude-opus-4-8", "gemini-3.1-pro-preview", "gpt-5.5", "grok-
|
|
141
|
+
readonly COMBINED: readonly ("claude-sonnet-4-6" | "claude-opus-4-8" | "claude-haiku-4-5" | "gemini-3.1-pro-preview" | "gemini-3.5-flash" | "gemini-3.1-flash-lite" | "gpt-5.4" | "gpt-5.5" | "gpt-5.4-mini" | "gpt-5.4-nano" | "grok-latest" | "grok-4-1-fast-reasoning" | "grok-4-1-fast-non-reasoning")[];
|
|
142
|
+
readonly LARGE: readonly ["claude-opus-4-8", "gemini-3.1-pro-preview", "gpt-5.5", "grok-latest"];
|
|
143
143
|
readonly SMALL: readonly ["claude-sonnet-4-6", "gemini-3.5-flash", "gpt-5.4-mini", "grok-4-1-fast-reasoning"];
|
|
144
144
|
readonly TINY: readonly ["claude-haiku-4-5", "gemini-3.1-flash-lite", "gpt-5.4-nano", "grok-4-1-fast-non-reasoning"];
|
|
145
145
|
};
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -39,17 +39,17 @@ const FIRST_CLASS_PROVIDER = {
|
|
|
39
39
|
// https://docs.x.ai/developers/models
|
|
40
40
|
XAI: {
|
|
41
41
|
DEFAULT: "grok-latest",
|
|
42
|
-
LARGE: "grok-
|
|
42
|
+
LARGE: "grok-latest",
|
|
43
43
|
SMALL: "grok-4-1-fast-reasoning",
|
|
44
44
|
TINY: "grok-4-1-fast-non-reasoning",
|
|
45
45
|
},
|
|
46
46
|
};
|
|
47
47
|
const MODEL = {
|
|
48
48
|
// Anthropic
|
|
49
|
+
FABLE: "claude-fable-5",
|
|
49
50
|
OPUS: "claude-opus-4-8",
|
|
50
|
-
SONNET: "claude-sonnet-
|
|
51
|
+
SONNET: "claude-sonnet-5",
|
|
51
52
|
HAIKU: "claude-haiku-4-5",
|
|
52
|
-
FABLE: "claude-fable-5",
|
|
53
53
|
MYTHOS: "claude-mythos-5",
|
|
54
54
|
// Google
|
|
55
55
|
GEMINI_FLASH: "gemini-3.5-flash",
|
|
@@ -1297,6 +1297,43 @@ async function* parseSseStream(body, { doneSentinel = DEFAULT_DONE_SENTINEL } =
|
|
|
1297
1297
|
}
|
|
1298
1298
|
}
|
|
1299
1299
|
|
|
1300
|
+
const UNKNOWN = "unknown";
|
|
1301
|
+
/**
|
|
1302
|
+
* Tally loop totals onto the root logger's report session so handlers
|
|
1303
|
+
* (express, lambda) include llm activity in the report emitted at teardown.
|
|
1304
|
+
* Silently no-ops outside an active session or when the logger predates
|
|
1305
|
+
* tally support.
|
|
1306
|
+
*/
|
|
1307
|
+
function tallyOperate({ toolCallNames = [], turns, usage = [], }) {
|
|
1308
|
+
if (typeof log$1.log.tally !== "function")
|
|
1309
|
+
return;
|
|
1310
|
+
const llm = {
|
|
1311
|
+
operates: 1,
|
|
1312
|
+
toolCalls: toolCallNames.length,
|
|
1313
|
+
turns,
|
|
1314
|
+
};
|
|
1315
|
+
if (toolCallNames.length > 0) {
|
|
1316
|
+
const tools = {};
|
|
1317
|
+
for (const name of toolCallNames) {
|
|
1318
|
+
tools[name] = (tools[name] ?? 0) + 1;
|
|
1319
|
+
}
|
|
1320
|
+
llm.tools = tools;
|
|
1321
|
+
}
|
|
1322
|
+
if (usage.length > 0) {
|
|
1323
|
+
const usageByModel = {};
|
|
1324
|
+
for (const item of usage) {
|
|
1325
|
+
const key = [item.provider, item.model].filter(Boolean).join(":") || UNKNOWN;
|
|
1326
|
+
usageByModel[key] ?? (usageByModel[key] = { input: 0, output: 0, reasoning: 0, total: 0 });
|
|
1327
|
+
usageByModel[key].input += item.input;
|
|
1328
|
+
usageByModel[key].output += item.output;
|
|
1329
|
+
usageByModel[key].reasoning += item.reasoning;
|
|
1330
|
+
usageByModel[key].total += item.total;
|
|
1331
|
+
}
|
|
1332
|
+
llm.usage = usageByModel;
|
|
1333
|
+
}
|
|
1334
|
+
log$1.log.tally({ llm });
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1300
1337
|
/**
|
|
1301
1338
|
* Helper function to safely call a function that might throw
|
|
1302
1339
|
* @param fn Function to call safely
|
|
@@ -5420,11 +5457,7 @@ class Toolkit {
|
|
|
5420
5457
|
return toolCopy;
|
|
5421
5458
|
});
|
|
5422
5459
|
}
|
|
5423
|
-
|
|
5424
|
-
const tool = this._tools.find((t) => t.name === name);
|
|
5425
|
-
if (!tool) {
|
|
5426
|
-
throw new Error(`Tool '${name}' not found`);
|
|
5427
|
-
}
|
|
5460
|
+
parseArgs(args) {
|
|
5428
5461
|
let parsedArgs;
|
|
5429
5462
|
try {
|
|
5430
5463
|
parsedArgs = JSON.parse(args);
|
|
@@ -5435,35 +5468,53 @@ class Toolkit {
|
|
|
5435
5468
|
catch {
|
|
5436
5469
|
parsedArgs = args;
|
|
5437
5470
|
}
|
|
5471
|
+
return parsedArgs;
|
|
5472
|
+
}
|
|
5473
|
+
/**
|
|
5474
|
+
* Resolve a tool's `message` (static string or function of args) without
|
|
5475
|
+
* calling the tool. Returns undefined when the tool is missing or defines
|
|
5476
|
+
* no message. Never throws; resolution errors log at warn.
|
|
5477
|
+
*/
|
|
5478
|
+
async resolveMessage({ name, arguments: args, }) {
|
|
5479
|
+
const tool = this._tools.find((t) => t.name === name);
|
|
5480
|
+
if (!tool || !tool.message) {
|
|
5481
|
+
return undefined;
|
|
5482
|
+
}
|
|
5483
|
+
try {
|
|
5484
|
+
if (typeof tool.message === "string") {
|
|
5485
|
+
return tool.message;
|
|
5486
|
+
}
|
|
5487
|
+
const parsedArgs = this.parseArgs(args);
|
|
5488
|
+
if (typeof tool.message === "function") {
|
|
5489
|
+
return await kit.resolveValue(tool.message(parsedArgs, { name }));
|
|
5490
|
+
}
|
|
5491
|
+
log.warn("[Toolkit] Tool provided unknown message type");
|
|
5492
|
+
return String(tool.message);
|
|
5493
|
+
}
|
|
5494
|
+
catch (error) {
|
|
5495
|
+
log.warn("[Toolkit] Caught error resolving tool message");
|
|
5496
|
+
log.var({ error });
|
|
5497
|
+
return undefined;
|
|
5498
|
+
}
|
|
5499
|
+
}
|
|
5500
|
+
async call({ name, arguments: args, message: resolvedMessage, }) {
|
|
5501
|
+
const tool = this._tools.find((t) => t.name === name);
|
|
5502
|
+
if (!tool) {
|
|
5503
|
+
throw new Error(`Tool '${name}' not found`);
|
|
5504
|
+
}
|
|
5505
|
+
const parsedArgs = this.parseArgs(args);
|
|
5438
5506
|
if (this.log !== false) {
|
|
5439
5507
|
try {
|
|
5440
5508
|
const context = {
|
|
5441
5509
|
name,
|
|
5442
5510
|
args: parsedArgs,
|
|
5443
5511
|
};
|
|
5444
|
-
let message;
|
|
5445
5512
|
if (this.explain) {
|
|
5446
5513
|
context.explanation = parsedArgs.__Explanation;
|
|
5447
5514
|
}
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
message = tool.message;
|
|
5452
|
-
}
|
|
5453
|
-
else if (typeof tool.message === "function") {
|
|
5454
|
-
log.trace("[Toolkit] Tool provided function message");
|
|
5455
|
-
log.trace("[Toolkit] Resolving message result");
|
|
5456
|
-
message = await kit.resolveValue(tool.message(parsedArgs, { name }));
|
|
5457
|
-
}
|
|
5458
|
-
else {
|
|
5459
|
-
log.warn("[Toolkit] Tool provided unknown message type");
|
|
5460
|
-
message = String(tool.message);
|
|
5461
|
-
}
|
|
5462
|
-
}
|
|
5463
|
-
else {
|
|
5464
|
-
log.trace("[Toolkit] Log tool call with default message");
|
|
5465
|
-
message = `${tool.name}:${JSON.stringify(parsedArgs)}`;
|
|
5466
|
-
}
|
|
5515
|
+
const message = resolvedMessage ??
|
|
5516
|
+
(await this.resolveMessage({ arguments: args, name })) ??
|
|
5517
|
+
`${tool.name}:${JSON.stringify(parsedArgs)}`;
|
|
5467
5518
|
if (typeof this.log === "function") {
|
|
5468
5519
|
log.trace("[Toolkit] Log tool call with custom logger");
|
|
5469
5520
|
await kit.resolveValue(this.log(message, context));
|
|
@@ -6641,6 +6692,11 @@ class OperateLoop {
|
|
|
6641
6692
|
metrics: usageToLlmObsMetrics(response.usage),
|
|
6642
6693
|
outputData: response.content,
|
|
6643
6694
|
});
|
|
6695
|
+
tallyOperate({
|
|
6696
|
+
toolCallNames: state.toolCallNames,
|
|
6697
|
+
turns: state.currentTurn,
|
|
6698
|
+
usage: response.usage,
|
|
6699
|
+
});
|
|
6644
6700
|
await emitProgress({
|
|
6645
6701
|
event: {
|
|
6646
6702
|
content: response.content,
|
|
@@ -6710,6 +6766,7 @@ class OperateLoop {
|
|
|
6710
6766
|
formattedTools,
|
|
6711
6767
|
maxTurns,
|
|
6712
6768
|
responseBuilder,
|
|
6769
|
+
toolCallNames: [],
|
|
6713
6770
|
toolkit,
|
|
6714
6771
|
};
|
|
6715
6772
|
}
|
|
@@ -6878,10 +6935,20 @@ class OperateLoop {
|
|
|
6878
6935
|
this.appendResponseItemsToRequest(currentProviderRequest, responseItems);
|
|
6879
6936
|
// Process each tool call
|
|
6880
6937
|
for (const toolCall of toolCalls) {
|
|
6938
|
+
state.toolCallNames.push(toolCall.name);
|
|
6939
|
+
// Resolved once per call; never throws (undefined when tool has no message)
|
|
6940
|
+
const toolMessage = await state.toolkit.resolveMessage({
|
|
6941
|
+
arguments: toolCall.arguments,
|
|
6942
|
+
name: toolCall.name,
|
|
6943
|
+
});
|
|
6881
6944
|
try {
|
|
6882
6945
|
await emitProgress({
|
|
6883
6946
|
event: {
|
|
6884
|
-
tool: {
|
|
6947
|
+
tool: {
|
|
6948
|
+
arguments: toolCall.arguments,
|
|
6949
|
+
message: toolMessage,
|
|
6950
|
+
name: toolCall.name,
|
|
6951
|
+
},
|
|
6885
6952
|
turn: state.currentTurn,
|
|
6886
6953
|
type: exports.LlmProgressEventType.ToolCall,
|
|
6887
6954
|
},
|
|
@@ -6890,6 +6957,7 @@ class OperateLoop {
|
|
|
6890
6957
|
// Execute beforeEachTool hook
|
|
6891
6958
|
await this.hookRunnerInstance.runBeforeTool(context.hooks, {
|
|
6892
6959
|
args: toolCall.arguments,
|
|
6960
|
+
message: toolMessage,
|
|
6893
6961
|
toolName: toolCall.name,
|
|
6894
6962
|
});
|
|
6895
6963
|
// Call the tool inside a child tool span (no-op when disabled)
|
|
@@ -6897,6 +6965,7 @@ class OperateLoop {
|
|
|
6897
6965
|
const result = await withLlmObsSpan({ kind: "tool", name: toolCall.name }, async () => {
|
|
6898
6966
|
const result = await state.toolkit.call({
|
|
6899
6967
|
arguments: toolCall.arguments,
|
|
6968
|
+
message: toolMessage,
|
|
6900
6969
|
name: toolCall.name,
|
|
6901
6970
|
});
|
|
6902
6971
|
annotateLlmObs({
|
|
@@ -6917,6 +6986,7 @@ class OperateLoop {
|
|
|
6917
6986
|
// Execute afterEachTool hook
|
|
6918
6987
|
await this.hookRunnerInstance.runAfterTool(context.hooks, {
|
|
6919
6988
|
args: toolCall.arguments,
|
|
6989
|
+
message: toolMessage,
|
|
6920
6990
|
result,
|
|
6921
6991
|
toolName: toolCall.name,
|
|
6922
6992
|
});
|
|
@@ -6950,6 +7020,7 @@ class OperateLoop {
|
|
|
6950
7020
|
await this.hookRunnerInstance.runOnToolError(context.hooks, {
|
|
6951
7021
|
args: toolCall.arguments,
|
|
6952
7022
|
error: error,
|
|
7023
|
+
message: toolMessage,
|
|
6953
7024
|
toolName: toolCall.name,
|
|
6954
7025
|
});
|
|
6955
7026
|
// Set error on response
|
|
@@ -7238,6 +7309,11 @@ class StreamLoop {
|
|
|
7238
7309
|
}
|
|
7239
7310
|
}
|
|
7240
7311
|
// Emit final done chunk with accumulated usage
|
|
7312
|
+
tallyOperate({
|
|
7313
|
+
toolCallNames: state.toolCallNames,
|
|
7314
|
+
turns: state.currentTurn,
|
|
7315
|
+
usage: state.usageItems,
|
|
7316
|
+
});
|
|
7241
7317
|
yield {
|
|
7242
7318
|
type: exports.LlmStreamChunkType.Done,
|
|
7243
7319
|
usage: state.usageItems,
|
|
@@ -7278,6 +7354,7 @@ class StreamLoop {
|
|
|
7278
7354
|
formattedFormat,
|
|
7279
7355
|
formattedTools,
|
|
7280
7356
|
maxTurns,
|
|
7357
|
+
toolCallNames: [],
|
|
7281
7358
|
toolkit,
|
|
7282
7359
|
usageItems: [],
|
|
7283
7360
|
};
|
|
@@ -7460,10 +7537,17 @@ class StreamLoop {
|
|
|
7460
7537
|
async *processToolCalls(toolCalls, state, context) {
|
|
7461
7538
|
const log = getLogger$6();
|
|
7462
7539
|
for (const toolCall of toolCalls) {
|
|
7540
|
+
state.toolCallNames.push(toolCall.name);
|
|
7541
|
+
// Resolved once per call; never throws (undefined when tool has no message)
|
|
7542
|
+
const toolMessage = await state.toolkit.resolveMessage({
|
|
7543
|
+
arguments: toolCall.arguments,
|
|
7544
|
+
name: toolCall.name,
|
|
7545
|
+
});
|
|
7463
7546
|
try {
|
|
7464
7547
|
// Execute beforeEachTool hook
|
|
7465
7548
|
await this.hookRunnerInstance.runBeforeTool(context.hooks, {
|
|
7466
7549
|
args: toolCall.arguments,
|
|
7550
|
+
message: toolMessage,
|
|
7467
7551
|
toolName: toolCall.name,
|
|
7468
7552
|
});
|
|
7469
7553
|
// Call the tool inside a child tool span (no-op when disabled)
|
|
@@ -7471,6 +7555,7 @@ class StreamLoop {
|
|
|
7471
7555
|
const result = await withLlmObsSpan({ kind: "tool", name: toolCall.name }, async () => {
|
|
7472
7556
|
const result = await state.toolkit.call({
|
|
7473
7557
|
arguments: toolCall.arguments,
|
|
7558
|
+
message: toolMessage,
|
|
7474
7559
|
name: toolCall.name,
|
|
7475
7560
|
});
|
|
7476
7561
|
annotateLlmObs({
|
|
@@ -7483,6 +7568,7 @@ class StreamLoop {
|
|
|
7483
7568
|
// Execute afterEachTool hook
|
|
7484
7569
|
await this.hookRunnerInstance.runAfterTool(context.hooks, {
|
|
7485
7570
|
args: toolCall.arguments,
|
|
7571
|
+
message: toolMessage,
|
|
7486
7572
|
result,
|
|
7487
7573
|
toolName: toolCall.name,
|
|
7488
7574
|
});
|
|
@@ -7510,6 +7596,7 @@ class StreamLoop {
|
|
|
7510
7596
|
await this.hookRunnerInstance.runOnToolError(context.hooks, {
|
|
7511
7597
|
args: toolCall.arguments,
|
|
7512
7598
|
error: error,
|
|
7599
|
+
message: toolMessage,
|
|
7513
7600
|
toolName: toolCall.name,
|
|
7514
7601
|
});
|
|
7515
7602
|
// Yield error chunk
|