
    +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!zsk-proj-PjwjMPKvQRl96DkkQs8Mo4YQLuiBcOjf0-RIsfM0lyfVYhaKWJC1dRMkz-wzyAgbm57zy3b5XjT3BlbkFJDCUnaeXekmcfmHjz6ru9PJPJ9ciLdfx74loWy3yeutmjM8MowhlZOLxlF5pb0-W6mfPZNr8DUA>   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.    ZZ

=XTZAWD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    @ $RS) L!%h6!9v{$y/ JKL
 !$$VV4	$YKr,@
 	
 ((// 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'GK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    %%))+J2<=3chhnn&=N=Z[]iii}}.((0044'--/4R#4#9#9Z \!! R/9:388:
  	 > ;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	xx-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 1d#;;

 #**1141H<K_K_KcKcKeeW%JLK $$R[[1j>12[ 4L!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    ??&&*&=zz("7"78 6g>?5V<= JJ|4HMMO  "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   