diff --git a/.changeset/record-model-response-id.md b/.changeset/record-model-response-id.md new file mode 100644 index 000000000..22df140f7 --- /dev/null +++ b/.changeset/record-model-response-id.md @@ -0,0 +1,7 @@ +--- +"@moonshot-ai/kimi-code": patch +"@moonshot-ai/kimi-code-sdk": patch +"@moonshot-ai/agent-core": patch +--- + +Record model response ids in session wire logs to make individual model requests easier to trace. diff --git a/packages/agent-core/src/agent/turn/kosong-llm.ts b/packages/agent-core/src/agent/turn/kosong-llm.ts index d5812cf03..2e0e4beea 100644 --- a/packages/agent-core/src/agent/turn/kosong-llm.ts +++ b/packages/agent-core/src/agent/turn/kosong-llm.ts @@ -151,6 +151,7 @@ export class KosongLLM implements LLM { toolCalls: [...result.message.toolCalls], providerFinishReason: result.finishReason ?? undefined, rawFinishReason: result.rawFinishReason ?? undefined, + messageId: result.id ?? undefined, usage: result.usage ?? emptyUsage(), streamTiming: firstChunkAt === undefined diff --git a/packages/agent-core/src/loop/events.ts b/packages/agent-core/src/loop/events.ts index 786afb574..62d4c65a9 100644 --- a/packages/agent-core/src/loop/events.ts +++ b/packages/agent-core/src/loop/events.ts @@ -41,6 +41,7 @@ export interface LoopStepEndEvent { */ readonly providerFinishReason?: FinishReason | undefined; readonly rawFinishReason?: string | undefined; + readonly messageId?: string | undefined; } export interface LoopStepRetryingEvent { diff --git a/packages/agent-core/src/loop/llm.ts b/packages/agent-core/src/loop/llm.ts index 065030623..9d58dce7c 100644 --- a/packages/agent-core/src/loop/llm.ts +++ b/packages/agent-core/src/loop/llm.ts @@ -82,6 +82,7 @@ export interface LLMChatResponse { toolCalls: ToolCall[]; providerFinishReason?: FinishReason; rawFinishReason?: string; + messageId?: string; usage: TokenUsage; streamTiming?: LLMStreamTiming; } diff --git a/packages/agent-core/src/loop/turn-step.ts b/packages/agent-core/src/loop/turn-step.ts index 8d72cad5d..1de563354 100644 --- a/packages/agent-core/src/loop/turn-step.ts +++ b/packages/agent-core/src/loop/turn-step.ts @@ -196,6 +196,7 @@ export async function executeLoopStep(deps: ExecuteLoopStepDeps): Promise<{ llmServerFirstTokenMs: response.streamTiming?.serverFirstTokenMs, llmServerDecodeMs: response.streamTiming?.serverDecodeMs, llmClientConsumeMs: response.streamTiming?.clientConsumeMs, + messageId: response.messageId, ...stepEndProviderDiagnostics(response, effectiveStopReason), }); diff --git a/packages/agent-core/test/agent/basic.test.ts b/packages/agent-core/test/agent/basic.test.ts index f034effd5..f7b73da4f 100644 --- a/packages/agent-core/test/agent/basic.test.ts +++ b/packages/agent-core/test/agent/basic.test.ts @@ -31,7 +31,7 @@ it('runs a text-only agent turn from prompt to completion', async () => { [emit] assistant.delta { "turnId": 0, "delta": "" } [wire] context.append_loop_event { "event": { "type": "content.part", "uuid": "", "turnId": "0", "step": 1, "stepUuid": "", "part": { "type": "think", "think": "" } }, "time": "