§
    ™Štjå)  ã                  ó:  — d dl mZ d dlZd dl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 d dlm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!  ej"        e#¦  «        Z$d%d„Z% G d„ de!¦  «        Z&d&d"„Z' G d#„ d$e¦  «        Z(dS )'é    )ÚannotationsN)ÚSequence)ÚAny)ÚCallbackManagerForChainRun)ÚBaseLanguageModel)Ú	AIMessage)ÚStrOutputParser)ÚBasePromptTemplate)ÚBaseRetriever)ÚRunnable)ÚField)Úoverride)ÚChain)ÚPROMPTÚQUESTION_GENERATOR_PROMPTÚFinishedOutputParser)ÚLLMChainÚresponser   Úreturnútuple[list[str], list[float]]c                óª   — g }g }| j         d         d         D ]8}|                     |d         ¦  «         |                     |d         ¦  «         Œ9||fS )z>Extract tokens and log probabilities from chat model response.ÚlogprobsÚcontentÚtokenÚlogprob)Úresponse_metadataÚappend)r   ÚtokensÚ	log_probsr   s       úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/chains/flare/base.pyÚ_extract_tokens_and_log_probsr!      se   € à€FØ€IØÔ+¨JÔ7¸	ÔBð +ð +ˆØ�Š�e˜G”nÑ%Ô%Ð%Ø×Ò˜˜yÔ)Ñ*Ô*Ð*Ð*Ø�9ÐÐó    c                  ód   — e Zd ZU dZeZded<   	 eed
d„¦   «         ¦   «         Z	e
dd„¦   «         Zd	S )ÚQuestionGeneratorChainz4Chain that generates questions from uncertain spans.r
   Úpromptr   Úboolc                ó   — dS )NF© )Úclss    r    Úis_lc_serializablez)QuestionGeneratorChain.is_lc_serializable/   s	   € ð ˆur"   ú	list[str]c                ó
   — g d¢S )úInput keys for the chain.©Ú
user_inputÚcontextr   r(   ©Úselfs    r    Ú
input_keysz!QuestionGeneratorChain.input_keys4   s   € ð 5Ð4Ð4Ð4r"   N)r   r&   ©r   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   Ú__annotations__Úclassmethodr   r*   Úpropertyr3   r(   r"   r    r$   r$   )   sx   € € € € € € Ø>Ð>à!:€FÐ:Ð:Ð:Ñ:Ø(àØðð ð ñ „Xñ „[ðð ð5ð 5ð 5ñ „Xð5ð 5ð 5r"   r$   r   úSequence[str]r   úSequence[float]Úmin_probÚfloatÚmin_token_gapÚintÚnum_pad_tokensr+   c                óJ  ‡ ‡‡— 	 dd l }|                     |                     |¦  «        ‰k     ¦  «        d         }nJ# t          $ r= t                               d¦  «         dd lŠˆˆfd„t          |¦  «        D ¦   «         }Y nw xY wˆ fd„|D ¦   «         }t          |¦  «        dk    rg S |d         |d         |z   dz   gg}t          |dd …         ¦  «        D ]?\  }	}
|
|z   dz   }|
||	         z
  |k     r||d         d<   Œ(| 	                    |
|g¦  «         Œ@ˆ fd„|D ¦   «         S )Nr   a  NumPy not found in the current Python environment. FlareChain will use a pure Python implementation for internal calculations, which may significantly impact performance, especially for large datasets. For optimal speed and efficiency, consider installing NumPy: pip install numpyc                óL   •— g | ] \  }}‰                      |¦  «        ‰k     ¯|‘Œ!S r(   )Úexp)Ú.0ÚidxÚlog_probÚmathr>   s      €€r    ú
<listcomp>z)_low_confidence_spans.<locals>.<listcomp>O   s>   ø€ ð 
ð 
ð 
á��XØ�xŠx˜Ñ!Ô! HÒ,Ð,ð à,Ð,Ð,r"   c                óJ   •— g | ]}t          j        d ‰|         ¦  «        ¯|‘Œ S )z\w)ÚreÚsearch)rF   Úir   s     €r    rJ   z)_low_confidence_spans.<locals>.<listcomp>T   s.   ø€ ÐBÐBÐB�Q¥b¤i°°v¸a´yÑ&AÔ&AÐBˆqÐBÐBÐBr"   é   éÿÿÿÿc                óP   •— g | ]"\  }}d                       ‰||…         ¦  «        ‘Œ#S )Ú )Újoin)rF   ÚstartÚendr   s      €r    rJ   z)_low_confidence_spans.<locals>.<listcomp>^   s2   ø€ Ð?Ð?Ð?©:¨5°#ˆB�GŠG�F˜5 ˜9Ô%Ñ&Ô&Ð?Ð?Ð?r"   )
ÚnumpyÚwhererE   ÚImportErrorÚloggerÚwarningrI   Ú	enumerateÚlenr   )r   r   r>   r@   rB   ÚnpÚ_low_idxÚlow_idxÚspansrN   rG   rU   rI   s   ` `         @r    Ú_low_confidence_spansra   :   s’  øøø€ ð
ØÐÐÐà—8’8˜BŸFšF 9Ñ-Ô-°Ò8Ñ9Ô9¸!Ô<ˆˆøÝð 
ð 
ð 
Ý�Šðñ	
ô 	
ð 	
ð 	ˆˆˆð
ð 
ð 
ð 
ð 
å!*¨9Ñ!5Ô!5ð
ñ 
ô 
ˆˆˆð
øøøð CÐBÐBÐB˜(ÐBÑBÔB€GÝ
ˆ7�|„|�qÒÐØˆ	Ø�aŒj˜' !œ* ~Ñ5¸Ñ9Ð:Ð;€EÝ˜G A B BœKÑ(Ô(ð %ð %‰ˆˆ3Ø�NÑ" QÑ&ˆØ�˜”Ñ˜mÒ+Ð+ØˆE�"ŒI�a‰LˆLà�LŠL˜#˜s˜Ñ$Ô$Ð$Ð$Ø?Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?s   …6< ¼ABÂBc                  ó  — e Zd ZU dZded<   	 ded<   	  ee¬¦  «        Zded<   	 ded	<   	 d
Zded<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 ed3d„¦   «         Zed3d„¦   «         Zd4d"„Zd5d%„Z	 d6d7d+„Ze	 d8d9d2„¦   «         Zd&S ):Ú
FlareChainzÅFlare chain.

    Chain that combines a retriever, a question generator,
    and a response generator.

    See [Active Retrieval Augmented Generation](https://arxiv.org/abs/2305.06983) paper.
    r   Úquestion_generator_chainÚresponse_chain)Údefault_factoryr   Úoutput_parserr   Ú	retrievergš™™™™™É?r?   r>   é   rA   r@   é   rB   é
   Úmax_iterTr&   Ústart_with_retrievalr   r+   c                ó   — dgS )r-   r/   r(   r1   s    r    r3   zFlareChain.input_keys}   s   € ð ˆ~Ðr"   c                ó   — dgS )zOutput keys for the chain.r   r(   r1   s    r    Úoutput_keyszFlareChain.output_keys‚   s   € ð ˆ|Ðr"   Ú	questionsr/   Ústrr   Ú_run_managerr   útuple[str, bool]c                óŒ  — |                      ¦   «         }g }|D ]/}|                     | j                             |¦  «        ¦  «         Œ0d                     d„ |D ¦   «         ¦  «        }| j                             |||dœd|i¦  «        }	t          |	t          ¦  «        r|	j        }	| j	         
                    |	¦  «        \  }
}|
|fS )Nz

c              3  ó$   K  — | ]}|j         V — Œd S ©N)Úpage_content)rF   Úds     r    ú	<genexpr>z,FlareChain._do_generation.<locals>.<genexpr>’   s$   è è € Ð;Ð;°˜aœnÐ;Ð;Ð;Ð;Ð;Ð;r"   r.   Ú	callbacks)Ú	get_childÚextendrh   ÚinvokerS   re   Ú
isinstancer   r   rg   Úparse)r2   rq   r/   r   rs   r{   ÚdocsÚquestionr0   ÚresultÚmarginalÚfinisheds               r    Ú_do_generationzFlareChain._do_generation‡   sä   € ð !×*Ò*Ñ,Ô,ˆ	ØˆØ!ð 	9ð 	9ˆHØ�KŠK˜œ×-Ò-¨hÑ7Ô7Ñ8Ô8Ð8Ð8Ø—+’+Ð;Ð;°dÐ;Ñ;Ô;Ñ;Ô;ˆØÔ$×+Ò+à(Ø"Ø$ðð ð
 ˜)Ð$ñ
ô 
ˆõ �f�iÑ(Ô(ð 	$Ø”^ˆFØ!Ô/×5Ò5°fÑ=Ô=Ñˆ�(Ø˜Ð!Ð!r"   Úlow_confidence_spansÚinitial_responsec                óz  ‡ ‡‡— ˆˆfd„|D ¦   «         }|                      ¦   «         }t          ‰ j        t          ¦  «        r+‰ j                             ||¬¦  «        }ˆ fd„|D ¦   «         }	n‰ j                             |d|i¬¦  «        }	|                     d|	› �dd¬	¦  «         ‰                      |	‰||¦  «        S )
Nc                ó   •— g | ]}‰‰|d œ‘Œ	S ))r/   Úcurrent_responseÚuncertain_spanr(   )rF   Úspanrˆ   r/   s     €€r    rJ   z,FlareChain._do_retrieval.<locals>.<listcomp>¨   s;   ø€ ð 
ð 
ð 
ð ð	 )Ø$4Ø"&ðð ð
ð 
ð 
r"   )r{   c                ó@   •— g | ]}|‰j         j        d                   ‘ŒS )r   )rd   rp   )rF   Úoutputr2   s     €r    rJ   z,FlareChain._do_retrieval.<locals>.<listcomp>¶   s9   ø€ ð ð ð àð �tÔ4Ô@ÀÔCÔDðð ð r"   r{   )ÚconfigzGenerated Questions: Úyellowú
©ÚcolorrU   )r|   r   rd   r   ÚapplyÚbatchÚon_textr†   )
r2   r‡   rs   r/   r   rˆ   Úquestion_gen_inputsr{   Úquestion_gen_outputsrq   s
   `  ` `    r    Ú_do_retrievalzFlareChain._do_retrieval    s"  øøø€ ð
ð 
ð 
ð 
ð 
ð -ð
ñ 
ô 
Ðð !×*Ò*Ñ,Ô,ˆ	Ý�dÔ3µXÑ>Ô>ð 	Ø#'Ô#@×#FÒ#FØ#Ø#ð $Gñ $ô $Ð ðð ð ð à2ðñ ô ˆIˆIð
 Ô5×;Ò;Ø#Ø# YÐ/ð <ñ ô ˆIð 	×ÒØ/ IÐ/Ð/ØØð 	ñ 	
ô 	
ð 	
ð
 ×"Ò" 9¨j¸(ÀLÑQÔQÐQr"   NÚinputsúdict[str, Any]Úrun_managerú!CallbackManagerForChainRun | Nonec           	     óâ  — |pt          j        ¦   «         }|| j        d                  }d}t          | j        ¦  «        D �]!}|                     d|› �dd¬¦  «         |d|dœ}t          | j                             |d| 	                    ¦   «         i¦  «        ¦  «        \  }}	t          ||	| j        | j        | j        ¦  «        }
|                     ¦   «         d	z   d                     |¦  «        z   }|
s3|}| j                             |¦  «        \  }}|r| j        d         |ic S Œç|                      |
||||¦  «        \  }}|                     ¦   «         d	z   |z   }|r n�Œ#| j        d         |iS )
Nr   rR   zCurrent Response: Úbluer’   r“   r.   r{   ú )r   Úget_noop_managerr3   Úrangerl   r—   r!   re   r~   r|   ra   r>   r@   rB   ÚstriprS   rg   r€   rp   rš   )r2   r›   r�   rs   r/   r   Ú_iÚ_inputr   r   r‡   rˆ   Úfinal_responser…   r„   s                  r    Ú_callzFlareChain._callÆ   sÌ  € ð
 #ÐSÕ&@Ô&QÑ&SÔ&Sˆà˜DœO¨AÔ.Ô/ˆ
àˆå˜œÑ&Ô&ð %	ñ %	ˆBØ× Ò Ø/ XÐ/Ð/ØØð !ñ ô ð ð
 %/¸2È8ÐTÐTˆFÝ =ØÔ#×*Ò*ØØ  ,×"8Ò"8Ñ":Ô":Ð;ñô ñ!ô !ÑˆF�Iõ $9ØØØ”ØÔ"ØÔ#ñ$ô $Ð ð  (Ÿ~š~Ñ/Ô/°#Ñ5¸¿ºÀ¹¼ÑGÐØ'ð Ø+�Ø+/Ô+=×+CÒ+CÀHÑ+MÔ+MÑ(� Øð AØ Ô,¨QÔ/°Ð@Ð@Ð@Ð@Øà!%×!3Ò!3Ø$ØØØØ ñ"ô "ÑˆH�hð  —~’~Ñ'Ô'¨#Ñ-°Ñ8ˆHØð Ø�ñàÔ  Ô# XÐ.Ð.r"   é    ÚllmúBaseLanguageModel | NoneÚmax_generation_lenÚkwargsr   c                óô  — 	 ddl m} n$# t          $ r}d}t          |¦  «        |‚d}~ww xY w|€ ||dd¬¦  «        }nŽt          ||¦  «        s'dt	          |¦  «        j        › d�}t          |¦  «        ‚t          |d	d
¦  «        sd}t          |¦  «        ‚t          |dd¦  «        }|�"||k    rt           
                    d||¦  «         t          |z  }t          |z  t          ¦   «         z  }	 | d|	|dœ|¤ŽS )aH  Creates a FlareChain from a language model.

        Args:
            llm: Language model to use.
            max_generation_len: Maximum length of the generated response.
            kwargs: Additional arguments to pass to the constructor.

        Returns:
            FlareChain class with the given language model.
        r   )Ú
ChatOpenAIz_OpenAI is required for FlareChain. Please install langchain-openai.pip install langchain-openaiNT)Úmax_completion_tokensr   Útemperaturez-FlareChain.from_llm requires ChatOpenAI; got ú.r   FzSProvided ChatOpenAI instance must be constructed with logprobs=True for FlareChain.r°   z�FlareChain.from_llm: supplied llm max_completion_tokens=%s differs from requested max_generation_len=%s; leaving model unchanged.)rd   re   r(   )Úlangchain_openair¯   rX   r   Útyper5   Ú	TypeErrorÚgetattrÚ
ValueErrorrY   Údebugr   r   r	   )
r)   rª   r¬   r­   r¯   ÚeÚmsgÚcurrent_maxre   Úquestion_gen_chains
             r    Úfrom_llmzFlareChain.from_llmù   s‡  € ð"	*Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	*ð 	*ð 	*ð/ð õ
 ˜cÑ"Ô"¨Ð)øøøøð	*øøøð ˆ;Ø�*Ø&8ØØðñ ô ˆCˆCõ ˜c :Ñ.Ô.ð %ð-Ý˜C‘y”yÔ)ð-ð -ð -ð õ   ‘n”nÐ$Ý˜3 
¨EÑ2Ô2ð &ð4ð õ ! ‘o”oÐ%Ý! #Ð'>ÀÑEÔEˆKØÐ&¨;Ð:LÒ+LÐ+LÝ—’ð/ð  Ø&ñô ð õ   #™ˆÝ6¸Ñ<½Ñ?PÔ?PÑPÐØˆsð 
Ø%7Ø)ð
ð 
ð ð
ð 
ð 	
s   ‚	 ‰
*“%¥*r4   )
rq   r+   r/   rr   r   rr   rs   r   r   rt   )r‡   r+   rs   r   r/   rr   r   rr   rˆ   rr   r   rt   rw   )r›   rœ   r�   rž   r   rœ   )r©   )rª   r«   r¬   rA   r­   r   r   rc   )r5   r6   r7   r8   r9   r   r   rg   r>   r@   rB   rl   rm   r;   r3   rp   r†   rš   r¨   r:   r½   r(   r"   r    rc   rc   a   sŠ  € € € € € € ðð ð 'Ð&Ð&Ñ&Ø>ØÐÐÑØEØ*/¨%Ð@TÐ*UÑ*UÔ*U€MÐUÐUÐUÑUØ?ØÐÐÑØHØ€HÐÐÐÑØJØ€MÐÐÐÑØDØ€NÐÐÐÑØ?Ø€HÐÐÐÑØ'Ø!%ÐÐ%Ð%Ð%Ñ%Ø*àðð ð ñ „Xðð ðð ð ñ „Xðð"ð "ð "ð "ð2$Rð $Rð $Rð $RðR :>ð1/ð 1/ð 1/ð 1/ð 1/ðf ð #%ð=
ð =
ð =
ð =
ñ „[ð=
ð =
ð =
r"   rc   )r   r   r   r   )r   r<   r   r=   r>   r?   r@   rA   rB   rA   r   r+   ))Ú
__future__r   ÚloggingrL   Úcollections.abcr   Útypingr   Úlangchain_core.callbacksr   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   Úlangchain_core.output_parsersr	   Úlangchain_core.promptsr
   Úlangchain_core.retrieversr   Úlangchain_core.runnablesr   Úpydanticr   Útyping_extensionsr   Úlangchain_classic.chains.baser   Ú&langchain_classic.chains.flare.promptsr   r   r   Úlangchain_classic.chains.llmr   Ú	getLoggerr5   rY   r!   r$   ra   rc   r(   r"   r    ú<module>rÏ      sü  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø -Ð -Ð -Ð -Ð -Ð -Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &à /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð
 2Ð 1Ð 1Ð 1Ð 1Ð 1à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð5ð 5ð 5ð 5ð 5˜Xñ 5ô 5ð 5ð"$@ð $@ð $@ð $@ðNV
ð V
ð V
ð V
ð V
�ñ V
ô V
ð V
ð V
ð V
r"   