// --- OPTIMIZACIONES --- // 1. Uso de AbortController para prevenir race conditions let activeController = null; async function executeTransaction() { const rawPrompt = chatInput.value.trim(); if (!rawPrompt) return; // Cancelar petición anterior si existe if (activeController) activeController.abort(); activeController = new AbortController(); insertBubble(null, rawPrompt, true); chatInput.value = ""; // Interfaz: Feedback visual más limpio toggleSystemState('processing'); try { const response = await fetch(targetUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ parts: [{ text: `${INSTRUCCION_MAESTRA}\n${rawPrompt}` }] }] }), signal: activeController.signal }); if (!response.ok) throw new Error('API_CONNECTION_FAILED'); const data = await response.json(); const output = data.candidates?.[0]?.content?.parts?.[0]?.text; insertBubble("LA 3RA CORE", output); updateWhatsAppLink(output); } catch (err) { if (err.name !== 'AbortError') { insertBubble("SYS_ERROR", "Error de red: verifique la configuración del bus."); } } finally { toggleSystemState('idle'); } } // 2. Encapsulación de UI function toggleSystemState(state) { const isProcessing = state === 'processing'; avatarViewport.style.borderColor = isProcessing ? "var(--neon-amber)" : "var(--electric-cyan)"; avatarViewport.innerHTML = isProcessing ? `` : `🤖`; }

Alvin IA

Alvin IA: Asistente Eléctrico 24/7

```html Neuromusic Master Gem | V5.5
READY
● STANDBY
Sincronizando Gem-Model Core...
💎
> Gem-Model inicializado.
```