2. Communication Gemini & Authentification

Cette section détaille les protocoles et mécanismes de sécurité permettant à ECHO d'interagir avec l'API de Google Gemini de manière structurée.

Mécanismes d'Authentification API

Pour communiquer avec les modèles de Google (Gemini), le Framework s'appuie sur une architecture multi-provider. Cette conception garantit la connectivité via différentes méthodes d'accès, selon le contexte (Local ou Cloud).

En pratique pour l'OAuth2 : lorsqu'aucun fournisseur d'accès n'est configuré et qu'aucune clé API n'est fournie, le Pipe déclenche le flux PKCE automatiquement au premier message. Un tunnel SSH éphémère (asyncssh) est ouvert sur un port dynamique de la plage 8020–8024, et le callback OAuth2 est reçu sur un port interne (8025–8034). L'utilisateur reçoit un lien cliquable dans l'interface et n'a qu'à autoriser ECHO sur son compte Google pour récupérer ses identifiants.

⚙️ Priorité des identités d'accès

Le registre des fournisseurs d'accès aux modèles est résolu dans cet ordre par EchoAuth.get_ordered_auth_providers() :

  1. OAuth2 (API Antigravity) - prioritaire, accès aux modèles gemini-3.1-pro-preview et gemini-3.5-flash.
  2. Clé API primaire - AI Studio (google_api_key).
  3. Clé API secondaire - fallback de secours (google_api_key_secondary).

Méthodes Factorisées d'Appel (EchoGeminiClient)

Le framework centralise toutes les communications sortantes vers les modèles de langage au sein du module EchoGeminiClient. Ce client HTTP/2 asynchrone orchestre le routage, la résilience et la mise en forme canonique des requêtes.

Exemple de Code - Signatures et Routage
# 1. Préparation du contexte réseau (HTTP/2, Headers furtifs, Auth)
req_ctx = await EchoGeminiClient._prepare_request_context(
    provider=active_provider,
    target_model="gemini-3.5-flash",
    payload={"contents": [...]},
    method="streamGenerateContent",
    chat_id=chat_id,
    enable_paid_credits=True
)

# 2. Appel Centralisé avec Cascade Cognitive (PRO -> FLASH -> LITE)
data, model_key, reason = await EchoGeminiClient.call_cascade(
    target_model_key="MODEL_FLASH", 
    payload=payload,
    user_id=user_id,
    metadata=__metadata__,
    events=events,
    include_thoughts=False
)

# Analyse du statut tri-état
if reason:
    status = "warning"  # Ex: "policy clamping" ou "cascade downgrade"
else:
    status = "success"
← High-Level Design (HLD)    Déploiement & Infra →