@@ -47,6 +47,7 @@ import {
4747 type ProviderOptions ,
4848 type ReasoningPart ,
4949} from "@ai-sdk/provider-utils" ;
50+ import { type LanguageModelV2ToolResultOutput } from "@ai-sdk/provider" ;
5051import { parse , validate } from "convex-helpers/validators" ;
5152import {
5253 extractText ,
@@ -296,9 +297,8 @@ export async function serializeStepContent(
296297 } = { } ;
297298 if ( "providerOptions" in part ) {
298299 metadata . providerOptions = part . providerOptions as ProviderOptions ;
299- }
300- if ( "providerMetadata" in part ) {
301- metadata . providerMetadata = part . providerMetadata as ProviderMetadata ;
300+ } else if ( "providerMetadata" in part ) {
301+ metadata . providerMetadata = part . providerMetadata ;
302302 }
303303 switch ( part . type ) {
304304 case "text" : {
@@ -323,20 +323,27 @@ export async function serializeStepContent(
323323 ...metadata ,
324324 } satisfies Infer < typeof vToolCallPart > ;
325325 }
326- case "tool-result" :
326+ case "tool-result" : {
327+ const rawOutput = part . output ;
328+ const output : LanguageModelV2ToolResultOutput =
329+ typeof rawOutput === "string"
330+ ? { type : "text" , value : rawOutput }
331+ : { type : "json" , value : part . output ?? null } ;
332+
327333 return {
328334 ...pick ( part , [
329335 "type" ,
330336 "toolCallId" ,
331337 "toolName" ,
332- "output" ,
333338 "dynamic" ,
334339 "preliminary" ,
335340 "providerExecuted" ,
336341 ] ) ,
337342 args : part . input ,
343+ output,
338344 ...metadata ,
339345 } satisfies Infer < typeof vToolResultPart > ;
346+ }
340347 case "tool-error" :
341348 return {
342349 ...pick ( part , [
@@ -353,14 +360,14 @@ export async function serializeStepContent(
353360 type : "error-text" ,
354361 value : part . error . message ,
355362 }
356- : typeof part . error === "object "
363+ : typeof part . error === "string "
357364 ? {
358- type : "error-json " ,
365+ type : "error-text " ,
359366 value : part . error ,
360367 }
361368 : {
362- type : "error-text " ,
363- value : String ( part . error ) ,
369+ type : "error-json " ,
370+ value : part . error ?? null ,
364371 } ,
365372 ...metadata ,
366373 } satisfies Infer < typeof vToolResultPart > ;
@@ -820,22 +827,3 @@ export function toUIFilePart(
820827 providerMetadata : part . providerOptions ,
821828 } ;
822829}
823-
824- // Currently unused
825- // export function toModelMessages(args: {
826- // messages?: ModelMessage[] | AIMessageWithoutId[];
827- // }): ModelMessage[] {
828- // const messages: ModelMessage[] = [];
829- // if (args.messages) {
830- // if (
831- // args.messages.every(
832- // (m) => typeof m === "object" && m !== null && "parts" in m,
833- // )
834- // ) {
835- // messages.push(...convertToModelMessages(args.messages));
836- // } else {
837- // messages.push(...modelMessageSchema.array().parse(args.messages));
838- // }
839- // }
840- // return messages;
841- // }
0 commit comments