@librechat/agents 2.4.75 → 2.4.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/llm/ollama/index.cjs +67 -0
- package/dist/cjs/llm/ollama/index.cjs.map +1 -0
- package/dist/cjs/llm/ollama/utils.cjs +158 -0
- package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +3 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +1 -3
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +2 -2
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +8 -6
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +2 -1
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/esm/llm/ollama/index.mjs +65 -0
- package/dist/esm/llm/ollama/index.mjs.map +1 -0
- package/dist/esm/llm/ollama/utils.mjs +155 -0
- package/dist/esm/llm/ollama/utils.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +3 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +1 -3
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +1 -1
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +8 -6
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +2 -1
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/types/llm/ollama/index.d.ts +7 -0
- package/dist/types/llm/ollama/utils.d.ts +7 -0
- package/dist/types/tools/search/rerankers.d.ts +4 -1
- package/dist/types/tools/search/types.d.ts +1 -0
- package/package.json +2 -2
- package/src/llm/ollama/index.ts +89 -0
- package/src/llm/ollama/utils.ts +193 -0
- package/src/llm/openai/index.ts +2 -0
- package/src/llm/openai/utils/index.ts +1 -5
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
- package/src/llm/providers.ts +1 -1
- package/src/scripts/simple.ts +10 -4
- package/src/tools/search/jina-reranker.test.ts +126 -0
- package/src/tools/search/rerankers.ts +11 -5
- package/src/tools/search/tool.ts +2 -0
- package/src/tools/search/types.ts +1 -0
- package/src/utils/llmConfig.ts +11 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../src/llm/openai/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { type OpenAI as OpenAIClient } from 'openai';\nimport type {\n ChatCompletionContentPartText,\n ChatCompletionContentPartImage,\n ChatCompletionContentPartInputAudio,\n ChatCompletionContentPart,\n} from 'openai/resources/chat/completions';\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ToolMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n type InvalidToolCall,\n type MessageContentImageUrl,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n parseMimeType,\n convertToProviderContentBlock,\n isDataContentBlock,\n} from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n convertLangChainToolCallToOpenAI,\n makeInvalidToolCall,\n parseToolCall,\n} from '@langchain/core/output_parsers/openai_tools';\nimport type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\nimport type {\n OpenAICallOptions,\n OpenAIChatInput,\n ChatOpenAIReasoningSummary,\n} from '@langchain/openai';\n\nexport type { OpenAICallOptions, OpenAIChatInput };\n\n// Utility types to get hidden OpenAI response types\ntype ExtractAsyncIterableType<T> = T extends AsyncIterable<infer U> ? U : never;\ntype ExcludeController<T> = T extends { controller: unknown } ? never : T;\ntype ExcludeNonController<T> = T extends { controller: unknown } ? T : never;\n\ntype ResponsesCreate = OpenAIClient.Responses['create'];\ntype ResponsesParse = OpenAIClient.Responses['parse'];\n\ntype ResponsesInputItem = OpenAIClient.Responses.ResponseInputItem;\n\ntype ResponsesCreateInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\ntype ResponsesParseInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesParse>>\n>;\n\ntype ResponsesCreateStream = ExcludeNonController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\nexport type ResponseReturnStreamEvents =\n ExtractAsyncIterableType<ResponsesCreateStream>;\n\n// TODO import from SDK when available\ntype OpenAIRoleEnum =\n | 'system'\n | 'developer'\n | 'assistant'\n | 'user'\n | 'function'\n | 'tool';\n\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n\nfunction extractGenericMessageCustomRole(message: ChatMessage) {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'assistant' &&\n message.role !== 'user' &&\n message.role !== 'function' &&\n message.role !== 'tool'\n ) {\n console.warn(`Unknown message role: ${message.role}`);\n }\n\n return message.role as OpenAIRoleEnum;\n}\n\nexport function messageToOpenAIRole(message: BaseMessage): OpenAIRoleEnum {\n const type = message._getType();\n switch (type) {\n case 'system':\n return 'system';\n case 'ai':\n return 'assistant';\n case 'human':\n return 'user';\n case 'function':\n return 'function';\n case 'tool':\n return 'tool';\n case 'generic': {\n if (!ChatMessage.isInstance(message))\n throw new Error('Invalid generic chat message');\n return extractGenericMessageCustomRole(message);\n }\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n}\n\nconst completionsApiContentBlockConverter: StandardContentBlockConverter<{\n text: ChatCompletionContentPartText;\n image: ChatCompletionContentPartImage;\n audio: ChatCompletionContentPartInputAudio;\n file: ChatCompletionContentPart.File;\n}> = {\n providerName: 'ChatOpenAI',\n\n fromStandardTextBlock(block): ChatCompletionContentPartText {\n return { type: 'text', text: block.text };\n },\n\n fromStandardImageBlock(block): ChatCompletionContentPartImage {\n if (block.source_type === 'url') {\n return {\n type: 'image_url',\n image_url: {\n url: block.url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n const url = `data:${block.mime_type ?? ''};base64,${block.data}`;\n return {\n type: 'image_url',\n image_url: {\n url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n throw new Error(\n `Image content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardAudioBlock(block): ChatCompletionContentPartInputAudio {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL audio blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n const rawMimeType = data.mime_type || block.mime_type || '';\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(rawMimeType);\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: data.data,\n },\n };\n }\n\n if (block.source_type === 'base64') {\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(block.mime_type ?? '');\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: block.data,\n },\n };\n }\n\n throw new Error(\n `Audio content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardFileBlock(block): ChatCompletionContentPart.File {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL file blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n return {\n type: 'file',\n file: {\n file_data: block.url, // formatted as base64 data URL\n ...(block.metadata?.filename || block.metadata?.name\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n return {\n type: 'file',\n file: {\n file_data: `data:${block.mime_type ?? ''};base64,${block.data}`,\n ...(block.metadata?.filename ||\n block.metadata?.name ||\n block.metadata?.title\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name ||\n block.metadata.title) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'id') {\n return {\n type: 'file',\n file: {\n file_id: block.id,\n },\n };\n }\n\n throw new Error(\n `File content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n};\n\n// Used in LangSmith, export is important here\nexport function _convertMessagesToOpenAIParams(\n messages: BaseMessage[],\n model?: string\n): OpenAICompletionParam[] {\n // TODO: Function messages do not support array content, fix cast\n return messages.flatMap((message) => {\n let role = messageToOpenAIRole(message);\n if (role === 'system' && isReasoningModel(model)) {\n role = 'developer';\n }\n\n const content =\n typeof message.content === 'string'\n ? message.content\n : message.content.map((m) => {\n if (isDataContentBlock(m)) {\n return convertToProviderContentBlock(\n m,\n completionsApiContentBlockConverter\n );\n }\n return m;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const completionParam: Record<string, any> = {\n role,\n content,\n };\n if (message.name != null) {\n completionParam.name = message.name;\n }\n if (message.additional_kwargs.function_call != null) {\n completionParam.function_call = message.additional_kwargs.function_call;\n completionParam.content = '';\n }\n if (isAIMessage(message) && !!message.tool_calls?.length) {\n completionParam.tool_calls = message.tool_calls.map(\n convertLangChainToolCallToOpenAI\n );\n completionParam.content = '';\n } else {\n if (message.additional_kwargs.tool_calls != null) {\n completionParam.tool_calls = message.additional_kwargs.tool_calls;\n }\n if ((message as ToolMessage).tool_call_id != null) {\n completionParam.tool_call_id = (message as ToolMessage).tool_call_id;\n }\n }\n\n if (\n message.additional_kwargs.audio &&\n typeof message.additional_kwargs.audio === 'object' &&\n 'id' in message.additional_kwargs.audio\n ) {\n const audioMessage = {\n role: 'assistant',\n audio: {\n id: message.additional_kwargs.audio.id,\n },\n };\n return [completionParam, audioMessage] as OpenAICompletionParam[];\n }\n\n return completionParam as OpenAICompletionParam;\n });\n}\n\nconst _FUNCTION_CALL_IDS_MAP_KEY = '__openai_function_call_ids__';\n\nfunction _convertReasoningSummaryToOpenAIResponsesParams(\n reasoning: ChatOpenAIReasoningSummary\n): OpenAIClient.Responses.ResponseReasoningItem {\n // combine summary parts that have the the same index and then remove the indexes\n const summary = (\n reasoning.summary.length > 1\n ? reasoning.summary.reduce(\n (acc, curr) => {\n const last = acc.at(-1);\n\n if (last!.index === curr.index) {\n last!.text += curr.text;\n } else {\n acc.push(curr);\n }\n return acc;\n },\n [{ ...reasoning.summary[0] }]\n )\n : reasoning.summary\n ).map((s) =>\n Object.fromEntries(Object.entries(s).filter(([k]) => k !== 'index'))\n ) as OpenAIClient.Responses.ResponseReasoningItem.Summary[];\n\n return {\n ...reasoning,\n summary,\n } as OpenAIClient.Responses.ResponseReasoningItem;\n}\n\nexport function _convertMessagesToOpenAIResponsesParams(\n messages: BaseMessage[],\n model?: string,\n zdrEnabled?: boolean\n): ResponsesInputItem[] {\n return messages.flatMap(\n (lcMsg): ResponsesInputItem | ResponsesInputItem[] => {\n const additional_kwargs =\n lcMsg.additional_kwargs as BaseMessageFields['additional_kwargs'] & {\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n type?: string;\n refusal?: string;\n };\n\n let role = messageToOpenAIRole(lcMsg);\n if (role === 'system' && isReasoningModel(model)) role = 'developer';\n\n if (role === 'function') {\n throw new Error('Function messages are not supported in Responses API');\n }\n\n if (role === 'tool') {\n const toolMessage = lcMsg as ToolMessage;\n\n // Handle computer call output\n if (additional_kwargs.type === 'computer_call_output') {\n const output = (() => {\n if (typeof toolMessage.content === 'string') {\n return {\n type: 'computer_screenshot' as const,\n image_url: toolMessage.content,\n };\n }\n\n if (Array.isArray(toolMessage.content)) {\n const oaiScreenshot = toolMessage.content.find(\n (i) => i.type === 'computer_screenshot'\n ) as { type: 'computer_screenshot'; image_url: string };\n\n if (oaiScreenshot) return oaiScreenshot;\n\n const lcImage = toolMessage.content.find(\n (i) => i.type === 'image_url'\n ) as MessageContentImageUrl;\n\n if (lcImage) {\n return {\n type: 'computer_screenshot' as const,\n image_url:\n typeof lcImage.image_url === 'string'\n ? lcImage.image_url\n : lcImage.image_url.url,\n };\n }\n }\n\n throw new Error('Invalid computer call output');\n })();\n\n return {\n type: 'computer_call_output',\n output,\n call_id: toolMessage.tool_call_id,\n };\n }\n\n return {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id,\n id: toolMessage.id?.startsWith('fc_') ? toolMessage.id : undefined,\n output:\n typeof toolMessage.content !== 'string'\n ? JSON.stringify(toolMessage.content)\n : toolMessage.content,\n };\n }\n\n if (role === 'assistant') {\n // if we have the original response items, just reuse them\n if (\n !zdrEnabled &&\n lcMsg.response_metadata.output != null &&\n Array.isArray(lcMsg.response_metadata.output) &&\n lcMsg.response_metadata.output.length > 0 &&\n lcMsg.response_metadata.output.every((item) => 'type' in item)\n ) {\n return lcMsg.response_metadata.output;\n }\n\n // otherwise, try to reconstruct the response from what we have\n\n const input: ResponsesInputItem[] = [];\n\n // reasoning items\n if (additional_kwargs.reasoning && !zdrEnabled) {\n const reasoningItem = _convertReasoningSummaryToOpenAIResponsesParams(\n additional_kwargs.reasoning\n );\n input.push(reasoningItem);\n }\n\n // ai content\n let { content } = lcMsg;\n if (additional_kwargs.refusal) {\n if (typeof content === 'string') {\n content = [{ type: 'output_text', text: content, annotations: [] }];\n }\n content = [\n ...content,\n { type: 'refusal', refusal: additional_kwargs.refusal },\n ];\n }\n\n input.push({\n type: 'message',\n role: 'assistant',\n ...(lcMsg.id && !zdrEnabled ? { id: lcMsg.id } : {}),\n content:\n typeof content === 'string'\n ? content\n : content.flatMap((item) => {\n if (item.type === 'text') {\n return {\n type: 'output_text',\n text: item.text,\n // @ts-expect-error TODO: add types for `annotations`\n annotations: item.annotations ?? [],\n };\n }\n\n if (item.type === 'output_text' || item.type === 'refusal') {\n return item;\n }\n\n return [];\n }),\n });\n\n const functionCallIds = additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY];\n\n if (isAIMessage(lcMsg) && !!lcMsg.tool_calls?.length) {\n input.push(\n ...lcMsg.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.name,\n arguments: JSON.stringify(toolCall.args),\n call_id: toolCall.id!,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id!] } : {}),\n })\n )\n );\n } else if (additional_kwargs.tool_calls) {\n input.push(\n ...additional_kwargs.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.function.name,\n call_id: toolCall.id,\n arguments: toolCall.function.arguments,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id] } : {}),\n })\n )\n );\n }\n\n const toolOutputs =\n ((\n lcMsg.response_metadata.output as\n | Array<ResponsesInputItem>\n | undefined\n )?.length ?? 0) > 0\n ? lcMsg.response_metadata.output\n : additional_kwargs.tool_outputs;\n\n const fallthroughCallTypes: ResponsesInputItem['type'][] = [\n 'computer_call',\n /** @ts-ignore */\n 'mcp_call',\n /** @ts-ignore */\n 'code_interpreter_call',\n /** @ts-ignore */\n 'image_generation_call',\n ];\n\n if (toolOutputs != null) {\n const castToolOutputs = toolOutputs as Array<ResponsesInputItem>;\n const fallthroughCalls = castToolOutputs.filter((item) =>\n fallthroughCallTypes.includes(item.type)\n );\n if (fallthroughCalls.length > 0) input.push(...fallthroughCalls);\n }\n\n return input;\n }\n\n if (role === 'user' || role === 'system' || role === 'developer') {\n if (typeof lcMsg.content === 'string') {\n return { type: 'message', role, content: lcMsg.content };\n }\n\n const messages: ResponsesInputItem[] = [];\n const content = lcMsg.content.flatMap((item) => {\n if (item.type === 'mcp_approval_response') {\n messages.push({\n // @ts-ignore\n type: 'mcp_approval_response',\n approval_request_id: item.approval_request_id,\n approve: item.approve,\n });\n }\n if (isDataContentBlock(item)) {\n return convertToProviderContentBlock(\n item,\n completionsApiContentBlockConverter\n );\n }\n if (item.type === 'text') {\n return {\n type: 'input_text',\n text: item.text,\n };\n }\n if (item.type === 'image_url') {\n return {\n type: 'input_image',\n image_url:\n typeof item.image_url === 'string'\n ? item.image_url\n : item.image_url.url,\n detail:\n typeof item.image_url === 'string'\n ? 'auto'\n : item.image_url.detail,\n };\n }\n if (\n item.type === 'input_text' ||\n item.type === 'input_image' ||\n item.type === 'input_file'\n ) {\n return item;\n }\n return [];\n });\n\n if (content.length > 0) {\n messages.push({ type: 'message', role, content });\n }\n return messages;\n }\n\n console.warn(\n `Unsupported role found when converting to OpenAI Responses API: ${role}`\n );\n return [];\n }\n );\n}\n\nexport function isReasoningModel(model?: string) {\n return (\n model != null &&\n model !== '' &&\n (/^o\\d/.test(model) || /^gpt-[5-9]/.test(model))\n );\n}\n\nfunction _convertOpenAIResponsesMessageToBaseMessage(\n response: ResponsesCreateInvoke | ResponsesParseInvoke\n): BaseMessage {\n if (response.error) {\n // TODO: add support for `addLangChainErrorFields`\n const error = new Error(response.error.message);\n error.name = response.error.code;\n throw error;\n }\n\n let messageId: string | undefined;\n const content: MessageContent = [];\n const tool_calls: ToolCall[] = [];\n const invalid_tool_calls: InvalidToolCall[] = [];\n const response_metadata: Record<string, unknown> = {\n model: response.model,\n created_at: response.created_at,\n id: response.id,\n incomplete_details: response.incomplete_details,\n metadata: response.metadata,\n object: response.object,\n status: response.status,\n user: response.user,\n service_tier: response.service_tier,\n\n // for compatibility with chat completion calls.\n model_name: response.model,\n };\n\n const additional_kwargs: {\n [key: string]: unknown;\n refusal?: string;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n tool_outputs?: unknown[];\n parsed?: unknown;\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n } = {};\n\n for (const item of response.output) {\n if (item.type === 'message') {\n messageId = item.id;\n content.push(\n ...item.content.flatMap((part) => {\n if (part.type === 'output_text') {\n if ('parsed' in part && part.parsed != null) {\n additional_kwargs.parsed = part.parsed;\n }\n return {\n type: 'text',\n text: part.text,\n annotations: part.annotations,\n };\n }\n\n if (part.type === 'refusal') {\n additional_kwargs.refusal = part.refusal;\n return [];\n }\n\n return part;\n })\n );\n } else if (item.type === 'function_call') {\n const fnAdapter = {\n function: { name: item.name, arguments: item.arguments },\n id: item.call_id,\n };\n\n try {\n tool_calls.push(parseToolCall(fnAdapter, { returnId: true }));\n } catch (e: unknown) {\n let errMessage: string | undefined;\n if (\n typeof e === 'object' &&\n e != null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errMessage = e.message;\n }\n invalid_tool_calls.push(makeInvalidToolCall(fnAdapter, errMessage));\n }\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] ??= {};\n if (item.id) {\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY][item.call_id] = item.id;\n }\n } else if (item.type === 'reasoning') {\n additional_kwargs.reasoning = item;\n } else {\n additional_kwargs.tool_outputs ??= [];\n additional_kwargs.tool_outputs.push(item);\n }\n }\n\n return new AIMessage({\n id: messageId,\n content,\n tool_calls,\n invalid_tool_calls,\n usage_metadata: response.usage,\n additional_kwargs,\n response_metadata,\n });\n}\n\nexport function _convertOpenAIResponsesDeltaToBaseMessageChunk(\n chunk: ResponseReturnStreamEvents\n) {\n const content: Record<string, unknown>[] = [];\n let generationInfo: Record<string, unknown> = {};\n let usage_metadata: UsageMetadata | undefined;\n const tool_call_chunks: ToolCallChunk[] = [];\n const response_metadata: Record<string, unknown> = {};\n const additional_kwargs: {\n [key: string]: unknown;\n reasoning?: Partial<ChatOpenAIReasoningSummary>;\n tool_outputs?: unknown[];\n } = {};\n let id: string | undefined;\n if (chunk.type === 'response.output_text.delta') {\n content.push({\n type: 'text',\n text: chunk.delta,\n index: chunk.content_index,\n });\n /** @ts-ignore */\n } else if (chunk.type === 'response.output_text_annotation.added') {\n content.push({\n type: 'text',\n text: '',\n /** @ts-ignore */\n annotations: [chunk.annotation],\n /** @ts-ignore */\n index: chunk.content_index,\n });\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n id = chunk.item.id;\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.item.name,\n args: chunk.item.arguments,\n id: chunk.item.call_id,\n index: chunk.output_index,\n });\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] = {\n [chunk.item.call_id]: chunk.item.id,\n };\n } else if (\n chunk.type === 'response.output_item.done' &&\n [\n 'web_search_call',\n 'file_search_call',\n 'computer_call',\n 'code_interpreter_call',\n 'mcp_call',\n 'mcp_list_tools',\n 'mcp_approval_request',\n 'image_generation_call',\n ].includes(chunk.item.type)\n ) {\n additional_kwargs.tool_outputs = [chunk.item];\n } else if (chunk.type === 'response.created') {\n response_metadata.id = chunk.response.id;\n response_metadata.model_name = chunk.response.model;\n response_metadata.model = chunk.response.model;\n } else if (chunk.type === 'response.completed') {\n const msg = _convertOpenAIResponsesMessageToBaseMessage(chunk.response);\n\n usage_metadata = chunk.response.usage;\n if (chunk.response.text?.format?.type === 'json_schema') {\n additional_kwargs.parsed ??= JSON.parse(msg.text);\n }\n for (const [key, value] of Object.entries(chunk.response)) {\n if (key !== 'id') response_metadata[key] = value;\n }\n } else if (chunk.type === 'response.function_call_arguments.delta') {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n args: chunk.delta,\n index: chunk.output_index,\n });\n } else if (\n chunk.type === 'response.web_search_call.completed' ||\n chunk.type === 'response.file_search_call.completed'\n ) {\n generationInfo = {\n tool_outputs: {\n id: chunk.item_id,\n type: chunk.type.replace('response.', '').replace('.completed', ''),\n status: 'completed',\n },\n };\n } else if (chunk.type === 'response.refusal.done') {\n additional_kwargs.refusal = chunk.refusal;\n } else if (\n chunk.type === 'response.output_item.added' &&\n 'item' in chunk &&\n chunk.item.type === 'reasoning'\n ) {\n const summary: ChatOpenAIReasoningSummary['summary'] | undefined = chunk\n .item.summary\n ? chunk.item.summary.map((s, index) => ({\n ...s,\n index,\n }))\n : undefined;\n\n additional_kwargs.reasoning = {\n // We only capture ID in the first chunk or else the concatenated result of all chunks will\n // have an ID field that is repeated once per chunk. There is special handling for the `type`\n // field that prevents this, however.\n id: chunk.item.id,\n type: chunk.item.type,\n ...(summary ? { summary } : {}),\n };\n } else if (chunk.type === 'response.reasoning_summary_part.added') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [{ ...chunk.part, index: chunk.summary_index }],\n };\n } else if (chunk.type === 'response.reasoning_summary_text.delta') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [\n { text: chunk.delta, type: 'summary_text', index: chunk.summary_index },\n ],\n };\n /** @ts-ignore */\n } else if (chunk.type === 'response.image_generation_call.partial_image') {\n // noop/fixme: retaining partial images in a message chunk means that _all_\n // partial images get kept in history, so we don't do anything here.\n return null;\n } else {\n return null;\n }\n\n return new ChatGenerationChunk({\n // Legacy reasons, `onLLMNewToken` should pulls this out\n text: content.map((part) => part.text).join(''),\n message: new AIMessageChunk({\n id,\n content,\n tool_call_chunks,\n usage_metadata,\n additional_kwargs,\n response_metadata,\n }),\n generationInfo,\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../src/llm/openai/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { type OpenAI as OpenAIClient } from 'openai';\nimport type {\n ChatCompletionContentPartText,\n ChatCompletionContentPartImage,\n ChatCompletionContentPartInputAudio,\n ChatCompletionContentPart,\n} from 'openai/resources/chat/completions';\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ToolMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n type InvalidToolCall,\n type MessageContentImageUrl,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n parseMimeType,\n convertToProviderContentBlock,\n isDataContentBlock,\n} from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n convertLangChainToolCallToOpenAI,\n makeInvalidToolCall,\n parseToolCall,\n} from '@langchain/core/output_parsers/openai_tools';\nimport type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\nimport type {\n OpenAICallOptions,\n OpenAIChatInput,\n ChatOpenAIReasoningSummary,\n} from '@langchain/openai';\n\nexport type { OpenAICallOptions, OpenAIChatInput };\n\n// Utility types to get hidden OpenAI response types\ntype ExtractAsyncIterableType<T> = T extends AsyncIterable<infer U> ? U : never;\ntype ExcludeController<T> = T extends { controller: unknown } ? never : T;\ntype ExcludeNonController<T> = T extends { controller: unknown } ? T : never;\n\ntype ResponsesCreate = OpenAIClient.Responses['create'];\ntype ResponsesParse = OpenAIClient.Responses['parse'];\n\ntype ResponsesInputItem = OpenAIClient.Responses.ResponseInputItem;\n\ntype ResponsesCreateInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\ntype ResponsesParseInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesParse>>\n>;\n\ntype ResponsesCreateStream = ExcludeNonController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\nexport type ResponseReturnStreamEvents =\n ExtractAsyncIterableType<ResponsesCreateStream>;\n\n// TODO import from SDK when available\ntype OpenAIRoleEnum =\n | 'system'\n | 'developer'\n | 'assistant'\n | 'user'\n | 'function'\n | 'tool';\n\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n\nfunction extractGenericMessageCustomRole(message: ChatMessage) {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'assistant' &&\n message.role !== 'user' &&\n message.role !== 'function' &&\n message.role !== 'tool'\n ) {\n console.warn(`Unknown message role: ${message.role}`);\n }\n\n return message.role as OpenAIRoleEnum;\n}\n\nexport function messageToOpenAIRole(message: BaseMessage): OpenAIRoleEnum {\n const type = message._getType();\n switch (type) {\n case 'system':\n return 'system';\n case 'ai':\n return 'assistant';\n case 'human':\n return 'user';\n case 'function':\n return 'function';\n case 'tool':\n return 'tool';\n case 'generic': {\n if (!ChatMessage.isInstance(message))\n throw new Error('Invalid generic chat message');\n return extractGenericMessageCustomRole(message);\n }\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n}\n\nconst completionsApiContentBlockConverter: StandardContentBlockConverter<{\n text: ChatCompletionContentPartText;\n image: ChatCompletionContentPartImage;\n audio: ChatCompletionContentPartInputAudio;\n file: ChatCompletionContentPart.File;\n}> = {\n providerName: 'ChatOpenAI',\n\n fromStandardTextBlock(block): ChatCompletionContentPartText {\n return { type: 'text', text: block.text };\n },\n\n fromStandardImageBlock(block): ChatCompletionContentPartImage {\n if (block.source_type === 'url') {\n return {\n type: 'image_url',\n image_url: {\n url: block.url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n const url = `data:${block.mime_type ?? ''};base64,${block.data}`;\n return {\n type: 'image_url',\n image_url: {\n url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n throw new Error(\n `Image content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardAudioBlock(block): ChatCompletionContentPartInputAudio {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL audio blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n const rawMimeType = data.mime_type || block.mime_type || '';\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(rawMimeType);\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: data.data,\n },\n };\n }\n\n if (block.source_type === 'base64') {\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(block.mime_type ?? '');\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: block.data,\n },\n };\n }\n\n throw new Error(\n `Audio content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardFileBlock(block): ChatCompletionContentPart.File {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL file blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n return {\n type: 'file',\n file: {\n file_data: block.url, // formatted as base64 data URL\n ...(block.metadata?.filename || block.metadata?.name\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n return {\n type: 'file',\n file: {\n file_data: `data:${block.mime_type ?? ''};base64,${block.data}`,\n ...(block.metadata?.filename ||\n block.metadata?.name ||\n block.metadata?.title\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name ||\n block.metadata.title) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'id') {\n return {\n type: 'file',\n file: {\n file_id: block.id,\n },\n };\n }\n\n throw new Error(\n `File content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n};\n\n// Used in LangSmith, export is important here\nexport function _convertMessagesToOpenAIParams(\n messages: BaseMessage[],\n model?: string\n): OpenAICompletionParam[] {\n // TODO: Function messages do not support array content, fix cast\n return messages.flatMap((message) => {\n let role = messageToOpenAIRole(message);\n if (role === 'system' && isReasoningModel(model)) {\n role = 'developer';\n }\n\n const content =\n typeof message.content === 'string'\n ? message.content\n : message.content.map((m) => {\n if (isDataContentBlock(m)) {\n return convertToProviderContentBlock(\n m,\n completionsApiContentBlockConverter\n );\n }\n return m;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const completionParam: Record<string, any> = {\n role,\n content,\n };\n if (message.name != null) {\n completionParam.name = message.name;\n }\n if (message.additional_kwargs.function_call != null) {\n completionParam.function_call = message.additional_kwargs.function_call;\n completionParam.content = '';\n }\n if (isAIMessage(message) && !!message.tool_calls?.length) {\n completionParam.tool_calls = message.tool_calls.map(\n convertLangChainToolCallToOpenAI\n );\n completionParam.content = '';\n } else {\n if (message.additional_kwargs.tool_calls != null) {\n completionParam.tool_calls = message.additional_kwargs.tool_calls;\n }\n if ((message as ToolMessage).tool_call_id != null) {\n completionParam.tool_call_id = (message as ToolMessage).tool_call_id;\n }\n }\n\n if (\n message.additional_kwargs.audio &&\n typeof message.additional_kwargs.audio === 'object' &&\n 'id' in message.additional_kwargs.audio\n ) {\n const audioMessage = {\n role: 'assistant',\n audio: {\n id: message.additional_kwargs.audio.id,\n },\n };\n return [completionParam, audioMessage] as OpenAICompletionParam[];\n }\n\n return completionParam as OpenAICompletionParam;\n });\n}\n\nconst _FUNCTION_CALL_IDS_MAP_KEY = '__openai_function_call_ids__';\n\nfunction _convertReasoningSummaryToOpenAIResponsesParams(\n reasoning: ChatOpenAIReasoningSummary\n): OpenAIClient.Responses.ResponseReasoningItem {\n // combine summary parts that have the the same index and then remove the indexes\n const summary = (\n reasoning.summary.length > 1\n ? reasoning.summary.reduce(\n (acc, curr) => {\n const last = acc.at(-1);\n\n if (last!.index === curr.index) {\n last!.text += curr.text;\n } else {\n acc.push(curr);\n }\n return acc;\n },\n [{ ...reasoning.summary[0] }]\n )\n : reasoning.summary\n ).map((s) =>\n Object.fromEntries(Object.entries(s).filter(([k]) => k !== 'index'))\n ) as OpenAIClient.Responses.ResponseReasoningItem.Summary[];\n\n return {\n ...reasoning,\n summary,\n } as OpenAIClient.Responses.ResponseReasoningItem;\n}\n\nexport function _convertMessagesToOpenAIResponsesParams(\n messages: BaseMessage[],\n model?: string,\n zdrEnabled?: boolean\n): ResponsesInputItem[] {\n return messages.flatMap(\n (lcMsg): ResponsesInputItem | ResponsesInputItem[] => {\n const additional_kwargs =\n lcMsg.additional_kwargs as BaseMessageFields['additional_kwargs'] & {\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n type?: string;\n refusal?: string;\n };\n\n let role = messageToOpenAIRole(lcMsg);\n if (role === 'system' && isReasoningModel(model)) role = 'developer';\n\n if (role === 'function') {\n throw new Error('Function messages are not supported in Responses API');\n }\n\n if (role === 'tool') {\n const toolMessage = lcMsg as ToolMessage;\n\n // Handle computer call output\n if (additional_kwargs.type === 'computer_call_output') {\n const output = (() => {\n if (typeof toolMessage.content === 'string') {\n return {\n type: 'computer_screenshot' as const,\n image_url: toolMessage.content,\n };\n }\n\n if (Array.isArray(toolMessage.content)) {\n const oaiScreenshot = toolMessage.content.find(\n (i) => i.type === 'computer_screenshot'\n ) as { type: 'computer_screenshot'; image_url: string };\n\n if (oaiScreenshot) return oaiScreenshot;\n\n const lcImage = toolMessage.content.find(\n (i) => i.type === 'image_url'\n ) as MessageContentImageUrl;\n\n if (lcImage) {\n return {\n type: 'computer_screenshot' as const,\n image_url:\n typeof lcImage.image_url === 'string'\n ? lcImage.image_url\n : lcImage.image_url.url,\n };\n }\n }\n\n throw new Error('Invalid computer call output');\n })();\n\n return {\n type: 'computer_call_output',\n output,\n call_id: toolMessage.tool_call_id,\n };\n }\n\n return {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id,\n id: toolMessage.id?.startsWith('fc_') ? toolMessage.id : undefined,\n output:\n typeof toolMessage.content !== 'string'\n ? JSON.stringify(toolMessage.content)\n : toolMessage.content,\n };\n }\n\n if (role === 'assistant') {\n // if we have the original response items, just reuse them\n if (\n !zdrEnabled &&\n lcMsg.response_metadata.output != null &&\n Array.isArray(lcMsg.response_metadata.output) &&\n lcMsg.response_metadata.output.length > 0 &&\n lcMsg.response_metadata.output.every((item) => 'type' in item)\n ) {\n return lcMsg.response_metadata.output;\n }\n\n // otherwise, try to reconstruct the response from what we have\n\n const input: ResponsesInputItem[] = [];\n\n // reasoning items\n if (additional_kwargs.reasoning && !zdrEnabled) {\n const reasoningItem = _convertReasoningSummaryToOpenAIResponsesParams(\n additional_kwargs.reasoning\n );\n input.push(reasoningItem);\n }\n\n // ai content\n let { content } = lcMsg;\n if (additional_kwargs.refusal) {\n if (typeof content === 'string') {\n content = [{ type: 'output_text', text: content, annotations: [] }];\n }\n content = [\n ...content,\n { type: 'refusal', refusal: additional_kwargs.refusal },\n ];\n }\n\n input.push({\n type: 'message',\n role: 'assistant',\n ...(lcMsg.id && !zdrEnabled ? { id: lcMsg.id } : {}),\n content:\n typeof content === 'string'\n ? content\n : content.flatMap((item) => {\n if (item.type === 'text') {\n return {\n type: 'output_text',\n text: item.text,\n // @ts-expect-error TODO: add types for `annotations`\n annotations: item.annotations ?? [],\n };\n }\n\n if (item.type === 'output_text' || item.type === 'refusal') {\n return item;\n }\n\n return [];\n }),\n });\n\n const functionCallIds = additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY];\n\n if (isAIMessage(lcMsg) && !!lcMsg.tool_calls?.length) {\n input.push(\n ...lcMsg.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.name,\n arguments: JSON.stringify(toolCall.args),\n call_id: toolCall.id!,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id!] } : {}),\n })\n )\n );\n } else if (additional_kwargs.tool_calls) {\n input.push(\n ...additional_kwargs.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.function.name,\n call_id: toolCall.id,\n arguments: toolCall.function.arguments,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id] } : {}),\n })\n )\n );\n }\n\n const toolOutputs =\n ((\n lcMsg.response_metadata.output as\n | Array<ResponsesInputItem>\n | undefined\n )?.length ?? 0) > 0\n ? lcMsg.response_metadata.output\n : additional_kwargs.tool_outputs;\n\n const fallthroughCallTypes: ResponsesInputItem['type'][] = [\n 'computer_call',\n /** @ts-ignore */\n 'mcp_call',\n /** @ts-ignore */\n 'code_interpreter_call',\n /** @ts-ignore */\n 'image_generation_call',\n ];\n\n if (toolOutputs != null) {\n const castToolOutputs = toolOutputs as Array<ResponsesInputItem>;\n const fallthroughCalls = castToolOutputs.filter((item) =>\n fallthroughCallTypes.includes(item.type)\n );\n if (fallthroughCalls.length > 0) input.push(...fallthroughCalls);\n }\n\n return input;\n }\n\n if (role === 'user' || role === 'system' || role === 'developer') {\n if (typeof lcMsg.content === 'string') {\n return { type: 'message', role, content: lcMsg.content };\n }\n\n const messages: ResponsesInputItem[] = [];\n const content = lcMsg.content.flatMap((item) => {\n if (item.type === 'mcp_approval_response') {\n messages.push({\n // @ts-ignore\n type: 'mcp_approval_response',\n approval_request_id: item.approval_request_id,\n approve: item.approve,\n });\n }\n if (isDataContentBlock(item)) {\n return convertToProviderContentBlock(\n item,\n completionsApiContentBlockConverter\n );\n }\n if (item.type === 'text') {\n return {\n type: 'input_text',\n text: item.text,\n };\n }\n if (item.type === 'image_url') {\n return {\n type: 'input_image',\n image_url:\n typeof item.image_url === 'string'\n ? item.image_url\n : item.image_url.url,\n detail:\n typeof item.image_url === 'string'\n ? 'auto'\n : item.image_url.detail,\n };\n }\n if (\n item.type === 'input_text' ||\n item.type === 'input_image' ||\n item.type === 'input_file'\n ) {\n return item;\n }\n return [];\n });\n\n if (content.length > 0) {\n messages.push({ type: 'message', role, content });\n }\n return messages;\n }\n\n console.warn(\n `Unsupported role found when converting to OpenAI Responses API: ${role}`\n );\n return [];\n }\n );\n}\n\nexport function isReasoningModel(model?: string) {\n return model != null && model !== '' && /\\b(o\\d|gpt-[5-9])\\b/i.test(model);\n}\n\nfunction _convertOpenAIResponsesMessageToBaseMessage(\n response: ResponsesCreateInvoke | ResponsesParseInvoke\n): BaseMessage {\n if (response.error) {\n // TODO: add support for `addLangChainErrorFields`\n const error = new Error(response.error.message);\n error.name = response.error.code;\n throw error;\n }\n\n let messageId: string | undefined;\n const content: MessageContent = [];\n const tool_calls: ToolCall[] = [];\n const invalid_tool_calls: InvalidToolCall[] = [];\n const response_metadata: Record<string, unknown> = {\n model: response.model,\n created_at: response.created_at,\n id: response.id,\n incomplete_details: response.incomplete_details,\n metadata: response.metadata,\n object: response.object,\n status: response.status,\n user: response.user,\n service_tier: response.service_tier,\n\n // for compatibility with chat completion calls.\n model_name: response.model,\n };\n\n const additional_kwargs: {\n [key: string]: unknown;\n refusal?: string;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n tool_outputs?: unknown[];\n parsed?: unknown;\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n } = {};\n\n for (const item of response.output) {\n if (item.type === 'message') {\n messageId = item.id;\n content.push(\n ...item.content.flatMap((part) => {\n if (part.type === 'output_text') {\n if ('parsed' in part && part.parsed != null) {\n additional_kwargs.parsed = part.parsed;\n }\n return {\n type: 'text',\n text: part.text,\n annotations: part.annotations,\n };\n }\n\n if (part.type === 'refusal') {\n additional_kwargs.refusal = part.refusal;\n return [];\n }\n\n return part;\n })\n );\n } else if (item.type === 'function_call') {\n const fnAdapter = {\n function: { name: item.name, arguments: item.arguments },\n id: item.call_id,\n };\n\n try {\n tool_calls.push(parseToolCall(fnAdapter, { returnId: true }));\n } catch (e: unknown) {\n let errMessage: string | undefined;\n if (\n typeof e === 'object' &&\n e != null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errMessage = e.message;\n }\n invalid_tool_calls.push(makeInvalidToolCall(fnAdapter, errMessage));\n }\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] ??= {};\n if (item.id) {\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY][item.call_id] = item.id;\n }\n } else if (item.type === 'reasoning') {\n additional_kwargs.reasoning = item;\n } else {\n additional_kwargs.tool_outputs ??= [];\n additional_kwargs.tool_outputs.push(item);\n }\n }\n\n return new AIMessage({\n id: messageId,\n content,\n tool_calls,\n invalid_tool_calls,\n usage_metadata: response.usage,\n additional_kwargs,\n response_metadata,\n });\n}\n\nexport function _convertOpenAIResponsesDeltaToBaseMessageChunk(\n chunk: ResponseReturnStreamEvents\n) {\n const content: Record<string, unknown>[] = [];\n let generationInfo: Record<string, unknown> = {};\n let usage_metadata: UsageMetadata | undefined;\n const tool_call_chunks: ToolCallChunk[] = [];\n const response_metadata: Record<string, unknown> = {};\n const additional_kwargs: {\n [key: string]: unknown;\n reasoning?: Partial<ChatOpenAIReasoningSummary>;\n tool_outputs?: unknown[];\n } = {};\n let id: string | undefined;\n if (chunk.type === 'response.output_text.delta') {\n content.push({\n type: 'text',\n text: chunk.delta,\n index: chunk.content_index,\n });\n /** @ts-ignore */\n } else if (chunk.type === 'response.output_text_annotation.added') {\n content.push({\n type: 'text',\n text: '',\n /** @ts-ignore */\n annotations: [chunk.annotation],\n /** @ts-ignore */\n index: chunk.content_index,\n });\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n id = chunk.item.id;\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.item.name,\n args: chunk.item.arguments,\n id: chunk.item.call_id,\n index: chunk.output_index,\n });\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] = {\n [chunk.item.call_id]: chunk.item.id,\n };\n } else if (\n chunk.type === 'response.output_item.done' &&\n [\n 'web_search_call',\n 'file_search_call',\n 'computer_call',\n 'code_interpreter_call',\n 'mcp_call',\n 'mcp_list_tools',\n 'mcp_approval_request',\n 'image_generation_call',\n ].includes(chunk.item.type)\n ) {\n additional_kwargs.tool_outputs = [chunk.item];\n } else if (chunk.type === 'response.created') {\n response_metadata.id = chunk.response.id;\n response_metadata.model_name = chunk.response.model;\n response_metadata.model = chunk.response.model;\n } else if (chunk.type === 'response.completed') {\n const msg = _convertOpenAIResponsesMessageToBaseMessage(chunk.response);\n\n usage_metadata = chunk.response.usage;\n if (chunk.response.text?.format?.type === 'json_schema') {\n additional_kwargs.parsed ??= JSON.parse(msg.text);\n }\n for (const [key, value] of Object.entries(chunk.response)) {\n if (key !== 'id') response_metadata[key] = value;\n }\n } else if (chunk.type === 'response.function_call_arguments.delta') {\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n args: chunk.delta,\n index: chunk.output_index,\n });\n } else if (\n chunk.type === 'response.web_search_call.completed' ||\n chunk.type === 'response.file_search_call.completed'\n ) {\n generationInfo = {\n tool_outputs: {\n id: chunk.item_id,\n type: chunk.type.replace('response.', '').replace('.completed', ''),\n status: 'completed',\n },\n };\n } else if (chunk.type === 'response.refusal.done') {\n additional_kwargs.refusal = chunk.refusal;\n } else if (\n chunk.type === 'response.output_item.added' &&\n 'item' in chunk &&\n chunk.item.type === 'reasoning'\n ) {\n const summary: ChatOpenAIReasoningSummary['summary'] | undefined = chunk\n .item.summary\n ? chunk.item.summary.map((s, index) => ({\n ...s,\n index,\n }))\n : undefined;\n\n additional_kwargs.reasoning = {\n // We only capture ID in the first chunk or else the concatenated result of all chunks will\n // have an ID field that is repeated once per chunk. There is special handling for the `type`\n // field that prevents this, however.\n id: chunk.item.id,\n type: chunk.item.type,\n ...(summary ? { summary } : {}),\n };\n } else if (chunk.type === 'response.reasoning_summary_part.added') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [{ ...chunk.part, index: chunk.summary_index }],\n };\n } else if (chunk.type === 'response.reasoning_summary_text.delta') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [\n { text: chunk.delta, type: 'summary_text', index: chunk.summary_index },\n ],\n };\n /** @ts-ignore */\n } else if (chunk.type === 'response.image_generation_call.partial_image') {\n // noop/fixme: retaining partial images in a message chunk means that _all_\n // partial images get kept in history, so we don't do anything here.\n return null;\n } else {\n return null;\n }\n\n return new ChatGenerationChunk({\n // Legacy reasons, `onLLMNewToken` should pulls this out\n text: content.map((part) => part.text).join(''),\n message: new AIMessageChunk({\n id,\n content,\n tool_call_chunks,\n usage_metadata,\n additional_kwargs,\n response_metadata,\n }),\n generationInfo,\n });\n}\n"],"names":[],"mappings":";;;;AA+EA,SAAS,+BAA+B,CAAC,OAAoB,EAAA;AAC3D,IAAA,IACE,OAAO,CAAC,IAAI,KAAK,QAAQ;QACzB,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,OAAO,CAAC,IAAI,KAAK,UAAU;AAC3B,QAAA,OAAO,CAAC,IAAI,KAAK,MAAM,EACvB;QACA,OAAO,CAAC,IAAI,CAAC,CAAA,sBAAA,EAAyB,OAAO,CAAC,IAAI,CAAE,CAAA,CAAC;;IAGvD,OAAO,OAAO,CAAC,IAAsB;AACvC;AAEM,SAAU,mBAAmB,CAAC,OAAoB,EAAA;AACtD,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE;IAC/B,QAAQ,IAAI;AACZ,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,WAAW;AACpB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,MAAM;AACf,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,UAAU;AACnB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,MAAM;QACf,KAAK,SAAS,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;AAClC,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACjD,YAAA,OAAO,+BAA+B,CAAC,OAAO,CAAC;;AAEjD,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAA,CAAE,CAAC;;AAEpD;AAEA,MAAM,mCAAmC,GAKpC;AACH,IAAA,YAAY,EAAE,YAAY;AAE1B,IAAA,qBAAqB,CAAC,KAAK,EAAA;QACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;KAC1C;AAED,IAAA,sBAAsB,CAAC,KAAK,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;YAC/B,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;oBACT,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,oBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;0BAChB,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAiC;0BAC1D,EAAE,CAAC;AACR,iBAAA;aACF;;AAGH,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;AAClC,YAAA,MAAM,GAAG,GAAG,CAAQ,KAAA,EAAA,KAAK,CAAC,SAAS,IAAI,EAAE,CAAW,QAAA,EAAA,KAAK,CAAC,IAAI,EAAE;YAChE,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;oBACT,GAAG;AACH,oBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;0BAChB,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAiC;0BAC1D,EAAE,CAAC;AACR,iBAAA;aACF;;QAGH,MAAM,IAAI,KAAK,CACb,CAAA,sCAAA,EAAyC,KAAK,CAAC,WAAW,CAAmC,iCAAA,CAAA,CAC9F;KACF;AAED,IAAA,sBAAsB,CAAC,KAAK,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,KAAK,CAAC,WAAW,CAAiD,+CAAA,CAAA,CACxG;;YAGH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE;AAC3D,YAAA,IAAI,QAA2C;AAE/C,YAAA,IAAI;AACF,gBAAA,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC;;AACrC,YAAA,MAAM;gBACN,MAAM,IAAI,KAAK,CACb,CAAA,8BAAA,EAAiC,KAAK,CAAC,WAAW,CAAgD,8CAAA,CAAA,CACnG;;AAGH,YAAA,IACE,QAAQ,CAAC,IAAI,KAAK,OAAO;AACzB,iBAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,EAC1D;gBACA,MAAM,IAAI,KAAK,CACb,CAAA,8BAAA,EAAiC,KAAK,CAAC,WAAW,CAAgD,8CAAA,CAAA,CACnG;;YAGH,OAAO;AACL,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,WAAW,EAAE;oBACX,MAAM,EAAE,QAAQ,CAAC,OAAO;oBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA;aACF;;AAGH,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,QAA2C;AAE/C,YAAA,IAAI;gBACF,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;;AAC/C,YAAA,MAAM;gBACN,MAAM,IAAI,KAAK,CACb,CAAA,8BAAA,EAAiC,KAAK,CAAC,WAAW,CAAgD,8CAAA,CAAA,CACnG;;AAGH,YAAA,IACE,QAAQ,CAAC,IAAI,KAAK,OAAO;AACzB,iBAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,EAC1D;gBACA,MAAM,IAAI,KAAK,CACb,CAAA,8BAAA,EAAiC,KAAK,CAAC,WAAW,CAAgD,8CAAA,CAAA,CACnG;;YAGH,OAAO;AACL,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,WAAW,EAAE;oBACX,MAAM,EAAE,QAAQ,CAAC,OAAO;oBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,iBAAA;aACF;;QAGH,MAAM,IAAI,KAAK,CACb,CAAA,sCAAA,EAAyC,KAAK,CAAC,WAAW,CAAmC,iCAAA,CAAA,CAC9F;KACF;AAED,IAAA,qBAAqB,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM,IAAI,KAAK,CACb,CAAA,iCAAA,EAAoC,KAAK,CAAC,WAAW,CAAiD,+CAAA,CAAA,CACvG;;YAGH,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE;AACJ,oBAAA,SAAS,EAAE,KAAK,CAAC,GAAG;oBACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC9C,0BAAE;AACA,4BAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC9B,gCAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAW;AACnC;0BACC,EAAE,CAAC;AACR,iBAAA;aACF;;AAGH,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;YAClC,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE;oBACJ,SAAS,EAAE,CAAQ,KAAA,EAAA,KAAK,CAAC,SAAS,IAAI,EAAE,CAAW,QAAA,EAAA,KAAK,CAAC,IAAI,CAAE,CAAA;AAC/D,oBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ;wBAC5B,KAAK,CAAC,QAAQ,EAAE,IAAI;wBACpB,KAAK,CAAC,QAAQ,EAAE;AACd,0BAAE;AACA,4BAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ;gCAC9B,KAAK,CAAC,QAAQ,CAAC,IAAI;AACnB,gCAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAW;AACpC;0BACC,EAAE,CAAC;AACR,iBAAA;aACF;;AAGH,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE;YAC9B,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK,CAAC,EAAE;AAClB,iBAAA;aACF;;QAGH,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,KAAK,CAAC,WAAW,CAAmC,iCAAA,CAAA,CAC7F;KACF;CACF;AAED;AACgB,SAAA,8BAA8B,CAC5C,QAAuB,EACvB,KAAc,EAAA;;AAGd,IAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAClC,QAAA,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC;QACvC,IAAI,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,GAAG,WAAW;;AAGpB,QAAA,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,OAAO,KAAK;cACvB,OAAO,CAAC;cACR,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC1B,gBAAA,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,6BAA6B,CAClC,CAAC,EACD,mCAAmC,CACpC;;AAEH,gBAAA,OAAO,CAAC;AACV,aAAC,CAAC;;AAEN,QAAA,MAAM,eAAe,GAAwB;YAC3C,IAAI;YACJ,OAAO;SACR;AACD,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AACxB,YAAA,eAAe,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;;QAErC,IAAI,OAAO,CAAC,iBAAiB,CAAC,aAAa,IAAI,IAAI,EAAE;YACnD,eAAe,CAAC,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa;AACvE,YAAA,eAAe,CAAC,OAAO,GAAG,EAAE;;AAE9B,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE;YACxD,eAAe,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CACjD,gCAAgC,CACjC;AACD,YAAA,eAAe,CAAC,OAAO,GAAG,EAAE;;aACvB;YACL,IAAI,OAAO,CAAC,iBAAiB,CAAC,UAAU,IAAI,IAAI,EAAE;gBAChD,eAAe,CAAC,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU;;AAEnE,YAAA,IAAK,OAAuB,CAAC,YAAY,IAAI,IAAI,EAAE;AACjD,gBAAA,eAAe,CAAC,YAAY,GAAI,OAAuB,CAAC,YAAY;;;AAIxE,QAAA,IACE,OAAO,CAAC,iBAAiB,CAAC,KAAK;AAC/B,YAAA,OAAO,OAAO,CAAC,iBAAiB,CAAC,KAAK,KAAK,QAAQ;AACnD,YAAA,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,EACvC;AACA,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACvC,iBAAA;aACF;AACD,YAAA,OAAO,CAAC,eAAe,EAAE,YAAY,CAA4B;;AAGnE,QAAA,OAAO,eAAwC;AACjD,KAAC,CAAC;AACJ;AAEA,MAAM,0BAA0B,GAAG,8BAA8B;AAEjE,SAAS,+CAA+C,CACtD,SAAqC,EAAA;;IAGrC,MAAM,OAAO,GAAG,CACd,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG;AACzB,UAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,IAAI,KAAI;YACZ,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAEvB,IAAI,IAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;;iBACpB;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEhB,YAAA,OAAO,GAAG;AACZ,SAAC,EACD,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAE/B,UAAE,SAAS,CAAC,OAAO,EACrB,GAAG,CAAC,CAAC,CAAC,KACN,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC,CACX;IAE3D,OAAO;AACL,QAAA,GAAG,SAAS;QACZ,OAAO;KACwC;AACnD;SAEgB,uCAAuC,CACrD,QAAuB,EACvB,KAAc,EACd,UAAoB,EAAA;AAEpB,IAAA,OAAO,QAAQ,CAAC,OAAO,CACrB,CAAC,KAAK,KAA+C;AACnD,QAAA,MAAM,iBAAiB,GACrB,KAAK,CAAC,iBAKL;AAEH,QAAA,IAAI,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC;YAAE,IAAI,GAAG,WAAW;AAEpE,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;;AAGzE,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,MAAM,WAAW,GAAG,KAAoB;;AAGxC,YAAA,IAAI,iBAAiB,CAAC,IAAI,KAAK,sBAAsB,EAAE;AACrD,gBAAA,MAAM,MAAM,GAAG,CAAC,MAAK;AACnB,oBAAA,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE;wBAC3C,OAAO;AACL,4BAAA,IAAI,EAAE,qBAA8B;4BACpC,SAAS,EAAE,WAAW,CAAC,OAAO;yBAC/B;;oBAGH,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AACtC,wBAAA,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,qBAAqB,CACc;AAEvD,wBAAA,IAAI,aAAa;AAAE,4BAAA,OAAO,aAAa;AAEvC,wBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACtC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,CACJ;wBAE3B,IAAI,OAAO,EAAE;4BACX,OAAO;AACL,gCAAA,IAAI,EAAE,qBAA8B;AACpC,gCAAA,SAAS,EACP,OAAO,OAAO,CAAC,SAAS,KAAK;sCACzB,OAAO,CAAC;AACV,sCAAE,OAAO,CAAC,SAAS,CAAC,GAAG;6BAC5B;;;AAIL,oBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;iBAChD,GAAG;gBAEJ,OAAO;AACL,oBAAA,IAAI,EAAE,sBAAsB;oBAC5B,MAAM;oBACN,OAAO,EAAE,WAAW,CAAC,YAAY;iBAClC;;YAGH,OAAO;AACL,gBAAA,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,WAAW,CAAC,YAAY;AACjC,gBAAA,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,EAAE,GAAG,SAAS;AAClE,gBAAA,MAAM,EACJ,OAAO,WAAW,CAAC,OAAO,KAAK;sBAC3B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO;sBAClC,WAAW,CAAC,OAAO;aAC1B;;AAGH,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;;AAExB,YAAA,IACE,CAAC,UAAU;AACX,gBAAA,KAAK,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI;gBACtC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC7C,gBAAA,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACzC,gBAAA,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,EAC9D;AACA,gBAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM;;;YAKvC,MAAM,KAAK,GAAyB,EAAE;;AAGtC,YAAA,IAAI,iBAAiB,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;gBAC9C,MAAM,aAAa,GAAG,+CAA+C,CACnE,iBAAiB,CAAC,SAAS,CAC5B;AACD,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAI3B,YAAA,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK;AACvB,YAAA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC7B,gBAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,oBAAA,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;;AAErE,gBAAA,OAAO,GAAG;AACR,oBAAA,GAAG,OAAO;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE;iBACxD;;YAGH,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,WAAW;gBACjB,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;AACpD,gBAAA,OAAO,EACL,OAAO,OAAO,KAAK;AACjB,sBAAE;sBACA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;4BACxB,OAAO;AACL,gCAAA,IAAI,EAAE,aAAa;gCACnB,IAAI,EAAE,IAAI,CAAC,IAAI;;AAEf,gCAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;6BACpC;;AAGH,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC1D,4BAAA,OAAO,IAAI;;AAGb,wBAAA,OAAO,EAAE;AACX,qBAAC,CAAC;AACP,aAAA,CAAC;AAEF,YAAA,MAAM,eAAe,GAAG,iBAAiB,CAAC,0BAA0B,CAAC;AAErE,YAAA,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE;AACpD,gBAAA,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CACrB,CAAC,QAAQ,MAA0B;AACjC,oBAAA,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACxC,OAAO,EAAE,QAAQ,CAAC,EAAG;oBACrB,IAAI,UAAU,GAAG,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAG,CAAC,EAAE,GAAG,EAAE,CAAC;iBAC/D,CAAC,CACH,CACF;;AACI,iBAAA,IAAI,iBAAiB,CAAC,UAAU,EAAE;AACvC,gBAAA,KAAK,CAAC,IAAI,CACR,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,CACjC,CAAC,QAAQ,MAA0B;AACjC,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;oBAC5B,OAAO,EAAE,QAAQ,CAAC,EAAE;AACpB,oBAAA,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;oBACtC,IAAI,UAAU,GAAG,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;iBAC9D,CAAC,CACH,CACF;;AAGH,YAAA,MAAM,WAAW,GACf,CACE,KAAK,CAAC,iBAAiB,CAAC,MAGzB,EAAE,MAAM,IAAI,CAAC,IAAI;AAChB,kBAAE,KAAK,CAAC,iBAAiB,CAAC;AAC1B,kBAAE,iBAAiB,CAAC,YAAY;AAEpC,YAAA,MAAM,oBAAoB,GAAiC;gBACzD,eAAe;;gBAEf,UAAU;;gBAEV,uBAAuB;;gBAEvB,uBAAuB;aACxB;AAED,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;gBACvB,MAAM,eAAe,GAAG,WAAwC;gBAChE,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KACnD,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC;AACD,gBAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;;AAGlE,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,EAAE;AAChE,YAAA,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;AACrC,gBAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;;YAG1D,MAAM,QAAQ,GAAyB,EAAE;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7C,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,EAAE;oBACzC,QAAQ,CAAC,IAAI,CAAC;;AAEZ,wBAAA,IAAI,EAAE,uBAAuB;wBAC7B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;wBAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,qBAAA,CAAC;;AAEJ,gBAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC5B,oBAAA,OAAO,6BAA6B,CAClC,IAAI,EACJ,mCAAmC,CACpC;;AAEH,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;oBACxB,OAAO;AACL,wBAAA,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB;;AAEH,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;oBAC7B,OAAO;AACL,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,SAAS,EACP,OAAO,IAAI,CAAC,SAAS,KAAK;8BACtB,IAAI,CAAC;AACP,8BAAE,IAAI,CAAC,SAAS,CAAC,GAAG;AACxB,wBAAA,MAAM,EACJ,OAAO,IAAI,CAAC,SAAS,KAAK;AACxB,8BAAE;AACF,8BAAE,IAAI,CAAC,SAAS,CAAC,MAAM;qBAC5B;;AAEH,gBAAA,IACE,IAAI,CAAC,IAAI,KAAK,YAAY;oBAC1B,IAAI,CAAC,IAAI,KAAK,aAAa;AAC3B,oBAAA,IAAI,CAAC,IAAI,KAAK,YAAY,EAC1B;AACA,oBAAA,OAAO,IAAI;;AAEb,gBAAA,OAAO,EAAE;AACX,aAAC,CAAC;AAEF,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;AAEnD,YAAA,OAAO,QAAQ;;AAGjB,QAAA,OAAO,CAAC,IAAI,CACV,mEAAmE,IAAI,CAAA,CAAE,CAC1E;AACD,QAAA,OAAO,EAAE;AACX,KAAC,CACF;AACH;AAEM,SAAU,gBAAgB,CAAC,KAAc,EAAA;AAC7C,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5E;AAEA,SAAS,2CAA2C,CAClD,QAAsD,EAAA;AAEtD,IAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;;QAElB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI;AAChC,QAAA,MAAM,KAAK;;AAGb,IAAA,IAAI,SAA6B;IACjC,MAAM,OAAO,GAAmB,EAAE;IAClC,MAAM,UAAU,GAAe,EAAE;IACjC,MAAM,kBAAkB,GAAsB,EAAE;AAChD,IAAA,MAAM,iBAAiB,GAA4B;QACjD,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;QAC/C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;;QAGnC,UAAU,EAAE,QAAQ,CAAC,KAAK;KAC3B;IAED,MAAM,iBAAiB,GAOnB,EAAE;AAEN,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,SAAS,GAAG,IAAI,CAAC,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;oBAC/B,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;AAC3C,wBAAA,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;;oBAExC,OAAO;AACL,wBAAA,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,WAAW;qBAC9B;;AAGH,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,oBAAA,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxC,oBAAA,OAAO,EAAE;;AAGX,gBAAA,OAAO,IAAI;aACZ,CAAC,CACH;;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE;AACxC,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;gBACxD,EAAE,EAAE,IAAI,CAAC,OAAO;aACjB;AAED,YAAA,IAAI;AACF,gBAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;YAC7D,OAAO,CAAU,EAAE;AACnB,gBAAA,IAAI,UAA8B;gBAClC,IACE,OAAO,CAAC,KAAK,QAAQ;AACrB,oBAAA,CAAC,IAAI,IAAI;AACT,oBAAA,SAAS,IAAI,CAAC;AACd,oBAAA,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAC7B;AACA,oBAAA,UAAU,GAAG,CAAC,CAAC,OAAO;;gBAExB,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;;AAGrE,YAAA,iBAAiB,CAAC,0BAA0B,CAAC,KAAK,EAAE;AACpD,YAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,gBAAA,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE;;;AAElE,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAA,iBAAiB,CAAC,SAAS,GAAG,IAAI;;aAC7B;AACL,YAAA,iBAAiB,CAAC,YAAY,KAAK,EAAE;AACrC,YAAA,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAI7C,OAAO,IAAI,SAAS,CAAC;AACnB,QAAA,EAAE,EAAE,SAAS;QACb,OAAO;QACP,UAAU;QACV,kBAAkB;QAClB,cAAc,EAAE,QAAQ,CAAC,KAAK;QAC9B,iBAAiB;QACjB,iBAAiB;AAClB,KAAA,CAAC;AACJ;AAEM,SAAU,8CAA8C,CAC5D,KAAiC,EAAA;IAEjC,MAAM,OAAO,GAA8B,EAAE;IAC7C,IAAI,cAAc,GAA4B,EAAE;AAChD,IAAA,IAAI,cAAyC;IAC7C,MAAM,gBAAgB,GAAoB,EAAE;IAC5C,MAAM,iBAAiB,GAA4B,EAAE;IACrD,MAAM,iBAAiB,GAInB,EAAE;AACN,IAAA,IAAI,EAAsB;AAC1B,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,4BAA4B,EAAE;QAC/C,OAAO,CAAC,IAAI,CAAC;AACX,YAAA,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,aAAa;AAC3B,SAAA,CAAC;;;AAEG,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,uCAAuC,EAAE;QACjE,OAAO,CAAC,IAAI,CAAC;AACX,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,EAAE;;AAER,YAAA,WAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;;YAE/B,KAAK,EAAE,KAAK,CAAC,aAAa;AAC3B,SAAA,CAAC;;AACG,SAAA,IACL,KAAK,CAAC,IAAI,KAAK,4BAA4B;AAC3C,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAC7B;AACA,QAAA,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;;AACb,SAAA,IACL,KAAK,CAAC,IAAI,KAAK,4BAA4B;AAC3C,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,EACnC;QACA,gBAAgB,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;AAC1B,YAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,YAAY;AAC1B,SAAA,CAAC;QAEF,iBAAiB,CAAC,0BAA0B,CAAC,GAAG;YAC9C,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;SACpC;;AACI,SAAA,IACL,KAAK,CAAC,IAAI,KAAK,2BAA2B;AAC1C,QAAA;YACE,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,uBAAuB;YACvB,UAAU;YACV,gBAAgB;YAChB,sBAAsB;YACtB,uBAAuB;SACxB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B;QACA,iBAAiB,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;AACxC,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE;QAC5C,iBAAiB,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE;QACxC,iBAAiB,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;QACnD,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;;AACzC,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE;QAC9C,MAAM,GAAG,GAAG,2CAA2C,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEvE,QAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;AACrC,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,aAAa,EAAE;YACvD,iBAAiB,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEnD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACzD,IAAI,GAAG,KAAK,IAAI;AAAE,gBAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK;;;AAE7C,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,wCAAwC,EAAE;QAClE,gBAAgB,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,YAAY;AAC1B,SAAA,CAAC;;AACG,SAAA,IACL,KAAK,CAAC,IAAI,KAAK,oCAAoC;AACnD,QAAA,KAAK,CAAC,IAAI,KAAK,qCAAqC,EACpD;AACA,QAAA,cAAc,GAAG;AACf,YAAA,YAAY,EAAE;gBACZ,EAAE,EAAE,KAAK,CAAC,OAAO;AACjB,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACnE,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;SACF;;AACI,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE;AACjD,QAAA,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;;AACpC,SAAA,IACL,KAAK,CAAC,IAAI,KAAK,4BAA4B;AAC3C,QAAA,MAAM,IAAI,KAAK;AACf,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAC/B;QACA,MAAM,OAAO,GAAsD;AAChE,aAAA,IAAI,CAAC;AACN,cAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM;AACtC,gBAAA,GAAG,CAAC;gBACJ,KAAK;AACN,aAAA,CAAC;cACA,SAAS;QAEb,iBAAiB,CAAC,SAAS,GAAG;;;;AAI5B,YAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;AACrB,YAAA,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;SAChC;;AACI,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,uCAAuC,EAAE;QACjE,iBAAiB,CAAC,SAAS,GAAG;AAC5B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;SACzD;;AACI,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,uCAAuC,EAAE;QACjE,iBAAiB,CAAC,SAAS,GAAG;AAC5B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE;AACxE,aAAA;SACF;;;AAEI,SAAA,IAAI,KAAK,CAAC,IAAI,KAAK,8CAA8C,EAAE;;;AAGxE,QAAA,OAAO,IAAI;;SACN;AACL,QAAA,OAAO,IAAI;;IAGb,OAAO,IAAI,mBAAmB,CAAC;;AAE7B,QAAA,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,cAAc,CAAC;YAC1B,EAAE;YACF,OAAO;YACP,gBAAgB;YAChB,cAAc;YACd,iBAAiB;YACjB,iBAAiB;SAClB,CAAC;QACF,cAAc;AACf,KAAA,CAAC;AACJ;;;;"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ChatOllama } from '@langchain/ollama';
|
|
2
1
|
import { ChatMistralAI } from '@langchain/mistralai';
|
|
3
2
|
import { ChatBedrockConverse } from '@langchain/aws';
|
|
4
3
|
import { BedrockChat } from '@langchain/community/chat_models/bedrock/web';
|
|
@@ -7,6 +6,7 @@ import { CustomChatGoogleGenerativeAI } from './google/index.mjs';
|
|
|
7
6
|
import { CustomAnthropic } from './anthropic/index.mjs';
|
|
8
7
|
import { ChatOpenRouter } from './openrouter/index.mjs';
|
|
9
8
|
import { ChatVertexAI } from './vertexai/index.mjs';
|
|
9
|
+
import { ChatOllama } from './ollama/index.mjs';
|
|
10
10
|
import { Providers } from '../common/enum.mjs';
|
|
11
11
|
|
|
12
12
|
// src/llm/providers.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.mjs","sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport {
|
|
1
|
+
{"version":3,"file":"providers.mjs","sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport { ChatMistralAI } from '@langchain/mistralai';\nimport { ChatBedrockConverse } from '@langchain/aws';\n// import { ChatAnthropic } from '@langchain/anthropic';\n// import { ChatVertexAI } from '@langchain/google-vertexai';\nimport { BedrockChat } from '@langchain/community/chat_models/bedrock/web';\nimport type {\n ChatModelConstructorMap,\n ProviderOptionsMap,\n ChatModelMap,\n} from '@/types';\nimport {\n AzureChatOpenAI,\n ChatDeepSeek,\n ChatOpenAI,\n ChatXAI,\n} from '@/llm/openai';\nimport { CustomChatGoogleGenerativeAI } from '@/llm/google';\nimport { CustomAnthropic } from '@/llm/anthropic';\nimport { ChatOpenRouter } from '@/llm/openrouter';\nimport { ChatVertexAI } from '@/llm/vertexai';\nimport { ChatOllama } from '@/llm/ollama';\nimport { Providers } from '@/common';\n\nexport const llmProviders: Partial<ChatModelConstructorMap> = {\n [Providers.XAI]: ChatXAI,\n [Providers.OPENAI]: ChatOpenAI,\n [Providers.OLLAMA]: ChatOllama,\n [Providers.AZURE]: AzureChatOpenAI,\n [Providers.VERTEXAI]: ChatVertexAI,\n [Providers.DEEPSEEK]: ChatDeepSeek,\n [Providers.MISTRALAI]: ChatMistralAI,\n [Providers.MISTRAL]: ChatMistralAI,\n [Providers.ANTHROPIC]: CustomAnthropic,\n [Providers.OPENROUTER]: ChatOpenRouter,\n [Providers.BEDROCK_LEGACY]: BedrockChat,\n [Providers.BEDROCK]: ChatBedrockConverse,\n // [Providers.ANTHROPIC]: ChatAnthropic,\n [Providers.GOOGLE]: CustomChatGoogleGenerativeAI,\n};\n\nexport const manualToolStreamProviders = new Set<Providers | string>([\n Providers.ANTHROPIC,\n Providers.BEDROCK,\n Providers.OLLAMA,\n]);\n\nexport const getChatModelClass = <P extends Providers>(\n provider: P\n): new (config: ProviderOptionsMap[P]) => ChatModelMap[P] => {\n const ChatModelClass = llmProviders[provider];\n if (!ChatModelClass) {\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n\n return ChatModelClass;\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAAA;AAwBa,MAAA,YAAY,GAAqC;AAC5D,IAAA,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO;AACxB,IAAA,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU;AAC9B,IAAA,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU;AAC9B,IAAA,CAAC,SAAS,CAAC,KAAK,GAAG,eAAe;AAClC,IAAA,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;AAClC,IAAA,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;AAClC,IAAA,CAAC,SAAS,CAAC,SAAS,GAAG,aAAa;AACpC,IAAA,CAAC,SAAS,CAAC,OAAO,GAAG,aAAa;AAClC,IAAA,CAAC,SAAS,CAAC,SAAS,GAAG,eAAe;AACtC,IAAA,CAAC,SAAS,CAAC,UAAU,GAAG,cAAc;AACtC,IAAA,CAAC,SAAS,CAAC,cAAc,GAAG,WAAW;AACvC,IAAA,CAAC,SAAS,CAAC,OAAO,GAAG,mBAAmB;;AAExC,IAAA,CAAC,SAAS,CAAC,MAAM,GAAG,4BAA4B;;AAGrC,MAAA,yBAAyB,GAAG,IAAI,GAAG,CAAqB;AACnE,IAAA,SAAS,CAAC,SAAS;AACnB,IAAA,SAAS,CAAC,OAAO;AACjB,IAAA,SAAS,CAAC,MAAM;AACjB,CAAA;AAEY,MAAA,iBAAiB,GAAG,CAC/B,QAAW,KAC+C;AAC1D,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC;IAC7C,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,CAAE,CAAC;;AAG1D,IAAA,OAAO,cAAc;AACvB;;;;"}
|
|
@@ -15,12 +15,14 @@ class BaseReranker {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
class JinaReranker extends BaseReranker {
|
|
18
|
-
|
|
18
|
+
apiUrl;
|
|
19
|
+
constructor({ apiKey = process.env.JINA_API_KEY, apiUrl = process.env.JINA_API_URL || 'https://api.jina.ai/v1/rerank', logger, }) {
|
|
19
20
|
super(logger);
|
|
20
21
|
this.apiKey = apiKey;
|
|
22
|
+
this.apiUrl = apiUrl;
|
|
21
23
|
}
|
|
22
24
|
async rerank(query, documents, topK = 5) {
|
|
23
|
-
this.logger.debug(`Reranking ${documents.length} chunks with Jina`);
|
|
25
|
+
this.logger.debug(`Reranking ${documents.length} chunks with Jina using API URL: ${this.apiUrl}`);
|
|
24
26
|
try {
|
|
25
27
|
if (this.apiKey == null || this.apiKey === '') {
|
|
26
28
|
this.logger.warn('JINA_API_KEY is not set. Using default ranking.');
|
|
@@ -33,7 +35,7 @@ class JinaReranker extends BaseReranker {
|
|
|
33
35
|
documents: documents,
|
|
34
36
|
return_documents: true,
|
|
35
37
|
};
|
|
36
|
-
const response = await axios.post(
|
|
38
|
+
const response = await axios.post(this.apiUrl, requestData, {
|
|
37
39
|
headers: {
|
|
38
40
|
'Content-Type': 'application/json',
|
|
39
41
|
Authorization: `Bearer ${this.apiKey}`,
|
|
@@ -136,12 +138,12 @@ class InfinityReranker extends BaseReranker {
|
|
|
136
138
|
* Creates the appropriate reranker based on type and configuration
|
|
137
139
|
*/
|
|
138
140
|
const createReranker = (config) => {
|
|
139
|
-
const { rerankerType, jinaApiKey, cohereApiKey, logger } = config;
|
|
141
|
+
const { rerankerType, jinaApiKey, jinaApiUrl, cohereApiKey, logger } = config;
|
|
140
142
|
// Create a default logger if none is provided
|
|
141
143
|
const defaultLogger = logger || createDefaultLogger();
|
|
142
144
|
switch (rerankerType.toLowerCase()) {
|
|
143
145
|
case 'jina':
|
|
144
|
-
return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });
|
|
146
|
+
return new JinaReranker({ apiKey: jinaApiKey, apiUrl: jinaApiUrl, logger: defaultLogger });
|
|
145
147
|
case 'cohere':
|
|
146
148
|
return new CohereReranker({
|
|
147
149
|
apiKey: cohereApiKey,
|
|
@@ -154,7 +156,7 @@ const createReranker = (config) => {
|
|
|
154
156
|
return undefined;
|
|
155
157
|
default:
|
|
156
158
|
defaultLogger.warn(`Unknown reranker type: ${rerankerType}. Defaulting to InfinityReranker.`);
|
|
157
|
-
return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });
|
|
159
|
+
return new JinaReranker({ apiKey: jinaApiKey, apiUrl: jinaApiUrl, logger: defaultLogger });
|
|
158
160
|
}
|
|
159
161
|
};
|
|
160
162
|
// Example usage:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rerankers.mjs","sources":["../../../../src/tools/search/rerankers.ts"],"sourcesContent":["import axios from 'axios';\nimport type * as t from './types';\nimport { createDefaultLogger } from './utils';\n\nexport abstract class BaseReranker {\n protected apiKey: string | undefined;\n protected logger: t.Logger;\n\n constructor(logger?: t.Logger) {\n // Each specific reranker will set its API key\n this.logger = logger || createDefaultLogger();\n }\n\n abstract rerank(\n query: string,\n documents: string[],\n topK?: number\n ): Promise<t.Highlight[]>;\n\n protected getDefaultRanking(\n documents: string[],\n topK: number\n ): t.Highlight[] {\n return documents\n .slice(0, Math.min(topK, documents.length))\n .map((doc) => ({ text: doc, score: 0 }));\n }\n}\n\nexport class JinaReranker extends BaseReranker {\n constructor({\n apiKey = process.env.JINA_API_KEY,\n logger,\n }: {\n apiKey?: string;\n logger?: t.Logger;\n }) {\n super(logger);\n this.apiKey = apiKey;\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(`Reranking ${documents.length} chunks with Jina`);\n\n try {\n if (this.apiKey == null || this.apiKey === '') {\n this.logger.warn('JINA_API_KEY is not set. Using default ranking.');\n return this.getDefaultRanking(documents, topK);\n }\n\n const requestData = {\n model: 'jina-reranker-v2-base-multilingual',\n query: query,\n top_n: topK,\n documents: documents,\n return_documents: true,\n };\n\n const response = await axios.post<t.JinaRerankerResponse | undefined>(\n 'https://api.jina.ai/v1/rerank',\n requestData,\n {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n }\n );\n\n this.logger.debug('Jina API Model:', response.data?.model);\n this.logger.debug('Jina API Usage:', response.data?.usage);\n\n if (response.data && response.data.results.length) {\n return response.data.results.map((result) => {\n const docIndex = result.index;\n const score = result.relevance_score;\n let text = '';\n\n // If return_documents is true, the document field will be present\n if (result.document != null) {\n const doc = result.document;\n if (typeof doc === 'object' && 'text' in doc) {\n text = doc.text;\n } else if (typeof doc === 'string') {\n text = doc;\n }\n } else {\n // Otherwise, use the index to get the document\n text = documents[docIndex];\n }\n\n return { text, score };\n });\n } else {\n this.logger.warn(\n 'Unexpected response format from Jina API. Using default ranking.'\n );\n return this.getDefaultRanking(documents, topK);\n }\n } catch (error) {\n this.logger.error('Error using Jina reranker:', error);\n // Fallback to default ranking on error\n return this.getDefaultRanking(documents, topK);\n }\n }\n}\n\nexport class CohereReranker extends BaseReranker {\n constructor({\n apiKey = process.env.COHERE_API_KEY,\n logger,\n }: {\n apiKey?: string;\n logger?: t.Logger;\n }) {\n super(logger);\n this.apiKey = apiKey;\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(`Reranking ${documents.length} chunks with Cohere`);\n\n try {\n if (this.apiKey == null || this.apiKey === '') {\n this.logger.warn('COHERE_API_KEY is not set. Using default ranking.');\n return this.getDefaultRanking(documents, topK);\n }\n\n const requestData = {\n model: 'rerank-v3.5',\n query: query,\n top_n: topK,\n documents: documents,\n };\n\n const response = await axios.post<t.CohereRerankerResponse | undefined>(\n 'https://api.cohere.com/v2/rerank',\n requestData,\n {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n }\n );\n\n this.logger.debug('Cohere API ID:', response.data?.id);\n this.logger.debug('Cohere API Meta:', response.data?.meta);\n\n if (response.data && response.data.results.length) {\n return response.data.results.map((result) => {\n const docIndex = result.index;\n const score = result.relevance_score;\n const text = documents[docIndex];\n return { text, score };\n });\n } else {\n this.logger.warn(\n 'Unexpected response format from Cohere API. Using default ranking.'\n );\n return this.getDefaultRanking(documents, topK);\n }\n } catch (error) {\n this.logger.error('Error using Cohere reranker:', error);\n // Fallback to default ranking on error\n return this.getDefaultRanking(documents, topK);\n }\n }\n}\n\nexport class InfinityReranker extends BaseReranker {\n constructor(logger?: t.Logger) {\n super(logger);\n // No API key needed for the placeholder implementation\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(\n `Reranking ${documents.length} chunks with Infinity (placeholder)`\n );\n // This would be replaced with actual Infinity reranker implementation\n return this.getDefaultRanking(documents, topK);\n }\n}\n\n/**\n * Creates the appropriate reranker based on type and configuration\n */\nexport const createReranker = (config: {\n rerankerType: t.RerankerType;\n jinaApiKey?: string;\n cohereApiKey?: string;\n logger?: t.Logger;\n}): BaseReranker | undefined => {\n const { rerankerType, jinaApiKey, cohereApiKey, logger } = config;\n\n // Create a default logger if none is provided\n const defaultLogger = logger || createDefaultLogger();\n\n switch (rerankerType.toLowerCase()) {\n case 'jina':\n return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });\n case 'cohere':\n return new CohereReranker({\n apiKey: cohereApiKey,\n logger: defaultLogger,\n });\n case 'infinity':\n return new InfinityReranker(defaultLogger);\n case 'none':\n defaultLogger.debug('Skipping reranking as reranker is set to \"none\"');\n return undefined;\n default:\n defaultLogger.warn(\n `Unknown reranker type: ${rerankerType}. Defaulting to InfinityReranker.`\n );\n return new JinaReranker({ apiKey: jinaApiKey, logger: defaultLogger });\n }\n};\n\n// Example usage:\n// const jinaReranker = new JinaReranker();\n// const cohereReranker = new CohereReranker();\n// const infinityReranker = new InfinityReranker();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rerankers.mjs","sources":["../../../../src/tools/search/rerankers.ts"],"sourcesContent":["import axios from 'axios';\nimport type * as t from './types';\nimport { createDefaultLogger } from './utils';\n\nexport abstract class BaseReranker {\n protected apiKey: string | undefined;\n protected logger: t.Logger;\n\n constructor(logger?: t.Logger) {\n // Each specific reranker will set its API key\n this.logger = logger || createDefaultLogger();\n }\n\n abstract rerank(\n query: string,\n documents: string[],\n topK?: number\n ): Promise<t.Highlight[]>;\n\n protected getDefaultRanking(\n documents: string[],\n topK: number\n ): t.Highlight[] {\n return documents\n .slice(0, Math.min(topK, documents.length))\n .map((doc) => ({ text: doc, score: 0 }));\n }\n}\n\nexport class JinaReranker extends BaseReranker {\n private apiUrl: string;\n\n constructor({\n apiKey = process.env.JINA_API_KEY,\n apiUrl = process.env.JINA_API_URL || 'https://api.jina.ai/v1/rerank',\n logger,\n }: {\n apiKey?: string;\n apiUrl?: string;\n logger?: t.Logger;\n }) {\n super(logger);\n this.apiKey = apiKey;\n this.apiUrl = apiUrl;\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(`Reranking ${documents.length} chunks with Jina using API URL: ${this.apiUrl}`);\n\n try {\n if (this.apiKey == null || this.apiKey === '') {\n this.logger.warn('JINA_API_KEY is not set. Using default ranking.');\n return this.getDefaultRanking(documents, topK);\n }\n\n const requestData = {\n model: 'jina-reranker-v2-base-multilingual',\n query: query,\n top_n: topK,\n documents: documents,\n return_documents: true,\n };\n\n const response = await axios.post<t.JinaRerankerResponse | undefined>(\n this.apiUrl,\n requestData,\n {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n }\n );\n\n this.logger.debug('Jina API Model:', response.data?.model);\n this.logger.debug('Jina API Usage:', response.data?.usage);\n\n if (response.data && response.data.results.length) {\n return response.data.results.map((result) => {\n const docIndex = result.index;\n const score = result.relevance_score;\n let text = '';\n\n // If return_documents is true, the document field will be present\n if (result.document != null) {\n const doc = result.document;\n if (typeof doc === 'object' && 'text' in doc) {\n text = doc.text;\n } else if (typeof doc === 'string') {\n text = doc;\n }\n } else {\n // Otherwise, use the index to get the document\n text = documents[docIndex];\n }\n\n return { text, score };\n });\n } else {\n this.logger.warn(\n 'Unexpected response format from Jina API. Using default ranking.'\n );\n return this.getDefaultRanking(documents, topK);\n }\n } catch (error) {\n this.logger.error('Error using Jina reranker:', error);\n // Fallback to default ranking on error\n return this.getDefaultRanking(documents, topK);\n }\n }\n}\n\nexport class CohereReranker extends BaseReranker {\n constructor({\n apiKey = process.env.COHERE_API_KEY,\n logger,\n }: {\n apiKey?: string;\n logger?: t.Logger;\n }) {\n super(logger);\n this.apiKey = apiKey;\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(`Reranking ${documents.length} chunks with Cohere`);\n\n try {\n if (this.apiKey == null || this.apiKey === '') {\n this.logger.warn('COHERE_API_KEY is not set. Using default ranking.');\n return this.getDefaultRanking(documents, topK);\n }\n\n const requestData = {\n model: 'rerank-v3.5',\n query: query,\n top_n: topK,\n documents: documents,\n };\n\n const response = await axios.post<t.CohereRerankerResponse | undefined>(\n 'https://api.cohere.com/v2/rerank',\n requestData,\n {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n }\n );\n\n this.logger.debug('Cohere API ID:', response.data?.id);\n this.logger.debug('Cohere API Meta:', response.data?.meta);\n\n if (response.data && response.data.results.length) {\n return response.data.results.map((result) => {\n const docIndex = result.index;\n const score = result.relevance_score;\n const text = documents[docIndex];\n return { text, score };\n });\n } else {\n this.logger.warn(\n 'Unexpected response format from Cohere API. Using default ranking.'\n );\n return this.getDefaultRanking(documents, topK);\n }\n } catch (error) {\n this.logger.error('Error using Cohere reranker:', error);\n // Fallback to default ranking on error\n return this.getDefaultRanking(documents, topK);\n }\n }\n}\n\nexport class InfinityReranker extends BaseReranker {\n constructor(logger?: t.Logger) {\n super(logger);\n // No API key needed for the placeholder implementation\n }\n\n async rerank(\n query: string,\n documents: string[],\n topK: number = 5\n ): Promise<t.Highlight[]> {\n this.logger.debug(\n `Reranking ${documents.length} chunks with Infinity (placeholder)`\n );\n // This would be replaced with actual Infinity reranker implementation\n return this.getDefaultRanking(documents, topK);\n }\n}\n\n/**\n * Creates the appropriate reranker based on type and configuration\n */\nexport const createReranker = (config: {\n rerankerType: t.RerankerType;\n jinaApiKey?: string;\n jinaApiUrl?: string;\n cohereApiKey?: string;\n logger?: t.Logger;\n}): BaseReranker | undefined => {\n const { rerankerType, jinaApiKey, jinaApiUrl, cohereApiKey, logger } = config;\n\n // Create a default logger if none is provided\n const defaultLogger = logger || createDefaultLogger();\n\n switch (rerankerType.toLowerCase()) {\n case 'jina':\n return new JinaReranker({ apiKey: jinaApiKey, apiUrl: jinaApiUrl, logger: defaultLogger });\n case 'cohere':\n return new CohereReranker({\n apiKey: cohereApiKey,\n logger: defaultLogger,\n });\n case 'infinity':\n return new InfinityReranker(defaultLogger);\n case 'none':\n defaultLogger.debug('Skipping reranking as reranker is set to \"none\"');\n return undefined;\n default:\n defaultLogger.warn(\n `Unknown reranker type: ${rerankerType}. Defaulting to InfinityReranker.`\n );\n return new JinaReranker({ apiKey: jinaApiKey, apiUrl: jinaApiUrl, logger: defaultLogger });\n }\n};\n\n// Example usage:\n// const jinaReranker = new JinaReranker();\n// const cohereReranker = new CohereReranker();\n// const infinityReranker = new InfinityReranker();\n"],"names":[],"mappings":"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"}
|
|
@@ -234,7 +234,7 @@ Use anchor marker(s) immediately after the statement:
|
|
|
234
234
|
* @returns A DynamicStructuredTool with a schema that depends on the searchProvider
|
|
235
235
|
*/
|
|
236
236
|
const createSearchTool = (config = {}) => {
|
|
237
|
-
const { searchProvider = 'serper', serperApiKey, searxngInstanceUrl, searxngApiKey, rerankerType = 'cohere', topResults = 5, strategies = ['no_extraction'], filterContent = true, safeSearch = 1, firecrawlApiKey, firecrawlApiUrl, firecrawlOptions, scraperTimeout, jinaApiKey, cohereApiKey, onSearchResults: _onSearchResults, onGetHighlights, } = config;
|
|
237
|
+
const { searchProvider = 'serper', serperApiKey, searxngInstanceUrl, searxngApiKey, rerankerType = 'cohere', topResults = 5, strategies = ['no_extraction'], filterContent = true, safeSearch = 1, firecrawlApiKey, firecrawlApiUrl, firecrawlOptions, scraperTimeout, jinaApiKey, jinaApiUrl, cohereApiKey, onSearchResults: _onSearchResults, onGetHighlights, } = config;
|
|
238
238
|
const logger = config.logger || createDefaultLogger();
|
|
239
239
|
const schemaObject = {
|
|
240
240
|
query: querySchema,
|
|
@@ -263,6 +263,7 @@ const createSearchTool = (config = {}) => {
|
|
|
263
263
|
const selectedReranker = createReranker({
|
|
264
264
|
rerankerType,
|
|
265
265
|
jinaApiKey,
|
|
266
|
+
jinaApiUrl,
|
|
266
267
|
cohereApiKey,
|
|
267
268
|
logger,
|
|
268
269
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.mjs","sources":["../../../../src/tools/search/tool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type * as t from './types';\nimport {\n DATE_RANGE,\n querySchema,\n dateSchema,\n countrySchema,\n imagesSchema,\n videosSchema,\n newsSchema,\n} from './schema';\nimport { createSearchAPI, createSourceProcessor } from './search';\nimport { createFirecrawlScraper } from './firecrawl';\nimport { expandHighlights } from './highlights';\nimport { formatResultsForLLM } from './format';\nimport { createDefaultLogger } from './utils';\nimport { createReranker } from './rerankers';\nimport { Constants } from '@/common';\n\n/**\n * Executes parallel searches and merges the results\n */\nasync function executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n}: {\n searchAPI: ReturnType<typeof createSearchAPI>;\n query: string;\n date?: DATE_RANGE;\n country?: string;\n safeSearch: t.SearchToolConfig['safeSearch'];\n images: boolean;\n videos: boolean;\n news: boolean;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n // Prepare all search tasks to run in parallel\n const searchTasks: Promise<t.SearchResult>[] = [\n // Main search\n searchAPI.getSources({\n query,\n date,\n country,\n safeSearch,\n }),\n ];\n\n if (images) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'images',\n })\n .catch((error) => {\n logger.error('Error fetching images:', error);\n return {\n success: false,\n error: `Images search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (videos) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'videos',\n })\n .catch((error) => {\n logger.error('Error fetching videos:', error);\n return {\n success: false,\n error: `Videos search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (news) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'news',\n })\n .catch((error) => {\n logger.error('Error fetching news:', error);\n return {\n success: false,\n error: `News search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n\n // Run all searches in parallel\n const results = await Promise.all(searchTasks);\n\n // Get the main search result (first result)\n const mainResult = results[0];\n if (!mainResult.success) {\n throw new Error(mainResult.error ?? 'Search failed');\n }\n\n // Merge additional results with the main results\n const mergedResults = { ...mainResult.data };\n\n // Convert existing news to topStories if present\n if (mergedResults.news !== undefined && mergedResults.news.length > 0) {\n const existingNewsAsTopStories = mergedResults.news\n .filter((newsItem) => newsItem.link !== undefined && newsItem.link !== '')\n .map((newsItem) => ({\n title: newsItem.title ?? '',\n link: newsItem.link ?? '',\n source: newsItem.source ?? '',\n date: newsItem.date ?? '',\n imageUrl: newsItem.imageUrl ?? '',\n processed: false,\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...existingNewsAsTopStories,\n ];\n delete mergedResults.news;\n }\n\n results.slice(1).forEach((result) => {\n if (result.success && result.data !== undefined) {\n if (result.data.images !== undefined && result.data.images.length > 0) {\n mergedResults.images = [\n ...(mergedResults.images ?? []),\n ...result.data.images,\n ];\n }\n if (result.data.videos !== undefined && result.data.videos.length > 0) {\n mergedResults.videos = [\n ...(mergedResults.videos ?? []),\n ...result.data.videos,\n ];\n }\n if (result.data.news !== undefined && result.data.news.length > 0) {\n const newsAsTopStories = result.data.news.map((newsItem) => ({\n ...newsItem,\n link: newsItem.link ?? '',\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...newsAsTopStories,\n ];\n }\n }\n });\n\n return { success: true, data: mergedResults };\n}\n\nfunction createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n onGetHighlights,\n logger,\n}: {\n safeSearch: t.SearchToolConfig['safeSearch'];\n searchAPI: ReturnType<typeof createSearchAPI>;\n sourceProcessor: ReturnType<typeof createSourceProcessor>;\n onGetHighlights: t.SearchToolConfig['onGetHighlights'];\n logger: t.Logger;\n}) {\n return async function ({\n query,\n date,\n country,\n proMode = true,\n maxSources = 5,\n onSearchResults,\n images = false,\n videos = false,\n news = false,\n }: {\n query: string;\n country?: string;\n date?: DATE_RANGE;\n proMode?: boolean;\n maxSources?: number;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n }): Promise<t.SearchResultData> {\n try {\n // Execute parallel searches and merge results\n const searchResult = await executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n });\n\n onSearchResults?.(searchResult);\n\n const processedSources = await sourceProcessor.processSources({\n query,\n news,\n result: searchResult,\n proMode,\n onGetHighlights,\n numElements: maxSources,\n });\n\n return expandHighlights(processedSources);\n } catch (error) {\n logger.error('Error in search:', error);\n return {\n organic: [],\n topStories: [],\n images: [],\n videos: [],\n news: [],\n relatedSearches: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n}\n\nfunction createOnSearchResults({\n runnableConfig,\n onSearchResults,\n}: {\n runnableConfig: RunnableConfig;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}) {\n return function (results: t.SearchResult): void {\n if (!onSearchResults) {\n return;\n }\n onSearchResults(results, runnableConfig);\n };\n}\n\nfunction createTool({\n schema,\n search,\n onSearchResults: _onSearchResults,\n}: {\n schema: t.SearchToolSchema;\n search: ReturnType<typeof createSearchProcessor>;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}): DynamicStructuredTool<typeof schema> {\n return tool<typeof schema>(\n async (params, runnableConfig) => {\n const { query, date, country: _c, images, videos, news } = params;\n const country = typeof _c === 'string' && _c ? _c : undefined;\n const searchResult = await search({\n query,\n date,\n country,\n images,\n videos,\n news,\n onSearchResults: createOnSearchResults({\n runnableConfig,\n onSearchResults: _onSearchResults,\n }),\n });\n const turn = runnableConfig.toolCall?.turn ?? 0;\n const { output, references } = formatResultsForLLM(turn, searchResult);\n const data: t.SearchResultData = { turn, ...searchResult, references };\n return [output, { [Constants.WEB_SEARCH]: data }];\n },\n {\n name: Constants.WEB_SEARCH,\n description: `Real-time search. Results have required citation anchors.\n\nNote: Use ONCE per reply unless instructed otherwise.\n\nAnchors:\n- \\\\ue202turnXtypeY\n- X = turn idx, type = 'search' | 'news' | 'image' | 'ref', Y = item idx\n\nSpecial Markers:\n- \\\\ue203...\\\\ue204 — highlight start/end of cited text (for Standalone or Group citations)\n- \\\\ue200...\\\\ue201 — group block (e.g. \\\\ue200\\\\ue202turn0search1\\\\ue202turn0news2\\\\ue201)\n\n**CITE EVERY NON-OBVIOUS FACT/QUOTE:**\nUse anchor marker(s) immediately after the statement:\n- Standalone: \"Pure functions produce same output. \\\\ue202turn0search0\"\n- Standalone (multiple): \"Today's News \\\\ue202turn0search0\\\\ue202turn0news0\"\n- Highlight: \"\\\\ue203Highlight text.\\\\ue204\\\\ue202turn0news1\"\n- Group: \"Sources. \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Group Highlight: \"\\\\ue203Highlight for group.\\\\ue204 \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Image: \"See photo \\\\ue202turn0image0.\"\n\n**NEVER use markdown links, [1], or footnotes. CITE ONLY with anchors provided.**\n`.trim(),\n schema: schema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\n/**\n * Creates a search tool with a schema that dynamically includes the country field\n * only when the searchProvider is 'serper'.\n *\n * @param config - The search tool configuration\n * @returns A DynamicStructuredTool with a schema that depends on the searchProvider\n */\nexport const createSearchTool = (\n config: t.SearchToolConfig = {}\n): DynamicStructuredTool<typeof toolSchema> => {\n const {\n searchProvider = 'serper',\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n rerankerType = 'cohere',\n topResults = 5,\n strategies = ['no_extraction'],\n filterContent = true,\n safeSearch = 1,\n firecrawlApiKey,\n firecrawlApiUrl,\n firecrawlOptions,\n scraperTimeout,\n jinaApiKey,\n cohereApiKey,\n onSearchResults: _onSearchResults,\n onGetHighlights,\n } = config;\n\n const logger = config.logger || createDefaultLogger();\n\n const schemaObject: {\n query: z.ZodString;\n date: z.ZodOptional<z.ZodNativeEnum<typeof DATE_RANGE>>;\n country?: z.ZodOptional<z.ZodString>;\n images: z.ZodOptional<z.ZodBoolean>;\n videos: z.ZodOptional<z.ZodBoolean>;\n news: z.ZodOptional<z.ZodBoolean>;\n } = {\n query: querySchema,\n date: dateSchema,\n images: imagesSchema,\n videos: videosSchema,\n news: newsSchema,\n };\n\n if (searchProvider === 'serper') {\n schemaObject.country = countrySchema;\n }\n\n const toolSchema = z.object(schemaObject);\n\n const searchAPI = createSearchAPI({\n searchProvider,\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n });\n\n const firecrawlScraper = createFirecrawlScraper({\n ...firecrawlOptions,\n apiKey: firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY,\n apiUrl: firecrawlApiUrl,\n timeout: scraperTimeout ?? firecrawlOptions?.timeout,\n formats: firecrawlOptions?.formats ?? ['markdown', 'rawHtml'],\n });\n\n const selectedReranker = createReranker({\n rerankerType,\n jinaApiKey,\n cohereApiKey,\n logger,\n });\n\n if (!selectedReranker) {\n logger.warn('No reranker selected. Using default ranking.');\n }\n\n const sourceProcessor = createSourceProcessor(\n {\n reranker: selectedReranker,\n topResults,\n strategies,\n filterContent,\n logger,\n },\n firecrawlScraper\n );\n\n const search = createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n onGetHighlights,\n logger,\n });\n\n return createTool({\n search,\n schema: toolSchema,\n onSearchResults: _onSearchResults,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool.mjs","sources":["../../../../src/tools/search/tool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type * as t from './types';\nimport {\n DATE_RANGE,\n querySchema,\n dateSchema,\n countrySchema,\n imagesSchema,\n videosSchema,\n newsSchema,\n} from './schema';\nimport { createSearchAPI, createSourceProcessor } from './search';\nimport { createFirecrawlScraper } from './firecrawl';\nimport { expandHighlights } from './highlights';\nimport { formatResultsForLLM } from './format';\nimport { createDefaultLogger } from './utils';\nimport { createReranker } from './rerankers';\nimport { Constants } from '@/common';\n\n/**\n * Executes parallel searches and merges the results\n */\nasync function executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n}: {\n searchAPI: ReturnType<typeof createSearchAPI>;\n query: string;\n date?: DATE_RANGE;\n country?: string;\n safeSearch: t.SearchToolConfig['safeSearch'];\n images: boolean;\n videos: boolean;\n news: boolean;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n // Prepare all search tasks to run in parallel\n const searchTasks: Promise<t.SearchResult>[] = [\n // Main search\n searchAPI.getSources({\n query,\n date,\n country,\n safeSearch,\n }),\n ];\n\n if (images) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'images',\n })\n .catch((error) => {\n logger.error('Error fetching images:', error);\n return {\n success: false,\n error: `Images search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (videos) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'videos',\n })\n .catch((error) => {\n logger.error('Error fetching videos:', error);\n return {\n success: false,\n error: `Videos search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (news) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'news',\n })\n .catch((error) => {\n logger.error('Error fetching news:', error);\n return {\n success: false,\n error: `News search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n\n // Run all searches in parallel\n const results = await Promise.all(searchTasks);\n\n // Get the main search result (first result)\n const mainResult = results[0];\n if (!mainResult.success) {\n throw new Error(mainResult.error ?? 'Search failed');\n }\n\n // Merge additional results with the main results\n const mergedResults = { ...mainResult.data };\n\n // Convert existing news to topStories if present\n if (mergedResults.news !== undefined && mergedResults.news.length > 0) {\n const existingNewsAsTopStories = mergedResults.news\n .filter((newsItem) => newsItem.link !== undefined && newsItem.link !== '')\n .map((newsItem) => ({\n title: newsItem.title ?? '',\n link: newsItem.link ?? '',\n source: newsItem.source ?? '',\n date: newsItem.date ?? '',\n imageUrl: newsItem.imageUrl ?? '',\n processed: false,\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...existingNewsAsTopStories,\n ];\n delete mergedResults.news;\n }\n\n results.slice(1).forEach((result) => {\n if (result.success && result.data !== undefined) {\n if (result.data.images !== undefined && result.data.images.length > 0) {\n mergedResults.images = [\n ...(mergedResults.images ?? []),\n ...result.data.images,\n ];\n }\n if (result.data.videos !== undefined && result.data.videos.length > 0) {\n mergedResults.videos = [\n ...(mergedResults.videos ?? []),\n ...result.data.videos,\n ];\n }\n if (result.data.news !== undefined && result.data.news.length > 0) {\n const newsAsTopStories = result.data.news.map((newsItem) => ({\n ...newsItem,\n link: newsItem.link ?? '',\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...newsAsTopStories,\n ];\n }\n }\n });\n\n return { success: true, data: mergedResults };\n}\n\nfunction createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n onGetHighlights,\n logger,\n}: {\n safeSearch: t.SearchToolConfig['safeSearch'];\n searchAPI: ReturnType<typeof createSearchAPI>;\n sourceProcessor: ReturnType<typeof createSourceProcessor>;\n onGetHighlights: t.SearchToolConfig['onGetHighlights'];\n logger: t.Logger;\n}) {\n return async function ({\n query,\n date,\n country,\n proMode = true,\n maxSources = 5,\n onSearchResults,\n images = false,\n videos = false,\n news = false,\n }: {\n query: string;\n country?: string;\n date?: DATE_RANGE;\n proMode?: boolean;\n maxSources?: number;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n }): Promise<t.SearchResultData> {\n try {\n // Execute parallel searches and merge results\n const searchResult = await executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n });\n\n onSearchResults?.(searchResult);\n\n const processedSources = await sourceProcessor.processSources({\n query,\n news,\n result: searchResult,\n proMode,\n onGetHighlights,\n numElements: maxSources,\n });\n\n return expandHighlights(processedSources);\n } catch (error) {\n logger.error('Error in search:', error);\n return {\n organic: [],\n topStories: [],\n images: [],\n videos: [],\n news: [],\n relatedSearches: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n}\n\nfunction createOnSearchResults({\n runnableConfig,\n onSearchResults,\n}: {\n runnableConfig: RunnableConfig;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}) {\n return function (results: t.SearchResult): void {\n if (!onSearchResults) {\n return;\n }\n onSearchResults(results, runnableConfig);\n };\n}\n\nfunction createTool({\n schema,\n search,\n onSearchResults: _onSearchResults,\n}: {\n schema: t.SearchToolSchema;\n search: ReturnType<typeof createSearchProcessor>;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}): DynamicStructuredTool<typeof schema> {\n return tool<typeof schema>(\n async (params, runnableConfig) => {\n const { query, date, country: _c, images, videos, news } = params;\n const country = typeof _c === 'string' && _c ? _c : undefined;\n const searchResult = await search({\n query,\n date,\n country,\n images,\n videos,\n news,\n onSearchResults: createOnSearchResults({\n runnableConfig,\n onSearchResults: _onSearchResults,\n }),\n });\n const turn = runnableConfig.toolCall?.turn ?? 0;\n const { output, references } = formatResultsForLLM(turn, searchResult);\n const data: t.SearchResultData = { turn, ...searchResult, references };\n return [output, { [Constants.WEB_SEARCH]: data }];\n },\n {\n name: Constants.WEB_SEARCH,\n description: `Real-time search. Results have required citation anchors.\n\nNote: Use ONCE per reply unless instructed otherwise.\n\nAnchors:\n- \\\\ue202turnXtypeY\n- X = turn idx, type = 'search' | 'news' | 'image' | 'ref', Y = item idx\n\nSpecial Markers:\n- \\\\ue203...\\\\ue204 — highlight start/end of cited text (for Standalone or Group citations)\n- \\\\ue200...\\\\ue201 — group block (e.g. \\\\ue200\\\\ue202turn0search1\\\\ue202turn0news2\\\\ue201)\n\n**CITE EVERY NON-OBVIOUS FACT/QUOTE:**\nUse anchor marker(s) immediately after the statement:\n- Standalone: \"Pure functions produce same output. \\\\ue202turn0search0\"\n- Standalone (multiple): \"Today's News \\\\ue202turn0search0\\\\ue202turn0news0\"\n- Highlight: \"\\\\ue203Highlight text.\\\\ue204\\\\ue202turn0news1\"\n- Group: \"Sources. \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Group Highlight: \"\\\\ue203Highlight for group.\\\\ue204 \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Image: \"See photo \\\\ue202turn0image0.\"\n\n**NEVER use markdown links, [1], or footnotes. CITE ONLY with anchors provided.**\n`.trim(),\n schema: schema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\n/**\n * Creates a search tool with a schema that dynamically includes the country field\n * only when the searchProvider is 'serper'.\n *\n * @param config - The search tool configuration\n * @returns A DynamicStructuredTool with a schema that depends on the searchProvider\n */\nexport const createSearchTool = (\n config: t.SearchToolConfig = {}\n): DynamicStructuredTool<typeof toolSchema> => {\n const {\n searchProvider = 'serper',\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n rerankerType = 'cohere',\n topResults = 5,\n strategies = ['no_extraction'],\n filterContent = true,\n safeSearch = 1,\n firecrawlApiKey,\n firecrawlApiUrl,\n firecrawlOptions,\n scraperTimeout,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n onSearchResults: _onSearchResults,\n onGetHighlights,\n } = config;\n\n const logger = config.logger || createDefaultLogger();\n\n const schemaObject: {\n query: z.ZodString;\n date: z.ZodOptional<z.ZodNativeEnum<typeof DATE_RANGE>>;\n country?: z.ZodOptional<z.ZodString>;\n images: z.ZodOptional<z.ZodBoolean>;\n videos: z.ZodOptional<z.ZodBoolean>;\n news: z.ZodOptional<z.ZodBoolean>;\n } = {\n query: querySchema,\n date: dateSchema,\n images: imagesSchema,\n videos: videosSchema,\n news: newsSchema,\n };\n\n if (searchProvider === 'serper') {\n schemaObject.country = countrySchema;\n }\n\n const toolSchema = z.object(schemaObject);\n\n const searchAPI = createSearchAPI({\n searchProvider,\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n });\n\n const firecrawlScraper = createFirecrawlScraper({\n ...firecrawlOptions,\n apiKey: firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY,\n apiUrl: firecrawlApiUrl,\n timeout: scraperTimeout ?? firecrawlOptions?.timeout,\n formats: firecrawlOptions?.formats ?? ['markdown', 'rawHtml'],\n });\n\n const selectedReranker = createReranker({\n rerankerType,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n logger,\n });\n\n if (!selectedReranker) {\n logger.warn('No reranker selected. Using default ranking.');\n }\n\n const sourceProcessor = createSourceProcessor(\n {\n reranker: selectedReranker,\n topResults,\n strategies,\n filterContent,\n logger,\n },\n firecrawlScraper\n );\n\n const search = createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n onGetHighlights,\n logger,\n });\n\n return createTool({\n search,\n schema: toolSchema,\n onSearchResults: _onSearchResults,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
2
|
+
import { ChatOllama as BaseChatOllama } from '@langchain/ollama';
|
|
3
|
+
import { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
|
|
4
|
+
import type { BaseMessage } from '@langchain/core/messages';
|
|
5
|
+
export declare class ChatOllama extends BaseChatOllama {
|
|
6
|
+
_streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AIMessageChunk, BaseMessage, UsageMetadata } from '@langchain/core/messages';
|
|
2
|
+
import type { Message as OllamaMessage } from 'ollama';
|
|
3
|
+
export declare function convertOllamaMessagesToLangChain(messages: OllamaMessage, extra?: {
|
|
4
|
+
responseMetadata?: Record<string, any>;
|
|
5
|
+
usageMetadata?: UsageMetadata;
|
|
6
|
+
}): AIMessageChunk;
|
|
7
|
+
export declare function convertToOllamaMessages(messages: BaseMessage[]): OllamaMessage[];
|
|
@@ -7,8 +7,10 @@ export declare abstract class BaseReranker {
|
|
|
7
7
|
protected getDefaultRanking(documents: string[], topK: number): t.Highlight[];
|
|
8
8
|
}
|
|
9
9
|
export declare class JinaReranker extends BaseReranker {
|
|
10
|
-
|
|
10
|
+
private apiUrl;
|
|
11
|
+
constructor({ apiKey, apiUrl, logger, }: {
|
|
11
12
|
apiKey?: string;
|
|
13
|
+
apiUrl?: string;
|
|
12
14
|
logger?: t.Logger;
|
|
13
15
|
});
|
|
14
16
|
rerank(query: string, documents: string[], topK?: number): Promise<t.Highlight[]>;
|
|
@@ -30,6 +32,7 @@ export declare class InfinityReranker extends BaseReranker {
|
|
|
30
32
|
export declare const createReranker: (config: {
|
|
31
33
|
rerankerType: t.RerankerType;
|
|
32
34
|
jinaApiKey?: string;
|
|
35
|
+
jinaApiUrl?: string;
|
|
33
36
|
cohereApiKey?: string;
|
|
34
37
|
logger?: t.Logger;
|
|
35
38
|
}) => BaseReranker | undefined;
|
|
@@ -130,6 +130,7 @@ export interface SearchToolConfig extends SearchConfig, ProcessSourcesConfig, Fi
|
|
|
130
130
|
logger?: Logger;
|
|
131
131
|
safeSearch?: SafeSearchLevel;
|
|
132
132
|
jinaApiKey?: string;
|
|
133
|
+
jinaApiUrl?: string;
|
|
133
134
|
cohereApiKey?: string;
|
|
134
135
|
rerankerType?: RerankerType;
|
|
135
136
|
scraperTimeout?: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@librechat/agents",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.77",
|
|
4
4
|
"main": "./dist/cjs/main.cjs",
|
|
5
5
|
"module": "./dist/esm/main.mjs",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"image": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/image.ts --provider 'google' --name 'Jo' --location 'New York, NY'",
|
|
48
48
|
"code_exec_files": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/code_exec_files.ts --provider 'openAI' --name 'Jo' --location 'New York, NY'",
|
|
49
49
|
"code_exec_simple": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/code_exec_simple.ts --provider 'google' --name 'Jo' --location 'New York, NY'",
|
|
50
|
-
"simple": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/simple.ts --provider '
|
|
50
|
+
"simple": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/simple.ts --provider 'lmstudio' --name 'Jo' --location 'New York, NY'",
|
|
51
51
|
"caching": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/caching.ts --name 'Jo' --location 'New York, NY'",
|
|
52
52
|
"thinking": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/thinking.ts --name 'Jo' --location 'New York, NY'",
|
|
53
53
|
"memory": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/memory.ts --provider 'openAI' --name 'Jo' --location 'New York, NY'",
|