33800 Docs

← Retour

Proposition : Remonter les metadata GPU dans connectors-api

Date : 11/02/2026 Status : IMPLEMENTEE Scope : ai-orchestrator + connectors-api (2 repos) Impact : Non-breaking, ajout de champs


Contexte

L'ai-orchestrator retourne gpu_id, processing_time_ms, vram_used_mb pour chaque job. Connectors-api ne remonte aucune de ces infos au frontend. La colonne metadata JSONB existe deja sur ai_messages (migration 015).

Modifications

1. ai-orchestrator (main.py) - Webhook payload

Fichier : app/main.py ligne ~1423 Modif : Ajouter gpu_id dans le payload webhook

# AVANT
payload = {
    "job_id": job_id,
    "status": job_data.get("status"),
    "tool_id": job_data.get("tool_id"),
    ...
    "processing_time_ms": job_data.get("processing_time_ms"),
}

# APRES
payload = {
    "job_id": job_id,
    "status": job_data.get("status"),
    "tool_id": job_data.get("tool_id"),
    ...
    "processing_time_ms": job_data.get("processing_time_ms"),
    "gpu_id": job_data.get("gpu_id"),          # AJOUT
    "vram_used_mb": job_data.get("vram_used_mb"),  # AJOUT
}

2. connectors-api ai.ts - pollJobResult()

Fichier : src/services/ai.ts ligne ~93 Modif : Retourner les metadata GPU en plus de outputResult

// Type de retour enrichi
Promise<{
  success: boolean;
  response?: string;
  outputResult?: any;
  gpuId?: number;
  processingTimeMs?: number;
  vramUsedMb?: number;
  error?: string;
}>

// Dans le bloc status.status === 'completed' :
return {
  success: true,
  response: ...,
  outputResult,
  gpuId: status.gpu_id ?? undefined,
  processingTimeMs: status.processing_time_ms ?? undefined,
  vramUsedMb: status.vram_used_mb ?? undefined,
};

3. connectors-api aiChat.ts - executeToolCall() ai_job

Fichier : src/services/aiChat.ts ligne ~676 Modif : Stocker les metadata GPU dans le message assistant via metadata JSONB

Apres le pollJobResult(), construire un objet metadata :

const jobMeta = {
  gpu_id: result.gpuId,
  processing_time_ms: result.processingTimeMs,
  vram_used_mb: result.vramUsedMb,
};

Ce metadata sera retourne avec le contenu pour stockage dans ai_messages.metadata.

4. connectors-api intentExecutor.ts - executeAiJobIntent()

Fichier : src/services/intentExecutor.ts ligne ~275 Modif : Meme pattern, inclure les metadata dans le retour

return {
  success: true,
  data: output,
  metadata: {
    gpu_id: result.gpuId,
    processing_time_ms: result.processingTimeMs,
    vram_used_mb: result.vramUsedMb,
  },
  formattedData: ...
};

5. connectors-api index.ts - Webhook handler

Fichier : src/index.ts ligne ~4944 Modif : Extraire gpu_id, processing_time_ms, vram_used_mb du body webhook et les stocker dans ai_messages.metadata

const { job_id, status: jobStatus, output_result, error_message,
        gpu_id, processing_time_ms, vram_used_mb } = body as any;

// Dans l'insert ai_messages :
await supabase.insert('ai_messages', {
  conversation_id,
  role: 'assistant',
  content: aiJobResponse,
  model: 'background',
  duration_ms: processing_time_ms || 0,
  metadata: { gpu_id, processing_time_ms, vram_used_mb },
});

6. connectors-api aiChat.ts - Stockage metadata dans sendMessage/stream

Dans les endroits ou le message assistant est insere en DB (apres un ai_job), inclure metadata: jobMeta dans l'insert.

Mapping GPU names (constante cote connectors-api)

const GPU_NAMES: Record<number, string> = {
  0: 'RTX 3090',
  1: 'RTX 2070 Super',
};

Le frontend pourra utiliser metadata.gpu_id + ce mapping pour afficher un badge GPU.

Ce qui ne change PAS

Ordre d'execution

  1. ai-orchestrator : ajouter gpu_id + vram_used_mb au webhook payload → commit + push
  2. connectors-api : modifier pollJobResult, executeToolCall, intentExecutor, webhook → commit + push
  3. Les 2 pipelines CI/CD deployent automatiquement