File size: 2,491 Bytes
18df1d9
 
 
 
 
 
 
 
203fd05
41d7063
f77cd10
7859df7
18df1d9
 
 
 
7859df7
 
 
 
 
 
 
 
 
 
8cf18cb
7859df7
4c81a8d
8cf18cb
7859df7
4c81a8d
 
8cf18cb
 
 
 
 
 
 
 
 
7859df7
18df1d9
 
203fd05
7859df7
203fd05
7859df7
0c6d84c
18df1d9
 
7859df7
 
 
 
 
 
203fd05
0f7158d
 
 
 
 
232cfc6
203fd05
18df1d9
 
 
a941b5a
0c6d84c
18df1d9
 
 
 
 
9ccab25
0c6d84c
18df1d9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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
)