add support for openrouter.

Signed-off-by: sahil suman <sahilsuman933@gmail.com>
This commit is contained in:
sahil suman
2025-01-11 17:50:58 +05:30
parent a8ae79831e
commit e04da334d7
3 changed files with 161 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
#
# Copyright (c) 2025, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
from typing import Dict, List
from loguru import logger
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
from pipecat.services.openai import OpenAILLMService
try:
from openai import AsyncStream, OpenAI
from openai.types.chat import ChatCompletionChunk, ChatCompletionMessageParam
except ModuleNotFoundError as e:
logger.error(f"Exception: {e}")
logger.error(
"In order to use OpenRouter, you need to `pip install pipecat-ai[openai]`. Also, set `OPENROUTER_API_KEY` environment variable."
)
raise Exception(f"Missing module: {e}")
class OpenRouterLLMService(OpenAILLMService):
def __init__(
self,
*,
api_key: str | None = None,
model: str = "openai/gpt-4o-latest",
base_url: str = "https://openrouter.ai/api/v1",
**kwargs,
):
super().__init__(
api_key=api_key,
base_url=base_url,
model=model,
**kwargs,
)
def create_client(self, api_key=None, base_url=None, **kwargs):
logger.debug(f"Creating OpenRouter client with api {base_url}")
return super().create_client(api_key, base_url, **kwargs)
async def get_chat_completions(
self, context: OpenAILLMContext, messages: List[ChatCompletionMessageParam]
) -> AsyncStream[ChatCompletionChunk]:
params = {
"model": self.model_name,
"stream": True,
"messages": messages,
"temperature": self._settings["temperature"],
"top_p": self._settings["top_p"],
"max_tokens": self._settings["max_tokens"],
"frequency_penalty": self._settings["frequency_penalty"],
"presence_penalty": self._settings["presence_penalty"],
}
params.update(self._settings["extra"])
chunks = await self._client.chat.completions.create(**params)
return chunks