Ë
    ´Œjò<  ã                  óJ  — d Z 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
 ddlmZ ddlmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1  eddd¬«       G d„ de1«      «       Z2dd„Z3y)z2Chain that just formats a prompt and calls an LLM.é    )ÚannotationsN)ÚSequence)ÚAnyÚOptionalÚUnionÚcast)Ú
deprecated)ÚAsyncCallbackManagerÚAsyncCallbackManagerForChainRunÚCallbackManagerÚCallbackManagerForChainRunÚ	Callbacks)ÚBaseLanguageModelÚLanguageModelInput)ÚBaseMessage)ÚBaseLLMOutputParserÚStrOutputParser)ÚChatGenerationÚ
GenerationÚ	LLMResult)ÚPromptValue)ÚBasePromptTemplateÚPromptTemplate)ÚRunnableÚRunnableBindingÚRunnableBranchÚRunnableWithFallbacks)ÚDynamicRunnable)Úget_colored_text)Ú
ConfigDictÚField)ÚChainz0.1.17z&RunnableSequence, e.g., `prompt | llm`z1.0)ÚsinceÚalternativeÚremovalc                  ó>  — e Zd ZU dZed+d„«       Zded<   	 ded<   	 dZd	ed
<    ee	¬«      Z
ded<   	 dZded<   	  ee¬«      Zded<    edd¬«      Zed,d„«       Zed,d„«       Z	 d-	 	 	 	 	 d.d„Z	 d-	 	 	 	 	 d/d„Z	 d-	 	 	 	 	 d0d„Z	 d-	 	 	 	 	 d1d„Z	 d-	 	 	 	 	 d2d„Z	 d-	 	 	 	 	 d3d„Z	 d-	 	 	 	 	 d3d„Zed4d„«       Zd5d„Z	 d-	 	 	 	 	 d6d „Zd-d7d!„Zd-d7d"„Z	 d-	 	 	 	 	 d8d#„Z	 d-	 	 	 	 	 d9d$„Z 	 d-	 	 	 	 	 d:d%„Z!	 	 	 	 d;d&„Z"	 d-	 	 	 	 	 d:d'„Z#ed4d(„«       Z$ed<d)„«       Z%d=d*„Z&y)>ÚLLMChaina^  Chain to run queries against LLMs.

    This class is deprecated. See below for an example implementation using
    LangChain runnables:

        .. code-block:: python

            from langchain_core.output_parsers import StrOutputParser
            from langchain_core.prompts import PromptTemplate
            from langchain_openai import OpenAI

            prompt_template = "Tell me a {adjective} joke"
            prompt = PromptTemplate(
                input_variables=["adjective"], template=prompt_template
            )
            llm = OpenAI()
            chain = prompt | llm | StrOutputParser()

            chain.invoke("your adjective here")

    Example:
        .. code-block:: python

            from langchain.chains import LLMChain
            from langchain_community.llms import OpenAI
            from langchain_core.prompts import PromptTemplate
            prompt_template = "Tell me a {adjective} joke"
            prompt = PromptTemplate(
                input_variables=["adjective"], template=prompt_template
            )
            llm = LLMChain(llm=OpenAI(), prompt=prompt)
    Úboolc                 ó   — y)NT© ©Úselfs    ú^/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/chains/llm.pyÚis_lc_serializablezLLMChain.is_lc_serializableN   s   € àó    r   ÚpromptzSUnion[Runnable[LanguageModelInput, str], Runnable[LanguageModelInput, BaseMessage]]ÚllmÚtextÚstrÚ
output_key)Údefault_factoryr   Úoutput_parserTÚreturn_final_onlyÚdictÚ
llm_kwargsÚforbid)Úarbitrary_types_allowedÚextrac                ó.   — | j                   j                  S )zJWill be whatever keys the prompt expects.

        :meta private:
        )r0   Úinput_variablesr+   s    r-   Ú
input_keyszLLMChain.input_keysh   s   € ð �{‰{×*Ñ*Ð*r/   c                óP   — | j                   r| j                  gS | j                  dgS )z=Will always return text key.

        :meta private:
        Úfull_generation)r7   r4   r+   s    r-   Úoutput_keyszLLMChain.output_keysp   s*   € ð ×!Ò!Ø—O‘OÐ$Ð$Ø—‘Ð!2Ð3Ð3r/   Nc                óR   — | j                  |g|¬«      }| j                  |«      d   S ©N©Úrun_managerr   )ÚgenerateÚcreate_outputs©r,   ÚinputsrF   Úresponses       r-   Ú_callzLLMChain._callz   s.   € ð
 —=‘= & °{�=ÓCˆØ×"Ñ" 8Ó,¨QÑ/Ð/r/   c                ó*  — | j                  ||¬«      \  }}|r|j                  «       nd}t        | j                  t        «      r* | j                  j
                  ||fd|i| j                  ¤ŽS  | j                  j                  dd|i| j                  ¤Žj                  t        t        |«      d|i«      }g }|D ]K  }t        |t        «      r|j                  t        |¬«      g«       Œ0|j                  t        |¬«      g«       ŒM t        |¬«      S ©	z Generate LLM result from inputs.rE   NÚ	callbacksÚstop)Úmessage)r2   )Úgenerationsr*   )Úprep_promptsÚ	get_childÚ
isinstancer1   r   Úgenerate_promptr9   ÚbindÚbatchr   Úlistr   Úappendr   r   r   ©	r,   Ú
input_listrF   ÚpromptsrP   rO   ÚresultsrR   Úress	            r-   rG   zLLMChain.generate‚   s  € ð ×)Ñ)¨*À+Ð)ÓN‰ˆ�Ù/:�K×)Ñ)Ô+Àˆ	Ü�d—h‘hÔ 1Ô2Ø+�4—8‘8×+Ñ+ØØñð $ðð —/‘/ñ	ð ð  �$—(‘(—-‘-Ñ= TÐ=¨T¯_©_Ñ=×CÑCÜ”�wÓØ˜)Ð$ó
ˆð /1ˆÛˆCÜ˜#œ{Ô+Ø×"Ñ"¤N¸3Ô$?Ð#@ÕAà×"Ñ"¤J°CÔ$8Ð#9Õ:ð	 ô
  [Ô1Ð1r/   c              ƒ  óp  K  — | j                  ||¬«      ƒ d{  –—† \  }}|r|j                  «       nd}t        | j                  t        «      r2 | j                  j
                  ||fd|i| j                  ¤Žƒ d{  –—† S  | j                  j                  dd|i| j                  ¤Žj                  t        t        |«      d|i«      ƒ d{  –—† }g }|D ]K  }t        |t        «      r|j                  t        |¬«      g«       Œ0|j                  t        |¬«      g«       ŒM t        |¬«      S 7 �Œ7 Œµ7 Œg­wrN   )Úaprep_promptsrT   rU   r1   r   Úagenerate_promptr9   rW   Úabatchr   rY   r   rZ   r   r   r   r[   s	            r-   Ú	ageneratezLLMChain.agenerate�   s+  è ø€ ð #×0Ñ0°ÈÐ0ÓU×U‰ˆ�Ù/:�K×)Ñ)Ô+Àˆ	Ü�d—h‘hÔ 1Ô2Ø2˜Ÿ™×2Ñ2ØØñð $ðð —/‘/ñ	÷ ð ð &˜Ÿ™Ÿ™ÑC¨4ÐC°4·?±?ÑC×JÑJÜ”�wÓØ˜)Ð$ó
÷ 
ˆð /1ˆÛˆCÜ˜#œ{Ô+Ø×"Ñ"¤N¸3Ô$?Ð#@ÕAà×"Ñ"¤J°CÔ$8Ð#9Õ:ð	 ô
  [Ô1Ð1ð' Vùðøð
ús6   ‚D6™D/šA"D6Á<D2Á=AD6ÃD4ÃA#D6Ä2D6Ä4D6c                óÄ  — d}t        |«      dk(  rg |fS d|d   v r|d   d   }g }|D ]®  }| j                  j                  D �ci c]  }|||   “Œ
 }} | j                  j                  d	i |¤Ž}t	        |j                  «       d«      }	d|	z   }
|r|j                  |
d| j                  ¬«       d|v r|d   |k7  rd}t        |«      ‚|j                  |«       Œ° ||fS c c}w ©
zPrepare prompts from inputs.Nr   rP   ÚgreenzPrompt after formatting:
Ú
)ÚendÚverbosez=If `stop` is present in any inputs, should be present in all.r*   ©
Úlenr0   r>   Úformat_promptr   Ú	to_stringÚon_textrj   Ú
ValueErrorrZ   ©r,   r\   rF   rP   r]   rJ   ÚkÚselected_inputsr0   Ú_colored_textÚ_textÚmsgs               r-   rS   zLLMChain.prep_prompts¸   s  € ð ˆÜˆz‹?˜aÒØ�t�8ˆOØ�Z ‘]Ñ"Ø˜a‘= Ñ(ˆDØˆÛ ˆFØ59·[±[×5PÒ5PÓQÑ5P°˜q &¨¡)™|Ð5PˆOÐQØ.�T—[‘[×.Ñ.ÑA°ÑAˆFÜ,¨V×-=Ñ-=Ó-?ÀÓIˆMØ0°=Ñ@ˆEÙØ×#Ñ# E¨t¸T¿\¹\Ð#ÔJØ˜Ñ F¨6¡N°dÒ$:ØU�Ü  “oÐ%Ø�N‰N˜6Õ"ð !ð ˜ˆ}Ðùò Rs   ÁCc              ƒ  óà  K  — d}t        |«      dk(  rg |fS d|d   v r|d   d   }g }|D ]¶  }| j                  j                  D �ci c]  }|||   “Œ
 }} | j                  j                  d	i |¤Ž}t	        |j                  «       d«      }	d|	z   }
|r&|j                  |
d| j                  ¬«      ƒ d{  –—†  d|v r|d   |k7  rd}t        |«      ‚|j                  |«       Œ¸ ||fS c c}w 7 Œ9­wrf   rk   rq   s               r-   ra   zLLMChain.aprep_promptsÑ   s  è ø€ ð ˆÜˆz‹?˜aÒØ�t�8ˆOØ�Z ‘]Ñ"Ø˜a‘= Ñ(ˆDØˆÛ ˆFØ59·[±[×5PÒ5PÓQÑ5P°˜q &¨¡)™|Ð5PˆOÐQØ.�T—[‘[×.Ñ.ÑA°ÑAˆFÜ,¨V×-=Ñ-=Ó-?ÀÓIˆMØ0°=Ñ@ˆEÙØ!×)Ñ)¨%°TÀ4Ç<Á<Ð)ÓP×PÐPØ˜Ñ F¨6¡N°dÒ$:ØU�Ü  “oÐ%Ø�N‰N˜6Õ"ð !ð ˜ˆ}Ðùò Rð
 Qús   ‚AC.ÁC'ÁA C.Â2C,Â3:C.c                óZ  — t        j                  || j                  | j                  «      }|j	                  dd|i| j                  «       ¬«      }	 | j                  ||¬«      }| j                  |«      }|j                  d|i«       |S # t        $ r}|j                  |«       ‚ d}~ww xY w©z0Utilize the LLM generate method for speed gains.Nr\   )ÚnamerE   Úoutputs)r   Ú	configurerO   rj   Úon_chain_startÚget_namerG   ÚBaseExceptionÚon_chain_errorrH   Úon_chain_end©r,   r\   rO   Úcallback_managerrF   rK   Úer{   s           r-   ÚapplyzLLMChain.applyê   sµ   € ô +×4Ñ4ØØ�N‰NØ�L‰Ló
Ðð
 '×5Ñ5ØØ˜:Ð&Ø—‘“ð 6ó 
ˆð
	Ø—}‘} Z¸[�}ÓIˆHð ×%Ñ% hÓ/ˆØ× Ñ  )¨WÐ!5Ô6Øˆøô ò 	Ø×&Ñ& qÔ)Øûð	ús   ÁB
 Â
	B*ÂB%Â%B*c              ƒ  ó°  K  — t        j                  || j                  | j                  «      }|j	                  dd|i| j                  «       ¬«      ƒ d{  –—† }	 | j                  ||¬«      ƒ d{  –—† }| j                  |«      }|j                  d|i«      ƒ d{  –—†  |S 7 ŒN7 Œ4# t        $ r }|j                  |«      ƒ d{  –—†7   ‚ d}~ww xY w7 Œ6­wry   )r
   r|   rO   rj   r}   r~   rd   r   r€   rH   r�   r‚   s           r-   ÚaapplyzLLMChain.aapply  sÜ   è ø€ ô 0×9Ñ9ØØ�N‰NØ�L‰Ló
Ðð
 -×;Ñ;ØØ˜:Ð&Ø—‘“ð <ó 
÷ 
ˆð
	Ø!Ÿ^™^¨JÀK˜^ÓP×PˆHð ×%Ñ% hÓ/ˆØ×&Ñ&¨	°7Ð';Ó<×<Ð<Øˆð
øð QùÜò 	Ø×,Ñ,¨QÓ/×/Ñ/Øûð	úð 	=ús`   ‚ACÁB$ÁCÁB( Á1B&Á2B( Á6'CÂCÂCÂ&B( Â(	CÂ1CÃCÃCÃCÃCc                ó   — | j                   S ©N©r4   r+   s    r-   Ú_run_output_keyzLLMChain._run_output_key  s   € à�‰Ðr/   c                ó  — |j                   D �cg c]+  }| j                  | j                  j                  |«      d|i‘Œ- }}| j                  r(|D �cg c]  }| j                  || j                     i‘Œ }}|S c c}w c c}w )zCreate outputs from response.rA   )rR   r4   r6   Úparse_resultr7   )r,   Ú
llm_resultÚ
generationÚresultÚrs        r-   rH   zLLMChain.create_outputs   s�   € ð )×4Ò4ó
ñ 5�
ð —‘ ×!3Ñ!3×!@Ñ!@ÀÓ!LØ! :òð 5ð 	ð 
ð ×!Ò!ÙEKÓLÁVÀ�t—‘¨¨$¯/©/Ñ(:Ò;ÀVˆFÐLØˆùò
ùò Ms   �0A7Á"A<c              ƒ  ón   K  — | j                  |g|¬«      ƒ d {  –—† }| j                  |«      d   S 7 Œ­wrD   )rd   rH   rI   s       r-   Ú_acallzLLMChain._acall.  s;   è ø€ ð
 Ÿ™¨¨¸k˜ÓJ×JˆØ×"Ñ" 8Ó,¨QÑ/Ð/ð Kús   ‚5š3›5c                ó0   —  | ||¬«      | j                      S )áS  Format prompt with kwargs and pass to LLM.

        Args:
            callbacks: Callbacks to pass to LLMChain
            **kwargs: Keys to pass to prompt template.

        Returns:
            Completion from LLM.

        Example:
            .. code-block:: python

                completion = llm.predict(adjective="funny")
        ©rO   rŠ   ©r,   rO   Úkwargss      r-   ÚpredictzLLMChain.predict6  s   € ñ �F iÔ0°·±ÑAÐAr/   c              ‹  ó^   K  — | j                  ||¬«      ƒ d{  –—† | j                     S 7 Œ­w)r•   r–   N)Úacallr4   r—   s      r-   ÚapredictzLLMChain.apredictG  s*   è ø€ ð —j‘j °9�jÓ=×=¸t¿¹ÑOÐOÐ=ús   ‚-™+š-c                óÒ   — t        j                  dd¬«        | j                  dd|i|¤Ž}| j                  j                  �%| j                  j                  j                  |«      S |S )z(Call predict and then parse the results.z_The predict_and_parse method is deprecated, instead pass an output parser directly to LLMChain.é   ©Ú
stacklevelrO   r*   )ÚwarningsÚwarnr™   r0   r6   Úparse©r,   rO   r˜   r�   s       r-   Úpredict_and_parsezLLMChain.predict_and_parseX  sc   € ô 	�‰ðBàõ	
ð
 �—‘Ñ<¨	Ð<°VÑ<ˆØ�;‰;×$Ñ$Ð0Ø—;‘;×,Ñ,×2Ñ2°6Ó:Ð:Øˆr/   c              ‹  óî   K  — t        j                  dd¬«        | j                  dd|i|¤Žƒ d{  –—† }| j                  j                  �%| j                  j                  j                  |«      S |S 7 ŒA­w)z)Call apredict and then parse the results.z`The apredict_and_parse method is deprecated, instead pass an output parser directly to LLMChain.rž   rŸ   rO   Nr*   )r¡   r¢   rœ   r0   r6   r£   r¤   s       r-   Úapredict_and_parsezLLMChain.apredict_and_parseh  sp   è ø€ ô 	�‰ðBàõ	
ð
 %�t—}‘}ÑC¨yÐC¸FÑC×CˆØ�;‰;×$Ñ$Ð0Ø—;‘;×,Ñ,×2Ñ2°6Ó:Ð:Øˆð Dús   ‚/A5±A3²AA5c                óx   — t        j                  dd¬«       | j                  ||¬«      }| j                  |«      S )ú&Call apply and then parse the results.z]The apply_and_parse method is deprecated, instead pass an output parser directly to LLMChain.rž   rŸ   r–   )r¡   r¢   r…   Ú_parse_generation©r,   r\   rO   r�   s       r-   Úapply_and_parsezLLMChain.apply_and_parsex  s>   € ô 	�‰ðBàõ	
ð
 —‘˜J°)�Ó<ˆØ×%Ñ% fÓ-Ð-r/   c                ó¼   — | j                   j                  �@|D �cg c]4  }| j                   j                  j                  || j                     «      ‘Œ6 c}S |S c c}w r‰   )r0   r6   r£   r4   )r,   r�   r_   s      r-   rª   zLLMChain._parse_generation†  sa   € ð �;‰;×$Ñ$Ð0ñ &óá%�Cð —‘×)Ñ)×/Ñ/°°D·O±OÑ0DÕEØ%ñð ð Ðùò	s   ›9Ac              ƒ  ó”   K  — t        j                  dd¬«       | j                  ||¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)r©   z^The aapply_and_parse method is deprecated, instead pass an output parser directly to LLMChain.rž   rŸ   r–   N)r¡   r¢   r‡   rª   r«   s       r-   Úaapply_and_parsezLLMChain.aapply_and_parse‘  sK   è ø€ ô 	�‰ðBàõ	
ð
 —{‘{ :¸�{ÓC×CˆØ×%Ñ% fÓ-Ð-ð Dús   ‚.A°A±Ac                 ó   — y)NÚ	llm_chainr*   r+   s    r-   Ú_chain_typezLLMChain._chain_typeŸ  s   € àr/   c                ó@   — t        j                  |«      } | ||¬«      S )z&Create LLMChain from LLM and template.)r1   r0   )r   Úfrom_template)Úclsr1   ÚtemplateÚprompt_templates       r-   Úfrom_stringzLLMChain.from_string£  s!   € ô )×6Ñ6°xÓ@ˆÙ�s ?Ô3Ð3r/   c                óJ   — t        | j                  «      j                  |«      S r‰   )Ú_get_language_modelr1   Úget_num_tokens)r,   r2   s     r-   Ú_get_num_tokenszLLMChain._get_num_tokens©  s   € Ü" 4§8¡8Ó,×;Ñ;¸DÓAÐAr/   )Úreturnr(   )r½   z	list[str]r‰   )rJ   údict[str, Any]rF   ú$Optional[CallbackManagerForChainRun]r½   údict[str, str])r\   úlist[dict[str, Any]]rF   r¿   r½   r   )r\   rÁ   rF   ú)Optional[AsyncCallbackManagerForChainRun]r½   r   )r\   rÁ   rF   r¿   r½   ú-tuple[list[PromptValue], Optional[list[str]]])r\   rÁ   rF   rÂ   r½   rÃ   )r\   rÁ   rO   r   r½   úlist[dict[str, str]])r½   r3   )rŽ   r   r½   rÁ   )rJ   r¾   rF   rÂ   r½   rÀ   )rO   r   r˜   r   r½   r3   )rO   r   r˜   r   r½   z%Union[str, list[str], dict[str, Any]])rO   r   r˜   r   r½   z%Union[str, list[str], dict[str, str]])r\   rÁ   rO   r   r½   ú/Sequence[Union[str, list[str], dict[str, str]]])r�   rÄ   r½   rÅ   )r1   r   r¶   r3   r½   r'   )r2   r3   r½   Úint)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr.   Ú__annotations__r4   r!   r   r6   r7   r8   r9   r    Úmodel_configÚpropertyr?   rB   rL   rG   rd   rS   ra   r…   r‡   r‹   rH   r“   r™   rœ   r¥   r§   r¬   rª   r¯   r²   r¸   r¼   r*   r/   r-   r'   r'   '   sê  … ñðB òó ðð ÓØð
ó ð "Ø€J�ÓÙ).¸Ô)O€MÐ&ÓOðð #Ð�tÓ"ðPá¨TÔ2€J�Ó2áØ $Øô€Lð
 ò+ó ð+ð ò4ó ð4ð =Að0àð0ð :ð0ð 
ó	0ð =Að2à(ð2ð :ð2ð 
ó	2ð< BFð2à(ð2ð ?ð2ð 
ó	2ð< =Aðà(ðð :ðð 
7ó	ð8 BFðà(ðð ?ðð 
7ó	ð8  $ðà(ðð ðð 
ó	ð8  $ðà(ðð ðð 
ó	ð2 òó ðóð" BFð0àð0ð ?ð0ð 
ó	0ôBô"Pð&  $ðàðð ðð 
/ó	ð$  $ðàðð ðð 
/ó	ð&  $ð.à(ð.ð ð.ð 
9ó	.ð	à(ð	ð 
9ó	ð  $ð.à(ð.ð ð.ð 
9ó	.ð òó ðð ò4ó ð4ô
Br/   r'   c                óB  — t        | t        «      r| S t        | t        «      rt        | j                  «      S t        | t
        «      rt        | j                  «      S t        | t        t        f«      rt        | j                  «      S dt        | «      › �}t        |«      ‚)NzAUnable to extract BaseLanguageModel from llm_like object of type )rU   r   r   rº   Úboundr   Úrunnabler   r   ÚdefaultÚtyperp   )Úllm_likerv   s     r-   rº   rº   ­  sŠ   € Ü�(Ô-Ô.ØˆÜ�(œOÔ,Ü" 8§>¡>Ó2Ð2Ü�(Ô1Ô2Ü" 8×#4Ñ#4Ó5Ð5Ü�(œ^¬_Ð=Ô>Ü" 8×#3Ñ#3Ó4Ð4à
KÜ�‹>Ð
ð	ð ô �S‹/Ðr/   )rÔ   r   r½   r   )4rÊ   Ú
__future__r   r¡   Úcollections.abcr   Útypingr   r   r   r   Úlangchain_core._apir	   Úlangchain_core.callbacksr
   r   r   r   r   Úlangchain_core.language_modelsr   r   Úlangchain_core.messagesr   Úlangchain_core.output_parsersr   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.prompt_valuesr   Úlangchain_core.promptsr   r   Úlangchain_core.runnablesr   r   r   r   Ú%langchain_core.runnables.configurabler   Úlangchain_core.utils.inputr   Úpydanticr    r!   Úlangchain.chains.baser"   r'   rº   r*   r/   r-   Ú<module>rå      s‹   ðÙ 8å "ã Ý $ß -Ó -å *÷õ ÷õ 0ß Nß HÑ HÝ 4ß E÷ó õ BÝ 7ß &å 'ñ Ø
Ø8Øôô
~Bˆuó ~Bóð
~BôBr/   