Configuracion de prompts PENDIENTE

This commit is contained in:
unknown
2026-06-02 10:24:02 -04:00
parent 3e9d083e7d
commit 9a8f84ff37
6 changed files with 456 additions and 3981 deletions

View File

@@ -74,6 +74,11 @@ export class ClaudeService {
): Promise<ClaudeResponse> {
const systemPrompt = this.leerPromptsSistema();
console.log('=== DEBUG SYSTEM PROMPT ===');
console.log('Longitud systemPrompt:', systemPrompt.length);
console.log('Primeros 500 caracteres:', systemPrompt.substring(0, 500));
console.log('=== FIN DEBUG ===');
const contextoDeLead = `
## Contexto del lead actual
@@ -109,16 +114,24 @@ Si puedes determinar si el lead es viable o no, pon true o false en "viable". Si
{ role: 'user', content: mensajeActual },
];
// Construimos el payload para enviar a OpenRouter
const payload = {
model: process.env.MODEL || 'anthropic/claude-sonnet-4-5',
messages: messages,
system: systemFinal,
max_tokens: 1024,
temperature: 0.7,
};
// LOG DE LO QUE SE ENVÍA (exactamente lo que ve la IA)
console.log('\n======= PETICIÓN A OPENROUTER =======');
console.log(JSON.stringify(payload, null, 2));
console.log('=====================================\n');
try {
const response = await axios.post(
'https://openrouter.ai/api/v1/chat/completions',
{
model: process.env.MODEL || 'anthropic/claude-sonnet-4-5',
messages,
system: systemFinal,
max_tokens: 1024,
temperature: 0.7,
},
payload,
{
headers: {
Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`,
@@ -129,24 +142,28 @@ Si puedes determinar si el lead es viable o no, pon true o false en "viable". Si
},
);
const contenidoCompleto: string =
response.data.choices?.[0]?.message?.content || '';
// LOG DE LA RESPUESTA CRUDA (lo que devuelve OpenRouter)
console.log('\n======= RESPUESTA CRUDA DE OPENROUTER =======');
console.log(JSON.stringify(response.data, null, 2));
console.log('=============================================\n');
const contenidoCompleto: string = response.data.choices?.[0]?.message?.content || '';
// También imprimimos el contenido del mensaje para ver lo que generó la IA
console.log('\n======= CONTENIDO DEL MENSAJE GENERADO =======');
console.log(contenidoCompleto);
console.log('================================================\n');
// Separar la respuesta visible del bloque de datos extraídos
const regexDatos = /<DATOS_EXTRAIDOS>([\s\S]*?)<\/DATOS_EXTRAIDOS>/;
const match = contenidoCompleto.match(regexDatos);
let respuesta = contenidoCompleto
.replace(regexDatos, '')
.trim();
let respuesta = contenidoCompleto.replace(regexDatos, '').trim();
let entidad: Partial<Lead> = {};
let viableFlag: boolean | undefined = undefined;
if (match) {
try {
const datos = JSON.parse(match[1].trim());
// Solo incluir campos no nulos
Object.entries(datos).forEach(([k, v]) => {
if (v !== null && k !== 'viable') {
(entidad as Record<string, unknown>)[k] = v;
@@ -155,8 +172,8 @@ Si puedes determinar si el lead es viable o no, pon true o false en "viable". Si
if (datos.viable !== null && datos.viable !== undefined) {
viableFlag = datos.viable;
}
} catch {
this.logger.warn('No se pudo parsear DATOS_EXTRAIDOS');
} catch (e) {
this.logger.warn('No se pudo parsear DATOS_EXTRAIDOS: ' + e.message);
}
}