§
    æ˜ºh÷)  ã                  óò   — d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	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 erd dlZe
d         Z G d„ d	e¦  «        Z ej        e¦  «        Z G d
„ de¦  «        ZdS )é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚDictÚListÚLiteralÚOptionalÚ	TypedDictÚUnionÚoverload)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚPrivateAttr)ÚhttpÚgrpcc                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   ded<   dS )ÚIdentifyingParamsz3Parameters for identifying a model as a typed dict.ÚstrÚ
model_nameúOptional[str]Úmodel_idÚ
server_urlzOptional[ServerType]Úserver_typeÚboolÚembeddedúDict[str, Any]Ú
llm_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úh/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/openllm.pyr   r       sZ   € € € € € € Ø=Ð=à€O€O�OØÐÐÑØÐÐÑØ%Ð%Ð%Ñ%Ø€N€N�NØÐÐÑÐÐr%   r   c                  ó˜  ‡ — e Zd ZU dZ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<   	 ded<   	  e
d¬¦  «        Zded<    e
d¬¦  «        Zded<    G d„ d¦  «        Ze	 d1dddœd2d„¦   «         Zedddœd3d „¦   «         Z	 d4dddd
d!œd5ˆ fd"„Zed6d$„¦   «         Zed7d&„¦   «         Zed8d'„¦   «         Z	 	 d9d:d.„Z	 	 d9d;d0„Zˆ xZS )<ÚOpenLLMaË  OpenLLM, supporting both in-process model
    instance and remote OpenLLM servers.

    To use, you should have the openllm library installed:

    .. code-block:: bash

        pip install openllm

    Learn more at: https://github.com/bentoml/openllm

    Example running an LLM model locally managed by OpenLLM:
        .. code-block:: python

            from langchain_community.llms import OpenLLM
            llm = OpenLLM(
                model_name='flan-t5',
                model_id='google/flan-t5-large',
            )
            llm("What is the difference between a duck and a goose?")

    For all available supported models, you can run 'openllm models'.

    If you have a OpenLLM server running, you can also use it remotely:
        .. code-block:: python

            from langchain_community.llms import OpenLLM
            llm = OpenLLM(server_url='http://localhost:3000')
            llm("What is the difference between a duck and a goose?")
    Nr   r   r   r   r   Ú
ServerTyper   Tr   r   r   r   )ÚdefaultzOptional[openllm.LLMRunner]Ú_runnerzAUnion[openllm.client.HTTPClient, openllm.client.GrpcClient, None]Ú_clientc                  ó   — e Zd ZdZdS )úOpenLLM.ConfigÚforbidN)r   r    r!   Úextrar$   r%   r&   ÚConfigr.   b   s   € € € € € Øˆˆˆr%   r1   .)r   r   úLiteral[True, False]r   ÚreturnÚNonec               ó   — d S ©Nr$   )Úselfr   r   r   r   s        r&   Ú__init__zOpenLLM.__init__e   s	   € ð 	ˆr%   )r   r   r   úLiteral['grpc', 'http']c               ó   — d S r6   r$   )r7   r   r   r   s       r&   r8   zOpenLLM.__init__p   s	   € ð 	ˆr%   )r   r   r   r   c          	     óô  •— 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY w|pi }|�~t                               d¦  «         |€|�
J d¦   «         ‚|dk    r|j        j        n|j        j        }	 |	|¦  «        }
 t          ¦   «         j        di |||dœ¤Ž d | _	        |
| _
        d S |€
J d¦   «         ‚ |j        d|||dd	œ|¤Ž} t          ¦   «         j        di ||||d
œ¤Ž d | _
        || _	        d S )Nr   zMCould not import openllm. Make sure to install it with 'pip install openllm.'z4'server_url' is provided, returning a openllm.ClientzB'server_url' and {'model_id', 'model_name'} are mutually exclusiver   )r   r   r   z)Must provide 'model_name' or 'server_url'T)r   r   Ú
init_localÚensure_available)r   r   r   r   r$   )ÚopenllmÚImportErrorÚloggerÚdebugÚclientÚ
HTTPClientÚ
GrpcClientÚsuperr8   r+   r,   ÚRunner)r7   r   r   r   r   r   r   r>   ÚeÚ
client_clsrB   ÚrunnerÚ	__class__s               €r&   r8   zOpenLLM.__init__z   s®  ø€ ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð)ñô ð ðøøøøð	øøøð  Ð% 2ˆ
àÐ!Ý�LŠLÐOÑPÔPÐPàÐ  ZÐ%7Ð%7ØSñ &8Ô%7Ð%7ð  &Ò(Ð(ð ”Ô)Ð)à”^Ô.ð ð
  �Z 
Ñ+Ô+ˆFà�E‰GŒGÔð ð à",Ø#.Ø",ðð ðð ð ð  ˆDŒLØ!ˆDŒLˆLˆLàÐ)Ð)Ð+VÑ)Ô)Ð)ð $�W”^ð Ø%Ø!Ø#Ø!%ð	ð ð
 ðð ˆFð �E‰GŒGÔð ð à",Ø (Ø (Ø",ð	ð ðð ð ð  ˆDŒLØ!ˆDŒLˆLˆLs   ƒ ˆ
'’"¢'úopenllm.LLMRunnerc                ó<   — | j         €t          d¦  «        ‚| j         S )aÀ  
        Get the underlying openllm.LLMRunner instance for integration with BentoML.

        Example:
        .. code-block:: python

            llm = OpenLLM(
                model_name='flan-t5',
                model_id='google/flan-t5-large',
                embedded=False,
            )
            tools = load_tools(["serpapi", "llm-math"], llm=llm)
            agent = initialize_agent(
                tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
            )
            svc = bentoml.Service("langchain-openllm", runners=[llm.runner])

            @svc.api(input=Text(), output=Text())
            def chat(input_text: str):
                return agent.run(input_text)
        Nz5OpenLLM must be initialized locally with 'model_name')r+   Ú
ValueError©r7   s    r&   rI   zOpenLLM.runner½   s#   € ð. Œ<ÐÝÐTÑUÔUÐUØŒ|Ðr%   r   c                ó>  — | j         �p| j                             | j                              ¦   «         ¦  «         | j                              ¦   «         d         }| j                              ¦   «         d         }n~| j        €t          d¦  «        ‚| j        }| j        }	 | j                             t          j
        | j        j        d         ¦  «        ¦  «         n# t          t          j        f$ r Y nw xY wt          | j        | j        | j        | j        ||¬¦  «        S )zGet the identifying parameters.Nr   r   zRunner must be initialized.Úconfiguration)r   r   r   r   r   r   )r,   r   ÚupdateÚ_configÚ	_metadatar+   rM   r   r   ÚjsonÚloadsÚidentifying_paramsÚ	TypeErrorÚJSONDecodeErrorr   r   r   r   )r7   r   r   s      r&   Ú_identifying_paramszOpenLLM._identifying_paramsØ   s  € ð Œ<Ð#ØŒO×"Ò" 4¤<×#7Ò#7Ñ#9Ô#9Ñ:Ô:Ð:Øœ×/Ò/Ñ1Ô1°,Ô?ˆJØ”|×-Ò-Ñ/Ô/°
Ô;ˆHˆHàŒ|Ð#Ý Ð!>Ñ?Ô?Ð?ØœˆJØ”}ˆHðØ”×&Ò&Ý”J˜tœ|Ô>¸ÔOÑPÔPñô ð ð øõ �tÔ3Ð4ð ð ð Ø�ðøøøå Ø”ØÔ(Ø”]Ø”Ø!Øð
ñ 
ô 
ð 	
s   Â<C ÃC3Ã2C3c                ó   — | j         rdndS )NÚopenllm_clientr>   )r,   rN   s    r&   Ú	_llm_typezOpenLLM._llm_typeó   s   € à#'¤<Ð>ÐÐ°YÐ>r%   ÚpromptÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]Úkwargsc                óH  — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          j        | j        ¦  «        }|                     |¦  «          |j        j        | j        d         fi |¤Ž}| j	        r3 | j	        j
        |fi |                     d¬¦  «        ¤Žj        d         }	n+| j        €J ‚ | j        |fi |                     d¬¦  «        ¤Ž}	t          |	t          ¦  «        rd|	v r|	d         S t          |	t           ¦  «        r|	S t#          d|	› �¦  «        ‚©Nr   zMCould not import openllm. Make sure to install it with 'pip install openllm'.r   T)ÚflattenÚtextzCExpected result to be a dict with key 'text' or a string. Received )r>   r?   ÚcopyÚdeepcopyr   rQ   Ú
AutoConfigÚ	for_modelrY   r,   ÚgenerateÚ
model_dumpÚ	responsesr+   Ú
isinstanceÚdictr   rM   )
r7   r]   r^   r`   rb   r>   rG   ÚcopiedÚconfigÚress
             r&   Ú_callzOpenLLM._call÷   sŠ  € ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð)ñô ð ðøøøøð	øøøõ ”˜tœÑ/Ô/ˆØ�Š�fÑÔÐØ-�Ô#Ô-ØÔ$ \Ô2ð
ð 
Ø6<ð
ð 
ˆð Œ<ð 	JØ'�$”,Ô'Øðð Ø ×+Ò+°DÐ+Ñ9Ô9ðð ä˜ôˆCˆCð ”<Ð+Ð+Ð+Ø�$”,˜vÐIÐI¨×):Ò):À4Ð):Ñ)HÔ)HÐIÐIˆCÝ�c�4Ñ Ô ð 	 V¨s ] ]Ø�v”;ÐÝ˜�SÑ!Ô!ð 	ØˆJåð"Øð"ð "ñô ð s   ‚ ‡
&‘!¡&ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  óî  K  — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          j        | j        ¦  «        }|                     |¦  «          |j        j        | j        d         fi |¤Ž}| j	        rS|j
                             | j        ¦  «        }	 |	j        |fi |                     d¬¦  «        ¤Žƒ d {V —†j        d         }
n\| j        €J ‚ | j        j        j        |fi |¤Ž\  }}} | j        j        j        |fi |¤Žƒ d {V —†} | j        j        j        ||fi |¤Ž}
t+          |
t,          ¦  «        rd|
v r|
d         S t+          |
t.          ¦  «        r|
S t1          d|
› �¦  «        ‚rd   )r>   r?   rg   rh   r   rQ   ri   rj   rY   r,   rB   ÚAsyncHTTPClientr   rk   rl   rm   r+   ÚllmÚsanitize_parametersÚ	async_runÚpostprocess_generatern   ro   r   rM   )r7   r]   r^   r`   rb   r>   rG   rp   rq   Úasync_clientrr   Úgenerate_kwargsÚpostprocess_kwargsÚgenerated_results                 r&   Ú_acallzOpenLLM._acall  s&  è è € ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð)ñô ð ðøøøøð	øøøõ ”˜tœÑ/Ô/ˆØ�Š�fÑÔÐØ-�Ô#Ô-ØÔ$ \Ô2ð
ð 
Ø6<ð
ð 
ˆð Œ<ð 	Ø"œ>×9Ò9¸$¼/ÑJÔJˆLà+�lÔ+¨FÐVÐV°f×6GÒ6GÐPTÐ6GÑ6UÔ6UÐVÐVÐVÐVÐVÐVÐVÐVÜ˜ôˆCˆCð ”<Ð+Ð+Ð+ð
 5�”Ô Ô4°VÐFÐF¸vÐFÐFñ	ØØØ"à%D T¤\Ô%:Ô%DØð&ð &Ø)ð&ð &ð  ð  ð  ð  ð  ð  Ðð 8�$”,Ô"Ô7ØÐ(ðð Ø,>ðð ˆCõ �c�4Ñ Ô ð 	 V¨s ] ]Ø�v”;ÐÝ˜�SÑ!Ô!ð 	ØˆJåð"Øð"ð "ñô ð s   „	 ‰
(“#£().)
r   r   r   r   r   r2   r   r   r3   r4   )r   r   r   r9   r   r   r3   r4   r6   )r   r   r   r   r   r   r   r9   r   r   r   r   )r3   rK   )r3   r   )r3   r   )NN)
r]   r   r^   r_   r`   ra   rb   r   r3   r   )
r]   r   r^   r_   r`   rt   rb   r   r3   r   )r   r    r!   r"   r   r#   r   r   r   r   r   r+   r,   r1   r   r8   ÚpropertyrI   rY   r\   rs   r   Ú__classcell__)rJ   s   @r&   r(   r(   .   sq  ø€ € € € € € ðð ð> !%€JÐ$Ð$Ð$Ñ$ØKØ"€HÐ"Ð"Ð"Ñ"ð>à $€JÐ$Ð$Ð$Ñ$ØSØ$€KÐ$Ð$Ð$Ñ$Ø8Ø€HÐÐÐÑðIàÐÐÑØ7à+6¨;¸tÐ+DÑ+DÔ+D€GÐDÐDÐDÑDð 	ˆ˜DÐ!Ñ!Ô!ð ð "ð "ð "ñ "ðð ð ð ð ñ ô ð ð ð %(ðð #&Ø),ðð ð ð ð ñ „Xðð ð Ø/2ð	ð ð ð ð ñ „Xðð %)ðA"ð #'Ø$(Ø/5ØðA"ð A"ð A"ð A"ð A"ð A"ð A"ð A"ðF ðð ð ñ „Xðð4 ð
ð 
ð 
ñ „Xð
ð4 ð?ð ?ð ?ñ „Xð?ð %)Ø:>ð	#ð #ð #ð #ð #ðP %)Ø?Cð	/ð /ð /ð /ð /ð /ð /ð /ð /r%   r(   )Ú
__future__r   rg   rT   ÚloggingÚtypingr   r   r   r   r   r	   r
   r   r   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.pydantic_v1r   r>   r)   r   Ú	getLoggerr   r@   r(   r$   r%   r&   ú<module>r‰      s‡  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2àð Ø€N€N€Nð �^Ô$€
ðð ð ð ð ˜	ñ ô ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð]ð ]ð ]ð ]ð ]ˆcñ ]ô ]ð ]ð ]ð ]r%   