AniseF commited on
Commit
64183b3
·
verified ·
1 Parent(s): 44298e7

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +36 -24
utils.py CHANGED
@@ -1,39 +1,51 @@
1
  import os
2
- import openai
 
3
 
4
- # Definição das listas de prioridade
5
  MODEL_PRIORITY_A = ["anthropic/claude-3.5-sonnet", "openai/gpt-4o", "google/gemini-pro-1.5"]
6
  MODEL_PRIORITY_B = ["google/gemini-flash-1.5", "mistralai/mistral-7b-instruct", "cohere/command-r"]
7
 
8
  def call_openrouter(prompt, mode):
 
 
 
9
  api_key = os.getenv("OPENROUTER_API_KEY")
 
10
 
11
- # Inicializa o cliente OpenRouter (padrão OpenAI)
12
- client = openai.OpenAI(
13
- base_url="https://openrouter.ai/api/v1",
14
- api_key=api_key
15
- )
16
-
17
- # Seleciona a estratégia
18
- chain = MODEL_PRIORITY_A if mode == "Alta Precisão (Filológico)" else MODEL_PRIORITY_B
19
 
20
  for model_name in chain:
21
  try:
22
- # A chamada para a IA com os parâmetros de fôlego e precisão
23
- completion = client.chat.completions.create(
24
- model=model_name,
25
- messages=[{"role": "user", "content": prompt}],
26
- max_tokens=6000, # Fôlego suficiente para não cortar
27
- temperature=0.1, # Baixa temperatura = mais foco e menos erro de idioma
28
- timeout=300 # 2 minutos de espera para análises profundas
29
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- # Se deu certo, retorna o texto e o nome do modelo usado
32
- if completion.choices[0].message.content:
33
- return completion.choices[0].message.content, model_name
34
 
35
  except Exception as e:
36
- print(f"Erro no modelo {model_name}: {str(e)}")
37
- continue # Se um falhar, tenta o próximo da lista
 
38
 
39
- return "Lamento, todos os modelos falharam na análise. Verifique sua conexão ou saldo.", "Nenhum"
 
1
  import os
2
+ import requests
3
+ import time
4
 
5
+ # Listas de prioridade baseadas no arquivo config do Thomas
6
  MODEL_PRIORITY_A = ["anthropic/claude-3.5-sonnet", "openai/gpt-4o", "google/gemini-pro-1.5"]
7
  MODEL_PRIORITY_B = ["google/gemini-flash-1.5", "mistralai/mistral-7b-instruct", "cohere/command-r"]
8
 
9
  def call_openrouter(prompt, mode):
10
+ """
11
+ Envia uma única pergunta por vez para evitar cortes (Estratégia Thomas).
12
+ """
13
  api_key = os.getenv("OPENROUTER_API_KEY")
14
+ url = "https://openrouter.ai/api/v1/chat/completions"
15
 
16
+ # Seleciona a lista de modelos conforme a estratégia escolhida
17
+ chain = MODEL_PRIORITY_A if mode == "Alta Precisão (Filológica)" else MODEL_PRIORITY_B
 
 
 
 
 
 
18
 
19
  for model_name in chain:
20
  try:
21
+ headers = {
22
+ "Authorization": f"Bearer {api_key}",
23
+ "Content-Type": "application/json"
24
+ }
25
+
26
+ payload = {
27
+ "model": model_name,
28
+ "messages": [
29
+ {"role": "system", "content": "Você é um especialista em línguas clássicas. Responda APENAS em português, de forma clara e direta."},
30
+ {"role": "user", "content": prompt}
31
+ ],
32
+ "temperature": 0.3, # Baixa temperatura para maior precisão filológica
33
+ "max_tokens": 1000 # 1000 tokens por pergunta é mais que suficiente para não cortar
34
+ }
35
+
36
+ # Timeout de 60s é seguro para uma única pergunta
37
+ response = requests.post(url, headers=headers, json=payload, timeout=60)
38
+ response.raise_for_status()
39
+
40
+ result = response.json()
41
+ content = result["choices"][0]["message"]["content"]
42
 
43
+ if content:
44
+ return content.strip(), model_name
 
45
 
46
  except Exception as e:
47
+ print(f"Falha no modelo {model_name}: {e}")
48
+ time.sleep(1) # Pequena pausa antes de tentar o próximo modelo da lista
49
+ continue
50
 
51
+ return "Falha ao processar esta pergunta. Verifique o saldo.", "Nenhum"