Prueba de conexión a DeepSeek V4.1 Flash 1017 en QDivZero Python 3.11 o posterior. Solo biblioteca estándar; no hace falta pip. Estos archivos son una comprobación reproducible del protocolo. Se han probado contra un servidor HTTP local con respuestas ficticias; no se han ejecutado contra QDivZero ni acreditan un benchmark de producción. Configuración ------------- QDIV0_API_KEY: clave de tu cuenta, obligatoria. No la guardes en este archivo. QDIV0_API_URL: origen HTTPS, por defecto https://api.qdiv0.com. Sin /v1, rutas, credenciales, consultas ni fragmentos. Solo se admite HTTP en localhost/127.0.0.1/::1 para pruebas locales. QDIV0_MODEL: Nombre del modelo que pusiste en Revisión al desplegar DeepSeek. Por defecto: equipo-codigo, como en el paso 2 de la guía. El despliegue debe existir en tu cuenta antes de usar la sonda. El script añade /v1/chat/completions y envía una petición POST por cada sonda. No crea instancias, endpoints ni aliases. Al ejecutarlo con una clave real, las peticiones consumen el servicio y pueden tener coste según tu modalidad. No hay reintentos automáticos ni seguimiento de redirecciones. Desde el directorio donde descargaste probe_endpoint.py: export QDIV0_API_URL='https://api.qdiv0.com' export QDIV0_MODEL='equipo-codigo' Configura QDIV0_API_KEY en tu entorno con tu gestor de secretos o mecanismo habitual. Los comandos siguientes envían 1, 4 y 32 peticiones respectivamente; ejecútalos por separado y revisa cada resultado antes del siguiente paso. python3 probe_endpoint.py --requests 1 --concurrency 1 python3 probe_endpoint.py --requests 4 --concurrency 4 python3 probe_endpoint.py --requests 32 --concurrency 32 Las 32 personas de referencia son usuarios simultáneos. Un equipo de más de 32 miembros puede compartir el despliegue si reparte su uso en el tiempo. El coste por persona se divide entre el total de miembros que lo comparten. Un lote de 32 peticiones no simula 32 usuarios activos ni mide su trabajo real. Las tres ejecuciones juntas envían 37 peticiones. Ajusta primero el modelo y el presupuesto a tu entorno; no hace falta ejecutar los tres lotes. Opciones y controles ------------------- --requests 1..64; por defecto 1. --concurrency 1..32; por defecto 1; nunca supera las peticiones del lote. --max-tokens 1..32768; por defecto 2048. Límite solicitado de salida, incluyendo razonamiento cuando el modelo lo contabiliza así. --timeout >0 y <=3600 segundos; por defecto 900. Timeout de operaciones de red de urllib, no un plazo absoluto del lote completo. --tools Opcional: ofrece la función ficticia get_project_status con project_id='demo-project', sin tool_choice forzado. Cuenta las llamadas devueltas; no ejecuta funciones, comandos ni accesos a ficheros y no continúa la conversación. Ejemplos opcionales, solo tras comprobar compatibilidad: python3 probe_endpoint.py --requests 1 --max-tokens 4096 python3 probe_endpoint.py --requests 1 --max-tokens 4096 --tools El prompt contiene datos ficticios. No se envían archivos ni código privado. No se fija temperature ni un nivel de razonamiento: cada modelo/endpoint puede tener requisitos diferentes. Con thinking activado, 2048 tokens pueden agotarse antes de que aparezca la respuesta final. Revisa finish_reason y content_nonempty; no interpretes una respuesta vacía como un fallo de red. Salida JSON Lines y lectura de resultados ---------------------------------------- Cada petición produce una línea con su número, estado HTTP, segundos, finish_reason, usage.prompt_tokens/completion_tokens, content_nonempty y número de tool_calls. Los errores llevan una categoría fija sin el cuerpo del servidor ni detalles de excepciones. No se imprimen claves, cabeceras, prompts, contenido generado, razonamiento ni argumentos de herramientas. La última línea resume successes/failures, elapsed_seconds, p50/p95 y usage. Un éxito significa HTTP 2xx con una respuesta JSON de Chat Completions válida; no certifica corrección del código, una llamada de herramienta ni una tarea completa. finish_reason='length', contenido vacío o cero tool_calls requieren interpretación incluso si la petición cuenta como éxito del protocolo. seconds mide de extremo a extremo desde el envío de esa petición hasta leer y validar su respuesta, incluyendo red y espera del servidor. Excluye la cola local del pool. elapsed_seconds incluye el lote y su cola. Los percentiles usan solo respuestas válidas: interpolación lineal en (n-1)*p; con una muestra, p50=p95. Las muestras pequeñas son descriptivas y no acreditan un SLA. usage suma los campos numéricos que realmente devolvió el servidor en las respuestas válidas. usage_responses indica cuántas aportaron cada campo. Si falta usage, se muestra null; no se inventan ceros ni costes. Un fallo o timeout también puede haber consumido recursos aunque no aporte usage. No se calcula TTFT ni tokens/s: no hay streaming ni medición separada del razonamiento. Mantén constantes modelo, cuantización, contexto, hardware y configuración antes de comparar ejecuciones; evalúa calidad por separado. Código de salida: 0 si todas las peticiones reciben una respuesta válida; 1 si alguna falla; 2 si la configuración o los argumentos son inválidos. No se guardan resultados automáticamente. Para conservar solo metadatos: python3 probe_endpoint.py --requests 1 > resultado.jsonl opencode.json conecta directamente al despliegue equipo-codigo y muestra el nombre DeepSeek V4.1 Flash 1017. Ponlo en la raíz del proyecto y abre OpenCode desde una terminal con QDIV0_API_KEY configurada. Si ya tienes un archivo de configuración, incorpora los campos al existente. El ejemplo usa la ventana completa de 1M de tokens de contexto (1048576) y limita cada salida a 4096. El contexto incluye entrada y salida. El despliegue debe tener habilitada esa misma ventana. Si Profundo propone un contexto menor, Personalizado permite elegir Exigir el contexto completo del modelo antes de lanzar la instancia. El paso 8 añade, de forma opcional, un Smart Balancer llamado equipo-agentes que apunta al mismo DeepSeek privado. Si lo has creado, cambia QDIV0_MODEL a equipo-agentes para probarlo. En opencode.json cambia el campo model a qdivzero/equipo-agentes y la clave equipo-codigo dentro de models a equipo-agentes. La sonda no crea el balanceador ni sus rutas. Para atender tráfico mientras una instancia arranca, el balanceador necesita otro destino disponible. La guía utiliza una segunda instancia privada de la misma revisión 1017 como respaldo opcional; suma su coste al presupuesto.