Volver a la wiki

detectLanguage — Utility de detección de idioma para bib_ask

detectLanguage — Utility de detección de idioma para bib_ask

Resumen

Función TypeScript exportada desde functions/api/mcp/handlers/archivo-core.ts. Detecta si el texto de entrada está en inglés o español usando heurística de regex con marcadores léxicos. El idioma detectado se usa para seleccionar el mensaje de fallback apropiado cuando el pipeline de bib_ask no encuentra resultados o la síntesis de Gemma 4 produce JSON malformado.

Signatura

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

Parámetros

ParamTipoDescripción
textstringTexto a analizar (normalmente la question del usuario)

Retorno

Implementación

export function detectLanguage(text: string): 'en' | 'es' {
  const enMarkers = /\b(what|how|where|when|why|who|which|is|are|the|do|does|can|could|should|would|will|with|without|from|need|want|please|tell|show|explain|find|create|add|remove|delete|edit|update|see|view)\b/i;
  return enMarkers.test(text) ? 'en' : 'es';
}

Marcadores EN (30 tokens): what, how, where, when, why, who, which, is, are, the, do, does, can, could, should, would, will, with, without, from, need, want, please, tell, show, explain, find, create, add, remove, delete, edit, update, see, view.

Dónde se usa

1. Fallback “no matches” — archivo.ts

Cuando el vector search no devuelve ningún chunk relevante (matches.length === 0):

answer: detectLanguage(question) === 'en'
  ? 'I have not found relevant information in the documentation for this question.'
  : 'No he encontrado informacion relevante en la documentacion para esta pregunta.',

2. Fallback “JSON malformado / query muy amplia” — archivo-core.ts

Cuando synthesizeAnswer no puede parsear la respuesta del modelo (query demasiado abierta, timeout, etc.):

answer = detectLanguage(question) === 'en'
  ? 'Your question is too broad and the answer does not fit. Try again with something more specific (for example, a single task or feature).'
  : 'Tu pregunta es muy amplia y la respuesta no cabe completa. Pruébala de nuevo concretando un poco más (por ejemplo, una sola tarea o feature).';

Relación con el system prompt de Gemma 4

detectLanguage cubre los caminos de error (fallbacks). En el caso normal (síntesis exitosa), el idioma lo decide el propio modelo Gemma 4 a través de la regla LANGUAGE (CRITICAL) colocada al principio del system prompt en mayúsculas:

LANGUAGE (CRITICAL — non-negotiable):
- Respond in the EXACT SAME language as the user's question.

La utility y el system prompt son complementarios: el modelo maneja el caso feliz; detectLanguage garantiza coherencia lingüística en los fallbacks que el modelo nunca ve.

Limitaciones conocidas

Historial

FechaEvento
2026-05-08Introducida en commit 917d69e como parte del fix del bug s53 (respuestas siempre en ES).

Véase también

Subir