Kontrak Kapabilitas
Inventaris ini ditegakkan oleh scripts/test-capability-contracts.mjs. Sebuah kapabilitas penyedia belum lengkap sampai skema dan pemetaan katalognya, handler yang dapat dieksekusi, klien peramban yang sesuai, tindakan UI bernama, dokumentasi, pengujian perilaku terfokus, serta manifes yang disertakan semuanya selaras.
| Kapabilitas | Jenis plugin | Rute yang dapat dieksekusi | Klien peramban | Tindakan UI | Dokumentasi | Pengujian perilaku terfokus | Definisi yang disertakan |
|---|---|---|---|---|---|---|---|
| Chat / pelengkapan | 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) — perutean plugin yang persis mencapai penyedia terpilih untuk permintaan biasa dan streaming | anthropic, codex-oauth, gemini, github, groq, huggingface, kimi-code, llama-cpp, mistral, mlx-lm, openai, openrouter |
| Embedding | embedding | POST /api/ollama/embedGET /api/embeddings/models (hanya penemuan) | 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) — kapabilitas Hugging Face mengabaikan endpoint Chat generik dan menggunakan payload tugas | huggingface |
| Pembuatan gambar | 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) — pembuatan gambar menggunakan penyedia yang dipilih dan pengaturan OpenAI yang dibatasi per pengguna | comfyui, huggingface, openai, openrouter |
| Ucapan ke teks | 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 mengirim permintaan multipart kompatibel OpenAI ke rute terpilihfrontend/e2e/stt.spec.ts (test:e2e) — input ucapan penyedia mengungkapkan rutenya dan mentranskripsikan audio yang direkam | huggingface, openai |
| Teks ke ucapan | 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 merutekan alias model bersama melalui plugin dan valve pengguna yang dipilihfrontend/e2e/tts-playback.spec.ts (test:e2e) — pembacaan nyaring berbentuk batch menggunakan ulang suara tersimpan yang dipilih untuk setiap batch | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| Pembuatan 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) — model keluaran audio OpenRouter mengalirkan byte suara yang dihasilkan | openrouter |
| Pembuatan video | 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) — pembuatan video mengirim, melakukan polling, dan mengunduh melalui endpoint penyediascripts/test-openrouter-media-routing.mjs (test:package) — publikasi video yang disiapkan dan dilanjutkan menyelesaikan hilangnya konfirmasi commit | openrouter |
Penegakan
Gerbang paket menolak skema atau jenis plugin yang tidak dideklarasikan, pemetaan katalog usang, rute yang hanya untuk penemuan tetapi disajikan sebagai eksekusi, handler tanpa transportasi peramban yang sesuai, tindakan UI tanpa pemanggilan dan pemicu yang terlihat, dokumentasi tanpa klaim khusus kapabilitas, pengujian tanpa perilaku di dalam kasus pengujian bernama, inventaris hasil pembuatan yang usang, serta endpoint manifes, peta model, atau nilai bawaan yang tidak valid.
Pembuatan embedding dieksekusi melalui POST /api/ollama/embed dan dapat dirutekan ke plugin embedding terpilih. GET /api/embeddings/models mencantumkan model; gerbang mencatatnya sebagai khusus penemuan dan tidak pernah menerimanya sebagai bukti bahwa pembuatan embedding berfungsi.
Kontrak sumber mengidentifikasi setiap pengujian perilaku terfokus beserta runner-nya. Skrip backend harus terdaftar di test:package; spesifikasi frontend harus dapat ditemukan oleh skrip test:e2e berbasis Playwright. Penemuan langsung dapat mempersempit katalog model, tetapi tidak menciptakan kapabilitas baru yang dapat dieksekusi.