Scrydon

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.

Ordre de résolution des capacités, de gauche à droite — un workflow demande une capacité ; la plateforme vérifie la substitution par appel, puis la politique d'organisation, puis la sélection automatique parmi les candidats installés. La première correspondance résout et distribue ; si rien ne correspond, elle retourne null et l'appelant remonte une erreur HTTP 412.

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

CapacitéHelperRéférence par défautDirection
LLMdefineCapabilityLLM()MMLU · HumanEval · GPQAplus élevé = meilleur
STTdefineCapabilitySTT()WERplus bas = meilleur
TTSdefineCapabilityTTS()MOSplus élevé = meilleur
EmbeddingdefineCapabilityEmbedding()MTEB · MIRACLplus élevé = meilleur
VideodefineCapabilityVideo()
OCRdefineCapabilityOCR()
WebhookdefineCapabilityWebhook()n/a
DiscoverydefineCapabilityDiscovery()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 :

  1. 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.
  2. Déclencheurs d'événements — blocs de déclencheurs qui lancent des workflows sur des événements externes.
  3. 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 :

ModeComportement
Tous (par défaut)Chaque modèle fourni par le fournisseur est disponible
Liste d'autorisationSeuls 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;
}
Sur cette page

Sur cette page