脕lvaro Valenzuela Valdes commited on
Commit
aeaf3e7
1 Parent(s): f962a3a

feat: Integrated DeepSeek-V3 for professional proposal drafting and technical analysis

Browse files
Files changed (1) hide show
  1. backend/app/services/llm.py +26 -0
backend/app/services/llm.py CHANGED
@@ -177,6 +177,9 @@ def generate_analysis(tender: Tender, company: CompanyProfile, document_text: st
177
 
178
  if parse_result:
179
  try:
 
 
 
180
  if not parse_result.get("report_markdown"):
181
  parse_result["report_markdown"] = generate_markdown_report(parse_result)
182
 
@@ -193,3 +196,26 @@ def generate_analysis(tender: Tender, company: CompanyProfile, document_text: st
193
  analysis = generate_mock_analysis(tender, company)
194
  analysis.audit_log = audit_messages + [error_msg, "Fallback: Reverting to system default."]
195
  return analysis
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
 
178
  if parse_result:
179
  try:
180
+ if not parse_result.get("proposal_draft") or len(parse_result["proposal_draft"]) < 50:
181
+ parse_result["proposal_draft"] = generate_proposal_draft(parse_result, company)
182
+
183
  if not parse_result.get("report_markdown"):
184
  parse_result["report_markdown"] = generate_markdown_report(parse_result)
185
 
 
196
  analysis = generate_mock_analysis(tender, company)
197
  analysis.audit_log = audit_messages + [error_msg, "Fallback: Reverting to system default."]
198
  return analysis
199
+
200
+ def generate_proposal_draft(analysis: dict, company: CompanyProfile) -> str:
201
+ prompt = f"""
202
+ Como experto redactor de propuestas de licitaci贸n, genera un borrador profesional (en Markdown) basado en este an谩lisis t茅cnico:
203
+ {analysis.get('executive_summary', 'Analizar bases adjuntas.')}
204
+
205
+ Perfil de la Empresa: {company.name} - {company.experience}
206
+ Requisitos Cr铆ticos a Abordar: {', '.join(analysis.get('key_requirements', []))}
207
+
208
+ Estructura la propuesta en ESPA脩OL con:
209
+ 1. Introducci贸n Ejecutiva
210
+ 2. Resumen de la Soluci贸n T茅cnica
211
+ 3. Aseguramiento de Cumplimiento (Compliance)
212
+ 4. Propuesta de Valor Estrat茅gica
213
+ """
214
+
215
+ # Use DeepSeek for high-quality drafting if available
216
+ if settings.featherless_api_key:
217
+ draft = call_featherless(prompt, model="deepseek-ai/DeepSeek-V3.2")
218
+ if draft: return draft
219
+
220
+ # Fallback to Gemini
221
+ return call_gemini(prompt) or "Error al generar el borrador de la propuesta."