
    &f0                     F   d dl Z d dlmZ d dlmZmZ d dlmZ d dlZd dl	Z	d dl
mZmZ d dlZd dlmZ d dl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Z e e             Z eddd      Zg dZejA                  eeddgdg        ejB                         Z" e#de"       ejH                  d   e_%        dZ& ed      Z' ee&e'      Z( ejR                  e&d       e	j                  jU                         jW                         Z,e, e	jV                  ddd      k  rdZ-nd Z- ee-d !      Z. ej^                  ej`                  d"d#d$%        G d& d'e      Z1d(Z2d) Z3d* Z4d+ Z5ejm                  d,      d-e1fd.       Z7e8d/k(  r e jr                  ed0d1d2d34       yy)5    N)LLMChain)FastAPIHTTPException)	BaseModel)load_dotenvfind_dotenv)Chroma)OpenAIEmbeddings
ChatOpenAI)RetrievalQA)PromptTemplate)TfidfVectorizer)cosine_similarity)CORSMiddlewarezLangChain Serverz1.0z9A simple api server using Langchain's Runnable interfaces)titleversiondescription)zhttp://localhostzhttp://localhost:8000zhttp://localhost:3000zhttp://165.232.178.158:8008*Tr   )allow_originsallow_credentialsallow_methodsallow_headerszCurrent Directory:OPENAI_API_KEYzdocs/chroma/ztext-embedding-3-large)model)persist_directoryembedding_functioni  i  	      zgpt-3.5-turbo-0301zgpt-3.5-turbo)
model_nametemperaturez)%(asctime)s - %(levelname)s - %(message)szdetails_log.logw)levelformatfilenamefilemodec                   ,    e Zd ZU eed<   eed<   eed<   y)Inputquestionstudent_answerpromptN)__name__
__module____qualname__str__annotations__     //var/www/html/EN-interface-repo/en_interface.pyr'   r'   B   s    MLr1   r'   a  Based on the context: {context} and the question: {query}, first generate an ideal answer that directly addresses the question. Then, evaluate the student's response: {answer}.If the response is irrelevant or nonsensical, provide a NUDGE, suitable for an A2-level learner, that explains why the student's response does not address the question and guides the student back to the topic.If the response is relevant but lacks clarity or detail, provide a NUDGE, suitable for an A2-level learner, that encourages the student to elaborate on their response, specifically highlighting any missing points or areas for further exploration.
Ensure the nudge is written in normal sentence case, suitable for an A2-level learner, focusing on clear and actionable feedback.
SUMMARY:c                 ^    t        g d|      }t        t        |      } || ||d      }|S )N)querycontextanswer)input_variablestemplate)llmr*   )r   r   r9   )quer5   r6   prompt_tempr*   chainresults          r2   summaryr>   L   s6    2F 3&1EC'6BCFMr1   c                     t               }|j                  | |g      }t        |      d   }t        t	        d|      d      }|S )N)r      r   r   )r   fit_transformr   roundmax)r)   context_summary
vectorizertfidf_matrixsimilarity_scoreanswer_relevances         r2   rH   rH   U   sJ     "J++^_,MNL(6t<S$45a8r1   c                 8    t        j                  |  d|        y )Nz: )loggingdebug)	errortypemsgs     r2   	log_trackrN   ]   s    MMYKr#'(r1   z/evaluate_nudge/inputc                 <  K   t        j                  d       | j                  }| j                  }| j                  }g }t        |      dk  rt        j                  d|        ||dddS t        |      dk  rt        }t        j                  ddi	      }|j                  |      }t        |       g }d
}t        t        |            D ]2  }	|j                  ||	   j                         |||	   j                  z  }4 |j                  |       t        ||||      }
|
d   }d|v r|j                  dd      n|d
f\  }}t!        ||      }|d
k(  rt#        d|       t%        |        ||||||d}|S t        j                  ddi	      }|j                  |      }t        |       g }t        t        |            D ]   }	|j                  ||	   j                         " |j                  |       t        ||||      }
t!        ||
d         }||||
d   |d}|S w)Nzfunction name: evaluate_nudge
   zShort answer detected: z_Your answer is too short. Please provide a more detailed response that explains your reasoning.r   )r(   r)   nudgerelevance_scorek   )search_kwargs textNUDGEr@   zcategory : Blank Nudge)r(   r)   r5   SummaryrR   rS   )r(   r)   r5   Prompt_responserS   )rJ   infor(   r)   r*   lenprompt_templatevectordbas_retrieverget_relevant_documentsprintrangeappendpage_contentr>   splitrH   rN   evaluate_nudge)rO   r(   r)   r*   contexts	retrieverdoccontentsr5   icon_sumgenerated_textsummarycrR   rS   response_datas                   r2   rg   rg   _   s=    LL01~~H))N\\FH
>b .~.>?@ ,v 	
 	
 6{a ))3q')B	..x8c
s3x 	+AOOCF//0s1v***G	+ 	!(3~f= >E>W...w:^lnp]q%*>8D"9.u55! !, .
 ))3q')B	..x8c
s3x 	1AOOCF//0	1!(3~f=*>76?K , '.
 s   HH__main__z0.0.0.0i@  z;/etc/letsencrypt/live/divercityapi.anudip.org/fullchain.pemz6/etc/letsencrypt/live/divercityapi.anudip.org/cert.pem)hostportssl_keyfilessl_certfile):uvicornlangchain.chainsr   fastapir   r   pydanticr   osdatetimedotenvr   r   openai langchain_community.vectorstoresr	   langchain_openair
   r   r   langchain.promptsr   sklearn.feature_extraction.textr   sklearn.metrics.pairwiser   fastapi.middleware.corsr   rJ   _apporiginsadd_middlewaregetcwdcurrent_directoryrb   environapi_keyr   	embeddingr_   chmodnowdatecurrent_datellm_namer9   basicConfigDEBUGr'   r^   r>   rH   rN   postrg   r+   runr0   r1   r2   <module>r      s    % *  	  +  3 9 ( , ; 6 2  &KN   %%   BIIK  - .,-" #;<	$5)T 	E "  $$&++--(--a++#HHH!4   '--F. "
I 

)
? ? ?H z
JF r1   