
    (hS                        d Z ddlmZmZmZ ddlmZmZmZm	Z	 ddl
m
Z
 ddlZ G d de          Z G d d	e          Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )z#
Modele Pydantic pentru Page Asist
    )	BaseModelField	validator)ListOptionalDictAny)datetimeNc                   `   e Zd ZU dZ edd          Zeed<    edd          Zeed	<    edd
          Z	eed<    edd          Z
eed<    edddd          Zeed<    edddd          Zeed<    ed          d             Z ed          d             Zedefd            ZdS )Agentz'Model pentru configurarea unui agent AI.zAdresa IP a serverului Ollama)descriptionip11434zPort server Ollama)defaultr   portz8Rolul agentului: generator/critic/moderator/sintetizatorrolzModelul Ollama de utilizatmodeli  2   i  u    Limita de tokeni pentru răspunsr   geler   
max_tokensx   
   iX  u!   Timeout pentru cereri în secundetimeoutc                 R    d}t          j        ||          st          d          |S )zValidare format IPz[^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$zFormat IP invalid)rematch
ValueError)clsvpatterns      JC:\Users\bruma\Desktop\Web_Page_Asist_App (1)\page_asist\backend\models.pyvalidate_ipzAgent.validate_ip   s2     qx## 	20111    c                     g d}|                                 |vr%t          dd                    |                     |                                 S )zValidare rol agent)	generatorcritic	moderatorsintetizatoru   Rol invalid. Opțiuni valide: z, )lowerr   join)r    r!   roluri_valides      r#   validate_rolzAgent.validate_rol   sT     MLL7799M))Xdii>V>VXXYYYwwyyr%   returnc                 $    | j          d| j         S )u'   Returnează URL-ul complet al agentului:)r   r   )selfs    r#   urlz	Agent.url$   s     '''DI'''r%   N)__name__
__module____qualname____doc__r   r   str__annotations__r   r   r   r   intr   r   r$   r.   propertyr3    r%   r#   r   r      sR        11eC%DEEEBEEEg3GHHHD#HHHuS&`aaaCaaas(DEEEE3EEEeCB4EghhhJhhh5AdeeeGSeeeYt__  _ Yu   (S ( ( ( X( ( (r%   r   c                       e Zd ZU dZ eddd          Zeed<    edddd	
          Ze	ed<    edddd          Z
e	ed<    eddd          Zee         ed<    ed          d             ZdS )ConversationConfigu   Configurare conversație.   u   Tema de discuție)
min_lengthr   subiect   d   u   Numărul de runde)r   r   r   numar_runder   <   u   Pauza între runde în secunder   pauza_intre_runde   u   Lista de agenți AI)	min_itemsr   agentic                 J    t          |          dk     rt          d          |S )u!   Validare listă agenți - minim 2rG   u   Sunt necesari minim 2 agenți)lenr   )r    r!   s     r#   validate_agentiz"ConversationConfig.validate_agenti1   s'     q66A::<===r%   N)r4   r5   r6   r7   r   rA   r8   r9   rD   r:   rF   rI   r   r   r   rL   r<   r%   r#   r>   r>   *   s         ""58KLLLGSLLLuSQ3<OPPPKPPP"U1rGghhhshhh%q>STTTFDKTTTYx    r%   r>   c                       e Zd ZU dZeed<   eed<    eej                  Z	eed<   dZ
ee         ed<   dZee         ed<   dZee         ed	<   dZee         ed
<   dS )Messageu&   Model pentru un mesaj în conversațier   content)default_factory	timestampN	agent_url
agent_roletokensidei_noi)r4   r5   r6   r7   r8   r9   r   r
   nowrQ   rR   r   rS   rT   r:   rU   r<   r%   r#   rN   rN   9   s         00	HHHLLL%===Ix===#Ix}### $J$$$ FHSM   "Hhsm"""""r%   rN   c                       e Zd ZU dZeed<   eed<   dZeed<   g Z	e
e         ed<   i Zeeef         ed<   dZeed	<   d
Zee         ed<   d
Zee         ed<   d
S )ConversationStateu   Starea curentă a conversațieiidconfigr   runda_curentamesajeregistry_ideiF
is_runningN
start_timeend_time)r4   r5   r6   r7   r8   r9   r>   r[   r:   r\   r   rN   r]   r   boolr^   r_   r   r
   r`   r<   r%   r#   rX   rX   D   s         ))GGGM3FDM%'M4T	?'''J%)J")))#'Hhx '''''r%   rX   c                   R    e Zd ZU dZeed<   g Zee         ed<   dZ	e
e         ed<   dS )ModelListResponseu+   Răspuns pentru lista de modele disponibilesuccessmodelsNerror)r4   r5   r6   r7   ra   r9   re   r   r8   rf   r   r<   r%   r#   rc   rc   P   sI         55MMMFDIE8C=r%   rc   c                   f    e Zd ZU dZeed<   eed<   eed<   ee         ed<   eed<   eed<   eed<   d	S )
ConversationHistoryItemu    Item pentru istoric conversațiirY   rA   r_   r`   rD   numar_agentitotal_mesajeN)	r4   r5   r6   r7   r8   r9   r
   r   r:   r<   r%   r#   rh   rh   W   sk         **GGGLLLx    r%   rh   c                   8    e Zd ZU dZeed<   eeef         ed<   dS )StreamMessagez Mesaj pentru streaming WebSockettypedataN)r4   r5   r6   r7   r8   r9   r   r	   r<   r%   r#   rl   rl   b   s5         **
III
sCx.r%   rl   )r7   pydanticr   r   r   typingr   r   r   r	   r
   r   r   r>   rN   rX   rc   rh   rl   r<   r%   r#   <module>rq      s    1 0 0 0 0 0 0 0 0 0 , , , , , , , , , , , ,       				( ( ( ( (I ( ( (>       # # # # #i # # #	( 	( 	( 	( 	(	 	( 	( 	(         	          i       I     r%   