Skip to content

v2.10.0 — Proveedor LLM local multi-GPU (llama.cpp) + descarga de modelos HF - #9

Merged
santiquiroz merged 6 commits into
masterfrom
feat/v2-providers-context-pricing-images
Aug 19, 2026
Merged

v2.10.0 — Proveedor LLM local multi-GPU (llama.cpp) + descarga de modelos HF#9
santiquiroz merged 6 commits into
masterfrom
feat/v2-providers-context-pricing-images

Conversation

@santiquiroz

Copy link
Copy Markdown
Owner

Resumen

  • Proveedor llama.cpp gestionado: bipolar-code arranca/detiene llama-server local con detección de GPUs y --tensor-split automático proporcional a VRAM libre (multi-GPU heterogénea AMD via Vulkan, ej. R9700 32GB + RX 7800 XT 16GB).
  • Passthrough Anthropic nativo: providers con anthropic_native (llama-server, LM Studio ≥0.4.1, Ollama 2026+) reciben /v1/messages verbatim — sin litellm ni traducción OAI; tool-use e imágenes intactos.
  • Descarga de modelos GGUF desde Hugging Face en la UI: búsqueda, multi-parte agrupado, progreso/velocidad, resume y cancelación; botón "Usar" configura el modelo.
  • Auto-arranque opcional de llama-server al boot + logs del server en la UI.
  • Endpoint /settings/connection-info (IP LAN real) para conectar Claude Code desde otros PCs.
  • Guard de stop: no mata llama-server con slots procesando sin force.

Test plan

  • Suite backend: 93 passed (20 tests nuevos: llamacpp_service, messages nativo, hf_models_service)
  • tsc --noEmit frontend limpio
  • Smoke real con llama-server + GGUF al montar la R9700 (hardware pendiente)

Spec: docs/superpowers/specs/2026-08-18-local-llm-multigpu-provider-design.md

🤖 Generated with Claude Code

Para que los asistentes AI (Codex, Copilot) encuentren las instrucciones del
proyecto en CLAUDE.md al clonar en otra maquina.
…) con Anthropic Messages API nativa

Dominio:
- Nuevo services/llamacpp_service.py: detección de GPUs (llama-server --list-devices), tensor-split proporcional a VRAM libre por GPU, estimación de ajuste modelo+KV vs VRAM (warning, no gate), start/stop/status con PID file y guard de slots ocupados antes de matar el server.
- models/provider.py: campos anthropic_native (provider expone /v1/messages nativo) y local_launch (config de lanzamiento local).
- providers_service: nuevo provider por defecto llamacpp (Vulkan multi-GPU heterogéneo, puerto 4002, anthropic_native).

Aplicación:
- api/llamacpp.py: router /api/llamacpp — devices, status, start, stop (409 si hay slots procesando y no se fuerza).
- api/messages.py: tercera rama en /v1/messages — passthrough verbatim para providers anthropic_native (llama-server, LM Studio >=0.4.1, Ollama 2026+) sin litellm ni traducción OAI; reescritura de model al active_model; error accionable si el server local no responde.
- api/settings.py: endpoint /settings/connection-info con IP LAN detectada para configurar Claude Code en PCs remotos.

Infraestructura:
- Frontend: componente LlamaCppPanel (GPUs detectadas con VRAM, config GGUF/exe/ctx, start/stop con confirmación de force), tipos LlamaDevice/LlamaStatus/LocalLaunchConfig, llamacppApi, hooks useLlamaCpp; Settings muestra la IP LAN real en el snippet de conexión remota.
- CLAUDE.md: fila de llamacpp_service y párrafo de anthropic_native en el registry.

Pruebas:
- tests/test_llamacpp_service.py: 15 tests (parse de devices, tensor-split proporcional, fit, cmdline single/multi GPU y split manual, guard de stop con force).
- tests/test_messages_native.py: 5 tests (URL destino, reescritura de model, dedupe de sufijo /v1, relay SSE, sin headers de auth sin env var).

Cobertura global del proyecto: suite backend 82 passed; tsc frontend sin errores.
…rranque y logs de llama-server

Dominio:
- Nuevo services/hf_models_service.py: búsqueda de repos GGUF en HF API, listado de archivos con agrupación de multi-parte (-NNNNN-of-NNNNN), descargas en background con progreso/velocidad en memoria, resume por Range sobre .part, cancelación y listado de modelos locales.
- llamacpp_service: tail_logs (lectura eficiente de últimos 64KB de out/err) y autostart_if_configured (arranque al boot solo con flag autostart explícito y model_path válido).

Aplicación:
- api/llamacpp.py: endpoints /hf/search, /hf/files, /hf/download, /hf/downloads, DELETE /hf/download/{id}, /models, /use-model y /logs.
- main.py: hook de autostart en lifespan (task en background, sin bloquear arranque).

Infraestructura:
- Frontend: componente ModelDownloader (búsqueda HF, descarga con barra de progreso y velocidad, cancelar, modelos locales con "Usar"), secciones colapsables de Modelos y Logs en LlamaCppPanel, toggle de auto-arranque; tipos HFRepo/HFFile/HFDownload/LocalModel y llamacppApi ampliado.

Pruebas:
- tests/test_hf_models_service.py: 11 tests (group_multipart, expand_parts, download_id, list_local_models con multi-parte, cancel, headers HF_TOKEN, dedupe de start_download).

Cobertura global del proyecto: suite backend 93 passed; tsc frontend sin errores.
@santiquiroz
santiquiroz merged commit a2711e5 into master Aug 19, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant