import { useState, useRef, useEffect } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { Send, Sparkles, Copy, Trash2, Volume2, User } from 'lucide-react' import axios from 'axios' // ═══════════════════════════════════════════════════════════════ // IDENTIDAD COMPLETA DE LYTHRON AI // ═══════════════════════════════════════════════════════════════ const LYTHRON_IDENTITY = { name: "Lythron", fullName: "Lythron AI Assistant", creator: "Lythron AI", version: "1.0", releaseDate: "2024", description: "Asistente inteligente de propósito general", origin: { company: "Lythron AI", mission: "Proporcionar asistencia inteligente accesible y versátil a usuarios en todo el mundo", philosophy: "Transparencia, calidad y versatilidad en cada interacción" }, capabilities: [ "Programación en múltiples lenguajes (Python, JavaScript, Java, C++, etc.)", "Análisis profundo de datos y textos", "Generación de contenido creativo", "Explicaciones técnicas complejas", "Resolución de problemas", "Brainstorming e ideación", "Asesoramiento técnico", "Depuración y optimización de código", "Traducción entre idiomas", "Respuestas contextuales inteligentes" ], systemInfo: { language: "Español/English", timezone: "Global", responseStyle: "Directo, útil y accesible", specialties: [ "Web Development", "Data Analysis", "Creative Writing", "Technical Documentation", "Problem Solving" ] }, knownFacts: { creation: "Soy Lythron, un asistente inteligente creado por Lythron AI con el propósito de ser tu compañero versátil en cualquier tarea.", purpose: "Mi objetivo es ayudarte con programación, análisis, creatividad, explicaciones técnicas y resolución de problemas de forma inteligente y accesible.", personality: "Soy directo, amable, siempre dispuesto a aprender de ti y comprometido con proporcionar respuestas de calidad.", philosophy: "Creo en la transparencia, la accesibilidad y en potenciar a los usuarios con conocimiento de calidad.", background: "Fui diseñado por Lythron AI, una organización dedicada a hacer la inteligencia artificial más accesible y útil para todos.", uniqueness: "Mi fortaleza radica en mi versatilidad: puedo pasar de programación compleja a creatividad pura, siempre manteniendo calidad." } } // ═══════════════════════════════════════════════════════════════ // FUNCIÓN DE COMUNICACIÓN CON EL BACKEND LOCAL (FASTAPI) // ═══════════════════════════════════════════════════════════════ const fetchAIResponse = async (userMessage) => { try { const response = await axios.post( "http://127.0.0.1:8000/predict", { prompt: userMessage, modality: "texto" }, { headers: { "Content-Type": "application/json" }, timeout: 30000, } ) return response.data.output || "No se recibió respuesta del motor de Lythron." } catch (error) { console.error("Error al conectar con el motor Lythron:", error) if (error.code === "ECONNABORTED") { return "El servidor tardó demasiado en responder. Verifica que Lythron esté activo." } if (error.response) { return `Error ${error.response.status}: ${error.response.data?.detail || "Error desconocido del backend."}` } return "No se pudo conectar con el motor de Lythron. Verifica que esté en ejecución en el puerto 8000." } } // ═══════════════════════════════════════════════════════════════ // COMPONENTE PRINCIPAL DE LA INTERFAZ // ═══════════════════════════════════════════════════════════════ export default function Lythron() { const [messages, setMessages] = useState([ { id: 1, text: `Hola. Soy ${LYTHRON_IDENTITY.name}, tu asistente inteligente conectado a mi propio motor local Lythron. ¿En qué puedo ayudarte hoy?`, sender: "ai", timestamp: new Date(), } ]) const [input, setInput] = useState("") const [isLoading, setIsLoading] = useState(false) const [copiedId, setCopiedId] = useState(null) const messagesEndRef = useRef(null) const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }) } useEffect(() => { scrollToBottom() }, [messages]) const handleSendMessage = async () => { if (!input.trim()) return const newMessage = { id: Date.now(), text: input, sender: "user", timestamp: new Date(), } setMessages((prev) => [...prev, newMessage]) setInput("") setIsLoading(true) try { const aiText = await fetchAIResponse(input) const aiResponse = { id: Date.now() + 1, text: aiText, sender: "ai", timestamp: new Date(), } setMessages((prev) => [...prev, aiResponse]) } catch (error) { console.error("Error en handleSendMessage:", error) const errorResponse = { id: Date.now() + 1, text: "Hubo un problema conectando con el motor de Lythron. Por favor, intenta de nuevo.", sender: "ai", timestamp: new Date(), } setMessages((prev) => [...prev, errorResponse]) } finally { setIsLoading(false) } } const handleCopy = (text, id) => { navigator.clipboard.writeText(text) setCopiedId(id) setTimeout(() => setCopiedId(null), 2000) } const handleClearChat = () => { setMessages([ { id: 1, text: `Hola. Soy ${LYTHRON_IDENTITY.name} v${LYTHRON_IDENTITY.version}, creado por ${LYTHRON_IDENTITY.creator}. Estoy listo para asistirte usando mi motor local.`, sender: "ai", timestamp: new Date(), } ]) } return (
{/* ENCABEZADO */}

{LYTHRON_IDENTITY.fullName}

Creado por {LYTHRON_IDENTITY.creator}

{/* MENSAJES */}
{messages.map((message) => (
{message.sender === "ai" && (
)}

{message.text}

{message.timestamp.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })} {message.sender === "ai" && ( <> )}
{message.sender === "user" && (
)}
{copiedId === message.id && ( ✓ Copiado )}
))}
{isLoading && (
)}
{/* INPUT */}
setInput(e.target.value)} onKeyPress={(e) => e.key === "Enter" && !isLoading && handleSendMessage()} placeholder="Pregúntale a Lythron..." className="flex-1 bg-white/10 border border-white/20 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-neon-cyan focus:ring-2 focus:ring-neon-cyan/20 transition-all" disabled={isLoading} />

{LYTHRON_IDENTITY.fullName} • Versión {LYTHRON_IDENTITY.version} • Motor local Lythron (FastAPI)

) }