§
    s�’jË  ã                  ó   — d Z ddlmZ ddlmZmZ ddlmZ 	 ddlm	Z	 ddl
mZ n&# e$ r  G d„ d¦  «        Z	 G d	„ d
e¦  «        ZY nw xY wddlmZ  ed¬¦  «         G d„ d¦  «        ¦   «         Z G d„ de	¦  «        ZdS )z3Base AgentScope-backed agent primitives for DSCons.é    )Úannotations)Ú	dataclassÚfield)ÚAny)Ú	AgentBase)ÚMsgc                  ó   — e Zd Zdd„ZdS )	r   Úargsr   ÚkwargsÚreturnÚNonec                ó   — d S ©N© )Úselfr
   r   s      ú%C:\Projects\DSCons\app\agents\base.pyÚ__init__zAgentBase.__init__   s   € ØˆDó    N)r
   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s(   € € € € € ð	ð 	ð 	ð 	ð 	ð 	r   r   c                  ó   — e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   € € € € € Øˆr   r   )Úbuild_persona_system_promptT)Úslotsc                  óp   — e Zd ZU dZded<   ded<   ded<   dZded<   d	Zded
<    ee¬¦  «        Z	ded<   dS )ÚAgentExecutionContextz+Execution context passed to logical agents.ÚstrÚqueryÚ	task_typeúlist[dict[str, Any]]Úretrieved_chunksÚminhÚ
agent_codeÚMinhÚpersona_name)Údefault_factoryúdict[str, Any]Úpersona_profileN)
r   r   r   Ú__doc__Ú__annotations__r#   r%   r   Údictr(   r   r   r   r   r      sv   € € € € € € à5Ð5à€J€J�JØ€N€N�NØ*Ð*Ð*Ñ*Ø€JÐÐÐÑØ€LÐÐÐÑØ&+ e¸DÐ&AÑ&AÔ&A€OÐAÐAÐAÑAÐAÐAr   r   c                  ój   ‡ — e Zd ZU dZdZded<   dZded<   dˆ fd„Zdd„Zdd„Z	dd„Z
d d„Zd!d„Zˆ xZS )"ÚBaseTaskAgentz<AgentScope-backed logical agent sharing a single LLM client.Ú
base_agentr   Ú
agent_nameú)You are a helpful construction assistant.Úsystem_promptÚ
llm_clientr   r   r   c                ód   •— t          ¦   «                              ¦   «          || _        g | _        d S r   )Úsuperr   Ú_llm_clientÚ_last_observed)r   r2   Ú	__class__s     €r   r   zBaseTaskAgent.__init__*   s/   ø€ Ý‰Œ×ÒÑÔÐØ%ˆÔØ)+ˆÔÐÐr   ÚmsgúMsg | list[Msg] | Nonec              ƒ  ó¨   K  — |€dS t          |t          ¦  «        r| j                             |¦  «         dS | j                             |¦  «         dS )z<Capture observed messages for AgentScope-compatible tracing.N)Ú
isinstanceÚlistr6   ÚextendÚappend)r   r8   s     r   ÚobservezBaseTaskAgent.observe/   s]   è è € ð ˆ;ØˆFÝ�c�4Ñ Ô ð 	ØÔ×&Ò& sÑ+Ô+Ð+ØˆFØÔ×"Ò" 3Ñ'Ô'Ð'Ð'Ð'r   Úcontextr   c           	   ƒ  óÒ  K  — t          dd|j        |j        |j        |j        dœ¬¦  «        }|                      |¦  «        ƒ d{V —† |                      |¬¦  «        ƒ d{V —†}t          |d¦  «        r|                     ¦   «         S t          |d¦  «        rt          |j
        pd¦  «        S t          t          |t          ¦  «        r|                     dd¦  «        n|¦  «        S )	z2Execute the task with retrieved knowledge context.Úuser©r   r#   r%   ©ÚnameÚroleÚcontentÚmetadataN)r@   Úget_text_contentrG   Ú )r   r   r   r#   r%   r?   ÚreplyÚhasattrrI   r   rG   r;   r+   Úget)r   r@   Ú	query_msgÚresponse_msgs       r   ÚrunzBaseTaskAgent.run9   s  è è € õ ØØØ”Mà$Ô.Ø%Ô0Ø 'Ô 4ðð ð		
ñ 	
ô 	
ˆ	ð �lŠl˜9Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø!ŸZšZ°˜ZÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆÝ�<Ð!3Ñ4Ô4ð 	3Ø×0Ò0Ñ2Ô2Ð2Ý�< Ñ+Ô+ð 	3Ý�|Ô+Ð1¨rÑ2Ô2Ð2Ýå˜,­Ñ-Ô-ðˆL×Ò˜Y¨Ñ+Ô+Ð+àñ
ô 
ð 	
r   r
   r   r   c              �  ó6  K  — |d         }|                       |j        ¦  «        }|                      |j        ¦  «        }t	          |j        |j        ¬¦  «        }| j        r| j        dk    r|d| j        › �z  }d|j        › d|j        › d|j        › d|j	        › d	|› d
|› d�}d|dœd|dœg}| j
                             ||j        ¬¦  «        ƒ d{V —†}	t          | j        d|	|j        |j        |j        dœ¬¦  «        }
|                      |
¦  «        ƒ d{V —† |
S )z:Generate an AgentScope message response from task context.r@   )r#   r   r0   u6   

[CHá»ˆ DáºªN CHUYÃŠN BIá»†T Tá»ª SPECIALIST CLASS]:
zAI employee code: z
AI employee name: z
Task type: z
User query: z

Persona guidance:
z

Retrieved knowledge:
z�

Answer in Vietnamese when possible, keep the response practical and concise, and stay consistent with the persona style and pronoun guidance.Úsystem)rF   rG   rB   )r#   NÚ	assistantrC   rD   )Ú_format_retrieved_chunksr!   Ú_format_persona_profiler(   r   r#   r   r1   r%   r   r5   Úchatr   r/   r?   )r   r
   r   r@   Úknowledge_blockÚpersona_blockÚeffective_system_promptÚuser_promptÚmessagesrG   rK   s              r   rK   zBaseTaskAgent.replyR   sÉ  è è € ð ˜Ô#ˆØ×7Ò7¸Ô8PÑQÔQˆØ×4Ò4°WÔ5LÑMÔMˆõ #>ØÔ)ØÔ'ð#
ñ #
ô #
Ðð
 Ôð	àÔ"Ð&QÒQÐQà#Ø`ÈDÔL^Ð`Ð`ñÐ#ð
O Ô!3ð Oð OØ!(Ô!5ðOð Oà!Ô+ðOð Oð #œ=ðOð Oð #0ð	Oð Oð
 &5ðOð Oð Oð 	ð Ð*AÐBÐBØ¨Ð4Ð4ð
ˆð Ô(×-Ò-¨hÀ7ÔCUÐ-ÑVÔVÐVÐVÐVÐVÐVÐVˆÝØ”ØØà$Ô.Ø%Ô0Ø 'Ô 4ðð ð		
ñ 	
ô 	
ˆð �lŠl˜5Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Øˆr   Úchunksr    c                óh  — |sdS g }t          |d¬¦  «        D ]†\  }}t          |                     dd¦  «        ¦  «                             ¦   «         }|                     di ¦  «        pi }|                     |› d|› �¦  «         |r|                     d|› �¦  «         Œ‡d	                     |¦  «        S )
z5Convert retrieval hits into a prompt-safe text block.u;   - KhÃ´ng cÃ³ dá»¯ liá»‡u tham chiáº¿u trong kho tri thá»©c.é   )ÚstartÚtextrJ   rH   z. z   Metadata: ú
)Ú	enumerater   rM   Ústripr>   Újoin)r   r\   ÚlinesÚindexÚchunkr`   rH   s          r   rT   z&BaseTaskAgent._format_retrieved_chunks‚   sÍ   € ð ð 	QØPÐPØˆÝ% f°AÐ6Ñ6Ô6ð 	9ð 	9‰LˆE�5Ý�u—y’y ¨Ñ,Ô,Ñ-Ô-×3Ò3Ñ5Ô5ˆDØ—y’y ¨RÑ0Ô0Ð6°BˆHØ�LŠL˜EÐ+Ð+ TÐ+Ð+Ñ,Ô,Ð,Øð 9Ø—’Ð7¨XÐ7Ð7Ñ8Ô8Ð8øØ�yŠy˜ÑÔÐr   r(   r'   c                ó�  — |sdS d|                      dd¦  «        › �d|                      dd¦  «        › �d|                      dd¦  «        › �d	|                      d
d¦  «        › �g}|                      dg ¦  «        pg }|r2|                     d¦  «         |D ]}|                     d|› �¦  «         Œd                     |¦  «        S )z;Convert persona metadata into a prompt-safe guidance block.uB   - KhÃ´ng cÃ³ cáº¥u hÃ¬nh persona, dÃ¹ng phong cÃ¡ch máº·c Ä‘á»‹nh.u   - Vai trÃ²: Ú
role_titleu	   ChÆ°a rÃµu   - Phong cÃ¡ch giao tiáº¿p: Úcommunication_styleu   - TÃ´ng máº·c Ä‘á»‹nh: Údefault_toneu   - MÃ´ táº£: ÚdescriptionÚpronoun_guidanceu   - HÆ°á»›ng dáº«n xÆ°ng hÃ´:z  - ra   )rM   r>   rd   )r   r(   re   rm   Úitems        r   rU   z%BaseTaskAgent._format_persona_profile�   sý   € ð ð 	XØWÐWàK˜?×.Ò.¨|¸[ÑIÔIÐKÐKØc¨/×*=Ò*=Ð>SÐU`Ñ*aÔ*aÐcÐcØX o×&9Ò&9¸.È+Ñ&VÔ&VÐXÐXØL˜?×.Ò.¨}¸kÑJÔJÐLÐLð	
ˆð +×.Ò.Ð/AÀ2ÑFÔFÐLÈ"ÐØð 	,Ø�LŠLÐ6Ñ7Ô7Ð7Ø(ð ,ð ,�Ø—’˜] D˜]˜]Ñ+Ô+Ð+Ð+Ø�yŠy˜ÑÔÐr   )r2   r   r   r   )r8   r9   r   r   )r@   r   r   r   )r
   r   r   r   r   r   )r\   r    r   r   )r(   r'   r   r   )r   r   r   r)   r/   r*   r1   r   r?   rP   rK   rT   rU   Ú__classcell__)r7   s   @r   r-   r-   $   sÌ   ø€ € € € € € ØFÐFà"€JÐ"Ð"Ð"Ñ"ØD€MÐDÐDÐDÑDð,ð ,ð ,ð ,ð ,ð ,ð
(ð (ð (ð (ð
ð 
ð 
ð 
ð2.ð .ð .ð .ð` ð  ð  ð  ð ð  ð  ð  ð  ð  ð  ð  r   r-   N)r)   Ú
__future__r   Údataclassesr   r   Útypingr   Úagentscope.agentr   Úagentscope.messager   ÚImportErrorr+   Úapp.agents.personasr   r   r-   r   r   r   ú<module>rw      s†  ðØ 9Ð 9à "Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð ð
Ø*Ð*Ð*Ð*Ð*Ð*Ø&Ð&Ð&Ð&Ð&Ð&Ð&øØð ð ð ðð ð ð ð ñ ô ð ðð ð ð ð ˆdñ ô ð ð ð ðøøøð <Ð ;Ð ;Ð ;Ð ;Ð ;ð €�ÐÑÔðBð Bð Bð Bð Bñ Bô Bñ ÔðBð| ð | ð | ð | ð | �Iñ | ô | ð | ð | ð | s   ˜% ¥ AÁA