§
    è˜ºhL#  ã                  óF  — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
m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m Z m!Z! d dl"m#Z#  G d„ de#¦  «        Z$ G d„ de$¦  «        Z% G d„ de#¦  «        Z&d#d „Z' G d!„ d"e¦  «        Z(dS )$é    )ÚannotationsN)Úabstractmethod)ÚAnyÚDictÚListÚOptionalÚSequenceÚTuple©ÚOpenAI)ÚBaseLanguageModel)Ú
Generation)ÚBasePromptTemplate)ÚField)ÚBaseRetriever)ÚCallbackManagerForChainRun)ÚChain)ÚPROMPTÚQUESTION_GENERATOR_PROMPTÚFinishedOutputParser)ÚLLMChainc                  óx   — e Zd ZU dZeZded<   edd„¦   «         Ze	dd„¦   «         Z
d	d
œdd„Zedd„¦   «         Zd	S )Ú_ResponseChainz.Base class for chains that generate responses.r   ÚpromptÚreturnÚboolc                ó   — dS ©NF© ©Úclss    úc/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/chains/flare/base.pyÚis_lc_serializablez!_ResponseChain.is_lc_serializable    ó   € àˆuó    ú	List[str]c                ó   — | j         j        S ©N)r   Úinput_variables©Úselfs    r"   Ú
input_keysz_ResponseChain.input_keys$   s   € àŒ{Ô*Ð*r%   N©Úrun_managerÚ_inputúDict[str, Any]r.   ú$Optional[CallbackManagerForChainRun]ú%Tuple[Sequence[str], Sequence[float]]c               ór   — |                       |g|¬¦  «        }|                      |j        d         ¦  «        S )Nr-   r   )ÚgenerateÚ_extract_tokens_and_log_probsÚgenerations)r+   r/   r.   Ú
llm_results       r"   Úgenerate_tokens_and_log_probsz,_ResponseChain.generate_tokens_and_log_probs(   s7   € ð —]’] F 8¸�]ÑEÔEˆ
Ø×1Ò1°*Ô2HÈÔ2KÑLÔLÐLr%   r6   úList[Generation]c                ó   — dS )z+Extract tokens and log probs from response.Nr   )r+   r6   s     r"   r5   z,_ResponseChain._extract_tokens_and_log_probs1   s   € € € r%   ©r   r   ©r   r&   )r/   r0   r.   r1   r   r2   ©r6   r9   r   r2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__Úclassmethodr#   Úpropertyr,   r8   r   r5   r   r%   r"   r   r      sµ   € € € € € € Ø8Ð8à!'€FÐ'Ð'Ð'Ñ'àðð ð ñ „[ðð ð+ð +ð +ñ „Xð+ð =Að	Mð Mð Mð Mð Mð Mð ð:ð :ð :ñ „^ð:ð :ð :r%   r   c                  ó@   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dd
„ZdS )Ú_OpenAIResponseChainz;Chain that generates responses from user input and context.c                 ó*   — t          dddid¬¦  «        S )Né    Úlogprobsé   r   ©Ú
max_tokensÚmodel_kwargsÚtemperaturer   r   r%   r"   ú<lambda>z_OpenAIResponseChain.<lambda><   s    € ¥Ø¨°Q¨ÀQð!
ñ !
ô !
€ r%   ©Údefault_factoryr   Úllmr6   r9   r   r2   c                óÐ   — g }g }|D ]\}|j         €t          ‚|                     |j         d         d         ¦  «         |                     |j         d         d         ¦  «         Œ]||fS )NrI   ÚtokensÚtoken_logprobs)Úgeneration_infoÚ
ValueErrorÚextend)r+   r6   rT   Ú	log_probsÚgens        r"   r5   z2_OpenAIResponseChain._extract_tokens_and_log_probsA   s}   € ð ˆØˆ	Øð 	Pð 	PˆCØÔ"Ð*Ý Ð Ø�MŠM˜#Ô-¨jÔ9¸(ÔCÑDÔDÐDØ×Ò˜SÔ0°Ô<Ð=MÔNÑOÔOÐOÐOØ�yÐ Ð r%   Nr=   )r>   r?   r@   rA   r   rR   rB   r5   r   r%   r"   rF   rF   8   sd   € € € € € € ØEÐEà�%ð
ð 
ðñ ô €Cð ð ð ñ ð
!ð 
!ð 
!ð 
!ð 
!ð 
!r%   rF   c                  óT   — e Zd ZU dZeZded<   	 ed
d„¦   «         Ze	dd„¦   «         Z
d	S )ÚQuestionGeneratorChainz4Chain that generates questions from uncertain spans.r   r   r   r   c                ó   — dS r   r   r    s    r"   r#   z)QuestionGeneratorChain.is_lc_serializableT   r$   r%   r&   c                ó
   — g d¢S )úInput keys for the chain.©Ú
user_inputÚcontextÚresponser   r*   s    r"   r,   z!QuestionGeneratorChain.input_keysX   s   € ð 5Ð4Ð4Ð4r%   Nr;   r<   )r>   r?   r@   rA   r   r   rB   rC   r#   rD   r,   r   r%   r"   r\   r\   N   sn   € € € € € € Ø>Ð>à!:€FÐ:Ð:Ð:Ñ:Ø(àðð ð ñ „[ðð ð5ð 5ð 5ñ „Xð5ð 5ð 5r%   r\   rT   úSequence[str]rY   úSequence[float]Úmin_probÚfloatÚmin_token_gapÚintÚnum_pad_tokensr   r&   c                ó¢  ‡ — t          j        t          j        |¦  «        |k     ¦  «        d         }ˆ 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   c                óJ   •— g | ]}t          j        d ‰|         ¦  «        ¯|‘Œ S )z\w)ÚreÚsearch)Ú.0ÚirT   s     €r"   ú
<listcomp>z)_low_confidence_spans.<locals>.<listcomp>f   s.   ø€ ÐBÐBÐB�Q¥b¤i°°v¸a´yÑ&AÔ&AÐBˆqÐBÐBÐBr%   rJ   éÿÿÿÿc                óP   •— g | ]"\  }}d                       ‰||…         ¦  «        ‘Œ#S )Ú )Újoin)ro   ÚstartÚendrT   s      €r"   rq   z)_low_confidence_spans.<locals>.<listcomp>p   s2   ø€ Ð?Ð?Ð?©:¨5°#ˆB�GŠG�F˜5 ˜9Ô%Ñ&Ô&Ð?Ð?Ð?r%   )ÚnpÚwhereÚexpÚlenÚ	enumerateÚappend)rT   rY   rf   rh   rj   Ú_low_idxÚlow_idxÚspansrp   Úidxrw   s   `          r"   Ú_low_confidence_spansr‚   ^   sþ   ø€ õ Œx�œ˜yÑ)Ô)¨HÒ4Ñ5Ô5°aÔ8€HØBÐ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˜Ñ$Ô$Ð$Ð$Ø?Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?r%   c                  ó,  — e Zd ZU dZded<   	  ee¬¦  «        Z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d4d„¦   «         Zed4d„¦   «         Zd5d#„Zd6d&„Z	 d7d8d,„Ze	 d9d:d3„¦   «         Zd'S );Ú
FlareChainzTChain that combines a retriever, a question generator,
    and a response generator.r\   Úquestion_generator_chainrP   r   Úresponse_chainr   Úoutput_parserr   Ú	retrievergš™™™™™É?rg   rf   é   ri   rh   é   rj   é
   Úmax_iterTr   Ústart_with_retrievalr   r&   c                ó   — dgS )r_   ra   r   r*   s    r"   r,   zFlareChain.input_keysŠ   s   € ð ˆ~Ðr%   c                ó   — dgS )zOutput keys for the chain.rc   r   r*   s    r"   Úoutput_keyszFlareChain.output_keys�   s   € ð ˆ|Ðr%   Ú	questionsra   Ústrrc   Ú_run_managerr   úTuple[str, bool]c                óN  — |                      ¦   «         }g }|D ]/}|                     | j                             |¦  «        ¦  «         Œ0d                     d„ |D ¦   «         ¦  «        }| j                             ||||¬¦  «        }	| j                             |	¦  «        \  }
}|
|fS )Nz

c              3  ó$   K  — | ]}|j         V — Œd S r(   )Úpage_content)ro   Úds     r"   ú	<genexpr>z,FlareChain._do_generation.<locals>.<genexpr>Ÿ   s$   è è € Ð;Ð;°˜aœnÐ;Ð;Ð;Ð;Ð;Ð;r%   )ra   rb   rc   Ú	callbacks)	Ú	get_childrX   rˆ   Úget_relevant_documentsru   r†   Úpredictr‡   Úparse)r+   r‘   ra   rc   r“   rš   ÚdocsÚquestionrb   ÚresultÚmarginalÚfinisheds               r"   Ú_do_generationzFlareChain._do_generation”   sÁ   € ð !×*Ò*Ñ,Ô,ˆ	ØˆØ!ð 	Ið 	IˆHØ�KŠK˜œ×=Ò=¸hÑGÔGÑHÔHÐHÐHØ—+’+Ð;Ð;°dÐ;Ñ;Ô;Ñ;Ô;ˆØÔ$×,Ò,Ø!ØØØð	 -ñ 
ô 
ˆð "Ô/×5Ò5°fÑ=Ô=Ñˆ�(Ø˜Ð!Ð!r%   Úlow_confidence_spansÚinitial_responsec                ó  ‡ ‡‡— ˆˆfd„|D ¦   «         }|                      ¦   «         }‰ j                             ||¬¦  «        }ˆ fd„|D ¦   «         }	|                     d|	› �dd¬¦  «         ‰                      |	‰||¦  «        S )Nc                ó   •— g | ]}‰‰|d œ‘Œ	S ))ra   Úcurrent_responseÚuncertain_spanr   )ro   Úspanr¦   ra   s     €€r"   rq   z,FlareChain._do_retrieval.<locals>.<listcomp>±   s;   ø€ ð 
ð 
ð 
ð ð	 )Ø$4Ø"&ðð ð
ð 
ð 
r%   )rš   c                ó@   •— g | ]}|‰j         j        d                   ‘ŒS )r   )r…   r�   )ro   Úoutputr+   s     €r"   rq   z,FlareChain._do_retrieval.<locals>.<listcomp>½   s9   ø€ ð 
ð 
ð 
àð �4Ô0Ô<¸QÔ?Ô@ð
ð 
ð 
r%   zGenerated Questions: Úyellowú
©Úcolorrw   )r›   r…   ÚapplyÚon_textr¤   )
r+   r¥   r“   ra   rc   r¦   Úquestion_gen_inputsrš   Úquestion_gen_outputsr‘   s
   `  ` `    r"   Ú_do_retrievalzFlareChain._do_retrieval©   sÞ   øøø€ ð
ð 
ð 
ð 
ð 
ð -ð
ñ 
ô 
Ðð !×*Ò*Ñ,Ô,ˆ	Ø#Ô<×BÒBØ¨9ð  Cñ  
ô  
Ðð
ð 
ð 
ð 
à.ð
ñ 
ô 
ˆ	ð 	×ÒØ/ IÐ/Ð/°xÀTð 	ñ 	
ô 	
ð 	
ð ×"Ò" 9¨j¸(ÀLÑQÔQÐQr%   NÚinputsr0   r.   r1   c                ó¢  — |pt          j        ¦   «         }|| j        d                  }d}t          | j        ¦  «        D �]}|                     d|› �dd¬¦  «         |d|dœ}| j                             ||¬¦  «        \  }}	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   rt   zCurrent Response: Úbluer¯   r°   r`   r-   ú )r   Úget_noop_managerr,   ÚrangerŒ   r³   r†   r8   r‚   rf   rh   rj   Ústripru   r‡   rž   r�   r¶   )r+   r·   r.   r“   ra   rc   rp   r/   rT   rY   r¥   r¦   Úfinal_responser£   r¢   s                  r"   Ú_callzFlareChain._callÆ   s±  € ð
 #ÐSÕ&@Ô&QÑ&SÔ&Sˆà˜DœO¨AÔ.Ô/ˆ
àˆå�t”}Ñ%Ô%ð  	ñ  	ˆAØ× Ò Ø/ XÐ/Ð/°vÀ4ð !ñ ô ð ð %/¸2È8ÐTÐTˆFØ $Ô 3× QÒ QØ Lð !Rñ !ô !ÑˆF�Iõ $9ØØØ”ØÔ"ØÔ#ñ$ô $Ð ð  (Ÿ~š~Ñ/Ô/°#Ñ5¸¿ºÀ¹¼ÑGÐØ'ð Ø+�Ø+/Ô+=×+CÒ+CÀHÑ+MÔ+MÑ(� Øð AØ Ô,¨QÔ/°Ð@Ð@Ð@Ð@Øà!%×!3Ò!3Ø$ØØØØ ñ"ô "ÑˆH�hð  —~’~Ñ'Ô'¨#Ñ-°Ñ8ˆHØð Ø�ñàÔ  Ô# XÐ.Ð.r%   rH   rR   r   Úmax_generation_lenÚkwargsr   c                ó€   — t          |¬¦  «        }t          |ddid¬¦  «        }t          |¬¦  «        } | d||dœ|¤ŽS )aJ  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.
        )rR   rI   rJ   r   rK   )r…   r†   r   )r\   r   rF   )r!   rR   rÀ   rÁ   Úquestion_gen_chainÚresponse_llmr†   s          r"   Úfrom_llmzFlareChain.from_llmô   su   € õ 4¸Ð<Ñ<Ô<ÐÝØ)¸ÀQ¸ÐUVð
ñ 
ô 
ˆõ .°,Ð?Ñ?Ô?ˆØˆsð 
Ø%7Ø)ð
ð 
ð ð
ð 
ð 	
r%   r<   )
r‘   r&   ra   r’   rc   r’   r“   r   r   r”   )r¥   r&   r“   r   ra   r’   rc   r’   r¦   r’   r   r”   r(   )r·   r0   r.   r1   r   r0   )rH   )rR   r   rÀ   ri   rÁ   r   r   r„   )r>   r?   r@   rA   rB   r   rF   r†   r   r‡   rf   rh   rj   rŒ   r�   rD   r,   r�   r¤   r¶   r¿   rC   rÅ   r   r%   r"   r„   r„   s   sœ  € € € € € € ð!ð !ð 5Ð4Ð4Ñ4Ø>Ø%* UÐ;OÐ%PÑ%PÔ%P€NÐPÐPÐPÑPØEØ*/¨%Ð@TÐ*UÑ*UÔ*U€MÐUÐUÐUÑUØ?ØÐÐÑØHØ€HÐÐÐÑØJØ€MÐÐÐÑØDØ€NÐÐÐÑØ?Ø€HÐÐÐÑØ'Ø!%ÐÐ%Ð%Ð%Ñ%Ø*àðð ð ñ „Xðð ðð ð ñ „Xðð"ð "ð "ð "ð*Rð Rð Rð Rð@ =Að,/ð ,/ð ,/ð ,/ð ,/ð\ à?Að
ð 
ð 
ð 
ñ „[ð
ð 
ð 
r%   r„   )rT   rd   rY   re   rf   rg   rh   ri   rj   ri   r   r&   ))Ú
__future__r   rm   Úabcr   Útypingr   r   r   r   r	   r
   Únumpyrx   Úlangchain_community.llms.openair   Úlangchain_core.language_modelsr   Úlangchain_core.outputsr   Úlangchain_core.promptsr   Úlangchain_core.pydantic_v1r   Úlangchain_core.retrieversr   Úlangchain.callbacks.managerr   Úlangchain.chains.baser   Úlangchain.chains.flare.promptsr   r   r   Úlangchain.chains.llmr   r   rF   r\   r‚   r„   r   r%   r"   ú<module>rÔ      s&  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ø -Ð -Ð -Ð -Ð -Ð -Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð
 *Ð )Ð )Ð )Ð )Ð )ð:ð :ð :ð :ð :�Xñ :ô :ð :ð:!ð !ð !ð !ð !˜>ñ !ô !ð !ð,5ð 5ð 5ð 5ð 5˜Xñ 5ô 5ð 5ð @ð @ð @ð @ð*X
ð X
ð X
ð X
ð X
�ñ X
ô X
ð X
ð X
ð X
r%   