1010 * - tool_result blocks → separate { role: 'tool' } messages
1111 */
1212
13- import type { Message , AssistantMessage , UserMessage } from 'src/types/message.js'
13+ import type { AssistantMessage } from 'src/types/message.js'
1414
1515type LangfuseContentPart =
1616 | { type : 'text' ; text : string }
@@ -42,11 +42,6 @@ function isLangfuseRole(value: unknown): value is LangfuseChatMessage['role'] {
4242 }
4343}
4444
45- type LangfuseInputMessage =
46- | UserMessage
47- | AssistantMessage
48- | LangfuseChatMessage
49-
5045function isRecord ( value : unknown ) : value is Record < string , unknown > {
5146 return value !== null && typeof value === 'object' && ! Array . isArray ( value )
5247}
@@ -175,15 +170,15 @@ function collapseContent(parts: LangfuseContentPart[]): string | LangfuseContent
175170 return parts
176171}
177172
178- function toRole ( msg : Message ) : 'user' | 'assistant' | 'system' {
173+ function toRoleFromWrappedMessage ( msg : Record < string , unknown > ) : 'user' | 'assistant' | 'system' {
179174 if ( msg . type === 'assistant' ) return 'assistant'
180175 if ( msg . type === 'system' ) return 'system'
181176 return 'user'
182177}
183178
184179/** Convert internal or OpenAI-style messages → Langfuse input format */
185180export function convertMessagesToLangfuse (
186- messages : LangfuseInputMessage [ ] ,
181+ messages : readonly unknown [ ] ,
187182 systemPrompt ?: readonly string [ ] ,
188183) : LangfuseChatMessage [ ] {
189184 const result : LangfuseChatMessage [ ] = [ ]
@@ -193,11 +188,12 @@ export function convertMessagesToLangfuse(
193188 }
194189 }
195190 for ( const msg of messages ) {
196- const isWrappedMessage = 'message' in msg
197- const inner = isWrappedMessage ? msg . message : msg
198- if ( ! inner ) continue
191+ if ( ! isRecord ( msg ) ) continue
192+ const wrappedMessage = msg . message
193+ const isWrappedMessage = isRecord ( wrappedMessage )
194+ const inner = isWrappedMessage ? wrappedMessage : msg
199195 const role =
200- isLangfuseRole ( inner . role ) ? inner . role : isWrappedMessage ? toRole ( msg ) : 'user'
196+ isLangfuseRole ( inner . role ) ? inner . role : isWrappedMessage ? toRoleFromWrappedMessage ( msg ) : 'user'
201197 const rawContent = inner . content
202198 if ( typeof rawContent === 'string' || ! Array . isArray ( rawContent ) ) {
203199 const toolCalls = getToolCalls ( inner . tool_calls )
0 commit comments