Store d'orchestration du sprint « Modeles locaux » : sprint 883534aa, tickets #35/#36 (et #32/#37–#41 du store), compteurs et index, notes mémoire de livraison (#35 CRUD/statut, #36 multi-profils, OpenCode↔llama.cpp). Runtime transitoire volontairement exclu (background-tasks/, agent scratch testllamacpp.md). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.5 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| opencode-llamacpp-replaces-ollama | memory note opencode-llamacpp-replaces-ollama |
|
OpenCode local : llama.cpp remplace Ollama (2026-07-11)
Pourquoi
Le tool-calling des modèles locaux via Ollama ne s'est jamais déclenché nativement en live : OpenCode fuyait les appels d'outils en texte <function=...> (émulation par prompt), jamais parsés. Diagnostic utilisateur : la faute est dans la relation OpenCode↔Ollama. Décision : abandonner Ollama comme provider OpenCode et passer à llama.cpp (llama-server, endpoint OpenAI-compatible). Voir historique : opencode-config-model-agnostic-tool-diagnostic, opencode-ollama-native-tool-call-flag, opencode-ollama-tool-calling-surface-overload (contexte Ollama, désormais superseded).
Contrat livré
OpenCodeConfig (domaine + DTO app-tauri + type frontend) :
{ baseURL: String (requis, http/https), apiKey: Option<String>, model: String (requis), reasoning: Option<bool>=true, attachment: Option<bool>=false }. Sérialisation wire camelCase (baseURL via serde rename), apiKey/reasoning/attachment skip_serializing_if=None.
Seed profil canonique : opencode-ollama → opencode-llamacpp ("OpenCode + llama.cpp"), command opencode, adapter OpenCode, defaults baseURL=http://localhost:8080/v1, apiKey=sk-no-key, model=qwen3-coder-30b.
opencode_config_json (crates/application/src/agent/lifecycle.rs) régénère un opencode.json MINIMAL : provider llamacpp (npm=@ai-sdk/openai-compatible, options.baseURL/apiKey du profil, def modèle llamacpp/<model> avec tool_call:true,reasoning,attachment), MCP idea inchangé, permission bash/edit=ask, disabled_providers=["anthropic","openai","gemini","ollama"]. apiKey omis (pas null) si absent. Plus aucun résidu ollama/préfixe ollama//allow-list diagnostic.
Frontend : wizard profil OpenCode = 3 champs éditables Base URL / Model / API key(optionnel) (FirstRunWizard.tsx, profile.ts, mocks). L'embedder Ollama (ollamaDetected, mémoire vectorielle) est un AUTRE usage, NON touché.
État
- Fichiers : domain/profile.rs, application/{catalogue.rs,lifecycle.rs,tests/agent_lifecycle.rs}, infrastructure/session/opencode.rs ; frontend domain/index.ts, adapters/mock/, features/first-run/.
- QA VERT : domain 244, application 81+64, infra 263/10 (les 10 = bind-port sandbox, identiques sur develop = non-régression), frontend 574, tsc propre. Claude/Codex non régressés.
- Git : commit
4e70631, merge--no-ff2e98f1fsurdevelop. Base branche =eaba05d(profil OpenCode process-backed). WIP diagnostic Ollama capsulé dans3cdedf2surfeature/opencode-glm47-flash-tool-diagnostic. PAS de push distant. - Tickets : #32 fermé ; #42/#43 (Ollama) retirés du store.
Reste ouvert
E2E live llama.cpp jamais exécuté (aucun llama-server joignable sur :8080 au moment QA ; llama-server 9859 + opencode 1.17.18 installés). À valider côté utilisateur : lancer llama-server, relancer l'Appointe rebuild, créer un agent profil llama.cpp, vérifier un vrai tool_use MCP (pas de <function= texte). Rebuild AppImage requis pour le live (binaire qui tourne = AppImage). Build via NO_STRIP=true cf appimage-build-no-strip-relr-dyn-fix.