§
    šŠtjiz  ã                   óÂ   — d dl Z d dlmZ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mZ d dlmZmZ d dl	mZ  G d	„ d
e¦  «        Z G d„ de¦  «        ZdS )é    N)ÚAnyÚDictÚIteratorÚListÚOptionalÚTupleÚUnion)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úconvert_to_secret_strÚget_from_dict_or_env)ÚFieldÚ	SecretStr)ÚResponsec                   ó‚  ‡ — e Zd ZU dZ ed¬¦  «        Zeed<   	  e ed¦  «        ¬¦  «        Z	eed<   	  edd¬¦  «        Z
eed<   	  edd¬¦  «        Zeed	<   	  ed
¬¦  «        Zeed<   	 dZeeeef                  ed<   	  G d„ d¦  «        Zedefd„¦   «         Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Zedefd„¦   «         Zdeddfˆ fd„Zdedeeef         fd„Zd#deee                  deeef         fd„Z	 	 d$deee         ef         deee                  dee         defd„Z dedefd„Z!dede"e#         fd„Z$	 	 d%deee         ef         deee                  d ee%         dede"e#         f
d!„Z&	 	 d%deee         ef         deee                  d ee%         dedef
d"„Z'ˆ xZ(S )&ÚSambaStudiou¡  
    SambaStudio large language models.

    Setup:
        To use, you should have the environment variables
        ``SAMBASTUDIO_URL`` set with your SambaStudio environment URL.
        ``SAMBASTUDIO_API_KEY``  set with your SambaStudio endpoint API key.
        https://sambanova.ai/products/enterprise-ai-platform-sambanova-suite
        read extra documentation in https://docs.sambanova.ai/sambastudio/latest/index.html
        Example:
        .. code-block:: python
            from langchain_community.llms.sambanova  import SambaStudio
            SambaStudio(
                sambastudio_url="your-SambaStudio-environment-URL",
                sambastudio_api_key="your-SambaStudio-API-key,
                model_kwargs={
                    "model" : model or expert name (set for Bundle endpoints),
                    "max_tokens" : max number of tokens to generate,
                    "temperature" : model temperature,
                    "top_p" : model top p,
                    "top_k" : model top k,
                    "do_sample" : wether to do sample
                    "process_prompt": wether to process prompt
                        (set for Bundle generic v1 and v2 endpoints)
                },
            )
    Key init args â€” completion params:
        model: str
            The name of the model to use, e.g., Meta-Llama-3-70B-Instruct-4096
            (set for Bundle endpoints).
        streaming: bool
            Whether to use streaming handler when using non streaming methods
        model_kwargs: dict
            Extra Key word arguments to pass to the model:
                max_tokens: int
                    max tokens to generate
                temperature: float
                    model temperature
                top_p: float
                    model top p
                top_k: int
                    model top k
                do_sample: bool
                    wether to do sample
                process_prompt:
                    wether to process prompt
                    (set for Bundle generic v1 and v2 endpoints)
    Key init args â€” client params:
        sambastudio_url: str
            SambaStudio endpoint Url
        sambastudio_api_key: str
            SambaStudio endpoint api key

    Instantiate:
        .. code-block:: python

            from langchain_community.llms import SambaStudio

            llm = SambaStudio=(
                sambastudio_url = set with your SambaStudio deployed endpoint URL,
                sambastudio_api_key = set with your SambaStudio deployed endpoint Key,
                model_kwargs = {
                    "model" : model or expert name (set for Bundle endpoints),
                    "max_tokens" : max number of tokens to generate,
                    "temperature" : model temperature,
                    "top_p" : model top p,
                    "top_k" : model top k,
                    "do_sample" : wether to do sample
                    "process_prompt" : wether to process prompt
                        (set for Bundle generic v1 and v2 endpoints)
                }
            )

    Invoke:
        .. code-block:: python
            prompt = "tell me a joke"
            response = llm.invoke(prompt)

    Stream:
        .. code-block:: python

        for chunk in llm.stream(prompt):
            print(chunk, end="", flush=True)

    Async:
        .. code-block:: python

        response = llm.ainvoke(prompt)
        await response

    Ú ©ÚdefaultÚsambastudio_urlÚsambastudio_api_keyT)r   ÚexcludeÚbase_urlÚstreaming_urlFÚ	streamingNÚmodel_kwargsc                   ó   — e Zd ZdZdS )úSambaStudio.ConfigTN©Ú__name__Ú
__module__Ú__qualname__Úpopulate_by_name© ó    ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/sambanova.pyÚConfigr   |   ó   € € € € € ØÐÐÐr&   r(   Úreturnc                 ó   — dS )ú9Return whether this model can be serialized by Langchain.Tr%   ©Úclss    r'   Úis_lc_serializablezSambaStudio.is_lc_serializable   s	   € ð ˆtr&   c                 ó   — dddœS )Nr   r   )r   r   r%   ©Úselfs    r'   Ú
lc_secretszSambaStudio.lc_secrets„   s   € ð  1Ø#8ð
ð 
ð 	
r&   c                 ó&   — d| j         id| j        i¥S )úÈReturn a dictionary of identifying parameters.

        This information is used by the LangChain callback system, which
        is used for tracing purposes make it possible to monitor LLMs.
        r   r   )r   r   r1   s    r'   Ú_identifying_paramszSambaStudio._identifying_params‹   s   € ð ˜Tœ^ÐS°ÀÔ@QÐ/RÐSÐSr&   c                 ó   — dS )zReturn type of llm.zsambastudio-llmr%   r1   s    r'   Ú	_llm_typezSambaStudio._llm_type”   s
   € ð !Ð r&   Úkwargsc                 óì   •— t          |dd¦  «        |d<   t          t          |dd¦  «        ¦  «        |d<   |                      |d         ¦  «        \  |d<   |d<    t          ¦   «         j        di |¤Ž dS )	ú'init and validate environment variablesr   ÚSAMBASTUDIO_URLr   ÚSAMBASTUDIO_API_KEYr   r   Nr%   )r   r   Ú_get_sambastudio_urlsÚsuperÚ__init__©r2   r9   Ú	__class__s     €r'   r@   zSambaStudio.__init__™   s�   ø€ å$8ØÐ%Ð'8ñ%
ô %
ˆÐ Ñ!õ )>Ý  Ð)>Ð@UÑVÔVñ)
ô )
ˆÐ$Ñ%ð 7;×6PÒ6PØÐ$Ô%ñ7
ô 7
Ñ3ˆˆzÑ˜F ?Ñ3ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r&   Úurlc                 óÒ   — d|v r|}|}n[d|v r|                      dd¦  «        }|}n>|}d|v r)d                     |                     d¦  «        ¦  «        }nt          d¦  «        ‚||fS )a3  
        Get streaming and non streaming URLs from the given URL

        Args:
            url: string with sambastudio base or streaming endpoint url

        Returns:
            base_url: string with url to do non streaming calls
            streaming_url: string with url to do streaming calls
        úchat/completionsÚstreamzstream/r   Úgenericzgeneric/streamúUnsupported URL)ÚreplaceÚjoinÚsplitÚ
ValueError)r2   rC   r   Ú
stream_urls       r'   r>   z!SambaStudio._get_sambastudio_urls§   s‰   € ð  Ð$Ð$ØˆHØˆJˆJà˜3ˆˆØŸ;š; y°"Ñ5Ô5�Ø �
�
à�Ø Ð#Ð#Ø!1×!6Ò!6°s·y²yÀÑ7KÔ7KÑ!LÔ!L�J�Jå$Ð%6Ñ7Ô7Ð7Ø˜Ð#Ð#r&   Ústopc                 ó²  — |€g }| j         pi }|                     dg ¦  «        |z   }t          |¦  «        dk    r||d<   d| j        v r‹d|                     ¦   «         v r|                     d¦  «        |d<   d|                     ¦   «         v r|                     d¦  «        |d<   d	|                     ¦   «         v r|                     d	¦  «         |}�nd
| j        v r_d|                     ¦   «         v r|                     d¦  «        |d<   d|                     ¦   «         v r|                     d¦  «        |d<   |}nœd| j        v r{d|                     ¦   «         v r|                     d¦  «        |d<   d|                     ¦   «         v r|                     d¦  «        |d<   d„ |                     ¦   «         D ¦   «         }nt          d| j        › d�¦  «        ‚|S )aR  
        Get the tuning parameters to use when calling the LLM.

        Args:
            stop: Stop words to use when generating.

                Model output is cut off at the first occurrence of any of these
                substrings.

        Returns:
            The tuning parameters in the format required by api to use
        NÚstop_sequencesr   rE   Úselect_expertÚmodelÚmax_tokens_to_generateÚ
max_tokensÚprocess_promptúapi/v2/predict/genericúapi/predict/genericc                 ó^   — i | ]*\  }}|t          |¦  «        j        t          |¦  «        d œ“Œ+S ))ÚtypeÚvalue)rY   r!   Ústr)Ú.0ÚkÚvs      r'   ú
<dictcomp>z2SambaStudio._get_tuning_params.<locals>.<dictcomp>÷   sE   € ð ð ð á�A�qð �D ™GœGÔ,µs¸1±v´vÐ>Ð>ðð ð r&   rH   ú9only openai, generic v1 and generic v2 APIs are supported)r   ÚgetÚlenr   ÚkeysÚpopÚitemsrL   )r2   rN   Ú_model_kwargsÚ_stop_sequencesÚtuning_paramss        r'   Ú_get_tuning_paramszSambaStudio._get_tuning_paramsÁ   sR  € ð ˆ<ØˆDð Ô)Ð/¨Rˆð (×+Ò+Ð,<¸bÑAÔAÀDÑHˆÝˆÑÔ !Ò#Ð#Ø.=ˆMÐ*Ñ+ð  Ô!5Ð5Ð5Ø -×"4Ò"4Ñ"6Ô"6Ð6Ð6Ø)6×):Ò):¸?Ñ)KÔ)K�˜gÑ&Ø'¨=×+=Ò+=Ñ+?Ô+?Ð?Ð?Ø.;×.?Ò.?Ø,ñ/ô /�˜lÑ+ð   =×#5Ò#5Ñ#7Ô#7Ð7Ð7Ø×!Ò!Ð"2Ñ3Ô3Ð3Ø)ˆM‰Mà%¨Ô)=Ð=Ð=Ø˜-×,Ò,Ñ.Ô.Ð.Ð.Ø1>×1BÒ1BÀ7Ñ1KÔ1K�˜oÑ.Ø˜}×1Ò1Ñ3Ô3Ð3Ð3Ø:G×:KÒ:KØ ñ;ô ;�Ð6Ñ7ð *ˆMˆMà" dÔ&:Ð:Ð:Ø˜-×,Ò,Ñ.Ô.Ð.Ð.Ø1>×1BÒ1BÀ7Ñ1KÔ1K�˜oÑ.Ø˜}×1Ò1Ñ3Ô3Ð3Ð3Ø:G×:KÒ:KØ ñ;ô ;�Ð6Ñ7ðð à*×0Ò0Ñ2Ô2ðñ ô ˆMˆMõ ðL $Ô"6ð Lð Lð Lñô ð ð
 Ðr&   Úpromptc                 ó–  — t          |t          ¦  «        r|g}|                      |¦  «        }d| j        v rRd|d         dœg}||dœ|¥}d„ |                     ¦   «         D ¦   «         }d| j                             ¦   «         › �dd	œ}�nCd
| j        v r†|                     dd¦  «        r#t          j	        ddd|d         dœgdœ¦  «        }n|d         }d|dœg}d„ |                     ¦   «         D ¦   «         }||dœ}d| j                             ¦   «         i}n´d| j        v r“|                     dd¦  «        rK|d                              d¦  «        dk    r#t          j	        ddd|d         dœgdœ¦  «        }n|d         }n|d         }|r||dœ}n|g|dœ}d| j                             ¦   «         i}nt          d| j        › d�¦  «        ‚t          j        ¦   «         }	|r|	                     | j        ||d¬¦  «        }
n|	                     | j        ||d¬¦  «        }
|
j        dk    r t#          d |
j        › d!|
j        › d!�¦  «        ‚|
S )"a  
        Performs a post request to the LLM API.

        Args:
        prompt: The prompt to pass into the model
        stop: list of stop tokens
        streaming: wether to do a streaming call

        Returns:
            A request Response object
        rE   Úuserr   ©ÚroleÚcontent)ÚmessagesrF   c                 ó   — i | ]
\  }}|®||“ŒS ©Nr%   ©r\   ÚkeyrZ   s      r'   r_   z/SambaStudio._handle_request.<locals>.<dictcomp>  s#   € ÐSÐSÐS¡: 3¨ÀÐAR�C˜ÐARÐARÐARr&   úBearer úapplication/json©ÚAuthorizationzContent-TyperV   rU   Fzsambaverse-conversation-idN)Ú
message_idrn   ro   )Úconversation_idrp   Úitem0)ÚidrZ   c                 ó   — i | ]
\  }}|®||“ŒS rr   r%   rs   s      r'   r_   z/SambaStudio._handle_request.<locals>.<dictcomp>4  s#   € ÐWÐWÐW¡Z S¨%ÀUÐEV�c˜5ÐEVÐEVÐEVr&   )re   Úparamsrt   rW   rZ   ÚTrue)Úinstancer~   )Ú	instancesr~   rH   r`   T©ÚheadersÚjsonrF   éÈ   ú2Sambanova / complete call failed with status code ú.)Ú
isinstancer[   ri   r   re   r   Úget_secret_valuera   r„   ÚdumpsrL   ÚrequestsÚSessionÚpostr   r   Ústatus_codeÚRuntimeErrorÚtext)r2   rj   rN   r   r~   Úmessages_dictÚdatarƒ   re   Úhttp_sessionÚresponses              r'   Ú_handle_requestzSambaStudio._handle_request  s8  € õ$ �f�cÑ"Ô"ð 	Ø�XˆFà×(Ò(¨Ñ.Ô.ˆð  Ô!5Ð5Ð5Ø&,¸À¼ÐCÐCÐDˆMØ -¸ÐMÐMÀfÐMˆDØSÐS°·²±´ÐSÑSÔSˆDð"AØÔ+×<Ò<Ñ>Ô>ð"Að "Aà 2ðð ˆG‰Gð &¨Ô)=Ð=Ð=Ø�zŠzÐ*¨EÑ2Ô2ð 
#Ýœà+Gà+/¸ÈFÐSTÌIÐVÐVð%ðð ñô ��ð   œ�Ø#¨fÐ5Ð5Ð6ˆEØWÐW°6·<²<±>´>ÐWÑWÔWˆFØ"¨fÐ5Ð5ˆDØ˜dÔ6×GÒGÑIÔIÐJˆGˆGð # dÔ&:Ð:Ð:Ø�zŠzÐ*¨EÑ2Ô2ð #ØÐ*Ô+×/Ò/°Ñ8Ô8¸FÒBÐBÝ!œZà/Kð 37Ø,2Ø/5°a¬yð!"ð !"ð)ð	ð 	ñô �F�Fð $ AœY�F�Fà œ�Øð AØ$*°fÐ=Ð=��à&, X¸Ð@Ð@�Ø˜dÔ6×GÒGÑIÔIÐJˆGˆGõ ðL $Ô"6ð Lð Lð Lñô ð õ  Ô'Ñ)Ô)ˆØð 	Ø#×(Ò(ØÔ"¨G¸$Àtð )ñ ô ˆHˆHð $×(Ò(Ø” w°TÀ%ð )ñ ô ˆHð Ô 3Ò&Ð&Ýð$ØÔ'ð$ð $à”=ð$ð $ð $ñô ð ð
 ˆr&   r”   c                 ó†  — 	 |                      ¦   «         }n,# t          $ r}t          d|› d|j        › �¦  «        ‚d}~ww xY wd| j        v r|d         d         d         d         }nZd	| j        v r|d
         d         d         d         }n6d| j        v r|d         d         d         }nt          d| j        › d�¦  «        ‚|S )úÆ
        Process a non streaming response from the api

        Args:
            response: A request Response object

        Returns
            completion: a string with model generation
        ú;Sambanova /complete call failed couldn't get JSON response ú
response: NrE   Úchoicesr   Úmessagero   rV   re   rZ   Ú
completionrW   ÚpredictionsrH   r`   )r„   Ú	Exceptionr�   r�   r   rL   ©r2   r”   Úresponse_dictÚerœ   s        r'   Ú_process_responsezSambaStudio._process_responsej  s  € ð	Ø$ŸMšM™OœOˆMˆMøÝð 	ð 	ð 	Ýð-Èað -ð -Ø%œ]ð-ð -ñô ð øøøøð	øøøð  Ô!5Ð5Ð5Ø& yÔ1°!Ô4°YÔ?À	ÔJˆJˆJà%¨Ô)=Ð=Ð=Ø& wÔ/°Ô2°7Ô;¸LÔIˆJˆJà" dÔ&:Ð:Ð:Ø& }Ô5°aÔ8¸ÔFˆJˆJåðL $Ô"6ð Lð Lð Lñô ð ð Ðó   ‚ —
A ¡;»A c              #   ó˜  K  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY wd| j        v �rf|                     |¦  «        }|                     ¦   «         D �]9}|j        dk    r t          d|j        › d|j        › d�¦  «        ‚	 |j        dk    rÓt          |j        t          ¦  «        rt          j        |j        ¦  «        }n t          d|j        › d|j        › d�¦  «        ‚|                     d	¦  «        r t          d|j        › d|j        › d�¦  «        ‚t          |d
         ¦  «        dk    r|d
         d         d         d         }nd}t          |¬¦  «        }|V — �Œ# t           $ r}t          d|› d|j        › �¦  «        ‚d}~ww xY wdS d| j        v r‰|                     ¦   «         D ]r}		 t          j        |	¦  «        }|d         d         d         d         d         }t          |¬¦  «        }|V — ŒL# t           $ r}t          d|› d|	› �¦  «        ‚d}~ww xY wdS d| j        v rƒ|                     ¦   «         D ]l}		 t          j        |	¦  «        }|d         d         d         d         }t          |¬¦  «        }|V — ŒF# t           $ r}t          d|› d|	› �¦  «        ‚d}~ww xY wdS t%          d| j        › d�¦  «        ‚)úâ
        Process a streaming response from the api

        Args:
            response: An iterable request Response object

        Yields:
            GenerationChunk: a GenerationChunk with model partial generation
        r   NúTcould not import sseclient libraryPlease install it with `pip install sseclient-py`.rE   Úerror_eventú1Sambanova /complete call failed with status code r‡   ú[DONE]Úerrorrš   Údeltaro   r   ©r�   ú3Error getting content chunk raw streamed response: údata: rV   Úresultre   rZ   Ústream_tokenzline: rW   Ú	responsesrH   r`   )Ú	sseclientÚImportErrorr   Ú	SSEClientÚeventsÚeventr�   rŽ   r’   rˆ   r[   r„   Úloadsra   rb   r   rž   Ú
iter_linesrL   )
r2   r”   r²   Úclientr¶   r’   ro   Úgenerated_chunkr¡   Úlines
             r'   Ú_process_stream_responsez$SambaStudio._process_stream_responseŽ  s  è è € ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝðEñô ð ð	øøøð  Ô!5Ð5Ñ5Ø×(Ò(¨Ñ2Ô2ˆFØŸš™œð #ñ #�Ø”; -Ò/Ð/Ý&ð)Ø#Ô/ð)ð )à œ:ð)ð )ð )ñô ð ð
à”z XÒ-Ð-Ý% e¤jµ#Ñ6Ô6ð Ý#'¤:¨e¬jÑ#9Ô#9˜D˜Då".ð!1Ø#+Ô#7ð!1ð !1à#(¤:ð!1ð !1ð !1ñ#ô #ð ð
  Ÿ8š8 GÑ,Ô,ð Ý".ð!1Ø#+Ô#7ð!1ð !1à#(¤:ð!1ð !1ð !1ñ#ô #ð õ
 ˜t IœÑ/Ô/°!Ò3Ð3Ø&*¨9¤o°aÔ&8¸Ô&AÀ)Ô&L˜G˜Gà&(˜GÝ*9¸wÐ*GÑ*GÔ*G˜Ø-Ð-Ð-Ð-ùøå ð ð ð Ý&ð.Èað .ð .Ø!&¤ð.ð .ñô ð øøøøðøøøð?#ð #ðL &¨Ô)=Ð=Ð=Ø ×+Ò+Ñ-Ô-ð ð �ð
Ýœ: dÑ+Ô+�DØ" 8œn¨WÔ5°aÔ8¸ÔAÀ.ÔQ�GÝ&5¸7Ð&CÑ&CÔ&C�OØ)Ð)Ð)Ð)Ð)øå ð ð ð Ý&ð(Èað (ð (Ø!%ð(ð (ñô ð øøøøðøøøðð ð # dÔ&:Ð:Ð:Ø ×+Ò+Ñ-Ô-ð ð �ð
Ýœ: dÑ+Ô+�DØ" 8œn¨[Ô9¸!Ô<¸^ÔL�GÝ&5¸7Ð&CÑ&CÔ&C�OØ)Ð)Ð)Ð)Ð)øå ð ð ð Ý&ð(Èað (ð (Ø!%ð(ð (ñô ð øøøøðøøøðð õ ðL $Ô"6ð Lð Lð Lñô ð sS   „	 ‰#ÂCE(Å(
FÅ2FÆFÆ6AG?Ç?
H#È	HÈH#ÉAJÊ
J/ÊJ*Ê*J/Úrun_managerc              +   óª   K  — |                       ||d¬¦  «        }|                      |¦  «        D ]"}|r|                     |j        ¦  «         |V — Œ#dS )a\  Call out to Sambanova's complete endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: a list of strings on which the model should stop generating.
            run_manager: A run manager with callbacks for the LLM.
        Yields:
            chunk: GenerationChunk with model partial generation
        T©r   N©r•   r¼   Úon_llm_new_tokenr�   ©r2   rj   rN   r½   r9   r”   Úchunks          r'   Ú_streamzSambaStudio._streamí  ór   è è € ð  ×'Ò'¨°ÀÐ'ÑEÔEˆØ×2Ò2°8Ñ<Ô<ð 	ð 	ˆEØð 9Ø×,Ò,¨U¬ZÑ8Ô8Ð8ØˆKˆKˆKˆKð	ð 	r&   c                 ó²   — | j         r"d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|S |                      ||d¬¦  «        }|                      |¦  «        }|S )a  Call out to Sambanova's complete endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: a list of strings on which the model should stop generating.

        Returns:
            result: string with model generation
        r   ©rj   rN   r½   Fr¿   r%   ©r   rÄ   r�   r•   r¢   ©r2   rj   rN   r½   r9   rœ   rÃ   r”   s           r'   Ú_callzSambaStudio._call  ó’   € ð  Œ>ð 	ØˆJØ%˜œð Ø D°kðð ØEKðð ð )ð )�ð ˜eœjÑ(�
�
àÐà×'Ò'¨°ÀÐ'ÑFÔFˆØ×+Ò+¨HÑ5Ô5ˆ
ØÐr&   rr   ©NF©NN))r!   r"   r#   Ú__doc__r   r   r[   Ú__annotations__r   r   r   r   r   Úboolr   r   r   r   r(   Úclassmethodr/   Úpropertyr3   r6   r8   r@   r   r>   r   ri   r	   r   r•   r¢   r   r   r¼   r
   rÄ   rÊ   Ú__classcell__©rB   s   @r'   r   r      s  ø€ € € € € € ðZð Zðx !˜5¨Ð,Ñ,Ô,€O�SÐ,Ð,Ñ,Øà%* U°9°9¸R±=´=Ð%AÑ%AÔ%AÐ˜ÐAÐAÑAØà�E "¨dÐ3Ñ3Ô3€HˆcÐ3Ð3Ñ3Ø'à˜ r°4Ð8Ñ8Ô8€M�3Ð8Ð8Ñ8Ø#à�e EÐ*Ñ*Ô*€IˆtÐ*Ð*Ñ*ØKà-1€L�(˜4  S œ>Ô*Ð1Ð1Ñ1Ø2ð ð  ð  ð  ð  ñ  ô  ð  ð ð 4ð ð ð ñ „[ðð ð
˜D  c œNð 
ð 
ð 
ñ „Xð
ð ðT T¨#¨s¨(¤^ð Tð Tð Tñ „XðTð ð!˜3ð !ð !ð !ñ „Xð!ð# ð #¨ð #ð #ð #ð #ð #ð #ð$¨ð $°°s¸C°x´ð $ð $ð $ð $ð4Að A x°°S´	Ô':ð AÀdÈ3ÐPSÈ8Änð Að Að Að AðL %)Ø$)ð	dð dà�d˜3”i �nÔ%ðdð �t˜C”yÔ!ðdð ˜D”>ð	dð
 
ðdð dð dð dðL"¨(ð "°sð "ð "ð "ð "ðH]°ð ]¸hÀÔ>Wð ]ð ]ð ]ð ]ðD %)Ø:>ð	ð à�d˜3”i �nÔ%ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
�/Ô	"ðð ð ð ð2 %)Ø:>ð	ð à�d˜3”i �nÔ%ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
ðð ð ð ð ð ð ð r&   r   c                   ó¤  ‡ — e Zd ZU dZ ed¬¦  «        Zeed<   	  e ed¦  «        ¬¦  «        Z	eed<   	  ed¬¦  «        Z
eed<   	  ed¬¦  «        Zeed	<   	  ed
¬¦  «        Zeed<   	  ed¬¦  «        Zeed<   	  ed¬¦  «        Zee         ed<   	  ed¬¦  «        Zee         ed<   	  eddi¬¦  «        Zeed<   	  G d„ d¦  «        Zedefd„¦   «         Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Zedefd„¦   «         Zdeddfˆ fd„Z	 	 d&de e!e         ef         dee!e                  d	ee         de"fd„Z#d e"defd!„Z$d e"de%e&         fd"„Z'	 	 d'de e!e         ef         dee!e                  d#ee(         dedef
d$„Z)	 	 d'de e!e         ef         dee!e                  d#ee(         dede%e&         f
d%„Z*ˆ xZ+S )(ÚSambaNovaCloudu¶  
    SambaNova Cloud large language models.

    Setup:
        To use, you should have the environment variables:
        ``SAMBANOVA_URL`` set with SambaNova Cloud URL.
        defaults to http://cloud.sambanova.ai/
        ``SAMBANOVA_API_KEY`` set with your SambaNova Cloud API Key.
        Example:
        .. code-block:: python
            from langchain_community.llms.sambanova  import SambaNovaCloud
            SambaNovaCloud(
                sambanova_api_key="your-SambaNovaCloud-API-key,
                model = model name,
                max_tokens = max number of tokens to generate,
                temperature = model temperature,
                top_p = model top p,
                top_k = model top k
            )
    Key init args â€” completion params:
        model: str
            The name of the model to use, e.g., Meta-Llama-3-70B-Instruct-4096
            (set for CoE endpoints).
        streaming: bool
            Whether to use streaming handler when using non streaming methods
        max_tokens: int
            max tokens to generate
        temperature: float
            model temperature
        top_p: float
            model top p
        top_k: int
            model top k

    Key init args â€” client params:
        sambanova_url: str
            SambaNovaCloud Url defaults to http://cloud.sambanova.ai/
        sambanova_api_key: str
            SambaNovaCloud api key
    Instantiate:
        .. code-block:: python
            from langchain_community.llms.sambanova  import SambaNovaCloud
            SambaNovaCloud(
                sambanova_api_key="your-SambaNovaCloud-API-key,
                model = model name,
                max_tokens = max number of tokens to generate,
                temperature = model temperature,
                top_p = model top p,
                top_k = model top k
            )
    Invoke:
        .. code-block:: python
            prompt = "tell me a joke"
            response = llm.invoke(prompt)
    Stream:
        .. code-block:: python
        for chunk in llm.stream(prompt):
            print(chunk, end="", flush=True)
    Async:
        .. code-block:: python
        response = llm.ainvoke(prompt)
        await response
    r   r   Úsambanova_urlÚsambanova_api_keyzMeta-Llama-3.1-8B-InstructrR   Fr   i   rT   gffffffæ?ÚtemperatureNÚtop_pÚtop_kÚinclude_usageTÚstream_optionsc                   ó   — e Zd ZdZdS )úSambaNovaCloud.ConfigTNr    r%   r&   r'   r(   rß   }  r)   r&   r(   r*   c                 ó   — dS )r,   Fr%   r-   s    r'   r/   z!SambaNovaCloud.is_lc_serializable€  s	   € ð ˆur&   c                 ó
   — ddiS )NrØ   r%   r1   s    r'   r3   zSambaNovaCloud.lc_secrets…  s   € à#Ð%8Ð9Ð9r&   c                 ó\   — | j         | j        | j        | j        | j        | j        | j        dœS )r5   ©rR   r   rT   rÙ   rÚ   rÛ   rÝ   rã   r1   s    r'   r6   z"SambaNovaCloud._identifying_params‰  s8   € ð ”ZØœØœ/ØÔ+Ø”ZØ”ZØ"Ô1ð
ð 
ð 	
r&   c                 ó   — dS )z7Get the type of language model used by this chat model.zsambanovacloud-llmr%   r1   s    r'   r8   zSambaNovaCloud._llm_typeš  s
   € ð $Ð#r&   r9   c                 ó¨   •— t          |ddd¬¦  «        |d<   t          t          |dd¦  «        ¦  «        |d<    t          ¦   «         j        di |¤Ž dS )	r;   r×   ÚSAMBANOVA_URLz,https://api.sambanova.ai/v1/chat/completionsr   rØ   ÚSAMBANOVA_API_KEYNr%   )r   r   r?   r@   rA   s     €r'   r@   zSambaNovaCloud.__init__Ÿ  su   ø€ å"6ØØØØBð	#
ñ #
ô #
ˆˆÑõ '<Ý  Ð)<Ð>QÑRÔRñ'
ô '
ˆÐ"Ñ#ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r&   rj   rN   c           	      ó
  — t          |t          ¦  «        r|g}d|d         dœg}||| j        || j        | j        | j        | j        dœ}d„ |                     ¦   «         D ¦   «         }d| j         	                    ¦   «         › �ddœ}t          j        ¦   «         }|r|                     | j        ||d	¬
¦  «        }n|                     | j        ||d¬
¦  «        }|j        dk    r t          d|j        › d|j        › d�¦  «        ‚|S )zÝ
        Performs a post request to the LLM API.

        Args:
            prompt: The prompt to pass into the model.
            stop: list of stop tokens

        Returns:
            A request Response object
        rl   r   rm   )rp   rF   rT   rN   rR   rÙ   rÚ   rÛ   c                 ó   — i | ]
\  }}|®||“ŒS rr   r%   rs   s      r'   r_   z2SambaNovaCloud._handle_request.<locals>.<dictcomp>Ê  s#   € ÐOÐOÐO™z˜s E¸UÐ=N��UÐ=NÐ=NÐ=Nr&   ru   rv   rw   Tr‚   Fr…   r†   r‡   )rˆ   r[   rT   rR   rÙ   rÚ   rÛ   re   rØ   r‰   r‹   rŒ   r�   r×   rŽ   r�   r�   )	r2   rj   rN   r   r‘   r’   rƒ   r“   r”   s	            r'   r•   zSambaNovaCloud._handle_request¬  sa  € õ  �f�cÑ"Ô"ð 	Ø�XˆFà"(°V¸A´YÐ?Ð?Ð@ˆà%ØØœ/ØØ”ZØÔ+Ø”ZØ”Zð	
ð 	
ˆð PÐO¨T¯ZªZ©\¬\ÐOÑOÔOˆàR tÔ'=×'NÒ'NÑ'PÔ'PÐRÐRØ.ð
ð 
ˆõ
  Ô'Ñ)Ô)ˆØð 	Ø#×(Ò(ØÔ"¨G¸$Àtð )ñ ô ˆHˆHð $×(Ò(ØÔ"¨G¸$Àuð )ñ ô ˆHð Ô 3Ò&Ð&Ýð$ØÔ'ð$ð $à”=ð$ð $ð $ñô ð ð
 ˆr&   r”   c                 ó¾   — 	 |                      ¦   «         }n,# t          $ r}t          d|› d|j        › �¦  «        ‚d}~ww xY w|d         d         d         d         }|S )r—   r˜   r™   Nrš   r   r›   ro   )r„   rž   r�   r�   rŸ   s        r'   r¢   z SambaNovaCloud._process_responseâ  sˆ   € ð	Ø$ŸMšM™OœOˆMˆMøÝð 	ð 	ð 	Ýð-Èað -ð -Ø%œ]ð-ð -ñô ð øøøøð	øøøð # 9Ô-¨aÔ0°Ô;¸IÔFˆ
àÐr£   c              #   ó  K  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|                     |¦  «        }|                     ¦   «         D �]9}|j        dk    r t          d|j        › d|j        › d�¦  «        ‚	 |j        dk    rÓt          |j        t          ¦  «        rt          j        |j        ¦  «        }n t          d|j        › d|j        › d�¦  «        ‚|                     d¦  «        r t          d|j        › d|j        › d�¦  «        ‚t          |d	         ¦  «        dk    r|d	         d         d
         d         }nd}t          |¬¦  «        }|V — �Œ# t          $ r}t          d|› d|j        › �¦  «        ‚d}~ww xY wdS )r¥   r   Nr¦   r§   r¨   r‡   r©   rª   rš   r«   ro   r   r¬   r­   r®   )r²   r³   r´   rµ   r¶   r�   rŽ   r’   rˆ   r[   r„   r·   ra   rb   r   rž   )	r2   r”   r²   r¹   r¶   r’   ro   rº   r¡   s	            r'   r¼   z'SambaNovaCloud._process_stream_responseú  s6  è è € ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝðEñô ð ð	øøøð ×$Ò$ XÑ.Ô.ˆØ—]’]‘_”_ð #	ñ #	ˆEØŒ{˜mÒ+Ð+Ý"ð%ØÔ+ð%ð %à”zð%ð %ð %ñô ð ð
à”: Ò)Ð)Ý! %¤*­cÑ2Ô2ð Ý#œz¨%¬*Ñ5Ô5˜˜å*ð-Ø'Ô3ð-ð -à$œzð-ð -ð -ñô ð ð
 —x’x Ñ(Ô(ð Ý*ð-Ø'Ô3ð-ð -à$œzð-ð -ð -ñô ð õ
 ˜4 	œ?Ñ+Ô+¨aÒ/Ð/Ø"& y¤/°!Ô"4°WÔ"=¸iÔ"H˜˜à"$˜Ý&5¸7Ð&CÑ&CÔ&C�OØ)Ð)Ð)Ð)ùøåð ð ð Ý"ð*È!ð *ð *Ø"œZð*ð *ñô ð øøøøðøøøð?#	ð #	s!   „	 ‰#Á>CEÅ
FÅ(FÆFr½   c                 ó²   — | j         r"d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|S |                      ||d¬¦  «        }|                      |¦  «        }|S )á  Call out to SambaNovaCloud complete endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.
        r   rÇ   Fr¿   r%   rÈ   rÉ   s           r'   rÊ   zSambaNovaCloud._call3  rË   r&   c              +   óª   K  — |                       ||d¬¦  «        }|                      |¦  «        D ]"}|r|                     |j        ¦  «         |V — Œ#dS )rí   Tr¿   NrÀ   rÂ   s          r'   rÄ   zSambaNovaCloud._streamP  rÅ   r&   rÌ   rÍ   ),r!   r"   r#   rÎ   r   r×   r[   rÏ   r   rØ   rR   r   rÐ   rT   ÚintrÙ   ÚfloatrÚ   r   rÛ   rÝ   Údictr(   rÑ   r/   rÒ   r   r3   r   r6   r8   r@   r	   r   r   r•   r¢   r   r   r¼   r
   rÊ   rÄ   rÓ   rÔ   s   @r'   rÖ   rÖ   !  sñ  ø€ € € € € € ð>ð >ð@ ˜ rÐ*Ñ*Ô*€M�3Ð*Ð*Ñ*Øà#( 5°°¸2±´Ð#?Ñ#?Ô#?Ð�yÐ?Ð?Ñ?Ø!à�Ð;Ð<Ñ<Ô<€Eˆ3Ð<Ð<Ñ<Øà�e EÐ*Ñ*Ô*€IˆtÐ*Ð*Ñ*ØKà�e DÐ)Ñ)Ô)€J�Ð)Ð)Ñ)Ø à˜ sÐ+Ñ+Ô+€K�Ð+Ð+Ñ+Øà"˜U¨4Ð0Ñ0Ô0€Eˆ8�EŒ?Ð0Ð0Ñ0Øà ˜5¨Ð.Ñ.Ô.€Eˆ8�CŒ=Ð.Ð.Ñ.Øà ˜5¨/¸4Ð)@ÐAÑAÔA€N�DÐAÐAÑAØAð ð  ð  ð  ð  ñ  ô  ð  ð ð 4ð ð ð ñ „[ðð ð:˜D  c œNð :ð :ð :ñ „Xð:ð ð
 T¨#¨s¨(¤^ð 
ð 
ð 
ñ „Xð
ð  ð$˜3ð $ð $ð $ñ „Xð$ð# ð #¨ð #ð #ð #ð #ð #ð #ð  %)Ø$)ð	4ð 4à�d˜3”i �nÔ%ð4ð �t˜C”yÔ!ð4ð ˜D”>ð	4ð
 
ð4ð 4ð 4ð 4ðl¨(ð °sð ð ð ð ð07°ð 7¸hÀÔ>Wð 7ð 7ð 7ð 7ðx %)Ø:>ð	ð à�d˜3”i �nÔ%ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
ðð ð ð ð@ %)Ø:>ð	ð à�d˜3”i �nÔ%ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
�/Ô	"ðð ð ð ð ð ð ð r&   rÖ   )r„   Útypingr   r   r   r   r   r   r	   r‹   Ú langchain_core.callbacks.managerr
   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   r   Úpydanticr   r   r   r   rÖ   r%   r&   r'   ú<module>rø      s6  ðØ €€€Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà €€€Ø EÐ EÐ EÐ EÐ EÐ EØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ðQð Qð Qð Qð Q�#ñ Qô Qð QðhCð Cð Cð Cð C�Sñ Cô Cð Cð Cð Cr&   