Files
IdeA/.ideai/memory/opencode-llamacpp-replaces-ollama.md
Blomios a244f32f31 chore(ideai): versionne le store tickets/sprints/mémoire du sprint Modeles locaux
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>
2026-07-11 15:50:46 +02:00

3.5 KiB

name, description, metadata
name description metadata
opencode-llamacpp-replaces-ollama memory note opencode-llamacpp-replaces-ollama
type
project

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-ollamaopencode-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-ff 2e98f1f sur develop. Base branche = eaba05d (profil OpenCode process-backed). WIP diagnostic Ollama capsulé dans 3cdedf2 sur feature/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.