
    Ti%                         d dl Z d dlZd dl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mZ deeef   ddfd	Zd
eeeef      dededdfdZy)    N)DictAnyList)
db_service)create_jaaz_response)send_to_websocket)add_stream_taskremove_stream_taskdatareturnc           
      ^  K   | j                  dg       }| j                  dd      }| j                  dd      }t        |      dk(  rK|d   j                  dd      }t        j                  |dd	|t	        |t
              r|d
d nd       d
{    t        |      dkD  rHt        j                  ||d   j                  dd      t        j                  |d                d
{    t        j                  t        |||            }t        ||       	 | d
{    t!        |       t#        |ddi       d
{    t        d       y
7 7 j7 5# t        j                  j                  $ r t        d| d       Y aw xY w7 H# t!        |       t#        |ddi       d
{  7   w xY ww)aE  
    Handle an incoming magic generation request.

    Workflow:
    - Parse incoming magic generation data.
    - Run Agents.
    - Save magic session and messages to the database.
    - Notify frontend via WebSocket.

    Args:
        data (dict): Magic generation 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   r   contentgptjaazN   roleuseru   🛑Magic generation session z
 cancelledtypedoneu   ✨ magic_service 处理完成)getlenr   create_chat_session
isinstancestrcreate_messagejsondumpsasynciocreate_task_process_magic_generationr	   
exceptionsCancelledErrorprintr
   r   )r   r   r   r   prompttasks         P/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/services/magic_service.pyhandle_magicr-      s    & &*XXj"%=Hhh|R0JXXk2.I 8}!B/,,Z	dnouwzd{TZ[_\_T`  BD  F  	F  	F 8}q''((8$**Xb\:R
 	
 	

 8:yYZD J%	>


 	:&
VV,<===	
*+1 	F	
 	,, F-j\DEF 	> 	:&
VV,<===s   BF-EAF-#E$0F-E EE F-;F<F-F-E ,F>F  FF F-F*#F&$F**F-r   r   r   c                    K   t        | ||       d{   }t        j                  |dt        j                  |             d{    | |gz   }t        |d|d       d{    y7 T7 $7 	w)z
    Process magic generation in a separate async task.

    Args:
        messages: List of messages
        session_id: Session ID
        canvas_id: Canvas ID
    N	assistantall_messages)r   r   )r   r   r!   r"   r#   r   )r   r   r   ai_responser0   s        r,   r&   r&   K   sy      -Xz9MMK 
#
#JTZZ=T
UUU {m+L
^F   N Vs3   A.A(1A.A*A."A,#A.*A.,A.)r$   r"   typingr   r   r   services.db_servicer   services.OpenAIAgents_servicer   services.websocket_servicer   services.stream_servicer	   r
   r    r-   r&        r,   <module>r9      ss      " " + > 8 G9,T#s(^ 9, 9,x4S>"  
	r8   