Contrats de capacités
Cet inventaire est appliqué par scripts/test-capability-contracts.mjs. Une capacité de fournisseur n’est complète que lorsque son schéma et sa correspondance dans le catalogue, son gestionnaire exécutable, le client de navigateur correspondant, l’action d’interface nommée, la documentation, le test comportemental ciblé et les manifestes inclus concordent.
| Capacité | Types de plugins | Route exécutable | Client du navigateur | Action de l’interface | Documentation | Tests comportementaux ciblés | Définitions incluses |
|---|---|---|---|---|---|---|---|
| Discussion / complétion | chat, completion | WS /ws (chat_stream) | frontend/src/hooks/useChat.ts | frontend/src/pages/ChatPage.tsx — handleSendMessage | docs/08-PLUGIN_ARCHITECTURE.md | scripts/test-chat-provider-selection.mjs (test:package) — le routage exact du plugin atteint le fournisseur sélectionné pour les requêtes normales et en diffusion | anthropic, codex-oauth, gemini, github, groq, huggingface, kimi-code, llama-cpp, mistral, mlx-lm, openai, openrouter |
| Plongements | embedding | POST /api/ollama/embedGET /api/embeddings/models (découverte uniquement) | frontend/src/utils/api/modelApi.ts | frontend/src/components/ModelManager.tsx — handleGenerateEmbeddings | docs/09-RAG_FEATURE.md | scripts/test-plugin-capability-routing.mjs (test:package) — les capacités Hugging Face ignorent le point de terminaison générique Chat et utilisent des charges utiles propres à la tâche | huggingface |
| Génération d’images | image | POST /api/image-gen/generate | frontend/src/utils/api/imageGenApi.ts | frontend/src/components/ImageGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-image-generation-routing.mjs (test:package) — la génération d’images utilise le fournisseur sélectionné et les paramètres OpenAI propres à l’utilisateur | comfyui, huggingface, openai, openrouter |
| Reconnaissance vocale | stt | POST /api/stt/transcribe | frontend/src/utils/api/sttApi.ts | frontend/src/hooks/useDictation.ts — toggle | docs/42-SPEECH_TO_TEXT.md | scripts/test-stt-routing.mjs (test:package) — STT envoie une requête multipart compatible avec OpenAI à la route sélectionnéefrontend/e2e/stt.spec.ts (test:e2e) — la saisie vocale du fournisseur indique sa route et transcrit l’audio enregistré | huggingface, openai |
| Synthèse vocale | tts | POST /api/tts/generate | frontend/src/utils/api/ttsApi.ts | frontend/src/components/TTSButton.tsx — handlePlay | docs/38-MEDIA_GENERATION.md | scripts/test-tts-routing.mjs (test:package) — TTS achemine un alias de modèle partagé par le plugin sélectionné et la valve de l’utilisateurfrontend/e2e/tts-playback.spec.ts (test:e2e) — la lecture à voix haute par lots réutilise la voix enregistrée sélectionnée pour chaque lot | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| Génération audio | audio | POST /api/media/sound/generate | frontend/src/utils/api/mediaApi.ts | frontend/src/components/MediaGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-openrouter-media-routing.mjs (test:package) — les modèles de sortie audio OpenRouter diffusent les octets du son généré | openrouter |
| Génération vidéo | video | POST /api/media/video/generatePOST /api/media/video/jobs/:jobId/resume | frontend/src/utils/api/mediaApi.tsfrontend/src/utils/api/mediaApi.ts | frontend/src/components/MediaGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-openrouter-media-routing.mjs (test:package) — la génération vidéo envoie, interroge et télécharge par le point de terminaison du fournisseurscripts/test-openrouter-media-routing.mjs (test:package) — la préparation des vidéos et la reprise des publications résolvent la perte d’accusés de validation | openrouter |
Application
Le contrôle du paquet rejette les schémas ou types de plugins non déclarés, les correspondances de catalogue obsolètes, les routes de découverte présentées comme routes d’exécution, les gestionnaires sans transport de navigateur correspondant, les actions d’interface sans invocation ni déclencheur visible, la documentation dépourvue d’affirmations propres à la capacité, les tests sans comportement dans le cas de test nommé, l’inventaire généré obsolète ainsi que les points de terminaison, correspondances de modèles ou valeurs par défaut invalides des manifestes.
La génération de plongements s’exécute par POST /api/ollama/embed et peut être acheminée vers un plugin de plongement sélectionné. GET /api/embeddings/models répertorie les modèles ; le contrôle l’enregistre comme route de découverte uniquement et ne l’accepte jamais comme preuve du fonctionnement de la génération de plongements.
Le contrat source identifie chaque test comportemental ciblé et son exécuteur. Les scripts du serveur dorsal doivent être enregistrés dans test:package ; les spécifications de l’interface doivent être détectables par le script test:e2e fondé sur Playwright. La découverte en direct peut restreindre un catalogue de modèles, mais elle ne crée pas de nouvelle capacité exécutable.