|
1 | 1 | import type { BaseLanguageModelInput } from '@langchain/core/language_models/base'
|
2 | 2 | import type { BaseChatModelCallOptions } from '@langchain/core/language_models/chat_models'
|
3 |
| -import type { AIMessageChunk, BaseMessageLike } from '@langchain/core/messages' |
| 3 | +import { AIMessageChunk, BaseMessageLike } from '@langchain/core/messages' |
4 | 4 | import type { Runnable } from '@langchain/core/runnables'
|
5 | 5 | import type { StructuredTool } from '@langchain/core/tools'
|
6 | 6 | import { concat } from '@langchain/core/utils/stream'
|
@@ -146,7 +146,7 @@ export const streamChat = async ({
|
146 | 146 | * @returns An object with statistics about the chat turn and any tool calls made.
|
147 | 147 | */
|
148 | 148 | const chatTurn = async (model: ChatModel, messages: BaseMessageLike[], toolsByName: Record<string, ChatTool>, writeEvent: WriteEventFunction, user: User) => {
|
149 |
| - const stream = await model.stream(messages) |
| 149 | + const stream = await safelyStreamMessages(model, messages) |
150 | 150 |
|
151 | 151 | const startTS = Date.now()
|
152 | 152 | let firstTokenTS = 0
|
@@ -244,3 +244,26 @@ const chatTurn = async (model: ChatModel, messages: BaseMessageLike[], toolsByNa
|
244 | 244 | fullOutput,
|
245 | 245 | }
|
246 | 246 | }
|
| 247 | + |
| 248 | +const safelyStreamMessages = async (model: ChatModel, messages: BaseMessageLike[]) => { |
| 249 | + try { |
| 250 | + return await model.stream(messages) |
| 251 | + } catch (error) { |
| 252 | + if (error instanceof Error) { |
| 253 | + // Handle API errors specifically. |
| 254 | + // Handle content filter: |
| 255 | + if ("code" in error && error.code === 'content_filter') { |
| 256 | + const innerError = "error" in error ? error.error as { message: string } : null |
| 257 | + |
| 258 | + const extraAzureInfo = innerError?.message ?? |
| 259 | + 'The response was not generated due to the prompt triggering content filters. No further details available.' |
| 260 | + |
| 261 | + return [new AIMessageChunk({ |
| 262 | + content: extraAzureInfo, |
| 263 | + })] |
| 264 | + } |
| 265 | + } |
| 266 | + |
| 267 | + throw error |
| 268 | + } |
| 269 | +} |
0 commit comments