Configuracion de prompts PENDIENTE
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user