77 HumanMessage ,
88 SystemMessage ,
99 ToolMessage ,
10- UsageMetadata
10+ UsageMetadata ,
11+ type MessageContentImageUrl ,
12+ type MessageContentText
1113} from '@langchain/core/messages'
1214import type { ToolCallChunk } from '@langchain/core/messages/tool'
1315import { isLangChainTool } from '@langchain/core/utils/function_calling'
@@ -22,8 +24,31 @@ import type {
2224 VSCodeUserMessageContent
2325} from './types'
2426
27+ export const convertVScodeMessageContentToLangchainMessageContent = (
28+ contents : ( VSCodeMessageContent | unknown ) [ ]
29+ ) => {
30+ const langchainContents : ( MessageContentText | MessageContentImageUrl ) [ ] = [ ]
31+
32+ contents . forEach ( c => {
33+ if ( c instanceof vscode . LanguageModelTextPart ) {
34+ langchainContents . push ( {
35+ type : 'text' ,
36+ text : c . value
37+ } )
38+ }
39+ if ( c instanceof vscode . LanguageModelToolResultPart ) {
40+ langchainContents . push (
41+ ...convertVScodeMessageContentToLangchainMessageContent ( c . content )
42+ )
43+ }
44+ } )
45+
46+ return langchainContents
47+ }
48+
2549export const convertVSCodeOutputChunkMessageToLangChain = (
2650 messages : vscode . LanguageModelChatMessage ,
51+ vscodeMessageContent : VSCodeMessageContent ,
2752 extra ?: {
2853 // eslint-disable-next-line @typescript-eslint/no-explicit-any
2954 responseMetadata ?: Record < string , any >
@@ -38,8 +63,11 @@ export const convertVSCodeOutputChunkMessageToLangChain = (
3863 }
3964 } )
4065
66+ const langchainContents =
67+ convertVScodeMessageContentToLangchainMessageContent ( [ vscodeMessageContent ] )
68+
4169 return new AIMessageChunk ( {
42- content : messages . content ?? '' ,
70+ content : langchainContents ,
4371 tool_call_chunks : toolCallParts
4472 . map ( tc => ( {
4573 name : tc . name ,
@@ -105,8 +133,14 @@ const convertHumanGenericMessagesToVSCodeMessage = (
105133 const vscodeMessageContents : VSCodeUserMessageContent [ ] = [ ]
106134
107135 message . content . forEach ( c => {
136+ if ( typeof c === 'string' ) {
137+ vscodeMessageContents . push ( new vscode . LanguageModelTextPart ( c ) )
138+ return
139+ }
140+
108141 if ( c . type === 'text' ) {
109142 vscodeMessageContents . push ( new vscode . LanguageModelTextPart ( c . text ) )
143+ return
110144 }
111145 if ( c . type === 'image_url' ) {
112146 if ( typeof c . image_url === 'string' ) {
@@ -117,6 +151,8 @@ const convertHumanGenericMessagesToVSCodeMessage = (
117151 // TODO: vscode current not support image
118152 // const imgUrl = c.image_url.url
119153 }
154+
155+ return
120156 }
121157 throw new Error ( `Unsupported content type: ${ c . type } ` )
122158 } )
0 commit comments