feat: /compare — análisis comparativo de dos temas en paralelo
Build & Deploy ResearchOwl / build-and-push (push) Successful in 34s
Build & Deploy ResearchOwl / build-and-push (push) Successful in 34s
This commit is contained in:
@@ -653,3 +653,62 @@ async def generate_diff_summary(
|
||||
f"• {len(added_urls)} fuentes nuevas\n"
|
||||
f"Usa /generate report para ver el análisis completo."
|
||||
)
|
||||
|
||||
|
||||
async def generate_comparison(
|
||||
topic_a: str,
|
||||
topic_b: str,
|
||||
context_a: str,
|
||||
context_b: str,
|
||||
session_id_a: int,
|
||||
db,
|
||||
) -> str:
|
||||
from src.config import settings
|
||||
import structlog
|
||||
cmp_logger = structlog.get_logger()
|
||||
|
||||
if not settings.anthropic_api_key:
|
||||
raise ValueError("Claude API key required for comparison")
|
||||
|
||||
prompt = (
|
||||
f'Eres un analista experto. Compara en profundidad estos dos temas:\n'
|
||||
f'TEMA A: "{topic_a}"\n'
|
||||
f'TEMA B: "{topic_b}"\n\n'
|
||||
f'Escribe el análisis en español con esta estructura:\n\n'
|
||||
f'## Resumen comparativo\n'
|
||||
f'(2-3 párrafos con las diferencias y similitudes más importantes)\n\n'
|
||||
f'## {topic_a}\n'
|
||||
f'(Puntos clave únicos de este tema)\n\n'
|
||||
f'## {topic_b}\n'
|
||||
f'(Puntos clave únicos de este tema)\n\n'
|
||||
f'## Similitudes\n'
|
||||
f'(Qué tienen en común)\n\n'
|
||||
f'## Diferencias clave\n'
|
||||
f'(Tabla markdown o lista de las diferencias más relevantes)\n\n'
|
||||
f'## Conclusión\n'
|
||||
f'(Cuál es mejor/más relevante según el contexto, o qué conclusión se extrae)\n\n'
|
||||
f'---\n'
|
||||
f'MATERIAL DE INVESTIGACIÓN — {topic_a}:\n{context_a}\n\n'
|
||||
f'---\n'
|
||||
f'MATERIAL DE INVESTIGACIÓN — {topic_b}:\n{context_b}\n'
|
||||
)
|
||||
|
||||
try:
|
||||
import anthropic
|
||||
client = anthropic.AsyncAnthropic(api_key=settings.anthropic_api_key)
|
||||
msg = await client.messages.create(
|
||||
model=settings.claude_model,
|
||||
max_tokens=8192,
|
||||
messages=[{"role": "user", "content": prompt}]
|
||||
)
|
||||
try:
|
||||
await db.log_api_call(
|
||||
session_id_a, "comparison", settings.claude_model,
|
||||
msg.usage.input_tokens, msg.usage.output_tokens
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
return msg.content[0].text.strip()
|
||||
except Exception as e:
|
||||
cmp_logger.error("Comparison generation failed", error=str(e))
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user