@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 7.89 kB
Source Map (JSON)
{"version":3,"file":"portkey.cjs","names":["message: Message","HumanMessage","AIMessage","SystemMessage","ChatMessage","delta: Record<string, any>","HumanMessageChunk","AIMessageChunk","SystemMessageChunk","FunctionMessageChunk","ChatMessageChunk","BaseChatModel","init?: Partial<PortkeyChat>","getPortkeySession","messages: BaseMessage[]","options: this[\"ParsedCallOptions\"]","_?: CallbackManagerForLLMRun","generations: ChatGeneration[]","generation: ChatGeneration","runManager?: CallbackManagerForLLMRun","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 // eslint-disable-next-line @typescript-eslint/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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"}