CoolFace
Apppublic

Neerajkadari/Context-Aware_Conversational_Intelligence_System

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
app.cpython-313.pyc208 linesDownload Raw Back to __pycache__
1�

2T<�iXa��|�SrSSKrSSKrSSKrSSKrSSKJr SSKJr SSKJ	r	J3r4JrJr SSK
JrJrJrJrJr SSKJr SSKJr SSKrSS	KJr SSKrSS5KJrJr \R<R?S\R<RA\R<RC\"555 SSK#r#\RH"\RJSS9 \RL"\'5r(\RR"\RTRW5(aS
OS5r,"SS5r-"SS5r."SS5r/"SS5r0"SS5r1\"\'\2"\#RfS-S-5\2"\#RfS-S-5S9r4\"\45 Sq5Sr6\4RoS5S5r8\4RoS S!/S"9S#5r9\4RoS$S!/S"9S%5r:\4RoS&5S'5r;\4RoS(5S)5r<\4RoS*5S+5r=\4RoS,5S-5r>\2"\#RfS.-5r?S/r@\4RoS0S!/S"9S15rA\'S2:Xah\B"S35 \B"S45 \B"S55 \B"S6\#R�S7\#R�35 \B"S35 \4R�\#R�\#R�S8S99 gg):a#6FLASK WEB APPLICATION & RUNTIME AI ENGINE7=========================================8Context-Aware Conversational Intelligence System.9 10Dual-mode operation:11  - Document-aware assistant (RAG mode)12  - General-purpose conversational chatbot13 14Supports PDF/DOCX upload, OpenAI LLM for answers.15�N)�datetime)�deque)�List�Dict�Any�Optional)�Flask�request�jsonify�render_template�send_from_directory)�secure_filename)�CORS)�SentenceTransformer)�"AutoModelForSequenceClassification�
AutoTokenizerz2%(asctime)s [%(name)s] [%(levelname)s] %(message)s)�level�format�cuda�cpuc�F�\rSrSrSrSrS\4SjrSS\S\S\4SjjrS	r	g16)�ModelInference�*zBLoads trained transformer models and performs text classification.c�.�SUlSUlSUlg�N��loaded_model_name�model�	tokenizer��selfs �d:\major project-2\app.py�__init__�ModelInference.__init__-s��!%�����17�����	model_keyc���URU:Xag[RU-nUR5(d [	SUR5SUS35e[RSX5 [R"[U55UlUS-R5(a�SSKJ
n [US-5n[R "U5nSSS5 WSn[RS	U5 ["R"U[R$[&R(S189nURR*URlURU[U55UlO$["R"[U55UlUR,R/[05 UR,R35 Xl[RSU5 g!,(df   GN=f)NzModel z not found at z. Please run train.py first.zLoading %s from %s...zadapter_config.jsonr)�	PeftModel�base_model_name_or_pathz)Loading base model %s for PEFT adapter...)�19num_labels�torch_dtypez!Successfully loaded %s from disk!)r�config�	MODEL_DIR�exists�FileNotFoundError�upper�logger�infor�from_pretrained�strr�peftr(�open�json�loadr�NUM_CLASSES�torch�float32�pad_token_idr�to�DEVICE�eval)r!r&�20model_pathr(�f�adapter_cfg�base_model_name�21base_models        r"�22load_model�ModelInference.load_model2st���!�!�Y�.���%�%�	�1�23�� � �"�"�#�f�Y�_�_�->�,?�~�j�\�Yu�$v�w�w����+�Y�C�&�6�6�s�:��G����.�.�6�6�8�8�&��j�#8�8�9�Q�"�i�i��l��:�)�*C�D�O��K�K�C�_�U�;�K�K��F�,>�,>�E�M�M��J�.2�^�^�-H�-H�J���*�"�2�2�:�s�:��O�D�J�;�K�K�C�PZ�O�\�D�J��24�25�
�
�f���26�27����!*�����7��C�:�9�s�G,�,28G;�text�returnc�6�URU5 URUSSSSS9nUR	5VVs0sHupVXVR[5_M nnn[R"5 UR"S0UD6nURRSS9R5nSSS5 [Rn	W[U	5:aX�$[U5$![an[U5sSnA$SnAff=fs snnf!,(df   Nd=f)N�ptT�)�return_tensors�29truncation�30max_length�padding�����)�dim�)rE�	Exceptionr4r�itemsr=r>r:�no_gradr�logits�argmax�itemr,�CLASS_NAMES�len)31r!rGr&�e�inputs�k�v�outputs�pred_idx�class_namess32          r"�
classify_text�ModelInference.classify_textPs���	��O�O�I�&�����T�d�WZ�dh��i��.4�l�l�n�=�n�d�a�!�T�T�&�\�/�n��=�
�]�]�_��j�j�*�6�*�G��~�~�,�,��,�4�9�9�;�H���(�(���c�+�&�&��(�(��8�}����	��q�6�M��	��>�
�_�s.�C"�!D�2:D33�"34D�,35C<�6D�<D�36 37DrN)�bert)38�__name__�39__module__�__qualname__�__firstlineno__�__doc__r#r4rErb�__static_attributes__rRr%r"rr*s7��L��40D�C�D�<�#��#��3��r%rc41��\rSrSrSrSrS\\S\4SjrS\\S\\	4S	jr42SS\S\	S
\S\\4SjjrSS\S\	S
\S\4Sjjr
S\4SjrSrg43)�KnowledgeStore�fz<Manages document embeddings in ChromaDB for semantic search.c�(�[[R5Ul[R44"[
[R5S9UlURR[RSS0S9Ul[RS5 g)N)�pathz45hnsw:space�cosine)�name�metadatazKnowledgeStore initialized.)rr,�EMBEDDING_MODEL�embed_model�chromadb�PersistentClientr4�
VECTOR_DB_DIR�client�get_or_create_collection�CHROMA_COLLECTION�46collectionr1r2r s r"r#�KnowledgeStore.__init__ism��.�v�/E�/E�F����/�/�S��9M�9M�5N�O����+�+�>�>��)�)�"�H�-�?�47���	���1�2r%�chunks�filenamec	��UVs/sHnSU0PM	 nn[[U55Vs/sH	oRSU3PM nnURRU5R	5n[S[U5S5H,nUS-n	UR48R
XU	XxU	XHU	XhU	S9 M. [RSUS[U5S35 g	s snfs snf)49z$Index document chunks into ChromaDB.�source�_chunk_r�d��	documents�50embeddings�	metadatas�idszCustom document 'z' indexed in ChromaDB (z	 chunks).N)	�rangerZrt�encode�tolistr{�upsertr1r2)51r!r}r~�_�metas�ir�r��start�ends52          r"�add_custom_document�"KnowledgeStore.add_custom_documentrs���/5�6�v�!�(�H�%�v��6�05�c�&�k�0B�C�0B�1��7�1�#�&�0B��C��%�%�,�,�V�4�;�;�=�53��1�c�&�k�3�/�E��#�+�C��O�O�"�"� �s�+�54��8M��c�*��#��
#�
�0�	���'��z�1H��V��
�U^�_�`��7��Cs55�C�C�texts�labelsc	�@�[Rn/n/n/n[[X55H_unup�U	[	U5:aX9O56[U	5n57UR
U5 UR
SU58S.5 UR
SU35 Ma URRU5R5n[S[	U5S5H,nUS-n
URRXLU
X�U
X\U
XlU
S9 M. [RS[	U5S35 g	)59z6Index training dataset text into ChromaDB for RAG use.�
ag_news_train)r��category�ag_news_train_rr�r�zDataset knowledge indexed: z	 samples.N)r,rY�	enumerate�ziprZr4�appendrtr�r�r�r{r�r1r2)r!r�r�rar}r�r�r�rG�labelr�r�r�r�s              r"�add_dataset_knowledge�$KnowledgeStore.add_dataset_knowledges���(�(�������� )�#�e�*<� =��A�}��-2�S��5E�-E�{�)�3�u�:�H��M�M�$���L�L�O��J�K��J�J���s�+�,�	!>�60�%�%�,�,�V�4�;�;�=�61��1�c�&�k�3�/�E��#�+�C��O�O�"�"� �s�+�62��8M��c�*��#��
#�
�0�	���1�#�f�+��i�H�Ir%N�question�top_kr�rHc	�j�URRU/5R5nU(aSU0OSnURR	XBU/SQS9n/nUS(aR[USSUSSUSS5H/up�n63U64S:dMUR
X�[S	U65-66S675S.5 M1 U$)Nr�)r�r��	distances)�query_embeddings�	n_results�where�includer�rr�r�g�������?��)rGrr�68similarity)rtr�r�r{�queryr�r��round)r!r�r�r��	query_emb�where_clause�results�hits�doc�meta�dists           r"r��KnowledgeStore.query�s����$�$�+�+�X�J�7�>�>�@�	�-3��&�)����/�/�'�'�&��;�(�69��70���;��#&�w�{�';�A�'>���@T�UV�@W�Y`�al�Ym�no�Yp�#q���4��$�;��K�K��e�TU�X\�T\�^_�N`� a�b�$r��r%c��URXU5nU(dgSRUVs/sHoUSPM71 sn5$s snf)N�z72 73rG)r��join)r!r�r�r�r��hs      r"�get_context_string�!KnowledgeStore.get_context_string�s?���z�z�(�6�2�����{�{�D�9�D�q��y�k�N�D�9�:�:��9s�Ac�b�URR5nUS:�$![a gf=f)z0Check if any custom documents have been indexed.rF)r{�countrS)r!r�s  r"�
has_documents�KnowledgeStore.has_documents�s5��	��O�O�)�)�+�E��1�9����	��	�s�!�74.�.)rxr{rt)�N)rerfrgrhrir#rr4r��intr�rr�r��boolr�rjrRr%r"rlrlfs���F�3�a�$�s�)�a�s�a�J�4��9�J�d�3�i�J�(�c��#��3��$�t�*�� ;�3�;�s�;��;�WZ�;��t�r%rlc	��\rSrSrSrSrS\4SjrSS\S\S\S	\4S75jjr	S\S\S	\4Sjr76SS\S\S	\4S
jjrS\S\S	\4SjrSr
g)�ConversationalEngine�z�77Dual-mode conversational AI engine:781. Document-aware mode: Uses RAG context to answer questions about uploaded files792. General chatbot mode: Answers general questions using LLM knowledge80c�J�SUlSUl[RS5 g)NzLConversationalEngine initialized (dual-mode: document QA + general chatbot).)�
openai_client�openai_api_keyr1r2r s r"r#�ConversationalEngine.__init__�s��!���"������b�cr%�api_keyc���XlSSKJn U"US9Ul[RS5 g![a'n[RSU5 SUlSnAgSnAff=f)zSet/update the OpenAI API key.r)�OpenAI)r�z'OpenAI client initialized successfully.z&Failed to initialize OpenAI client: %sN)r��openair�r�r1r2rS�error)r!r�r�r[s    r"�set_api_key� ConversationalEngine.set_api_key�sT��%��	&�%�!'��!8�D���K�K�A�B���	&��L�L�A�1�E�!%�D����	&�s�&/�81A �A�A r��context�has_documentrHc���UR5R5nUS;a	U(aggU(aEUR(a#UR(aUR	X5$URX5$U(a;U(d4UR(a"UR(aURUSS9$g	UR(a#UR(aURU5$g82![83a n[RSU5 SnAN�SnAff=f![84a n[RSU5 SnAg	SnAff=f![85a n[RSU5 SnAg86SnAff=f)z�87Generate response based on context availability:88- If context exists -> use RAG retrieval mode (document QA)89- If no context but document uploaded -> inform user90- If no document -> use general chatbot mode91)�hello�hi�heyzhi!zhello!zhey!z~Hello! I'm ready to help you with your uploaded document. Ask me anything about it, or feel free to ask general questions too!u�Hello! I'm your AI assistant. You can:92 93- **Upload a document** and ask questions about it94- **Ask me anything** — I can explain concepts, answer questions, and help you reason through problems95 96How can I help you today?z)OpenAI RAG call failed: %s. Falling back.NzaThe user has uploaded a document, but this question doesn't seem related to it. Answer generally.)�notezOpenAI general call failed: %sz�I couldn't find relevant information about that in your uploaded document. Try rephrasing your question, or if it's a general question, I'll do my best to help! Please provide your OpenAI API key for enhanced responses.aYI'd love to help! To get the best responses, please enter your OpenAI API key in the left panel.97 98With an API key, I can:99- Answer general questions on any topic100- Explain concepts in detail101- Help with reasoning and problem-solving102- Analyze your uploaded documents103 104You can also upload a document (PDF/DOCX) and I'll answer questions about it!)105�lower�stripr�r��_openai_rag_responserSr1�warning�_context_fallback�_openai_general_response)r!r�r�r��q_lowerr[s      r"�generate_response�&ConversationalEngine.generate_response�se���.�.�"�(�(�*���E�E��_�0���!�!�d�&9�&9�S��4�4�X�G�G��)�)�(�<�<����!�!�d�&9�&9�H��8�8��A�9�B�B�j�106���$�"5�"5�
D��4�4�X�>�>�107`��3!�S��N�N�#N�PQ�R�R��S��!�H��N�N�#C�Q�G�G�j��H���
D����?��C�C�`��	
D�sH�C1�+D�E�1108D�;D�D�109E�(E�E�110E5�E0�0E5c�>�SnSUSUS3nURRRR[R111SUS.SUS./[R[RS9nURS	RRR5$)112z4Generate response using OpenAI API with RAG context.acYou are a helpful, accurate AI assistant that answers questions based on the provided document context. Always base your answers on the context provided. If the context doesn't contain enough information to fully answer the question, say so and provide what you can. Be detailed, accurate, and helpful. Format your responses clearly with proper structure.z$Context from the uploaded document:113z114 115Question: zQ116 117Please provide a detailed, accurate answer based on the document context above.�system��role�content�user�r�messages�temperature�118max_tokensr)r��chat�completions�creater,�OPENAI_MODEL�TEMPERATURE�MAX_RESPONSE_TOKENS�choices�messager�r�)r!r�r��
system_prompt�user_prompt�responses      r"r��)ConversationalEngine._openai_rag_responses���
C�	���	�119��*�P�S���%�%�*�*�6�6�=�=��%�%�!�m�<��K�8���*�*��1�1�>�120������"�*�*�2�2�8�8�:�:r%r�c�.�SnU(aUSU3-
nURRRR[R121SUS.SUS./S[RS9nURSRRR5$)	zPGenerate general conversational response using OpenAI API (no document context).aYou are an intelligent, helpful, and friendly AI assistant. You can answer general questions, explain concepts, provide reasoning, summarize information, and assist users with a wide variety of topics. Be conversational yet informative. Format responses clearly.z122 123Note: r�r�r�gffffff�?r�r)r�r�r�r�r,r�r�r�r�r�r�)r!r�r�r�r�s     r"r��-ConversationalEngine._openai_general_responses���
K�	���z�$��0�0�M��%�%�*�*�6�6�=�=��%�%�!�m�<��H�5����1�1�>�124������"�*�*�2�2�8�8�:�:r%c��SU3$)zEFallback: structured context presentation when OpenAI is unavailable.z!Based on the uploaded document:125 126rR)r!r�r�s   r"r��&ConversationalEngine._context_fallback5s��4�W�I�>�>r%)r�r�N)F)r�)rerfrgrhrir#r4r�r�r�r�r�r�rjrRr%r"r�r��s����d�127	&�3�	&�7a�#�7a��7a�4�7a�\_�7a�r;�S�;�3�;�3�;�4;��;�C�;��;�,?�#�?��?��?r%r�c�*�\rSrSrSrSrSrSrSrg)�
MemoryManageri=z/Manages conversation history and session state.c�~�[SS9Ul[R"5R	5UlSUlg)N�2)�maxlen)r�historyr�now�	isoformat�128started_at�active_documentr s r"r#�MemoryManager.__init__@s,���B�'���"�,�,�.�2�2�4���#��r%c�>�URRXS.5 g)Nr�)r�r�)r!r�r�s   r"�add_turn�MemoryManager.add_turnEs�������T�>�?r%c��UR(aSUR3OSnSURS[UR5SU3$)NzActive document: zNo document loadedzSession started: z129Turns: �130)rrrZr�)r!�131doc_statuss  r"�get_session_summary�!MemoryManager.get_session_summaryHsK��CG�CW�CW�(��)=�)=�(>�?�]q�132�"�4�?�?�"3�9�S����=N�<O�r�R\�Q]�^�^r%)rr�rN)	rerfrgrhrir#rr133rjrRr%r"r�r�=s��9�$�134@�_r%r�c�>�\rSrSrSrSrS\4SjrS\S\4SjrS	r	g135)�AgentControlleriPz�136Central AI agent that orchestrates:137- Document Q&A (RAG mode)138- General conversation (chatbot mode)139- Text classification (transformer models)140c�H�[5Ul[5Ul[	5Ul[
5Ul[RS-nUR5(a[R"[U55O0Ulg![a141 0Ulgf=f)Nzevaluation_summary.json)r��memoryrl�	knowledger��conversationr�	inferencer,�142REPORT_DIRr.r7r8r6r�rS)r!�ps  r"r#�AgentController.__init__Xsx��#�o���'�)���0�2���'�)���
��� 9�9��	�12�����4�9�9�T�!�W�-��D�L���	��D�L�	�s�;B
�
B!� B!r�c�:�URRU5 g)z'Forward API key to conversation engine.N)rr�)r!r�s  r"r��AgentController.set_api_keyes�����%�%�g�.r%r�rHc�Z^�URRSU5 UR5mST;dST;a�Sn[RH
nUT;dMUn O UnSU;a#URSS5SR
5nURRXB5nSUR5S	US1433nURRSU5 U$[U4SjS
55(GaDUR(GaS/nURS5 URS5 SnSn	URR5H�up�URSS5nURSS5n
URSS5nURSS5nURSU144R5SUSSU
SSUSSUSS35 X�:�dM�Un	U145nM� U(a'URSUR5SU	SS35 SRU5nOSnURRSU5 U$URR nUSLnU(aUR"R%UUS 9OS!nUR&R)UUUS"9nURRSU5 U$)#z�146Process user query with intelligent routing:1471. Classification commands -> use transformer models1482. Document questions -> use RAG retrieval1493. General questions -> use LLM chatbot150r��classify�predictrd�:r�rPzUsing z, I classified this text as: **z**.�	assistantc3�,># �UH	oT;v� M g7frrR)�.0�kwr�s  �r"�	<genexpr>�/AgentController.handle_query.<locals>.<genexpr>�s����x�'w��W�}�'w�s�)z
model resultszmodel comparisonzevaluation resultszmodel performancez'Here are the model evaluation results:151z4| Model | Accuracy | Precision | Recall | F1 Score |z4|-------|----------|-----------|--------|----------|Nr�accuracy�	precision�recall�f1z| z | z.4fz |z152**Best performing model: z** (F1: �)rzbNo evaluation results available yet. Please run `train.py` first to train and evaluate the models.)r�r�)r�)rrr�r,�MODELS�splitr�rrbr0�anyr�r�rT�getr�rrr�rr�)r!r��model_to_user]�text_to_classify�resultr��lines�153best_model�best_f1r&�metrics�acc�prec�recr%r�r�r�r�s                   @r"�handle_query�AgentController.handle_queryis����	
�����V�U�+��+�+�-���� �I��$8�!�L��]�]����<�#$�L��#�154 %���e�|�#(�;�;�s�A�#6�r�#:�#@�#@�#B� ��^�^�1�1�2B�Q�F��� 2� 2� 4�5�5T�U[�T\�\_�`�H��K�K� � ��h�7��O��x�'w�x�x�x��|�|�|�C�D�����S�T����S�T�!�155���*.�,�,�*<�*<�*>�&�I�!�+�+�j�!�4�C�"�;�;�{�A�6�D�!�+�+�h��2�C� ���T�1�-�B��L�L�2�i�o�o�&7�%8��C��9�C��S�z�QT�UX�Y\�T]�]`�ac�dg�`h�hj�!k�l��|�"$��%.�156�+?���L�L�#>�z�?O�?O�?Q�>R�RZ�[b�cf�Zg�gh�!i�j��9�9�U�+�����K�K� � ��h�7��O����,�,���T�)��MY�$�.�.�3�3�E�&�3�I�_a���$�$�6�6�u�g�T`�6�a�������[�(�3��r%)rrrrr�N)157rerfrgrhrir#r4r�r5rjrRr%r"r
r
Ps+����/�3�/�;�#�;�#�;r%r
�ui�	templates�static)�template_folder�
static_folderc�0�[c158[5q[$r)�agentr
rRr%r"�	get_agentr>�s���}��!���Lr%�/c��[S5$)Nz159index.html)rrRr%r"�indexrA�s
���<�(�(r%z	/api/chat�POST)�methodsc�l�[R"SS9nURSS5R5nU(d[	SS05S4$[5R
U5n[	SU05$![a7n[RS	5 [	S[U505S1604sSnA$SnAff=f)NT��forcer�r�r�z
Empty message�r�z161Chat error��)r162�get_jsonr*r�rr>r5rSr1�	exceptionr4)�data�msgr�r[s    r"r�r��s������$�'�D�163�(�(�9�b�164!�165'�166'�167)�C�����1�2�C�7�7�/��;�+�+�C�0���168�H�-�.�.���/�����&����Q��(�)�3�.�.��/���%A2�2169B3�<,B.�(B3�.B3z/api/set-api-keyc�l�[R"SS9nURSS5R5nU(d[	SS05S4$[5R
U5 [	SS	05$![a7n[RS1705 [	S[U505S4sSnA$SnAff=f)
z%Receive and store the OpenAI API key.TrEr�r�r�zNo API key providedrGr�zAPI key set successfully.z
API key errorrHN)r171rIr*r�rr>r�rSr1rJr4)rKr�r[s   r"r�r��s������$�'�D��h�h�y�"�%�+�+�-�G����!6�7�8�#�=�=�/������(��	�#>�?�@�@���/�����)����Q��(�)�3�.�.��/�rMz/api/statusc�\�[S[5RR505$)N�status)rr>rr172rRr%r"rPrP�s#���H�i�k�0�0�D�D�F�G�H�Hr%z/api/modelsc���0n[RR5H0upUSURSS5URSS5S.X'M2 [	SU05$)Nrq�architecture�Transformer�descriptionr�)rqrRrT�models)r,r'rTr*r)�173model_info�key�cfgs   r"rUrU�s^���J��M�M�'�'�)�����K��G�G�N�M�B��7�7�=�"�5�174�175��*��H�j�)�*�*r%z/api/resultsc�(�[5Rn0nSnSnUR5HXupEURSS5nURS5URS5URS5US.X'Xc:�dMTUnUnMZ [	XS.5$)Nrr%r"r#r$)r"r#r$r%)r�r/)r>r�rTr*r)�res�safer/r0r]r^r%s       r"r�r��s���176�+�177�178�C�
�D��J��G��	�	����
�U�U�4��^�����j�)����{�+��e�e�H�o��	179����<��G��J���t�>�?�?r%z/reports/<path:filename>c�H�[[[R5U5$r)r
r4r,r)r~s r"�serve_reportr]s���s�6�#4�#4�5�x�@�@r%rKi�z/api/uploadc�*�S[R;a[SS05S4$[RSnURS:Xa[SS05S4$[R180R
UR5SR5nUS;a[SS	US181305S4$[UR5n[R182R[U5n[R"[SS9 URU5 [R183RU5[:�a%[R"U5 [SS
05S4$SSKJn U"5nUR%X25n['5R(R+Xb5 U['5R,l['5R,R1SSUS35 [R2R5SS5R75nU(a['5R9U5 [SUS[;U5S3U[;U5S.5$![<a7n[>RAS5 [S[CU505S4sSnA$SnAff=f)N�filer�zNo file partrGr�zNo selected filer�)z.pdfz.docxzUnsupported file type: z". Only PDF and DOCX are supported.T)�exist_okzFile exceeds 200MB limit.r)�DocumentLoaderr�z	Document z loaded successfully.r�zSuccessfully processed 'z' into zB contextual chunks. You can now ask questions about your document!)r�r~r}zUpload errorrH)"r184�filesrr~�osro�splitextr�rr��
UPLOAD_FOLDER�makedirs�save�getsize�
MAX_FILE_SIZE�remove�rag.document_loaderra�process_filer>rr�rrr�formr*r�r�rZrSr1rJr4)	r_�extr~�filepathra�loaderr}r�r[s	         r"�upload_filerqs)��
�W�]�]�"����0�1�3�6�6��=�=�� �D��}�}�����!3�4�5�s�:�:�
�'�'�185�186�4�=�=�187)�!�188,�1892�1902�1914�C�192�#�#���#:�3�%�?a�!b�c�d�fi�i�i�/�"�4�=�=�1���7�7�<�<�
�x�8��193���M�D�1��	�	�(���7�7�?�?�8�$�}�4��I�I�h���G�%@�A�B�C�G�G�6��!���$�$�X�8������1�1�&�C�-5�	����*�����#�#�H�	�(��CX�.Y�Z��,�,�"�"�9�b�1�7�7�9����K�#�#�G�,��1�(��7�3�v�;�-�PR�S� ��&�k�194��	��195�/�����(����Q��(�)�3�.�.��/�s&�*B.I�C7I�196J�,J
�J�
J�__main__z<============================================================z2  CONTEXT-AWARE CONVERSATIONAL INTELLIGENCE SYSTEMz*  Dual Mode: Document QA + General Chatbotz	  http://rF)�host�port�debug)Fri�loggingr7rc�sysr�collectionsr�typingrrrr�flaskr	r197rrr
�werkzeug.utilsr�198flask_corsrru�sentence_transformersrr:�transformersrrro�insert�dirname�abspath�__file__r,�basicConfig�INFO�	getLoggerrer1�devicer�is_availabler>rrlr�r�r
r4�BASE_DIR�appr=r>�routerAr�r�rPrUr�r]rerirq�print�HOST�PORT�runrRr%r"�<module>r�s���199���	�200���,�,�O�O�*���5��J�������2�7�7�?�?�2�7�7�?�?�8�#<�=�>�
����'�,�,�/c�d�	�	�	�8�	$��	����201�202� 7� 7� 9� 9�f�u�	E��6�6�xI�I�^B?�B?�P
_�
_�&T�T�t������$�.��<�=��f�o�o��,�x�7�8���203�S�	�������3��)��)����;����)�204/�*�205/������x��0�/�1�/����=��I��I����=��+��+����>��@��@�&���%�&�A�'�A��F�O�O�f�,�-�
�!�
����=�6�(��+�*/�,�*/�`�z��	�(�O�	�206>�?�	�2076�7�	�I�f�k�k�]�!�F�K�K�=�2081�2�	�(�O��G�G����6�;�;�e�G�<�
r%