
    Ti                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d	eeef   d
dfdZy)    N)DictAnyListOptional)ToolInfoJson)
db_service)langgraph_multi_agent)send_to_websocket)add_stream_taskremove_stream_task)	ModelInfodatareturnc           
        K   | j                  dg       }| j                  dd      }| j                  dd      }| j                  di       }| j                  dg       }t        d|       | j                  d      }t        |      d	k(  ri|d
   j                  dd      }t        j                  ||j                  d      |j                  d      |t        |t              r|dd nd       d{    t        |      d
kD  rHt        j                  ||d   j                  dd      t        j                  |d                d{   nd t        j                  t        ||||||            }t        ||       	 | d{    t!        |       t#        |ddi       d{    y7 7 d7 *# t        j                  j                  $ r t        d| d       Y Vw xY w7 =# t!        |       t#        |ddi       d{  7   w xY ww)a  
    Handle an incoming chat request.

    Workflow:
    - Parse incoming chat data.
    - Optionally inject system prompt.
    - Save chat session and messages to the database.
    - Launch langgraph_agent task to process chat.
    - Manage stream task lifecycle (add, remove).
    - Notify frontend via WebSocket when stream is done.

    Args:
        data (dict): Chat request data containing:
            - messages: list of message dicts
            - session_id: unique session identifier
            - canvas_id: canvas identifier (contextual use)
            - text_model: text model configuration
            - tool_list: list of tool model configurations (images/videos)
    messages
session_id 	canvas_id
text_model	tool_listu   👇 chat_service got tool_listsystem_prompt   r   contentmodelproviderN   roleuseru   🛑Session z cancelled during streamtypedone)getprintlenr   create_chat_session
isinstancestrcreate_messagejsondumpsasynciocreate_taskr	   r   
exceptionsCancelledErrorr   r
   )	r   r   r   r   r   r   r   prompttasks	            O/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/services/chat_service.pyhandle_chatr2      s>    * &*XXj"%=Hhh|R0JXXk2.I HH\26J$(HH["$=I	
+Y7 $(88O#<M 8}!B/,,Z9PR\R`R`akRlnw  KU  V\  ^a  Kb  {A  BF  CF  {G  hj  l  	l  	lors{o|  @A  pA*
#
#J0@0@0PRVR\R\]efh]iRj
kkk  GK 4)ZY O PD J%


 	:&
F-
  	 	' 	lk 	,, CZL(@ABC	 	:&
F-
  	 	s   C*H,F%-AHF'5H9F+ >F)?F+ HG H'H)F+ +,GG GG HH<G?=HH)r+   r)   typingr   r   r   r   models.tool_modelr   services.db_servicer   services.langgraph_servicer	   services.websocket_servicer
   services.stream_servicer   r   models.config_modelr   r'   r2        r1   <module>r<      sB      , , + * < 8 G ):DcN :t :r;   