@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 7.68 kB
Source Map (JSON)
{"version":3,"file":"portkey.cjs","names":["HumanMessage","AIMessage","SystemMessage","ChatMessage","HumanMessageChunk","AIMessageChunk","SystemMessageChunk","FunctionMessageChunk","ChatMessageChunk","BaseChatModel","getPortkeySession","ChatGenerationChunk"],"sources":["../../src/chat_models/portkey.ts"],"sourcesContent":["import { LLMOptions } from \"portkey-ai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatResult,\n ChatGeneration,\n ChatGenerationChunk,\n} from \"@langchain/core/outputs\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\n\nimport { PortkeySession, getPortkeySession } from \"../llms/portkey.js\";\n\ninterface Message {\n role?: string;\n content?: string;\n}\n\nfunction portkeyResponseToChatMessage(message: Message): BaseMessage {\n switch (message.role) {\n case \"user\":\n return new HumanMessage(message.content || \"\");\n case \"assistant\":\n return new AIMessage(message.content || \"\");\n case \"system\":\n return new SystemMessage(message.content || \"\");\n default:\n return new ChatMessage(message.content || \"\", message.role ?? \"unknown\");\n }\n}\n\nfunction _convertDeltaToMessageChunk(\n // oxlint-disable-next-line typescript/no-explicit-any\n delta: Record<string, any>\n) {\n const { role } = delta;\n const content = delta.content ?? \"\";\n let additional_kwargs;\n if (delta.function_call) {\n additional_kwargs = {\n function_call: delta.function_call,\n };\n } else {\n additional_kwargs = {};\n }\n if (role === \"user\") {\n return new HumanMessageChunk({ content });\n } else if (role === \"assistant\") {\n return new AIMessageChunk({ content, additional_kwargs });\n } else if (role === \"system\") {\n return new SystemMessageChunk({ content });\n } else if (role === \"function\") {\n return new FunctionMessageChunk({\n content,\n additional_kwargs,\n name: delta.name,\n });\n } else {\n return new ChatMessageChunk({ content, role });\n }\n}\n\nexport class PortkeyChat extends BaseChatModel {\n apiKey?: string = undefined;\n\n baseURL?: string = undefined;\n\n mode?: string = undefined;\n\n llms?: [LLMOptions] | null = undefined;\n\n session: PortkeySession;\n\n constructor(init?: Partial<PortkeyChat>) {\n super(init ?? {});\n this.apiKey = init?.apiKey;\n this.baseURL = init?.baseURL;\n this.mode = init?.mode;\n this.llms = init?.llms;\n this.session = getPortkeySession({\n apiKey: this.apiKey,\n baseURL: this.baseURL,\n llms: this.llms,\n mode: this.mode,\n });\n }\n\n _llmType() {\n return \"portkey\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const messagesList = messages.map((message) => {\n if (typeof message.content !== \"string\") {\n throw new Error(\n \"PortkeyChat does not support non-string message content.\"\n );\n }\n return {\n role: message._getType() as string,\n content: message.content,\n };\n });\n const response = await this.session.portkey.chatCompletions.create({\n messages: messagesList,\n ...options,\n stream: false,\n });\n const generations: ChatGeneration[] = [];\n for (const data of response.choices ?? []) {\n const text = data.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: portkeyResponseToChatMessage(data.message ?? {}),\n };\n if (data.finish_reason) {\n generation.generationInfo = { finish_reason: data.finish_reason };\n }\n generations.push(generation);\n }\n\n return {\n generations,\n };\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesList = messages.map((message) => {\n if (typeof message.content !== \"string\") {\n throw new Error(\n \"PortkeyChat does not support non-string message content.\"\n );\n }\n return {\n role: message._getType() as string,\n content: message.content,\n };\n });\n const response = await this.session.portkey.chatCompletions.create({\n messages: messagesList,\n ...options,\n stream: true,\n });\n for await (const data of response) {\n const choice = data?.choices[0];\n if (!choice) {\n continue;\n }\n const chunk = new ChatGenerationChunk({\n message: _convertDeltaToMessageChunk(choice.delta ?? {}),\n text: choice.message?.content ?? \"\",\n generationInfo: {\n finishReason: choice.finish_reason,\n },\n });\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n _combineLLMOutput() {\n return {};\n }\n}\n"],"mappings":"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"}