Add openrouter model
This commit is contained in:
parent
bc6de735d8
commit
606cef3040
|
|
@ -55,14 +55,17 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
},
|
},
|
||||||
"gemini-2.5-flash-openrouter": {
|
"gemini-2.5-flash-openrouter": {
|
||||||
"name": "gemini-2.5-flash-openrouter",
|
"name": "google/gemini-2.5-flash",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai",
|
||||||
"model_name": "gemini-2.5-flash", # Добавлено имя модели для LangChain
|
"model_name": "google/gemini-2.5-flash",
|
||||||
"apiBase":
|
"apiBase": "https://openrouter.ai/api/v1", # Добавлено /api/v1
|
||||||
"https://openrouter.ai", # "generativelanguage.googleapis.com", # "https://render-service-gsu7.onrender.com/g/v1beta",
|
"apiKey":
|
||||||
"apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik",
|
"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",
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision", "reasoning"],
|
||||||
|
"model_kwargs": {
|
||||||
|
"include_reasoning": True
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"gemini-2.5-flash-bh": {
|
"gemini-2.5-flash-bh": {
|
||||||
"name": "gemini-2.5-flash",
|
"name": "gemini-2.5-flash",
|
||||||
|
|
@ -77,7 +80,8 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"gemini-3-flash-preview-bh": {
|
"gemini-3-flash-preview-bh": {
|
||||||
"name": "gemini-3-flash-preview",
|
"name": "gemini-3-flash-preview",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
"model_name": "gemini-3-flash-preview", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
|
"gemini-3-flash-preview", # Добавлено имя модели для LangChain
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
||||||
"apiKey":
|
"apiKey":
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
||||||
|
|
@ -87,7 +91,8 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"gemini-3.1-pro-preview-bh": {
|
"gemini-3.1-pro-preview-bh": {
|
||||||
"name": "gemini-3.1-pro-preview",
|
"name": "gemini-3.1-pro-preview",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
"model_name": "gemini-3.1-pro-preview", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
|
"gemini-3.1-pro-preview", # Добавлено имя модели для LangChain
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
||||||
"apiKey":
|
"apiKey":
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
||||||
|
|
@ -97,7 +102,8 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"claude-4.5-sonnet-bh": {
|
"claude-4.5-sonnet-bh": {
|
||||||
"name": "claude-4.5-sonnet-bh",
|
"name": "claude-4.5-sonnet-bh",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
"model_name": "claude-sonnet-4.5", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
|
"claude-sonnet-4.5", # Добавлено имя модели для LangChain
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
||||||
"apiKey":
|
"apiKey":
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
||||||
|
|
@ -107,9 +113,9 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"mistral-small-latest": {
|
"mistral-small-latest": {
|
||||||
"name": "mistral-small-latest",
|
"name": "mistral-small-latest",
|
||||||
"provider": "mistralai",
|
"provider": "mistralai",
|
||||||
"model_name": "mistral-small-latest", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
"apiBase":
|
"mistral-small-latest", # Добавлено имя модели для LangChain
|
||||||
"https://api.mistral.ai",
|
"apiBase": "https://api.mistral.ai",
|
||||||
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
|
|
@ -117,9 +123,9 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"mistral-small-latest-r": {
|
"mistral-small-latest-r": {
|
||||||
"name": "mistral-small-latest",
|
"name": "mistral-small-latest",
|
||||||
"provider": "mistralai",
|
"provider": "mistralai",
|
||||||
"model_name": "mistral-small-latest", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
"apiBase":
|
"mistral-small-latest", # Добавлено имя модели для LangChain
|
||||||
"https://render-service-gsu7.onrender.com/m",
|
"apiBase": "https://render-service-gsu7.onrender.com/m",
|
||||||
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
|
|
@ -127,9 +133,9 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"mistral-small-latest-error": {
|
"mistral-small-latest-error": {
|
||||||
"name": "mistral-small-latest",
|
"name": "mistral-small-latest",
|
||||||
"provider": "mistralai",
|
"provider": "mistralai",
|
||||||
"model_name": "mistral-small-latest-error", # Добавлено имя модели для LangChain
|
"model_name":
|
||||||
"apiBase":
|
"mistral-small-latest-error", # Добавлено имя модели для LangChain
|
||||||
"https://render-service-gsu7.onrender.com/m",
|
"apiBase": "https://render-service-gsu7.onrender.com/m",
|
||||||
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
"apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW",
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
|
|
@ -233,7 +239,10 @@ class CustomLLM:
|
||||||
elif self.provider == "mistralai":
|
elif self.provider == "mistralai":
|
||||||
mistralai_messages = []
|
mistralai_messages = []
|
||||||
if isinstance(messages, str):
|
if isinstance(messages, str):
|
||||||
mistralai_messages.append({"role": "user", "content": messages})
|
mistralai_messages.append({
|
||||||
|
"role": "user",
|
||||||
|
"content": messages
|
||||||
|
})
|
||||||
elif isinstance(messages, list):
|
elif isinstance(messages, list):
|
||||||
for msg in messages:
|
for msg in messages:
|
||||||
if isinstance(msg, HumanMessage):
|
if isinstance(msg, HumanMessage):
|
||||||
|
|
@ -261,16 +270,16 @@ class CustomLLM:
|
||||||
})
|
})
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = self.client.chat.stream(
|
response = self.client.chat.stream(model=self.model_name,
|
||||||
model=self.model_name,
|
messages=mistralai_messages)
|
||||||
messages=mistralai_messages
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.stream:
|
if self.stream:
|
||||||
collected_messages = []
|
collected_messages = []
|
||||||
for chunk in response:
|
for chunk in response:
|
||||||
delta = chunk.data.choices[0].delta
|
delta = chunk.data.choices[0].delta
|
||||||
chunk_message = getattr(delta, "content", None) # или delta.content, если всегда есть
|
chunk_message = getattr(
|
||||||
|
delta, "content",
|
||||||
|
None) # или delta.content, если всегда есть
|
||||||
|
|
||||||
if chunk_message is not None:
|
if chunk_message is not None:
|
||||||
collected_messages.append(chunk_message)
|
collected_messages.append(chunk_message)
|
||||||
|
|
@ -320,10 +329,8 @@ class CustomLLM:
|
||||||
mistralai_messages = self._prepare_mistralai_messages(messages)
|
mistralai_messages = self._prepare_mistralai_messages(messages)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = self.client.chat.stream(
|
response = self.client.chat.stream(model=self.model_name,
|
||||||
model=self.model_name,
|
messages=mistralai_messages)
|
||||||
messages=mistralai_messages
|
|
||||||
)
|
|
||||||
|
|
||||||
for chunk in response:
|
for chunk in response:
|
||||||
delta = chunk.data.choices[0].delta
|
delta = chunk.data.choices[0].delta
|
||||||
|
|
@ -343,7 +350,8 @@ class CustomLLM:
|
||||||
print(f"Ошибка при стриминге Mistral API: {e}")
|
print(f"Ошибка при стриминге Mistral API: {e}")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def _prepare_openai_messages(self, messages: List[Any]) -> List[Dict[str, str]]:
|
def _prepare_openai_messages(self,
|
||||||
|
messages: List[Any]) -> List[Dict[str, str]]:
|
||||||
"""Подготавливает сообщения в формате OpenAI."""
|
"""Подготавливает сообщения в формате OpenAI."""
|
||||||
openai_messages = []
|
openai_messages = []
|
||||||
if isinstance(messages, str):
|
if isinstance(messages, str):
|
||||||
|
|
@ -351,19 +359,31 @@ class CustomLLM:
|
||||||
elif isinstance(messages, list):
|
elif isinstance(messages, list):
|
||||||
for msg in messages:
|
for msg in messages:
|
||||||
if isinstance(msg, HumanMessage):
|
if isinstance(msg, HumanMessage):
|
||||||
openai_messages.append({"role": "user", "content": msg.content})
|
openai_messages.append({
|
||||||
|
"role": "user",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
elif isinstance(msg, SystemMessage):
|
elif isinstance(msg, SystemMessage):
|
||||||
openai_messages.append({"role": "system", "content": msg.content})
|
openai_messages.append({
|
||||||
|
"role": "system",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
elif isinstance(msg, AIMessage):
|
elif isinstance(msg, AIMessage):
|
||||||
openai_messages.append({"role": "assistant", "content": msg.content})
|
openai_messages.append({
|
||||||
|
"role": "assistant",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
openai_messages.append({
|
openai_messages.append({
|
||||||
"role": msg.type if hasattr(msg, 'type') else 'user',
|
"role":
|
||||||
"content": msg.content
|
msg.type if hasattr(msg, 'type') else 'user',
|
||||||
|
"content":
|
||||||
|
msg.content
|
||||||
})
|
})
|
||||||
return openai_messages
|
return openai_messages
|
||||||
|
|
||||||
def _prepare_mistralai_messages(self, messages: List[Any]) -> List[Dict[str, str]]:
|
def _prepare_mistralai_messages(
|
||||||
|
self, messages: List[Any]) -> List[Dict[str, str]]:
|
||||||
"""Подготавливает сообщения в формате Mistral AI."""
|
"""Подготавливает сообщения в формате Mistral AI."""
|
||||||
mistralai_messages = []
|
mistralai_messages = []
|
||||||
if isinstance(messages, str):
|
if isinstance(messages, str):
|
||||||
|
|
@ -371,15 +391,26 @@ class CustomLLM:
|
||||||
elif isinstance(messages, list):
|
elif isinstance(messages, list):
|
||||||
for msg in messages:
|
for msg in messages:
|
||||||
if isinstance(msg, HumanMessage):
|
if isinstance(msg, HumanMessage):
|
||||||
mistralai_messages.append({"role": "user", "content": msg.content})
|
mistralai_messages.append({
|
||||||
|
"role": "user",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
elif isinstance(msg, SystemMessage):
|
elif isinstance(msg, SystemMessage):
|
||||||
mistralai_messages.append({"role": "system", "content": msg.content})
|
mistralai_messages.append({
|
||||||
|
"role": "system",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
elif isinstance(msg, AIMessage):
|
elif isinstance(msg, AIMessage):
|
||||||
mistralai_messages.append({"role": "assistant", "content": msg.content})
|
mistralai_messages.append({
|
||||||
|
"role": "assistant",
|
||||||
|
"content": msg.content
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
mistralai_messages.append({
|
mistralai_messages.append({
|
||||||
"role": msg.type if hasattr(msg, 'type') else 'user',
|
"role":
|
||||||
"content": msg.content
|
msg.type if hasattr(msg, 'type') else 'user',
|
||||||
|
"content":
|
||||||
|
msg.content
|
||||||
})
|
})
|
||||||
return mistralai_messages
|
return mistralai_messages
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user