Ë
    ü+h#  ã                   óü   — d dl Z d dlmZ d dlZd dlZ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Zd dlmZ  ej                   e«      Zd„ Zde_         ej                   e«      Zh d	£Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)é    N)ÚImageé   )ÚChatCategoryÚPredefinedQAÚChatLog)ÚJsonResponse)ÚQc                 óÈ   — 	 | j                  d«      \  }}t        j                  |«      }t        j                  t        j                  |«      «      }|S # t        $ r Y y w xY w)Nz;base64,)ÚsplitÚbase64Ú	b64decoder   ÚopenÚioÚBytesIOÚ	Exception)Úbase64_stringÚheaderÚdataÚ
image_dataÚimages        ú*/var/www/skyplay_api_hub/feedback/utils.pyÚdecode_base64_imager      sY   € ðØ$×*Ñ*¨:Ó6‰ˆ�Ü×%Ñ% dÓ+ˆ
Ü—
‘
œ2Ÿ:™: jÓ1Ó2ˆØˆøÜò Ùðús   ‚AA Á	A!Á A!z¤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>   ÚaÚanÚatÚinÚisÚofÚonÚorÚtoÚandÚareÚforÚtheÚwithc                 ó‚   — t        j                  d| j                  «       «      D �ch c]  }|t        vsŒ|’Œ c}S c c}w )Nz\w+)ÚreÚfindallÚlowerÚ
STOP_WORDS)ÚtextÚwords     r   Úclean_wordsr.   "   s.   € ÜŸZ™Z¨°·
±
³Ó=ÖX�TÀÌZÒAWŠDÒXÐXùÒXs   §<µ<c                 ó�  — 	 g }|r-|dd  D ]%  }|d   dk(  rdnd}|j                  ||d   dœ«       Œ' |j                  dd«      }|j                  dd	|› d
| › �dœ«       t        j                  j	                  d|d¬«      }|d   d   d   d   j                  «       S # t        $ r}t        j                  d«       Y d }~yd }~ww xY w)NiúÿÿÿÚsenderÚuserÚ	assistantÚmessage)ÚroleÚcontentÚnameÚUserzMy name is z. zgpt-4oé–   )ÚmodelÚmessagesÚ
max_tokensÚchoicesr   r5   zOpenAI API error:z.Sorry, I'm having trouble answering right now.)	ÚappendÚgetÚopenaiÚChatCompletionÚcreateÚstripr   ÚloggerÚ	exception)	Úuser_messageÚsession_dataÚconversationr:   Úitemr4   Ú	user_nameÚresponseÚes	            r   Úgenerate_ai_responserL   &   sø   € ð@Øˆñ Ø$ R SÐ)ò L�Ø!% h¡°6Ò!9‘v¸{�Ø—‘¨¸$¸y¹/Ñ JÕKðLð
 !×$Ñ$ V¨VÓ4ˆ	Ø�‰ØØ$ Y K¨r°,°Ð@ñ
ô 	ô
 ×(Ñ(×/Ñ/ØØØð 0ó 
ˆð ˜	Ñ" 1Ñ% iÑ0°Ñ;×AÑAÓCÐCøÜò @Ü×ÑÐ,Ô-Ü?ûð@ús   ‚BB Â	CÂ&C Ã Cc                 ón   — | j                  |i «      }|r	d|vr||d<   |r	d|vr||d<   || |<   d| _        |S )Nr6   ÚcontactT)r>   Úmodified)ÚsessionÚsession_keyrI   Úuser_contactrF   s        r   Úget_or_create_session_datarS   C   sR   € Ø—;‘;˜{¨BÓ/€Lá�V <Ñ/Ø(ˆ�VÑÙ˜	¨Ñ5Ø".ˆ�YÑà'€GˆKÑØ€GÔàÐó    c                 ó”  — t         j                  j                  «       }|D �cg c]  }|j                  j	                  «       ‘Œ }}|sddi|fS | j	                  «       |v rAt         j                  j                  | j                  «       ¬«      }|j                  |d<   d |fS d|D �cg c]  }|j                  ‘Œ c}dœ|fS c c}w c c}w )NÚanswerz>No categories available at the moment. Please try again later.)Úname__iexactÚcategoryz9Thanks! Now, please choose a category from the following:)rV   Ú
categories)r   ÚobjectsÚallr6   r*   r>   rB   )r3   rF   rY   ÚcatÚcategory_namesÚselected_categorys         r   Úhandle_category_selectionr_   Q   sÈ   € Ü×%Ñ%×)Ñ)Ó+€JØ2<Ö=¨3�c—h‘h—n‘nÕ&Ð=€NÐ=áØÐZÐ[Ð]iÐiÐià‡}�}ƒ˜.Ñ(Ü(×0Ñ0×4Ñ4À'Ç-Á-Ã/Ð4ÓRÐØ#4×#9Ñ#9ˆ�ZÑ Ø�\Ð!Ð!ð RØ/9Ö:¨˜3Ÿ8›8Ò:ñ
ð ðð 	ùò >ùò ;s   £!C Â&Cc                 óN   — d}d}t        j                  d| «      r| }||fS | }||fS )NÚ z^[^\s@]+@[^\s@]+\.[^\s@]+$)r(   Úmatch)rN   Ú
user_emailÚ
user_phones      r   Úidentify_contactre   c   s?   € Ø€JØ€JÜ	‡x�xÐ-¨wÔ7Øˆ
ð �zÐ!Ð!ð ˆ
Ø�zÐ!Ð!rT   c                 ó¸  — |�7t         j                  j                  t        |¬«      t        d¬«      z  «      }n?t         j                  j                  d¬«      t         j                  j	                  «       z  }t        | «      }g }d}|D ]M  }t        |j                  «      }t        ||z  «      }||kD  r|g}|}Œ1||k(  sŒ7|dkD  sŒ=|j                  |«       ŒO |S )N)rX   T)Úcategory__isnullr   )	r   rZ   Úfilterr	   r[   r.   ÚquestionÚlenr=   )	r3   rX   Úmatched_qasÚ
user_wordsÚbest_matchesÚmax_overlapÚqaÚquestion_wordsÚoverlaps	            r   Úfind_best_match_qarr   m   s×   € àÐÜ"×*Ñ*×1Ñ1Ü�xÔ ¤1°dÔ#;Ñ;ó
‰ô
 #×*Ñ*×1Ñ1À4Ð1ÓHÌ<×K_ÑK_×KcÑKcÓKeÑeˆä˜WÓ%€Jà€LØ€Kàò $ˆÜ$ R§[¡[Ó1ˆÜ�j >Ñ1Ó2ˆØ�[Ò Ø˜4ˆLØ!‰KØ˜Ó#¨°!«Ø×Ñ Õ#ð$ð ÐrT   c           	      óÄ  — 	 t         j                  j                  | ¬«      }t        j                  |j
                  «      }|j                  d|d	œ«       |j                  d
|d	œ«       t        j                  |«      |_        |j                  «        y # t         j                  $ r8 t        |d   |j                  dd«      |j                  dd«      | d¬«      }g }Y Œ�w xY w)N)Ú
session_idr6   Úemailra   rN   z[])rI   rc   rd   rt   rG   r1   )r0   r3   Úbot)
r   rZ   r>   ÚjsonÚloadsrG   ÚDoesNotExistr=   ÚdumpsÚsave)rt   rF   r3   rV   Úchat_logrG   s         r   Úsave_conversationr}   ‰   sÊ   € ðÜ—?‘?×&Ñ&°*Ð&Ó=ˆÜ—z‘z (×"7Ñ"7Ó8ˆð ×Ñ 6°gÑ>Ô?Ø×Ñ 5°VÑ<Ô=ä ŸJ™J |Ó4€HÔØ‡M�M…Oøô ×Ñò ÜØ" 6Ñ*Ø#×'Ñ'¨°Ó4Ø#×'Ñ'¨	°2Ó6Ø!Øô
ˆð Šðús   ‚?B ÂACÃC)N)r   ÚPILr   r   r(   Úloggingrw   Úmodelsr   r   r   Údjango.httpr   r?   Údjango.db.modelsr	   Ú	getLoggerÚ__name__rC   r   Úapi_keyr+   r.   rL   rS   r_   re   rr   r}   © rT   r   ú<module>r‡      s…   ðã Ý Û 	Û 	Û Û ß 7Ñ 7Ý $Û Ý à	ˆ×	Ñ	˜8Ó	$€òð x€„ð 
ˆ×	Ñ	˜8Ó	$€âf€
òYó@ò:òò$"òó8rT   