Files
msaldain 36040d7cc8 Brave como respaldo de DuckDuckGo, y arreglo de la guardia de bf16
Cadena de búsqueda con respaldo. DuckDuckGo sigue de primario porque no exige
credenciales: en el camino habitual ningún tercero se entera de qué busca la
familia. Pero su endpoint lite no es una API con contrato, así que cuando
limite por tasa o cambie el HTML, Brave responde.

Dos matices del encadenado:

- Cero resultados NO dispara el respaldo. Si el primario respondió bien y no
  encontró nada, esa es la respuesta correcta; encadenar gastaría cuota y
  devolvería resultados peores. Solo se avanza ante un error real.
- La cadena recuerda quién respondió: al depurar una respuesta rara, lo
  primero que hay que saber es de dónde salió.

Un respaldo sin credencial falla al arrancar y no en la primera consulta —
que es justo cuando el primario ya falló y el respaldo tiene que funcionar.

Aparte, verificando torch en la 2060 apareció un defecto real en backends.py:
torch.cuda.is_bf16_supported() usa including_emulation=True por defecto, así
que devuelve True en Turing, donde bf16 no existe en silicio. La guardia no
habría atrapado el perfil de la 5090 corriendo en la 2060: el entrenamiento
seguía, emulado y silencioso. Medido en la placa: 4,49 ms por matmul en bf16
contra 1,75 ms en fp16, unas 2,6x más lento. Ahora se consulta con
including_emulation=False, con respaldo por compute capability.

11 tests nuevos (113 en total).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 00:39:13 -03:00

45 lines
1.8 KiB
YAML

# Herramientas del agente.
#
# La búsqueda web usa DuckDuckGo como primario: no exige API key ni cuenta, así
# que no hay credenciales que gestionar ni un tercero al que se le informe qué
# busca la familia.
#
# Aclaración sobre el endpoint: la API oficial de DuckDuckGo ("Instant Answer")
# solo devuelve definiciones y fichas de entidades, no resultados web. Los
# resultados reales salen del endpoint lite, que no es una API con contrato: el
# HTML puede cambiar y hay límite de tasa. Por eso existe la cadena de respaldo.
search:
backend: duckduckgo
# Se prueban en orden, y solo ante un error real del anterior. Cero
# resultados no dispara el respaldo: si el primario respondió bien y no
# encontró nada, esa es la respuesta correcta.
#
# Brave sí es una API con contrato y límites claros, pero cada consulta pasa
# por un tercero asociado a una cuenta — por eso va de respaldo y no de
# primario. SearxNG autoalojado es el destino natural cuando el volumen lo
# justifique: agrega DuckDuckGo entre sus fuentes sin exponer las consultas.
fallbacks: [brave]
region: es-es # DuckDuckGo
country: uy # Brave
language: es
# Presupuesto de contexto. Con seq_len 2048 hay que repartir entre resultados
# de búsqueda, memoria recuperada y el turno del usuario: cinco resultados
# recortados le sirven más al modelo que diez completos.
max_results: 5
snippet_chars: 240
timeout: 10.0
retries: 2
# En una casa las mismas preguntas se repiten muchas veces por día. La caché
# es de comportamiento, no de rendimiento: evita repetir consultas externas
# idénticas en pocos minutos.
cache_ttl: 300.0
# Credenciales, desde .env. Quedan vacías si la variable no está definida.
brave_api_key: ${oc.env:ENLACE_BRAVE_API_KEY,""}
searxng_url: ${oc.env:ENLACE_SEARXNG_URL,""}