Saltar al contenido principal

Backends y modelos probados en campo

Qué combinaciones de modelo/backend funcionan de verdad con el serializador de daimon — medidas en uso real, no asumidas. Una fila por combinación (modelo, ruta de backend) que alguien haya corrido en el campo.

Dos reglas mantienen esto como fuente de verdad en lugar de una página de sensaciones:

  1. Medido, no auto-reportado. La columna de calidad es la tasa de degradación verbatim: la proporción de afirmaciones verbatim frescas cuya cita falló la verificación contra el transcript y fue degradada a inferida. La computa el verificador; la opinión del modelo sobre su propia salida nunca se acepta. Mira la receta abajo.
  2. Con fecha y versión, o no cuenta. Cada fila lleva la versión de daimon y la fecha de prueba. Las filas viejas envejecen a la vista en lugar de mentir para siempre.

Las filas se contribuyen por PR — daimon no tiene telemetría por diseño, así que nada de esto se recolecta automáticamente. Agrega tu combinación con la receta de abajo.

Matriz

ModeloRuta de backenddaimonTasa de degradación (muestra)FechaNotas
MIXED — claude-haiku-4-5 (litellm proxy) + sesiones claude-cli, atribución por sesión perdidaver notas0.13.029% de 51 afirmaciones verbatim frescas, 3 sesiones — rango por sesión 6%–77%2026-07-10máquina de desarrollo del maintainer. El backend cambió entre estas sesiones y los checkpoints no registran cuál serializó cada una, así que esta fila NO PUEDE separarse — se conserva como ejemplo práctico de por qué las muestras sin atribución son casi inútiles y de por qué el serializador necesita un sello de backend/modelo. Reemplázala con filas atribuidas ahora que el sellado existe.
MIXED — agregado de por vida del maintainer, backends variados a lo largo de dos meses (mayormente claude-cli)ver notas0.13.0–0.27.012.2% de 3703 afirmaciones verbatim frescas, 160 sesiones2026-08-07máquina de desarrollo del maintainer, dogfooding de este repo. No es un par (modelo, backend) — se publica como línea base de por vida, atribuida por mes y por formato de checkpoint: 2026-07 13.7% (n=2217) → 2026-08 9.8% (n=1476); por formato D-012 21.2%, D-013 16.5%, D-014 10.1%, D-016 16.1%, D-017 9.9%, D-018 10.6% (n=1274). Deduplicado por id de sesión — mira la nota del agregado abajo.
tu modeloanthropic / openai-compatible / claude-cli / command

Regla de atribución (aprendida llenando la primera fila): una fila solo es válida si cada checkpoint muestreado se sabe proveniente de ese par exacto (modelo, backend). Antes de que los checkpoints llevaran sello de serializador, eso significaba "el backend no cambió durante la ventana de la muestra" — verifica antes de contar, o tu fila mezcla combinaciones. Los checkpoints de 0.15.0+ llevan ese sello directamente: llm_backend (y llm_model, cuando la config realmente conoce uno) se registra al serializar, así que la atribución ya no tiene que reconstruirse de memoria de cuándo cambió el backend.

Leyendo los números: una degradación es el verificador atrapando una cita incorrecta, no pérdida de datos — el ítem sobrevive como [~ inferred] con el sello del chequeo fallido. Más bajo es mejor; las señales interesantes son el nivel y la varianza. Las tasas de una sola sesión sobre conteos chicos de afirmaciones (< 20) son ruidosas — dilo en la fila.

El agregado de por vida, y cómo reproducirlo

La fila de 12.2% es cada afirmación verbatim fresca que el propio store de este proyecto había verificado al 2026-08-07 — 3703 afirmaciones en 160 sesiones en una sola máquina del maintainer — contadas con los mismos sellos quote_verified que lee la receta de abajo. Dos cosas lo mantienen honesto:

  • Deduplica por id de sesión. Los checkpoints rotan (latest.jsonprev-N.json), así que un glob ingenuo cuenta la misma sesión más de una vez. Acá la tasa resultó idéntica antes y después de deduplicar, pero eso es suerte, no una propiedad — deduplica igual.
  • Es una línea base, no un benchmark. Una sola máquina, un solo proyecto (daimon desarrollándose a sí mismo), backends mezclados a lo largo de dos meses de versiones. La señal portable es la tendencia, no el nivel: las tasas por formato caen del 21.2% de D-012 a aproximadamente 10% en D-017/D-018 a medida que la verificación del lado del serializador se endureció.

Receta para llenar una fila

La tasa de degradación queda sellada en cada checkpoint fresco: verify_quotes marca cada afirmación verbatim fresca con quote_verified: true (acierto) o la degrada a trust: "inferred" + quote_verified: false (fallo). Cuenta ambos en tus checkpoints más nuevos — nota que el filtro es sobre el sello, no sobre trust (los ítems degradados ya no son verbatim, que es exactamente por qué filtrar por trust los ocultaría). Agrupa por el par de sellos (llm_backend, llm_model) (0.15.0+) para que un lote mixto de checkpoints nunca pueda mezclar combinaciones por accidente — los checkpoints pre-0.15.0 no llevan sello y caen a un bucket (unstamped), que es una señal de verificar la atribución a mano en lugar de una combinación citable en una fila:

import json, sys
from collections import defaultdict

def items(c):
w, e = c.get("working_context", {}), c.get("epistemic_snapshot", {})
for k in ("open_questions", "recent_decisions"):
yield from (w.get(k) or [])
if isinstance(w.get("active_topic"), dict):
yield w["active_topic"]
for k in ("strong_beliefs", "uncertainties", "contradictions_flagged"):
yield from (e.get(k) or [])

groups = defaultdict(lambda: [0, 0]) # (backend, model) -> [claims, downgraded]
for path in sys.argv[1:]:
cp = json.load(open(path))
key = (cp.get("llm_backend") or "(unstamped)", cp.get("llm_model") or "(no model)")
fresh = [i for i in items(cp) if isinstance(i, dict)
and not i.get("carried_from") and i.get("quote_verified") is not None]
bad = sum(1 for i in fresh if i["quote_verified"] is False)
g = groups[key]
g[0] += len(fresh)
g[1] += bad

for (backend, model), (claims, bad) in sorted(groups.items()):
print(f"{backend}/{model}: {claims} claims, {bad} downgraded")

Córrelo sobre ~/.daimon/checkpoints/<project>/latest.json y sus hermanos prev-*.json, suma varias sesiones (una sola es demasiado ruidosa), y abre un PR con la fila — una fila por grupo impreso, nunca un total fusionado a mano entre grupos. Solo los checkpoints de 0.13.0+ llevan sellos de cita confiables por checkpoint (quote_verified: false se volvió una señal solo-de-frescos entonces; los ítems arrastrados más viejos pueden cargar sellos obsoletos).

La confiabilidad de la serialización (si la corrida completa siquiera termina) es un eje distinto de la fidelidad de citas — si tu combinación falla por completo, eso es un reporte de issue con ~/.daimon/logs/serialize.log adjunto, no una fila de la matriz.