Spaces:
Sleeping
Sleeping
# llms.py | |
import os | |
from dotenv import load_dotenv | |
# from langchain_openai import ChatOpenAI | |
from custom_grok import GrokChatModel | |
from langchain_google_genai import ChatGoogleGenerativeAI | |
from langchain_anthropic import ChatAnthropic | |
from langchain_openai import ChatOpenAI | |
from langchain_experimental.openai_assistant import OpenAIAssistantRunnable | |
from langchain_core.agents import AgentFinish | |
from langchain_core.runnables import RunnableLambda | |
# Carrega as variáveis de ambiente do arquivo .env | |
load_dotenv() | |
# --- Funções Auxiliares para o OpenAI Assistant --- | |
def format_assistant_input(prompt_value): | |
""" | |
Converte a saída de um PromptTemplate (PromptValue) para o formato de dicionário | |
que o OpenAIAssistantRunnable espera. | |
""" | |
content_string = prompt_value.to_string() | |
return {"content": content_string} | |
def parse_assistant_output(assistant_finish_object): | |
""" | |
Extrai a string de saída de um objeto AgentFinish. | |
O resultado final do assistente está no dicionário `return_values`. | |
""" | |
# 2. A verificação de tipo aqui deve usar 'AgentFinish', e não o nome antigo. | |
if isinstance(assistant_finish_object, AgentFinish): | |
# A resposta final em string está na chave 'output' do dicionário return_values | |
return assistant_finish_object.return_values.get('output', '') | |
# Adicionado um fallback caso a saída já seja uma string | |
if isinstance(assistant_finish_object, str): | |
return assistant_finish_object | |
# Retorna uma string vazia se o formato for inesperado | |
return "" | |
# --- Inicialização dos LLMs --- | |
# OpenAI | |
assistant_runnable = OpenAIAssistantRunnable( | |
assistant_id=os.getenv("OPENAI_ASSISTANT_ID"), | |
as_agent=True, | |
timeout=900 | |
) | |
openai_llm = ( | |
RunnableLambda(format_assistant_input) # Recebe PromptValue, retorna dict | |
| assistant_runnable # Executa o assistente | |
| RunnableLambda(parse_assistant_output) # Recebe lista de mensagens, retorna string | |
) | |
# GROK da xAI | |
grok_llm = GrokChatModel( | |
api_key=os.getenv("X_API_KEY"), | |
model=os.getenv("GROK_MODEL_ID"), | |
base_url=os.getenv("X_API_BASE_URL"), | |
timeout=900 | |
) | |
# Claude Sonnet | |
claude_llm = ChatAnthropic( | |
api_key=os.getenv("ANTHROPIC_API_KEY"), | |
model_name=os.getenv("CLAUDE_MODEL_ID"), | |
timeout=900 | |
) | |
# Gemini | |
gemini_llm = ChatGoogleGenerativeAI( | |
google_api_key=os.getenv("GOOGLE_API_KEY"), | |
model=os.getenv("GEMINI_MODEL_ID"), | |
timeout=900 | |
) | |