AniseF commited on
Commit
96bc042
·
verified ·
1 Parent(s): 0f0fe40

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +42 -32
utils.py CHANGED
@@ -2,10 +2,11 @@ import os
2
  import re
3
  import requests
4
 
5
- URLS = {
6
- "Syntax": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/syntax.txt",
7
- "Morphology": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/morphology.txt",
8
- "Semantics": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/semantics.txt"
 
9
  }
10
 
11
  def detect_language(passage):
@@ -16,36 +17,45 @@ def call_openrouter(passage, mode, category):
16
  api_key = os.getenv("OPENROUTER_API_KEY")
17
  lang = detect_language(passage)
18
 
19
- # Protocolo de Tradução e Especialidade (A essência do Thomas)
20
- lang_instr = {
21
- 'latin': "Você é um latinista experiente. Use apenas regras de gramática latina. Não confunda com grego.",
22
- 'greek': "Você é um helenista experiente. Use apenas regras de grego antigo (incluindo o Dual e o Optativo)."
23
- }
24
-
25
  try:
26
- resp_q = requests.get(URLS[category])
27
- questions = [l.strip() for l in resp_q.text.splitlines() if l.strip().endswith('?')]
 
 
 
 
 
 
28
  except:
29
- return "Erro ao carregar perguntas.", "Nenhum"
30
 
31
- model_chain = ["anthropic/claude-3.5-sonnet", "openai/gpt-4o"] if "Alta" in mode else ["google/gemini-flash-1.5"]
 
 
32
 
33
- report = []
34
- for q in questions:
35
- # Aqui garantimos a tradução:
36
- prompt = f"{lang_instr[lang]}\nAnalise o texto: {passage}\nResponda em PORTUGUÊS: {q}"
37
-
38
- for model in model_chain:
39
- try:
40
- r = requests.post(
41
- "https://openrouter.ai/api/v1/chat/completions",
42
- headers={"Authorization": f"Bearer {api_key}"},
43
- json={"model": model, "messages": [{"role": "user", "content": prompt}], "temperature": 0.1},
44
- timeout=30
45
- )
46
- if r.status_code == 200:
47
- report.append(f"PERGUNTA: {q}\nRESPOSTA: {r.json()['choices'][0]['message']['content']}\n")
48
- break
49
- except: continue
 
 
 
 
 
 
50
 
51
- return "\n".join(report), model_chain[0]
 
2
  import re
3
  import requests
4
 
5
+ # Perguntas de backup caso o link externo falhe
6
+ BACKUP_QUESTIONS = {
7
+ "Syntax": ["Analise a estrutura sintática das orações.", "Identifique os casos e suas funções.", "Explique as concordâncias verbais."],
8
+ "Morphology": ["Faça a análise morfológica detalhada das palavras.", "Identifique declinações e conjugações.", "Aponte formas nominais e tempos verbais."],
9
+ "Semantics": ["Explique o significado contextual dos termos principais.", "Analise as nuances semânticas da passagem.", "Traduza e explique os campos semânticos."]
10
  }
11
 
12
  def detect_language(passage):
 
17
  api_key = os.getenv("OPENROUTER_API_KEY")
18
  lang = detect_language(passage)
19
 
20
+ # Tenta carregar do GitHub, se falhar, usa o backup
 
 
 
 
 
21
  try:
22
+ urls = {
23
+ "Syntax": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/syntax.txt",
24
+ "Morphology": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/morphology.txt",
25
+ "Semantics": "https://raw.githubusercontent.com/u-cl-lab/classical-query/main/semantics.txt"
26
+ }
27
+ resp = requests.get(urls[category], timeout=10)
28
+ questions = [l.strip() for l in resp.text.splitlines() if l.strip().endswith('?')]
29
+ if not questions: questions = BACKUP_QUESTIONS[category]
30
  except:
31
+ questions = BACKUP_QUESTIONS[category]
32
 
33
+ model = "anthropic/claude-3.5-sonnet" if "Alta" in mode else "google/gemini-flash-1.5"
34
+
35
+ report = [f"--- ANÁLISE FILOLÓGICA ({category.upper()}) ---", f"Língua Detectada: {lang.upper()}", f"Modelo: {model}\n"]
36
 
37
+ # Para não demorar eternamente e evitar 0kb, vamos processar as perguntas em grupos
38
+ # ou garantir que ao menos a primeira tentativa funcione
39
+ full_prompt = f"Atue como um filólogo especialista em {lang}. Analise a passagem: {passage}\n\nResponda detalhadamente em PORTUGUÊS às seguintes questões:\n" + "\n".join(questions)
40
+
41
+ try:
42
+ r = requests.post(
43
+ "https://openrouter.ai/api/v1/chat/completions",
44
+ headers={"Authorization": f"Bearer {api_key}"},
45
+ json={
46
+ "model": model,
47
+ "messages": [{"role": "user", "content": full_prompt}],
48
+ "temperature": 0.1,
49
+ "max_tokens": 4000 # Voltamos ao fôlego alto, mas com prompt único para não travar o loop
50
+ },
51
+ timeout=120
52
+ )
53
+ if r.status_code == 200:
54
+ content = r.json()['choices'][0]['message']['content']
55
+ report.append(content)
56
+ else:
57
+ report.append(f"Erro na API ({r.status_code}): {r.text}")
58
+ except Exception as e:
59
+ report.append(f"Erro de conexão: {str(e)}")
60
 
61
+ return "\n".join(report), model