Status : IMPLEMENTEE
Actuellement le chat AI n'accepte que du texte. L'utilisateur ne peut pas joindre d'images, de documents ou d'autres fichiers a ses messages. Pourtant :
ai_attachments, Supabase Storage, routes de download)| Element | Etat | Detail |
|---|---|---|
Table ai_attachments |
OK | Schema complet (id, message_id, conversation_id, filename, bucket_path, mime_type, size_bytes) |
| Supabase Storage | OK | Bucket ai-outputs, methodes upload/download/signedUrl |
| Routes download | OK | GET /api/ai/attachments/:id/file/* (proxy vers Storage) |
| Route list | OK | GET /api/ai/conversations/:id/attachments |
| Upload AI outputs | OK | uploadJobOutputToStorage() dans aiChat.ts |
| Upload utilisateur | MANQUANT | Pas de route ni d'UI |
| Affichage attachments | MANQUANT | ChatMessages ne rend que du texte |
| UI d'upload | MANQUANT | ChatInput n'a qu'un textarea |
Fichier : src/index.ts - nouvelle route
POST /api/ai/conversations/:id/attachments
Content-Type: multipart/form-data
Body: file (binary)
{userId}/uploads/{conversationId}/{uuid}-{filename}ai_attachments avec message_id: null (associe apres envoi du message){ attachment: { id, filename, mime_type, size_bytes, preview_url } }Fichier : src/services/aiChat.ts
attachment_ids: string[] en plus de content_processMessage :message_id vers le message utilisateurFichier : src/components/ai/ChatInput.tsx
Modifications :
<input type="file"> cache, declenche par le boutonPOST /api/ai/conversations/:id/attachmentsattachment_ids en plus du contentNouvelle interface :
interface ChatInputProps {
onSend$: (content: string, attachmentIds?: string[]) => void;
conversationId: string;
disabled?: boolean;
}
Fichier : src/components/ai/ChatMessages.tsx
attachments?: Attachment[] a l'interface Message)Fichier : src/lib/api.ts
Nouvelles methodes :
uploadChatAttachment(conversationId, file) : POST multipartsendChatMessageStream(convId, content, attachmentIds?, onStep) : passe les IDsFichier : src/services/intentDetector.ts + intentExecutor.ts
detectIntent recoit un parametre optionnel attachments: Attachment[]executeYoloIntent : si intent.body.attachmentId au lieu de intent.body.url, telecharge depuis Supabase Storage puis upload vers YOLOai_attachments (deja adapte)ai-outputs (reutilise)| Fichier | Action |
|---|---|
connectors-api/src/index.ts |
Ajouter route POST upload + modifier stream route |
connectors-api/src/services/aiChat.ts |
Gerer attachment_ids dans _processMessage |
connectors-api/src/services/intentDetector.ts |
Accepter attachments en parametre |
connectors-api/src/services/intentExecutor.ts |
YOLO avec fichier local |
connectors-front/src/components/ai/ChatInput.tsx |
UI upload (bouton, preview, drag&drop) |
connectors-front/src/components/ai/ChatMessages.tsx |
Affichage attachments |
connectors-front/src/lib/api.ts |
uploadChatAttachment() + modifier sendChatMessageStream |
connectors-front/src/routes/chat/[id]/index.tsx |
Passer conversationId a ChatInput, gerer attachmentIds |
ai-outputs avec un prefix uploads/