Skip to content

Commit fd44c92

Browse files
committed
add logger to ai provider
1 parent 2143219 commit fd44c92

File tree

1 file changed

+13
-17
lines changed

1 file changed

+13
-17
lines changed

packages/ai-providers/server-ai-langchain/src/LangChainProvider.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
22
import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages';
33
import { initChatModel } from 'langchain/chat_models/universal';
44

5+
import { LDLogger } from '@launchdarkly/js-server-sdk-common';
56
import {
67
AIProvider,
78
ChatResponse,
@@ -18,8 +19,8 @@ import {
1819
export class LangChainProvider extends AIProvider {
1920
private _llm: BaseChatModel;
2021

21-
constructor(llm: BaseChatModel) {
22-
super();
22+
constructor(llm: BaseChatModel, logger?: LDLogger) {
23+
super(logger);
2324
this._llm = llm;
2425
}
2526

@@ -30,9 +31,9 @@ export class LangChainProvider extends AIProvider {
3031
/**
3132
* Static factory method to create a LangChain AIProvider from an AI configuration.
3233
*/
33-
static async create(aiConfig: LDAIConfig): Promise<LangChainProvider> {
34+
static async create(aiConfig: LDAIConfig, logger?: LDLogger): Promise<LangChainProvider> {
3435
const llm = await LangChainProvider.createLangChainModel(aiConfig);
35-
return new LangChainProvider(llm);
36+
return new LangChainProvider(llm, logger);
3637
}
3738

3839
// =============================================================================
@@ -44,26 +45,21 @@ export class LangChainProvider extends AIProvider {
4445
*/
4546
async invokeModel(messages: LDMessage[]): Promise<ChatResponse> {
4647
// Convert LDMessage[] to LangChain messages
47-
const langchainMessages = LangChainProvider.convertMessagesToLangChain(messages);
48+
const langchainMessages = LangChainProvider.convertMessagesToLangChain(messages, this.logger);
4849

4950
// Get the LangChain response
5051
const response: AIMessage = await this._llm.invoke(langchainMessages);
5152

52-
// Handle different content types from LangChain
53-
let content: string;
53+
// Extract text content from the response
54+
let content: string = '';
5455
if (typeof response.content === 'string') {
5556
content = response.content;
56-
} else if (Array.isArray(response.content)) {
57-
// Handle complex content (e.g., with images)
58-
content = response.content
59-
.map((item: any) => {
60-
if (typeof item === 'string') return item;
61-
if (item.type === 'text') return item.text;
62-
return '';
63-
})
64-
.join('');
6557
} else {
66-
content = String(response.content);
58+
// Log warning for non-string content (likely multimodal)
59+
this.logger?.warn(
60+
`Multimodal response not supported, expecting a string. Content type: ${typeof response.content}, Content:`,
61+
JSON.stringify(response.content, null, 2),
62+
);
6763
}
6864

6965
// Create the assistant message

0 commit comments

Comments
 (0)