Capacités
Interfaces d'exécution standardisées (LLM, STT, TTS, embedding, OCR, webhook, discovery) que les fournisseurs implémentent et que la plateforme orchestre.
Au-delà des outils et des déclencheurs, un fournisseur peut exposer des capacités — des interfaces d'exécution standardisées que la plateforme sait orchestrer. Définies par produit via les helpers defineCapability*() et déclarées dans capabilities.runtimes.
Comment la plateforme résout une capacité
Lorsqu'un workflow demande « un LLM » ou « STT », la plateforme parcourt le registre d'intégrations dans un ordre fixe. C'est ce qui vous permet de substituer OpenAI par un vLLM auto-hébergé sans toucher aux définitions des workflows.
Aucun repli silencieux. Si rien ne correspond, l'appel retourne null et l'appelant remonte une erreur 412 typée — jamais une substitution discrète vers un fournisseur que l'organisation n'a jamais installé.
Les capacités
LLM
Chat, complétion, streaming. La surface complète de fournisseur LLM.
STT
Reconnaissance vocale — batch + WebSocket temps réel / SSE.
TTS
Synthèse vocale — batch + streaming temps réel.
Embedding
Génération d'embeddings vectoriels.
Webhook
Vérifier, transformer, souscrire — webhooks spécifiques au fournisseur.
Discovery
Sélecteurs, navigation dans les ressources, portées d'accès.
| Capacité | Helper | Référence par défaut | Direction |
|---|---|---|---|
| LLM | defineCapabilityLLM() | MMLU · HumanEval · GPQA | plus élevé = meilleur |
| STT | defineCapabilitySTT() | WER | plus bas = meilleur |
| TTS | defineCapabilityTTS() | MOS | plus élevé = meilleur |
| Embedding | defineCapabilityEmbedding() | MTEB · MIRACL | plus élevé = meilleur |
| Video | defineCapabilityVideo() | — | — |
| OCR | defineCapabilityOCR() | — | — |
| Webhook | defineCapabilityWebhook() | n/a | — |
| Discovery | defineCapabilityDiscovery() | n/a | — |
Comment les capacités apparaissent dans l'interface
La page d'administration Paramètres → Intégrations est centrée sur les produits. Cliquer sur un fournisseur ouvre un dialogue avec un onglet Capacités qui regroupe tout en trois sections :
- Fonctionnalités d'intelligence — capacités d'exécution (LLM, STT, TTS, Embedding, OCR, Vidéo). Nombre de modèles, badges de modèle par défaut, détails par modèle dépliables.
- Déclencheurs d'événements — blocs de déclencheurs qui lancent des workflows sur des événements externes.
- Capacités et outils — blocs d'action + outils, avec activation/désactivation par ligne.
Politique de modèle (mode liste d'autorisation)
Pour les capacités d'intelligence, les administrateurs peuvent restreindre les modèles utilisables :
| Mode | Comportement |
|---|---|
| Tous (par défaut) | Chaque modèle fourni par le fournisseur est disponible |
| Liste d'autorisation | Seuls les modèles explicitement activés sont disponibles |
Stocké par fournisseur et par capacité via l'API de politique d'organisation. Périmètre organisation — différentes organisations peuvent choisir différents sous-ensembles du même fournisseur.
Scores de référence
Toutes les capacités d'intelligence supportent des benchmarks optionnels sur les définitions de modèles, affichés dans l'interface des intégrations pour aider les administrateurs à comparer.
interface BenchmarkScore {
name: string; // ex. "MTEB Average", "WER", "MOS"
score: number;
source?: string; // ex. "Artificial Analysis"
updatedAt?: string; // date ISO
}Combiner les capacités
Un seul produit peut déclarer plusieurs capacités :
const myProduct = defineProduct({
id: "my-ai-service",
capabilities: {
tools: [chatTool, imageTool],
triggers: [],
runtimes: {
llm: llmCapability,
stt: sttCapability,
tts: ttsCapability,
embedding: embeddingCapability,
},
webhooks: webhookCapability,
discovery: discoveryCapability,
},
block: myBlock,
});Les capacités déclarées dans runtimes s'enregistrent automatiquement dans l'index des capacités de la plateforme. Aucune étape d'enregistrement manuelle n'est requise.
Sessions temps réel
STT et TTS supportent le streaming temps réel via WebSocket ou SSE. Les sessions s'exécutent dans le Worker Thread du SandboxActor, qui maintient la connexion persistante au fournisseur.
interface RealtimeSession {
sessionId: string;
send(chunk: ArrayBuffer | string): void;
onMessage(handler: (data: RealtimeMessage) => void): void;
close(): Promise<void>;
}
interface RealtimeMessage {
type: "interim" | "final" | "audio" | "error" | "metadata";
data: unknown;
timestamp: number;
}