Ë
    cœiN  ã                   ó$  — d dl mZ d dlmZmZmZmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZ d dlmZ  e
j                   d«      Zdd	d
dœddddœdœZdefd„Zddddœed<    eddg¬«      Zd1d„Zdad„ Z G d„ de«      Z G d„ de«      Zej7                  de¬ «      d!ed"efd#„«       Zej;                  d$«      d%„ «       Zej;                  d&«      d2d'efd(„«       Zej;                  d)«      d1d*ed+efd,„«       Z ej;                  d-«      d3d.e!d/e!fd0„«       Z"y)4é    )ÚOptional)Ú	APIRouterÚHTTPExceptionÚDependsÚBackgroundTasks)Ú	BaseModelÚFieldN)Úget_service_instance)ÚsettingsÚRERA_APIz1Hi! I am FINRERA Agent. How can I help you today?u–   à¤¨à¤®à¤¸à¥�à¤¤à¥‡! à¤®à¥ˆà¤‚ FINRERA à¤�à¤œà¥‡à¤‚à¤Ÿ à¤¹à¥‚à¤�à¥¤ à¤†à¤œ à¤®à¥ˆà¤‚ à¤†à¤ªà¤•à¥€ à¤•à¥�à¤¯à¤¾ à¤®à¤¦à¤¦ à¤•à¤° à¤¸à¤•à¤¤à¤¾ à¤¹à¥‚à¤�?u�   àª¨àª®àª¸à«�àª¤à«‡! àª¹à«�àª‚ FINRERA àª�àªœàª¨à«�àªŸ àª›à«�àª‚. àª†àªœà«‡ àª¹à«�àª‚ àª¤àª®àª¨à«‡ àª¶à«�àª‚ àª®àª¦àª¦ àª•àª°à«€ àª¶àª•à«�àª‚?)ÚenglishÚhindiÚgujaratizSHello! I am your FINRERA AI Assistant. What RERA information can I assist you with?uä   à¤¨à¤®à¤¸à¥�à¤¤à¥‡! à¤®à¥ˆà¤‚ à¤†à¤ªà¤•à¤¾ FINRERA AI à¤…à¤¸à¤¿à¤¸à¥�à¤Ÿà¥‡à¤‚à¤Ÿ à¤¹à¥‚à¤�à¥¤ à¤®à¥ˆà¤‚ RERA à¤•à¥€ à¤•à¥Œà¤¨ à¤¸à¥€ à¤œà¤¾à¤¨à¤•à¤¾à¤°à¥€ à¤®à¥‡à¤‚ à¤†à¤ªà¤•à¥€ à¤¸à¤¹à¤¾à¤¯à¤¤à¤¾ à¤•à¤° à¤¸à¤•à¤¤à¤¾ à¤¹à¥‚à¤�?uÇ   àª¨àª®àª¸à«�àª¤à«‡! àª¹à«�àª‚ àª¤àª®àª¾àª°à«‹ FINRERA AI àª†àª¸àª¿àª¸à«�àªŸàª¨à«�àªŸ àª›à«�àª‚. RERA àª¨à«€ àª•àªˆ àª®àª¾àª¹àª¿àª¤à«€àª®àª¾àª‚ àª¹à«�àª‚ àª¤àª®àª¨à«‡ àª®àª¦àª¦ àª•àª°à«€ àª¶àª•à«�àª‚?)ÚhiÚhelloÚmsgc                 ó´   — | j                  «       j                  «       j                  dd«      j                  dd«      j                  dd«      }|dv ry|dv ryy )	Nú?Ú ú!ú.)r   r   ÚheyÚholaÚnamaster   )zhow are youzhow r uzhow are you doingÚhow_are_you)ÚlowerÚstripÚreplace)r   Úcleans     ú?/var/www/html/Whatsapp_Customer_Support_Chatbot/src/api/chat.pyÚdetect_basic_greetingr!      sX   € Ø�I‰I‹K×ÑÓ×'Ñ'¨¨RÓ0×8Ñ8¸¸bÓA×IÑIÈ#ÈrÓR€EàÐ9Ñ9ØàÐ?Ñ?ØØó    zKI am doing great! I am your FINRERA AI Assistant. How can I help you today?u½   à¤®à¥ˆà¤‚ à¤ à¥€à¤• à¤¹à¥‚à¤�! à¤®à¥ˆà¤‚ à¤†à¤ªà¤•à¤¾ FINRERA AI à¤…à¤¸à¤¿à¤¸à¥�à¤Ÿà¥‡à¤‚à¤Ÿ à¤¹à¥‚à¤�à¥¤ à¤†à¤œ à¤®à¥ˆà¤‚ à¤†à¤ªà¤•à¥€ à¤•à¥�à¤¯à¤¾ à¤®à¤¦à¤¦ à¤•à¤° à¤¸à¤•à¤¤à¤¾ à¤¹à¥‚à¤�?uÀ   àª¹à«�àª‚ àª®àªœàª¾àª®àª¾àª‚ àª›à«�àª‚! àª¹à«�àª‚ àª¤àª®àª¾àª°à«‹ FINRERA AI àª†àª¸àª¿àª¸à«�àªŸàª¨à«�àªŸ àª›à«�àª‚. àª†àªœà«‡ àª¹à«�àª‚ àª¤àª®àª¨à«‡ àª¶à«�àª‚ àª®àª¦àª¦ àª•àª°à«€ àª¶àª•à«�àª‚?r   z/aizLegal Services)ÚprefixÚtagsc              ƒ   óú   K  — ddl m} 	 |j                  | d||||¬«      ƒ d {  –—†  |j                  | d||||¬«      ƒ d {  –—†  y 7 Œ$7 Œ# t        $ r"}t        j                  d|› �«       Y d }~y d }~ww xY w­w)Nr   ©Úhistory_serviceÚuser)ÚroleÚmessageÚ	full_nameÚphone_numberÚsourceÚmodelz Background history save failed: )Úsrc.services.history_servicer'   Úadd_messageÚ	ExceptionÚloggerÚerror)Úuser_identifierÚuser_msgÚai_responser+   r,   r-   r'   Úes           r    Úsave_chat_historyr8   +   s­   è ø€ Ý<ð=Ø×)Ñ)¨/ÀÐPXÐdmð  }Ið  RXÐ)ó  Y÷  	Yð  	YØ×)Ñ)¨/ÀÐQ\Ðhqð  AMð  V\Ð)ó  ]÷  	]ñ  	]ð 	Yøð 	]ùÜò =Ü�‰Ð7¸°sÐ;×<Ñ<ûð=üsP   ‚A;ŠA ¤A	¥A ÁAÁA ÁA;Á	A ÁA Á	A8ÁA3Á.A;Á3A8Á8A;c                  ó.   — t         €
t        «       a t         S ©N)Ú_assistant_servicer
   © r"   r    Úget_assistant_servicer=   5   s   € äÐ!Ü1Ó3ÐÜÐr"   c                   ó|   — e Zd ZU  edd¬«      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	<   y)
ÚLegalQueryRequest.é   )Ú
min_lengthÚuser_messageNÚuser_idr,   Ú
contact_idr+   )Ú__name__Ú
__module__Ú__qualname__r	   rB   ÚstrÚ__annotations__rC   r   r,   rD   r+   r<   r"   r    r?   r?   ;   sK   … Ù˜c¨aÔ0€L�#Ó0Ø!€GˆX�c‰]Ó!Ø"&€L�(˜3‘-Ó&Ø $€J�˜‘Ó$Ø#€Iˆx˜‰}Ô#r"   r?   c                   ó&   — e Zd ZU eed<   dZeed<   y)ÚLegalQueryResponser*   ÚTrueÚstatusN)rE   rF   rG   rH   rI   rM   r<   r"   r    rK   rK   B   s   … ØƒLØ€FˆCÔr"   rK   z/chat)Úresponse_modelÚrequestÚbackground_tasksc           	   ƒ   óþ  ‡K  — 	 ddl m} | j                  rd}| j                  }nd}| j                  xs d}t	        | j
                  «      }|rš| j
                  j                  «       Šd}t        ˆfd„dD «       «      rd	}nt        ˆfd
„dD «       «      rd}t        |   |   }|j                  t        || j
                  || j                  | j                  |«       t        |¬«      S |j                  |d|¬«      ƒ d {  –—† }d}	|r8dj                  |D �
cg c]  }
|
d   j                  «       › d|
d   › �‘Œ c}
«      }	t!        «       }|j#                  | j
                  |	¬«      ƒ d {  –—† }|j                  t        || j
                  || j                  | j                  |«       t        |¬«      S 7 Œ´c c}
w 7 ŒP# t$        $ r3}t&        j)                  d|› �«       t+        dt-        |«      ¬«      ‚d }~ww xY w­w)Nr   r&   ÚwhatsappÚwebsiteÚ
guest_userr   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr:   r<   ©Ú.0ÚwordÚ	msg_lowers     €r    ú	<genexpr>z"chat_assessment.<locals>.<genexpr>[   s   øè ø€ Ò_¨�4˜9Ô$Ñ_ùó   ƒ)u	   àª•à«‡àª®u   àª¨àª®àª¸à«�àª¤à«‡u   àª›à«‹r   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr:   r<   rV   s     €r    rZ   z"chat_assessment.<locals>.<genexpr>\   s   øè ø€ Òd¨4�T˜YÔ&Ñdùr[   )u   à¤¨à¤®à¤¸à¥�à¤¤à¥‡u   à¤•à¥ˆà¤¸à¥‡u   à¤¹à¥‹r   )r*   é
   )Úlimitr-   zNo prior history.ú
r)   z: Úparts)Úchat_historyzAPI Error: éô  ©Ústatus_codeÚdetail)r/   r'   r,   rC   r!   rB   r   ÚanyÚGREETINGS_MAPÚadd_taskr8   r+   rK   Úget_recent_historyÚjoinÚupperr=   Úget_legal_assessmentr1   r2   r3   r   rH   )rO   rP   r'   r-   Ú
identifierÚgreeting_keyÚlangr   Ú	past_msgsÚformatted_historyÚmÚserviceÚresponser3   rY   s                 @r    Úchat_assessmentru   F   s  øè ø€ ð5@Ý@ð ×ÒàˆFØ ×-Ñ-‰Jð ˆFØ Ÿ™Ò8¨LˆJô -¨W×-AÑ-AÓBˆÙà×,Ñ,×2Ñ2Ó4ˆIØˆDÜÓ_Ð1^Ô_Ô_ÐhrÑaeÜÓdÐ3cÔdÔdÐmtÐfjä Ñ-¨dÑ3ˆCà×%Ñ%Ô&7¸ÀW×EYÑEYÐ[^Ð`g×`qÑ`qÐsz÷  tHñ  tHð  JPô  QÜ%¨cÔ2Ð2ð *×<Ñ<¸ZÈrÐZ`Ð<Óa×aˆ	ð 0ÐÙØ $§	¡	ÐYbÖ*cÐTU¨a°©i¯o©oÓ.?Ð-@ÀÀ1ÀWÁ:À,Ò+OÒ*cÓ dÐô (Ó)ˆØ ×5Ñ5°g×6JÑ6JÐYjÐ5Ók×kˆð 	×!Ñ!ÜØØ× Ñ ØØ×ÑØ× Ñ Øô	
ô "¨(Ô3Ð3ð- búò
 +dð lùô ò @Ü�‰�{ 5 'Ð*Ô+Ü¨´C¸³JÔ?Ð?ûð@üsf   ƒG=…C#F> Ã(G=Ã)F> Ä F5ÄF> Ä"F7Ä:1F> Å+F<Å,AF> Æ4G=Æ5F> Æ7F> Æ>	G:Ç.G5Ç5G:Ç:G=z/healthc               ƒ   ó   K  — ddiS ­w)NrM   Úhealthyr<   r<   r"   r    Úhealthrx      s   è ø€ à�iÐ Ð ùs   ‚z
/test-chatr*   c              ƒ   ó¨   K  — 	 t        «       }|j                  | «      ƒ d{  –—† }|ddœS 7 Œ	# t        $ r}t        |«      ddœcY d}~S d}~ww xY w­w)z)Browser-friendly GET endpoint for testingNrL   )r*   rM   ÚFalse)r3   rM   )r=   rl   r1   rH   )r*   rs   rt   r7   s       r    Ú	test_chatr{   ƒ   sT   è ø€ ð4Ü'Ó)ˆØ ×5Ñ5°gÓ>×>ˆØ#¨vÑ6Ð6ð ?ùäò 4Ü˜Q›¨7Ñ3Õ3ûð4üs<   ‚A„. ¢,£. «A¬. ®	A·A
ÁAÁAÁ
AÁAz/history/{identifier}rm   r-   c              ƒ   óÔ   K  — 	 ddl m} |j                  | |¬«      ƒ d{  –—† }|S 7 Œ# t        $ r3}t        j                  d|› �«       t        dt        |«      ¬«      ‚d}~ww xY w­w)zå
    Fetch complete chat history for a user (for frontend display).
    Query params:
    - source: 'whatsapp' or 'website' (default: website)
    For WhatsApp: identifier is contact_id
    For Website: identifier is user_id
    r   r&   )r-   NzHistory fetch error: rb   rc   )r/   r'   Úget_full_historyr1   r2   r3   r   rH   )rm   r-   r'   Úhistory_datar7   s        r    Úget_user_historyr   �   sg   è ø€ ð<Ý@Ø,×=Ñ=¸jÐQWÐ=ÓX×XˆØÐð Yùäò <Ü�‰Ð,¨Q¨CÐ0Ô1Ü¨´C¸³FÔ;Ð;ûð<üó0   ‚A(„)  '¡) ¦A(§) ©	A%².A Á A%Á%A(z/all-user-chatsÚpager^   c              ƒ   óÔ   K  — 	 ddl m} |j                  | |¬«      ƒ d{  –—† }|S 7 Œ# t        $ r3}t        j                  d|› �«       t        dt        |«      ¬«      ‚d}~ww xY w­w)zü
    Get all user chat histories with user details from admins collection.
    Uses MongoDB $lookup to join collections.
    Supports pagination.
    
    Query params:
    - page: Page number (default: 1)
    - limit: Items per page (default: 20)
    r   r&   )r�   r^   NzAll chats fetch error: rb   rc   )r/   r'   Úget_all_chats_with_user_detailsr1   r2   r3   r   rH   )r�   r^   r'   Úresultr7   s        r    Úget_all_user_chatsr…   ž   sf   è ø€ ð<Ý@Ø&×FÑFÈDÐX]ÐFÓ^×^ˆØˆð _ùäò <Ü�‰Ð.¨q¨cÐ2Ô3Ü¨´C¸³FÔ;Ð;ûð<ür€   )rS   )zWhat is RERA?)r@   é   )#Útypingr   Úfastapir   r   r   r   Úpydanticr   r	   ÚloggingÚtimeÚsrc.services.rag_servicer
   Úsrc.core.configr   Ú	getLoggerr2   rg   rH   r!   Úrouterr8   r;   r=   r?   rK   Úpostru   Úgetrx   r{   r   Úintr…   r<   r"   r    ú<module>r“      s™  ðÝ ß FÓ Fß %Û Û Ý 9Ý $à	ˆ×	Ñ	˜:Ó	&€ð Gð jð dñð ið xð ^ññ€ð˜só ð ]ð Mð Sñ €ˆmÑ ñ 
˜%Ð'7Ð&8Ô	9€ó=ð Ð òô$˜	ô $ô˜ô ð ‡�ˆWÐ%7€Ó8ð6@Ð#4ð 6@Èò 6@ó 9ð6@ðp ‡�ˆIÓñ!ó ð!ð ‡�ˆLÓñ4˜Sò 4ó ð4ð ‡�Ð#Ó$ñ< sð <°Cò <ó %ð<ð  ‡�ÐÓñ< 3ð <°3ò <ó ñ<r"   