diff --git a/backend/app/api/endpoints/ai_sessions.py b/backend/app/api/endpoints/ai_sessions.py index df0be33b..0be32bbc 100644 --- a/backend/app/api/endpoints/ai_sessions.py +++ b/backend/app/api/endpoints/ai_sessions.py @@ -280,6 +280,12 @@ async def send_chat_message( user_id = current_user.id account_id = current_user.account_id + # Fetch attached images from S3 (if any) + images = None + if data.upload_ids: + from app.api.endpoints.assistant_chat import _fetch_upload_images + images = await _fetch_upload_images(data.upload_ids, account_id, db) or None + try: ai_content, suggested_flows, session = await unified_chat_service.send_chat_message( session_id=session_id, @@ -287,6 +293,7 @@ async def send_chat_message( account_id=account_id, message=data.message, db=db, + images=images, ) except ValueError as e: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) diff --git a/backend/app/schemas/ai_session.py b/backend/app/schemas/ai_session.py index 3def117a..973de98c 100644 --- a/backend/app/schemas/ai_session.py +++ b/backend/app/schemas/ai_session.py @@ -245,6 +245,7 @@ class ChatSessionCreateResponse(BaseModel): class ChatMessageRequest(BaseModel): """Send a message in a chat session.""" message: str = Field(..., min_length=1, max_length=8000) + upload_ids: list[UUID] = Field(default_factory=list, max_length=10) class ChatMessageResponse(BaseModel): diff --git a/backend/app/services/unified_chat_service.py b/backend/app/services/unified_chat_service.py index 83aca3e5..e04054fc 100644 --- a/backend/app/services/unified_chat_service.py +++ b/backend/app/services/unified_chat_service.py @@ -57,9 +57,14 @@ async def send_chat_message( account_id: UUID, message: str, db: AsyncSession, + images: list[dict[str, Any]] | None = None, ) -> tuple[str, list[dict[str, Any]], AISession]: """Send a message in a chat session and get AI response. + Args: + images: Optional list of {"media_type": str, "data": str (base64)} + for vision content attached to this message. + Returns (ai_content, suggested_flows, session). """ result = await db.execute( @@ -105,6 +110,7 @@ async def send_chat_message( rag_context=rag_context, history=ai_messages, new_message=message, + images=images, ) # Append messages to conversation_messages