CreaRack-SL

Descripción

archivo-core.ts es el módulo de síntesis de la Biblioteca. Contiene la lógica de construcción de prompts y la llamada a la API de Gemini para generar respuestas en el Help Widget de CreaRack Pro. Es consumido por archivo.ts (handler MCP bib_ask).


Exports públicos

synthesizeAnswer(apiKey, question, chunks, mode?)

Función principal. Construye los prompts según el modo y llama a la REST API de Gemini.

export async function synthesizeAnswer(
  apiKey: string,
  question: string,
  chunks: ChunkMatch[],
  mode: 'help' | 'tutor' = 'help',  // parámetro añadido en commit 86c9ac4
): Promise<AskResult>

Flujo interno:

  1. detectLanguage(question) → 'en' | 'es'
  2. Según mode:
    • 'help' → buildHelpPrompts(question, chunks, lang)
    • 'tutor' → buildTutorPrompts(question, lang)
  3. Fetch a Google AI Studio REST API (no SDK — Workerd no lo soporta).
  4. Retorna AskResult con answer, model, durationMs.

detectLanguage(text)

export function detectLanguage(text: string): 'en' | 'es'

Detección heurística server-side del idioma de la pregunta. Usa marcadores EN para decidir; si no hay mayoría clara, cae a 'es'. Necesario porque los chunks de la wiki están mayoritariamente en español y sesgan al modelo (documentado en sesión s53).


Funciones privadas

buildHelpPrompts(question, chunks, lang)

Construye el par { systemPrompt, userPrompt } para el modo help:

  • System prompt en inglés neutro. Rol de asistente in-app de CreaRack Pro. Solo usa los fragments proporcionados.
  • User prompt en el idioma detectado (lang). Incluye chunks formateados como bloques numerados [1], [2]… con título y ruta.

El patrón «system en EN + user en idioma detectado» se adoptó tras s53 para evitar el sesgo ES cuando los chunks son en español.

buildTutorPrompts(question, lang) (añadida en commit 86c9ac4)

Construye el par { systemPrompt, userPrompt } para el modo tutor:

  • Sin chunks — el modelo responde desde su conocimiento general.
  • System prompt con rol de senior IT engineer & educator. Define el dominio cubierto (Cisco/Juniper/Linux/RFC/SNMP/hardware), reglas de estilo pedagógico (bold para comandos, bloques de código, párrafos cortos), cap de 250 palabras y lógica de redirect si el usuario pregunta sobre la app.
  • Instrucción explícita de honestidad: si no está seguro de un flag/sintaxis, debe decirlo.

Dominio del prompt Tutor

El system prompt de buildTutorPrompts delimita con precisión:

Networking: Cisco / Juniper / MikroTik / Aruba
  OSPF / BGP / STP / RSTP, VLAN trunking, ACL, DHCP/DNS, NAT, VPN
Linux/Unix: shell, systemd, journalctl, ip/iproute2
IEEE/RFC: 802.1Q, 802.11, 802.3
Datacenter ops: cooling, racking, cabling, power, redundancia
Monitoring: SNMP v1/v2c/v3, ICMP, NetFlow/sFlow, syslog
Hardware: switches, routers, UPS, APs, servers, storage

Nota técnica: Google AI Studio via fetch

Workerd (runtime de Cloudflare Workers) no soporta el SDK @google/generative-ai. Por eso synthesizeAnswer usa fetch directo contra la REST API de Google AI Studio. Patrón documentado como «footgun documentado» en el código, consistente con el driver Python de Auto-Plan (s49).


Historial relevante

CommitCambio
86c9ac4Extrae buildHelpPrompts y buildTutorPrompts de synthesizeAnswer. Añade parámetro mode: 'help' | 'tutor' a synthesizeAnswer. Introduce modo IT Tutor sin grounding.

Véase también

  • [[entity—biblioteca—handler—bib-ask]] — Handler MCP que consume este módulo: routing, early return tutor, archivado
  • [[feature—biblioteca—it-tutor-mode]] — Feature completa del modo IT Tutor: comportamiento, dominio, frontend pendiente