---
title: "CLM-8B autoalojado: vLLM, caché y verificación"
canonical: https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/
language: es
description: "Aloje CLM-8B con vLLM, reutilice candidatos, resuelva límites de tokens y problemas de API, y entienda los resultados de sus verificadores de código ajustados."
image: "https://wavect.io/img/blog/headers/header_clm-8b-self-hosting-action-cache-verifier.png"
---

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

14 min de lectura · 28 sep 2026 Última revisión 28 de septiembre de 2026

[**Siguiente**](/es/blog/llm-as-a-verifier/)

# CLM-8B autoalojado: vLLM, caché y verificación

Resumen

CLM-8B puntúa candidatos mediante un encoder Qwen3-8B congelado y pequeñas cabezas de proyección de estado y acción. Autoalojarlo requiere también el encoder, no solo descargar las cabezas. Reutilizar textos candidatos puede ahorrar codificación, pero los vectores almacenados no equivalen a permisos o decisiones reutilizables. Esta guía cubre dos servicios privados, el truncamiento a 2.048 tokens, la validación de peticiones y la evaluación del verificador. Las cifras de programación corresponden a cabezas ajustadas sobre subconjuntos reservados, no al checkpoint de referencia sin ajuste.

**CLM-8B resulta interesante cuando un agente debe elegir entre acciones conocidas, no redactar otra respuesta.** Su característica de implementación más relevante es la codificación independiente del estado y de las acciones: un estado cambiante puede compararse con candidatos ya codificados. Por eso conviene investigar los catálogos de acciones reutilizables antes de sustituir un paso generativo por otro prompt.

La versión publicada, `CLM-v0.1-8B`, contiene cabezas de proyección para estados y acciones vinculadas a un encoder Qwen3-8B congelado. Cada cabeza tiene aproximadamente 20 millones de parámetros entrenables; el encoder completo sigue ejecutándose durante la inferencia. Los pesos de referencia tienen licencia Apache 2.0. [La ficha del modelo CLM explica la arquitectura, la licencia y sus límites](https://huggingface.co/Contrastive-LM/CLM-v0.1-8B). Aquí CLM significa modelo de lenguaje contrastivo, no software de gestión del ciclo de vida de contratos ni un modelo de chat general.

**La pregunta técnica no es «¿CLM ha derrotado a Jev?», sino «¿Puede esta aplicación reutilizar candidatos, mantener la calidad de las decisiones y reducir la latencia total medida?».** Nuestro [análisis técnico de Jev](/es/blog/jev-ai-decision-model-review/), el [análisis de los benchmarks de Laya y Jev](/es/blog/laya-vs-jev-benchmark-ai-startup-moat/) y la [guía de procesos empresariales](/es/blog/laya-jev-business-workflows-roi/) cubren esos temas por separado. Aquí nos centramos en ejecutar CLM, preparar sus entradas y evaluar su función como verificador.

Fuentes revisadas el 28 de septiembre de 2026. La inspección del código está fijada al commit de CLM `bb42c6c5bf914fd449bed2f6ca65be80602cb1f7`. Los ejemplos son propuestas de integración, no un benchmark de GPU realizado por Wavect ni una afirmación de uso en producción.

## ¿Qué paso sustituye realmente CLM-8B?

**CLM sustituye un paso de puntuación o selección cuando los candidatos ya existen.** Un planificador, un sistema de recuperación, una regla determinista u otro modelo debe seguir proporcionándolos. CLM no puede elegir una acción correcta ausente, generar cualquier argumento de una herramienta, ejecutar la herramienta elegida ni otorgar permiso para utilizarla.

El proyecto ofrece una API tipada compatible con TypeSafe y un endpoint de clasificación directa. Describe un entrenamiento con unos 60 millones de pares de preguntas y respuestas, 30 millones de negativos sintéticos difíciles y un millón de trayectorias de agentes. Las representaciones de estados y acciones se alinean mediante un objetivo contrastivo, en lugar de generar la decisión final como un párrafo. [El README fijado explica el entrenamiento y la arquitectura de servicio](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/README.md).

No presente la diferencia entre CLM y Jev como «elegir frente a escribir». Jev también es un modelo de decisiones tipadas, no un chatbot convencional. [La introducción de TypeSafe establece esa distinción](https://docs.typesafe.ai/introduction). Compartir el formato de petición no demuestra que sus predicciones sean intercambiables, sus probabilidades estén calibradas o su comportamiento operativo sea idéntico.

Una primera integración limitada sería un asistente de diagnóstico de solo lectura. La aplicación suministra acciones permitidas, CLM las puntúa frente a un informe de error y código de confianza valida la selección antes de que un ejecutor separado pueda hacer nada. Es una propuesta de diseño, no evidencia de precisión de CLM sobre sus registros.

## ¿Qué demuestran los resultados de velocidad y programación?

**Interprete las cifras de lanzamiento como resultados experimentales de los autores, no como una recomendación universal de sustitución.** El proyecto comunica hasta 9 veces menos latencia en ciertas tareas zero-shot y una aceleración aproximada de 13 veces con unos 1.000 candidatos. Son cargas y condiciones de caché diferentes, no dos garantías para cualquier petición. Consulte la [ficha revisada del modelo](#source-model) para esas cifras declaradas por los autores.

La reproducción de T-Rex documenta un planificador físico que identifica acciones seguras, varias peticiones simultáneas y un mecanismo de protección activado. CLM se ejecutó localmente en una RTX 4090; el endpoint de Jev comparado respondió como `jev-1.13.0`. Las latencias se midieron desde el cliente por petición. Por tanto, la supervivencia mide el sistema combinado, no la capacidad de un modelo sin ayuda para interpretar capturas de pantalla. [La metodología de T-Rex identifica el planificador, la protección y el entorno de ejecución](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/examples/t_rex/README.md). No convierta una prueba de juego en un objetivo de latencia de producción.

En programación, CLM ordena soluciones candidatas generadas por otros modelos. El README comunica un 81,6 % en 38 tareas DeepSWE reservadas y un 87,6 % en 30 tareas reservadas de Terminal-Bench 2.1 después de ajustar las cabezas para esas tareas. No son resultados zero-shot de la cabeza de referencia descargable ni puntuaciones de las suites completas. La medición temporal del verificador utiliza una H100, no el mismo montaje que T-Rex. La [sección de resultados fijada](#source-readme) indica las cantidades de tareas y el hardware.

La ficha de la cabeza DeepSWE permite una lectura más concreta: selección entre cuatro candidatos, media de las últimas doce puntuaciones de pasos disponibles y 31 éxitos entre 38 tareas reservadas. Indica una base pass@1 de 28/38 y un techo oracle de 34/38. [La ficha de la cabeza DeepSWE publica la división, la regla de puntuación y el hash del checkpoint](https://huggingface.co/Contrastive-LM/deepswe-clm-heads-8k). Son tres selecciones exitosas adicionales sobre esa base, no una prueba de que un modelo de 8B haya resuelto por sí solo un benchmark completo de programación.

Para su comparación, mantenga constantes la generación de candidatos, la división de tareas, el hardware, la concurrencia y la frontera de red. Publique precisión y abstención junto con la latencia. Una elección incorrecta rápida genera retrabajo; excluir ese retrabajo del cronómetro fabricaría una mejora.

## Cómo alojar CLM-8B con vLLM

**Ejecute dos servicios: un encoder Qwen3-8B con pooling y la API de puntuación de CLM.** Una descarga pequeña de cabezas de proyección no implica un entorno completo pequeño. El paquete CLM declara Python 3.10 o superior y dependencias como PyTorch, vLLM, FastAPI y NumPy. [La definición del paquete fijada registra las dependencias reales](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/pyproject.toml).

Utilice un entorno Linux aislado, compatible con CUDA y adecuado para las versiones elegidas de vLLM y PyTorch. Fijar el commit de CLM no fija todas las dependencias ni la revisión de los pesos del encoder. Resuelva esas versiones para su hardware y después conserve un bloqueo del entorno y la revisión del encoder. No se afirma aquí un mínimo de VRAM ni un coste concreto de hardware.

```
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install \
  "git+https://github.com/Contrastive-LM/CLM.git@bb42c6c5bf914fd449bed2f6ca65be80602cb1f7"
python -m pip freeze > clm-environment.txt
```

Inicie el encoder en una terminal con el entorno activado. Utilice el Qwen3-8B de referencia y el pooling esperado, no cualquier modelo de embeddings con la misma dimensión de salida:

```
vllm serve Qwen/Qwen3-8B \
  --served-model-name qwen3-8b \
  --runner pooling \
  --max-model-len 2048 \
  --host 127.0.0.1 \
  --port 8090
```

En otra terminal activada, suministre `CLM_API_KEY` mediante su sistema de gestión de secretos. El cliente necesitará el mismo secreto; nunca lo guarde en el repositorio. Inicie una API privada con memoria de caché vectorial explícitamente limitada:

```
: "${CLM_API_KEY:?Set CLM_API_KEY in this shell first}"
export CLM_API_KEY
clm-serve \
  --host 127.0.0.1 \
  --port 8700 \
  --emb-url http://127.0.0.1:8090/v1/embeddings \
  --emb-model qwen3-8b \
  --max-tokens 2048 \
  --device cpu \
  --action-cache 64MiB \
  --no-ui
```

Este ejemplo sitúa intencionadamente las cabezas pequeñas y su caché vectorial en CPU, mientras el encoder de 8B permanece en GPU. Ilustra un despliegue, no la configuración de las aceleraciones publicadas. Compare cabezas en CPU y GPU con su carga real antes de decidir.

El servidor inspeccionado utiliza `0.0.0.0` por defecto, solo activa autenticación cuando existe `CLM_API_KEY` y devuelve tanto `ok` como `embedder` en la comprobación de estado. [La implementación del servidor define los parámetros, la autenticación y el estado](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/server.py). Por eso importa enlazar explícitamente a loopback. La clave de CLM no protege automáticamente el endpoint independiente del encoder, y `--no-ui` no es autenticación. Mantenga privados ambos servicios; antes de acceder remotamente, añada entrada autenticada, límites de petición y aislamiento apropiado.

Un estado HTTP correcto en el endpoint de salud no basta para demostrar disponibilidad. Compruebe también el encoder y el modelo anunciado:

```
curl -fsS --connect-timeout 5 --max-time 15 http://127.0.0.1:8700/health \
  | python -c 'import json,sys; d=json.load(sys.stdin); sys.exit(0 if d.get("ok") and d.get("embedder") and "clm-latest" in d.get("models", []) else 1)'
```

## Enviar una petición acotada sin conceder permisos sobre herramientas

**Utilice identificadores estables y descripciones completas de las opciones.** En la implementación `Choice` de CLM, el encoder de estado recibe contexto e instrucciones. El encoder de acciones recibe la descripción de cada opción o su clave si la descripción está vacía. Dos identificadores con la misma descripción no son candidatos semánticamente distintos para ese encoder. [El esquema muestra cómo se convierten los estados y candidatos en texto](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/schema.py).

La siguiente petición sintética en inglés solicita una sugerencia de diagnóstico de solo lectura. Conservamos la misma entrada en todas las traducciones para poder comparar resultados. La opción `review` es deliberada. La aplicación sigue necesitando una alternativa obligatoria: no existe garantía de que el modelo elija abstenerse cuando corresponda.

```
{
  "model": "clm-latest",
  "state": "A CI job fails during dependency installation. The log reports a lockfile mismatch. No production change is authorized.",
  "questions": {
    "next_step": {
      "type": "choice",
      "instructions": "Select the most useful permitted read-only diagnostic step, or request review when the evidence is insufficient.",
      "criteria": {
        "inspect_lockfile": "Read the manifest and lockfile to identify inconsistent dependency versions; make no changes.",
        "read_network_log": "Read existing dependency-download network logs to investigate connection failures; make no changes.",
        "review": "Ask a human to review because the supplied evidence is insufficient or no listed diagnostic is appropriate."
      }
    }
  }
}
```

Guárdela como `request.json` y llame a la API desde una terminal con el mismo `CLM_API_KEY`:

```
: "${CLM_API_KEY:?Set the same CLM_API_KEY used by the API}"
curl -fsS --connect-timeout 5 --max-time 30 \
  -H "Authorization: Bearer ${CLM_API_KEY}" \
  -H "Content-Type: application/json" \
  --data-binary @request.json \
  http://127.0.0.1:8700/v1/systemone
```

Valide el tipo de respuesta, el identificador y la distribución antes de utilizar el resultado. La aplicación debe rechazar identificadores inesperados, verificar por separado los permisos de ejecución y remitir a revisión las peticiones con timeout, evidencia insuficiente o criterios de calidad incumplidos. El identificador `choice` no debe convertirse en una orden de shell sin validar.

La compatibilidad con TypeSafe no hace que cambiar únicamente la URL base sea suficiente para producción. Revalide umbrales, descripciones y preparación de entradas. Para ejemplos empresariales generales, consulte la guía de procesos enlazada arriba, sin confundirla con este contrato específico de CLM.

## ¿Cuándo ayuda realmente la caché de acciones?

**La caché ayuda cuando el mismo texto candidato se puntúa frente a estados nuevos.** Un catálogo fijo de diagnósticos, productos o acciones permitidas puede amortizar su codificación. Un conjunto nuevo de soluciones largas generadas en cada llamada no puede reutilizar sus embeddings de acciones entre tareas independientes, aunque otras reutilizaciones, como las del estado, aún pueden ayudar.

El embedder inspeccionado guarda vectores normalizados por texto de entrada exacto en una caché LRU dentro del proceso. Los fallos de caché llaman al endpoint de pooling configurado; el contador de tokens refleja los tokens procesados en esos fallos. [El código del embedder define la caché de texto y el conteo](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/embedder.py). «Cero tokens nuevos del encoder» no significa cero cómputo, alojamiento gratuito ni procesamiento independiente de los datos de otro usuario.

En la capa del motor, los vectores proyectados de estados y acciones utilizan espacios de nombres separados que incorporan la identidad de la cabeza. [El motor separa embeddings originales, vectores proyectados y selección del modelo](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/engine.py). La memoria vectorial del dispositivo se reserva al arrancar y expulsa las entradas menos recientemente utilizadas. [La implementación de la caché define sus reservas limitadas](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/cache.py). Ese presupuesto no limita la caché separada de textos del encoder ni todo el proceso. Ninguna caché es una capa de autorización o un almacén de memoria duradero.

Tres objetos distintos necesitan reglas de reutilización diferentes:

| Objeto | Oportunidad de reutilización | Qué debe seguir siendo válido |
| --- | --- | --- |
| Embedding de candidato | Reaparece la misma descripción | Encoder, pooling, preprocesamiento y texto exacto |
| Vector proyectado | Se puntúa de nuevo el mismo embedding | Lo anterior y la identidad de la cabeza |
| Decisión final | Se repite el contexto completo | Estado, candidatos, permisos, políticas, modelo, temperatura y vigencia |

Recomendamos conservar un manifiesto con revisión del encoder, pooling, hash de la cabeza, versión de representación del texto y límite de tokens. Reinicie y vuelva a calentar las cachés tras cambiar el encoder o el preprocesamiento, en vez de asumir que recargar una cabeza invalida todas las capas. Versione aparte el catálogo de acciones y no reutilice una decisión final después de cambiar permisos o registros.

Compartir una caché de proceso no garantiza aislamiento entre clientes. Evalúe procesos separados o aislamiento más fuerte para cargas sensibles, incluyendo registros, memoria, tiempos de caché y enrutamiento. Precaliente solo catálogos autorizados. Puntuar bien en una lista global no concede acceso a sus elementos.

## ¿Por qué puede CLM elegir mal con mucha confianza?

**Las probabilidades de CLM son relativas a los candidatos suministrados.** Softmax debe repartir su masa aunque todas las opciones sean malas. Con un único candidato, la distribución necesariamente vale 1,0: eso no demuestra que la acción sea correcta. Añadir alternativas plausibles puede cambiar las probabilidades sin cambiar la tarea.

El campo publicado `confidence` es la probabilidad más alta menos la media de las restantes. No representa una probabilidad universal de corrección factual ni sustituye una política de aceptación calibrada. La fórmula está en el esquema citado anteriormente. Trate `0.9` como una salida que debe validar, no como una garantía transferible del 90 %.

Pruebe casos sin opción correcta, descripciones duplicadas, candidatos casi idénticos, contexto contradictorio, distintos órdenes y cambios de tamaño del conjunto. Mida el error en el umbral propuesto por idioma relevante y familia de acciones. Traducir este artículo no demuestra rendimiento multilingüe de CLM.

Mantenga la autorización fuera del puntuador y repítala justo antes de ejecutar. Para acciones importantes, el fallback debe ser una decisión de la aplicación, no otra etiqueta que el mismo modelo pueda ignorar. Limite inicialmente el despliegue a sugerencias hasta que una evaluación independiente justifique más autoridad.

## El límite de 2.048 tokens y los fallos habituales

**El inicio rápido de referencia trunca los textos a 2.048 tokens.** Subir solo el máximo del encoder no elimina el truncamiento de CLM. Para evaluar entradas de 8K, aumente tanto `vllm serve --max-model-len 8192` como `clm-serve --max-tokens 8192`, y revise memoria de GPU y calidad. Aceptar entradas más largas no demuestra que la cabeza esté validada para ellas.

El embedder inspeccionado envía `truncate_prompt_tokens`; cuentan tanto la representación del estado y las instrucciones como las descripciones de acciones. Pruebe instrucciones y evidencia importante cerca del límite. El código de confianza debe rechazar entradas excesivas o resumirlas deliberadamente, no tratar silenciosamente una decisión truncada como completa.

| Síntoma | Primera comprobación | Respuesta controlada |
| --- | --- | --- |
| HTTP 502 de CLM | URL del encoder, modelo, proceso y error de vLLM | Mantener la petición para revisión, no aprobar por defecto |
| HTTP 401 | Coincidencia de la clave bearer | Corregir credenciales sin mostrar la clave |
| HTTP 422 | Tipo de pregunta, criterios, modelo y temperatura | Validar antes de reintentar |
| API saludable, decisiones inutilizables | Estado `embedder` y prueba real de puntuación | Exigir disponibilidad de ambos servicios |
| Peticiones «calientes» lentas | Textos cambiados, expulsiones y estados nuevos | Medir fallos de caché, no presuponer reutilización |
| Buenas pruebas cortas, malos resultados largos | Ambos límites y ubicación del texto importante | Añadir casos largos antes del despliegue |

No sustituya Qwen3-8B por otro encoder solo porque parezca más rápido. La cabeza depende de la representación y el pooling utilizados para entrenarla. Cuantización, runtimes alternativos y contextos largos requieren validaciones propias de calidad y latencia.

## Utilizar CLM como verificador, no como generador de código

**Un verificador selecciona soluciones disponibles; no elimina la generación ni las pruebas.** Una pipeline puede generar varias soluciones, ejecutar comprobaciones deterministas, puntuar las restantes y pasar el artefacto elegido a revisión. Registre por separado el coste de generación y el tiempo de verificación. La arquitectura general pertenece a nuestra [guía sobre LLM como verificadores](/es/blog/llm-as-a-verifier/); lo específico de CLM es elegir la cabeza y el procedimiento de evaluación correctos.

Para el experimento DeepSWE publicado, la ficha proporciona un comando reproducible sobre embeddings almacenados. Ejecútelo desde el checkout fijado de CLM, con las dependencias de evaluación documentadas y la CLI de Hugging Face disponibles:

```
git clone https://github.com/Contrastive-LM/CLM.git clm-source
git -C clm-source checkout bb42c6c5bf914fd449bed2f6ca65be80602cb1f7
cd clm-source
hf download Contrastive-LM/deepswe-clm-heads-8k --local-dir heads/deepswe
python evaluation/bon_eval.py \
  --hf-dataset Contrastive-LM/deepswe-clm-embeddings-8k \
  --checkpoint heads/deepswe/best_head.pt \
  --tasks-file heads/deepswe/heldout_tasks.json \
  --n 4 --window 12
```

Esto evalúa un verificador sobre un conjunto público de embeddings. No inicia un agente de programación, no regenera todas las trayectorias y no demuestra el coste temporal total de resolver las tareas originales. Verifique los hashes del checkpoint y de la lista reservada, fije el presupuesto de candidatos y mantenga las tareas de entrenamiento separadas de las de evaluación.

Las instrucciones de fine-tuning mantienen explícitamente los datos, folds, conjunto de evaluación y ajustes best-of-N mientras se modifica el entrenamiento. [La guía fijada de fine-tuning define esos límites experimentales](https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/docs/FINETUNING.md). Entrenar cabezas pequeñas puede reducir el coste asociado a parámetros entrenables, pero etiquetar datos, generar embeddings, evaluar y operar el servicio sigue siendo trabajo. No optimice con las tareas reservadas para después presentar el resultado como una prueba intacta.

Compruebe también la licencia de cada artefacto: los pesos CLM de referencia son Apache 2.0, mientras que la ficha revisada de la cabeza DeepSWE indica MIT. No presuponga una licencia única para todos los checkpoints derivados. Pesos abiertos no equivalen a infraestructura gratuita ni a garantía de idoneidad.

## Medir el recorrido completo antes de cambiar

**Una decisión diez veces más rápida no hace que todo el agente sea diez veces más rápido.** Ejemplo deliberadamente hipotético: un flujo tarda 900 ms fuera de la selección y 100 ms seleccionando. Sustituir esos 100 ms por 10 ms deja un total de 910 ms en vez de 1.000 ms: un 9 % menos de tiempo, o una aceleración total de aproximadamente 1,10 veces. Es aritmética ilustrativa, no una medición de CLM.

En un piloto CLM, compare estados nuevos con candidatos fríos, estados nuevos con candidatos calientes, peticiones idénticas repetidas y catálogos cambiantes. Repetir exactamente la petición puede medir otra ruta de caché distinta de la carga real. Mantenga esos resultados separados. Informe de p50/p95 total, fallos, memoria, precisión de decisiones aceptadas y tasa de revisión con igual concurrencia y presupuesto de candidatos.

Antes de ampliar el uso, exija un par encoder-cabeza versionado, propiedad clara de los candidatos, errores controlados, monitorización de caché, evaluación reservada representativa y una ruta de reversión. Compare con el selector existente en modo sombra antes de conceder permisos de escritura. Utilice la [scorecard para detener o escalar un piloto de IA](/es/blog/ai-pilot-kill-or-scale-scorecard/) para decidir la inversión, en vez de duplicar aquí la metodología de despliegue.

A fecha de revisión, la ficha de referencia describe CLM-35B multimodal como previsto para principios de octubre de 2026. Es una declaración de hoja de ruta, no una capacidad publicada ni una fecha garantizada. Evalúe cada checkpoint posterior por separado, sin trasladarle automáticamente los resultados de 8B.

El [servicio de integración de IA de Wavect](/es/services/artificial-intelligence/) puede abordar conjuntamente selector, permisos, observabilidad y evaluación. El [caso Twinsoft AI](/es/case-studies/twinsoft-ai/) aporta contexto de implementación relacionado, no prueba de un despliegue CLM. Lleve la [lista de QA previa al lanzamiento](/es/software-development-guide/software-qa-checklist-before-launch/) y un conjunto representativo de candidatos para [definir un piloto acotado de verificación con CLM](/es/contact/).

## Preguntas sobre el despliegue de CLM-8B

### ¿Basta con descargar las cabezas de proyección para ejecutar CLM-8B?

No. Las cabezas de referencia necesitan embeddings de Qwen3-8B con pooling del último token. Sigue haciendo falta el encoder, con su memoria y cómputo. Situar las cabezas en CPU no convierte todo el modelo de 8B en un runtime pequeño de CPU.

### ¿La caché de acciones de CLM guarda también permisos de herramientas?

No. Reutiliza embeddings de texto y vectores proyectados, no autorización. Mantenga permisos en código de confianza y verifíquelos antes de ejecutar. Reutilizar una decisión final exige que sigan vigentes el estado completo, los candidatos, las políticas y los datos.

### ¿Por qué CLM trunca peticiones después de aumentar el contexto de vLLM?

La configuración de referencia tiene dos límites: max-model-len en vLLM y max-tokens en CLM. Aumente ambos para evaluar entradas largas. Compruebe después memoria, texto crítico cerca del límite y calidad. Aceptar más tokens no demuestra validez para contexto largo.

### ¿Un HTTP 200 en el endpoint de salud de CLM demuestra disponibilidad?

No. La respuesta inspeccionada puede indicar ok=true y embedder=false. Compruebe estado del encoder, modelo disponible y una petición real de puntuación. Mantenga ambos servicios privados: la clave bearer de CLM no protege automáticamente el encoder.

### ¿Las cifras de programación de CLM son resultados zero-shot?

No. Utilizan cabezas ajustadas por tarea sobre subconjuntos reservados: 38 tareas DeepSWE y 30 de Terminal-Bench 2.1. CLM elige entre candidatos previamente generados. Descargar la cabeza de referencia no reproduce por sí solo esas cifras.

### ¿Una confianza CLM de 0,9 implica un 90 % de probabilidad de acertar?

No automáticamente. Las probabilidades Choice son relativas a los candidatos. La fórmula inspeccionada resta la media de las otras probabilidades a la más alta. Valide los umbrales con casos reservados representativos y conserve un fallback obligatorio a revisión.

### ¿Puedo sustituir Qwen3-8B por otro modelo de embeddings?

No debe asumir que sea un cambio compatible. Las cabezas de referencia dependen de la representación de entrenamiento y del pooling del último token. Otro encoder, cuantización o preparación de entrada necesita validación independiente. Igualar dimensiones no basta.

### ¿Está disponible CLM-35B multimodal en esta guía?

No. En la revisión del 28 de septiembre de 2026, la ficha lo presenta como previsto para principios de octubre. La guía utiliza la cabeza publicada CLM-v0.1-8B. Un checkpoint posterior requiere comprobar disponibilidad, licencia, runtime y calidad por separado.

## Reflexiones finales

Trate CLM como un componente de puntuación sustituible, con encoder versionado, candidatos explícitos y calidad medida. Reutilice vectores cuando las entradas se repitan de verdad, pero revalide decisiones y permisos. El primer objetivo es un selector privado fiable sobre tareas reservadas propias, no una aceleración publicitaria.

## También te puede gustar..

[**LLM-as-a-Verifier: arquitectura general** Generación de candidatos, costes de verificación y controles deterministas.](/es/blog/llm-as-a-verifier/) [**Jev: análisis técnico** Estudie Jev por separado, sin convertir el despliegue de CLM en otra comparación de modelos.](/es/blog/jev-ai-decision-model-review/)

Modelos e infraestructura

## Continúa por este clúster

Selección de modelos, economía de inferencia, despliegue local, compresión y serving.

[Empieza por el artículo fundamental**Alojar LLMs en la UE: Cuándo Salen a Cuenta los Open Weights**](/es/blog/self-hosting-llms-eu-cost/)

- [DeerFlow 2.0: Docker, sandboxes y memoria](/es/blog/deerflow-2-docker-setup-sandbox-memory/)
- [AnyJev: calibración de LLM y sesgo por orden](/es/blog/anyjev-calibration-option-order-bias/)
- [LiteAgents SDK: routing por turno, instalación y migración](/es/blog/liteagents-sdk-per-turn-model-routing/)
- [mcp-memory-service: memoria compartida para Claude Code y Cursor](/es/blog/mcp-memory-service-claude-code-cursor/)
- [Claude Opus 5.5: usos, prompts y niveles de esfuerzo](/es/blog/claude-opus-5-5-best-use-cases-workflows/)

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

14 min de lectura · 28 sep 2026 Última revisión 28 de septiembre de 2026

[**Siguiente**](/es/blog/llm-as-a-verifier/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-09-28",
      "inLanguage": "es",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-09-28",
      "url": "https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "CLM-8B puntúa candidatos mediante un encoder Qwen3-8B congelado y pequeñas cabezas de proyección de estado y acción. Autoalojarlo requiere también el encoder, no solo descargar las cabezas. Reutilizar textos candidatos puede ahorrar codificación, pero los vectores almacenados no equivalen a permisos o decisiones reutilizables. Esta guía cubre dos servicios privados, el truncamiento a 2.048 tokens, la validación de peticiones y la evaluación del verificador. Las cifras de programación corresponden a cabezas ajustadas sobre subconjuntos reservados, no al checkpoint de referencia sin ajuste.",
  "articleBody": " Resumen del blog/IA y agentes/Modelos e infraestructura CLM-8B autoalojado: vLLM, caché y verificación Resumen CLM-8B puntúa candidatos mediante un encoder Qwen3-8B congelado y pequeñas cabezas de proyección de estado y acción. Autoalojarlo requiere también el encoder, no solo descargar las cabezas. Reutilizar textos candidatos puede ahorrar codificación, pero los vectores almacenados no equivalen a permisos o decisiones reutilizables. Esta guía cubre dos servicios privados, el truncamiento a 2.048 tokens, la validación de peticiones y la evaluación del verificador. Las cifras de programación corresponden a cabezas ajustadas sobre subconjuntos reservados, no al checkpoint de referencia sin ajuste. CLM-8B resulta interesante cuando un agente debe elegir entre acciones conocidas, no redactar otra respuesta. Su característica de implementación más relevante es la codificación independiente del estado y de las acciones: un estado cambiante puede compararse con candidatos ya codificados. Por eso conviene investigar los catálogos de acciones reutilizables antes de sustituir un paso generativo por otro prompt. La versión publicada, CLM-v0.1-8B, contiene cabezas de proyección para estados y acciones vinculadas a un encoder Qwen3-8B congelado. Cada cabeza tiene aproximadamente 20 millones de parámetros entrenables; el encoder completo sigue ejecutándose durante la inferencia. Los pesos de referencia tienen licencia Apache 2.0. La ficha del modelo CLM explica la arquitectura, la licencia y sus límites. Aquí CLM significa modelo de lenguaje contrastivo, no software de gestión del ciclo de vida de contratos ni un modelo de chat general. La pregunta técnica no es «¿CLM ha derrotado a Jev?», sino «¿Puede esta aplicación reutilizar candidatos, mantener la calidad de las decisiones y reducir la latencia total medida?». Nuestro análisis técnico de Jev, el análisis de los benchmarks de Laya y Jev y la guía de procesos empresariales cubren esos temas por separado. Aquí nos centramos en ejecutar CLM, preparar sus entradas y evaluar su función como verificador. Fuentes revisadas el 28 de septiembre de 2026. La inspección del código está fijada al commit de CLM bb42c6c5bf914fd449bed2f6ca65be80602cb1f7. Los ejemplos son propuestas de integración, no un benchmark de GPU realizado por Wavect ni una afirmación de uso en producción. ¿Qué paso sustituye realmente CLM-8B? CLM sustituye un paso de puntuación o selección cuando los candidatos ya existen. Un planificador, un sistema de recuperación, una regla determinista u otro modelo debe seguir proporcionándolos. CLM no puede elegir una acción correcta ausente, generar cualquier argumento de una herramienta, ejecutar la herramienta elegida ni otorgar permiso para utilizarla. El proyecto ofrece una API tipada compatible con TypeSafe y un endpoint de clasificación directa. Describe un entrenamiento con unos 60 millones de pares de preguntas y respuestas, 30 millones de negativos sintéticos difíciles y un millón de trayectorias de agentes. Las representaciones de estados y acciones se alinean mediante un objetivo contrastivo, en lugar de generar la decisión final como un párrafo. El README fijado explica el entrenamiento y la arquitectura de servicio. No presente la diferencia entre CLM y Jev como «elegir frente a escribir». Jev también es un modelo de decisiones tipadas, no un chatbot convencional. La introducción de TypeSafe establece esa distinción. Compartir el formato de petición no demuestra que sus predicciones sean intercambiables, sus probabilidades estén calibradas o su comportamiento operativo sea idéntico. Una primera integración limitada sería un asistente de diagnóstico de solo lectura. La aplicación suministra acciones permitidas, CLM las puntúa frente a un informe de error y código de confianza valida la selección antes de que un ejecutor separado pueda hacer nada. Es una propuesta de diseño, no evidencia de precisión de CLM sobre sus registros. ¿Qué demuestran los resultados de velocidad y programación? Interprete las cifras de lanzamiento como resultados experimentales de los autores, no como una recomendación universal de sustitución. El proyecto comunica hasta 9 veces menos latencia en ciertas tareas zero-shot y una aceleración aproximada de 13 veces con unos 1.000 candidatos. Son cargas y condiciones de caché diferentes, no dos garantías para cualquier petición. Consulte la ficha revisada del modelo para esas cifras declaradas por los autores. La reproducción de T-Rex documenta un planificador físico que identifica acciones seguras, varias peticiones simultáneas y un mecanismo de protección activado. CLM se ejecutó localmente en una RTX 4090; el endpoint de Jev comparado respondió como jev-1.13.0. Las latencias se midieron desde el cliente por petición. Por tanto, la supervivencia mide el sistema combinado, no la capacidad de un modelo sin ayuda para interpretar capturas de pantalla. La metodología de T-Rex identifica el planificador, la protección y el entorno de",
  "articleSection": "Infraestructura de IA",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "La ficha del modelo CLM explica la arquitectura, la licencia y sus límites",
      "url": "https://huggingface.co/Contrastive-LM/CLM-v0.1-8B"
    },
    {
      "@type": "WebPage",
      "name": "El README fijado explica el entrenamiento y la arquitectura de servicio",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/README.md"
    },
    {
      "@type": "WebPage",
      "name": "La introducción de TypeSafe establece esa distinción",
      "url": "https://docs.typesafe.ai/introduction"
    },
    {
      "@type": "WebPage",
      "name": "La metodología de T-Rex identifica el planificador, la protección y el entorno de ejecución",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/examples/t_rex/README.md"
    },
    {
      "@type": "WebPage",
      "name": "La ficha de la cabeza DeepSWE publica la división, la regla de puntuación y el hash del checkpoint",
      "url": "https://huggingface.co/Contrastive-LM/deepswe-clm-heads-8k"
    },
    {
      "@type": "WebPage",
      "name": "La definición del paquete fijada registra las dependencias reales",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/pyproject.toml"
    },
    {
      "@type": "WebPage",
      "name": "La implementación del servidor define los parámetros, la autenticación y el estado",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/server.py"
    },
    {
      "@type": "WebPage",
      "name": "El esquema muestra cómo se convierten los estados y candidatos en texto",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/schema.py"
    },
    {
      "@type": "WebPage",
      "name": "El código del embedder define la caché de texto y el conteo",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/embedder.py"
    },
    {
      "@type": "WebPage",
      "name": "El motor separa embeddings originales, vectores proyectados y selección del modelo",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/engine.py"
    },
    {
      "@type": "WebPage",
      "name": "La implementación de la caché define sus reservas limitadas",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/src/clm/cache.py"
    },
    {
      "@type": "WebPage",
      "name": "La guía fijada de fine-tuning define esos límites experimentales",
      "url": "https://github.com/Contrastive-LM/CLM/blob/bb42c6c5bf914fd449bed2f6ca65be80602cb1f7/docs/FINETUNING.md"
    }
  ],
  "dateModified": "2026-09-28",
  "datePublished": "2026-09-28",
  "description": "CLM-8B puntúa candidatos mediante un encoder Qwen3-8B congelado y pequeñas cabezas de proyección de estado y acción. Autoalojarlo requiere también el encoder, no solo descargar las cabezas. Reutilizar textos candidatos puede ahorrar codificación, pero los vectores almacenados no equivalen a permisos o decisiones reutilizables. Esta guía cubre dos servicios privados, el truncamiento a 2.048 tokens, la validación de peticiones y la evaluación del verificador. Las cifras de programación corresponden a cabezas ajustadas sobre subconjuntos reservados, no al checkpoint de referencia sin ajuste.",
  "headline": "CLM-8B autoalojado: vLLM, caché y verificación",
  "image": "https://wavect.io/img/blog/headers/header_clm-8b-self-hosting-action-cache-verifier.svg",
  "inLanguage": "es",
  "keywords": "Agentes de IA, CLM-8B, Autoalojamiento",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/",
  "wordCount": 3989
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/",
      "name": "Inicio",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/overview/",
      "name": "Resumen del blog",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/topics/ai-agents/",
      "name": "IA y agentes",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/clusters/models-infrastructure/",
      "name": "Modelos e infraestructura",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/clm-8b-self-hosting-action-cache-verifier/",
      "name": "CLM-8B autoalojado: vLLM, caché y verificación",
      "position": 5
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Las cabezas de referencia necesitan embeddings de Qwen3-8B con pooling del último token. Sigue haciendo falta el encoder, con su memoria y cómputo. Situar las cabezas en CPU no convierte todo el modelo de 8B en un runtime pequeño de CPU."
      },
      "name": "¿Basta con descargar las cabezas de proyección para ejecutar CLM-8B?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Reutiliza embeddings de texto y vectores proyectados, no autorización. Mantenga permisos en código de confianza y verifíquelos antes de ejecutar. Reutilizar una decisión final exige que sigan vigentes el estado completo, los candidatos, las políticas y los datos."
      },
      "name": "¿La caché de acciones de CLM guarda también permisos de herramientas?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "La configuración de referencia tiene dos límites: max-model-len en vLLM y max-tokens en CLM. Aumente ambos para evaluar entradas largas. Compruebe después memoria, texto crítico cerca del límite y calidad. Aceptar más tokens no demuestra validez para contexto largo."
      },
      "name": "¿Por qué CLM trunca peticiones después de aumentar el contexto de vLLM?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. La respuesta inspeccionada puede indicar ok=true y embedder=false. Compruebe estado del encoder, modelo disponible y una petición real de puntuación. Mantenga ambos servicios privados: la clave bearer de CLM no protege automáticamente el encoder."
      },
      "name": "¿Un HTTP 200 en el endpoint de salud de CLM demuestra disponibilidad?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Utilizan cabezas ajustadas por tarea sobre subconjuntos reservados: 38 tareas DeepSWE y 30 de Terminal-Bench 2.1. CLM elige entre candidatos previamente generados. Descargar la cabeza de referencia no reproduce por sí solo esas cifras."
      },
      "name": "¿Las cifras de programación de CLM son resultados zero-shot?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No automáticamente. Las probabilidades Choice son relativas a los candidatos. La fórmula inspeccionada resta la media de las otras probabilidades a la más alta. Valide los umbrales con casos reservados representativos y conserve un fallback obligatorio a revisión."
      },
      "name": "¿Una confianza CLM de 0,9 implica un 90 % de probabilidad de acertar?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No debe asumir que sea un cambio compatible. Las cabezas de referencia dependen de la representación de entrenamiento y del pooling del último token. Otro encoder, cuantización o preparación de entrada necesita validación independiente. Igualar dimensiones no basta."
      },
      "name": "¿Puedo sustituir Qwen3-8B por otro modelo de embeddings?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. En la revisión del 28 de septiembre de 2026, la ficha lo presenta como previsto para principios de octubre. La guía utiliza la cabeza publicada CLM-v0.1-8B. Un checkpoint posterior requiere comprobar disponibilidad, licencia, runtime y calidad por separado."
      },
      "name": "¿Está disponible CLM-35B multimodal en esta guía?"
    }
  ]
}
```
