
    Nh z                        d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ ddlmZ  e         ed      Zi Zi addddddddZddddZ d Z!d!dZ"d!dZ#ed         Z$y)"    N)JsonResponse)csrf_exempt)PyPDFLoader	CSVLoaderUnstructuredExcelLoader)RecursiveCharacterTextSplitter)FAISS)
ChatOpenAI)ConversationBufferMemory)ConversationalRetrievalChain)HuggingFaceEmbeddings)load_dotenv)ChatBot   )Conversationz&sentence-transformers/all-MiniLM-L6-v2)
model_namez Hello! How can I help you today?zHi there! How are you doing?zHey! What can I do for you?u-   I’m just a bot, but I’m doing great! 😊zGoodbye! Take care!zYou're welcome!zGlad I could help!)hihelloheyzhow are youbyez	thank youthankszAYou can place your order through our platform or contact support.zWould you like to see the menu?z*Pasta and desserts are highly recommended!)ordermenu	recommendc                    t         j                  j                  ddt        |       |      }t         j                  j	                  |      sg S g }t        j
                  |      D ]  }t         j                  j                  ||      }|j                  d      rt        |      }n;|j                  d      rt        |      }n|j                  d      rt        |      }n{|j                  |j                                 |S )zS
    Loads PDF/CSV/XLSX files from media/data/<user_id>/<chatbot_name> folder.
    mediadataz.pdfz.csvz.xlsx)ospathjoinstrexistslistdirendswithr   r   r   extendload)user_idchatbot_name	base_path	documentsfilename	full_pathloaders          -/var/www/html/aiagenthome/chatbotapi/views.pyload_documentsr/     s     Wfc'lLII77>>)$	IJJy)GGLLH5	V$ +Fv&y)Fw',Y7F' *     c                    t         j                  j                  d|  d|       }t        j                  dd       |r;t         j                  j	                  |      rt        j                  |t        d      S t        | |      }|syt        dd	      }|j                  |      }t        j                  |t              }|j                  |       |S )
zD
    Build or load FAISS vectorstore for the chatbot documents.
    vectorstores_T)exist_ok)allow_dangerous_deserializationNi     )
chunk_sizechunk_overlap)r   r   r    makedirsr"   r	   
load_local
embeddingsr/   r   split_documentsfrom_documents
save_local)r'   r(   load_existingvectorstore_pathdocssplitter
split_docsvectorstores           r.   build_or_load_vectorstorerE     s     ww||Nwiq4OPKK.(89 0*^bcc'<0D-SQH))$/J&&z:>K+,r0   c                     |  d| }|t         vrt        | ||      }|sy|t         |<   n	t         |   }|j                  ddi      }t        dd      }t	        d	d
      }t        j                  |||      }||fS )z=
    Return ConversationalRetrievalChain for the chatbot
    r3   )NNk   )search_kwargszgpt-4o-minig333333?)modeltemperaturechat_historyT)
memory_keyreturn_messages)	retrievermemory)VECTORSTORESrE   as_retrieverr
   r   r   from_llm)	r'   r(   r?   keyvsrO   llmrP   qas	            r.   get_or_create_qarX     s     IQ|n
%C
,&wmLS#sAh7I
=c
:C%QUVF	%	.	.siPV	WBv:r0   c                    | j                   dk7  rt        ddid      S 	 	 t        j                  | j                        }|j                  d      }|j                  dd	      j                         }|j                  d
d      }|r|st        ddid      S t        j                  j                  ||      j                         }|st        ddid      S |j                  }| d| }|t        vr/t        |||      \  }	}
|	st        ddid      S |	|
g dt        |<   nt        |   d   }	|j                         t         v r
t            }nQt#        fdt$        j'                         D        d       }|r|}n%|	j)                  |      }|j                         dv rd}t        |   d   j+                  ||d       t        |   d   }t,        j                  j/                  ||d|i      \  }}|s||_        |j3                          t        d|i      S # t        j
                  $ r t        ddid      cY S w xY w# t4        $ r%}t        ddt7        |       id      cY d }~S d }~ww xY w)NPOSTerrorzPOST method requiredi  )statuszInvalid JSON body.r'   query r?   Tz3user_id and query are required in the request body.)idr'   z Chatbot not found for this user.i  r3   z$No documents found for this chatbot.i  )rW   rP   rL   rW   c              3   2   K   | ]  \  }}|v s|  y w)N ).0rG   vnormalized_querys      r.   	<genexpr>z chat_with_bot.<locals>.<genexpr>.  s      Xtq!!GWBWs   )zi don't knowzi am not sureuB   ⚠️ Sorry, I could not find that information in your documents.rL   )userbot)r'   domaindefaultsresponsezUnexpected error: )methodr   jsonloadsbodyJSONDecodeErrorgetstripr   objectsfilterfirstr(   CONVERSATIONSrX   lower	GREETINGSnextINTENTSitemsrunappendr   get_or_createrL   save	Exceptionr!   )request
chatbot_idr   r'   r]   r?   chatbotr(   rT   rW   rP   rj   intent_matchrL   conversation_objcreatederd   s                    @r.   chat_with_botr     s   ~~W&<=cJJ=R	M::gll+D ((9%"%++-$7eN! 
 //((J(HNNP*L MVYZZ++	<.) m#)'<OJB#W.T$U^abb(*fb!QM#s#D)B ;;=y( !12H Xw}} XZ^_L'66%=>>#'HHcHc>*1152RS$S).9$0$8$8$F$F$l3 %G %
!'
 ,8)!!#Z233o ## 	M*> ?LL	Mr  RW(:3q6(&CDSQQRsO   H AH? ?H? ;H? DH? "H<9H? ;H<<H? ?	I-I("I-(I-)F)%r   rl   django.httpr   django.views.decorators.csrfr   $langchain_community.document_loadersr   r   r   langchain.text_splitterr    langchain_community.vectorstoresr	   langchain_community.chat_modelsr
   langchain.memoryr   langchain.chainsr   langchain_huggingfacer   dotenvr   user_panel.modelsr   modelsr   r;   rQ   ru   rw   ry   r/   rE   rX   r   ra   r0   r.   <module>r      s   l 
  $ 4 ` ` B 2 6 5 9 7  %   ".VW
 -+(B ""	 Q-=.,, AR ARr0   