Ë
    µŒj[z  ã                   ó´   — 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y)é    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y)úSambaStudio.ConfigTN©Ú__name__Ú
__module__Ú__qualname__Úpopulate_by_name© ó    úl/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/sambanova.pyÚConfigr   |   ó   „ ØÑr&   r(   Úreturnc                  ó   — y)ú9Return whether this model can be serialized by Langchain.Tr%   ©Úclss    r'   Úis_lc_serializablezSambaStudio.is_lc_serializable   s   € ð r&   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Ñ@QÐ/RÐSÐSr&   c                  ó   — y)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<   | j                  |d   «      \  |d<   |d<   t        ‰| �  di |¤Ž y)	ú'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__™   sx   ø€ ä$8ØÐ%Ð'8ó%
ˆÐ Ñ!ô )>Ü  Ð)>Ð@UÓVó)
ˆÐ$Ñ%ð 7;×6PÑ6PØÐ$Ñ%ó7
Ñ3ˆˆzÑ˜F ?Ñ3ô 	‰ÑÑ"˜6Ó"r&   Úurlc                 ó¼   — d|v r|}|}||fS d|v r|j                  dd«      }|}||fS |}d|v r$dj                  |j                  d«      «      }||fS t        d«      ‚)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ð ˜Ð#Ð#ð ˜3‰ØŸ;™; y°"Ó5�Ø �
ð ˜Ð#Ð#ð �Ø Ñ#Ø!1×!6Ñ!6°s·y±yÀÓ7KÓ!L�Jð ˜Ð#Ð#ô %Ð%6Ó7Ð7r&   Ústopc           	      ó²  — |€g }| j                   xs i }|j                  dg «      |z   }t        |«      dkD  r||d<   d| j                  v rsd|j	                  «       v r|j                  d«      |d<   d|j	                  «       v r|j                  d«      |d<   d|j	                  «       v r|j                  d«       |}|S d	| j                  v rPd|j	                  «       v r|j                  d«      |d<   d|j	                  «       v r|j                  d«      |d<   |}|S d
| j                  v r�d|j	                  «       v r|j                  d«      |d<   d|j	                  «       v r|j                  d«      |d<   |j                  «       D ��ci c]'  \  }}|t        |«      j                  t        |«      dœ“Œ) }}}|S t        d| j                  › d�«      ‚c c}}w )aD  
        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 the stop substrings.

        Returns:
            The tuning parameters in the format required by api to use
        Ústop_sequencesr   rE   Úselect_expertÚmodelÚmax_tokens_to_generateÚ
max_tokensÚprocess_promptúapi/v2/predict/genericúapi/predict/generic)ÚtypeÚvaluerH   ú9only openai, generic v1 and generic v2 APIs are supported)r   ÚgetÚlenr   ÚkeysÚpopÚitemsrX   r!   ÚstrrL   )r2   rN   Ú_model_kwargsÚ_stop_sequencesÚtuning_paramsÚkÚvs          r'   Ú_get_tuning_paramszSambaStudio._get_tuning_paramsÁ   s)  € ð ˆ<ØˆDð ×)Ñ)Ò/¨Rˆð (×+Ñ+Ð,<¸bÓAÀDÑHˆÜˆÓ !Ò#Ø.=ˆMÐ*Ñ+ð  ×!5Ñ!5Ñ5Ø -×"4Ñ"4Ó"6Ñ6Ø)6×):Ñ):¸?Ó)K�˜gÑ&Ø'¨=×+=Ñ+=Ó+?Ñ?Ø.;×.?Ñ.?Ø,ó/�˜lÑ+ð   =×#5Ñ#5Ó#7Ñ7Ø×!Ñ!Ð"2Ô3Ø)ˆMð< Ðð9 &¨×)=Ñ)=Ñ=Ø˜-×,Ñ,Ó.Ñ.Ø1>×1BÑ1BÀ7Ó1K�˜oÑ.Ø˜}×1Ñ1Ó3Ñ3Ø:G×:KÑ:KØ ó;�Ð6Ñ7ð *ˆMð* Ðð' # d×&:Ñ&:Ñ:Ø˜-×,Ñ,Ó.Ñ.Ø1>×1BÑ1BÀ7Ó1K�˜oÑ.Ø˜}×1Ñ1Ó3Ñ3Ø:G×:KÑ:KØ ó;�Ð6Ñ7ð +×0Ñ0Ô2ôá2‘D�A�qð œD ›G×,Ñ,´s¸1³vÑ>Ñ>Ø2ð ñ ð Ðô Ø! $×"6Ñ"6Ð!7ØKðLóð ùós   Æ	,GÚpromptc                 ó¼  — t        |t        «      r|g}| j                  |«      }d| j                  v rXd|d   dœg}||dœ|¥}|j	                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}d| j
                  j                  «       › �dd	œ}	�n;d
| j                  v r†|j                  dd«      r!t        j                  ddd|d   dœgdœ«      }n|d   }d|dœg}
|j	                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}|
|dœ}d| j
                  j                  «       i}	n§d| j                  v r€|j                  dd«      r>|d   j                  d«      dk(  r!t        j                  ddd|d   dœgdœ«      }n|d   }n|d   }|r||dœ}n|g|dœ}d| j
                  j                  «       i}	nt        d| j                  › d�«      ‚t        j                  «       }|r |j                  | j                  |	|d¬«      }n|j                  | j                  |	|d¬«      }|j                   dk7  r&t#        d|j                   › d|j$                  › d�«      ‚|S c c}}w c c}}w ) 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   NúBearer úapplication/json©ÚAuthorizationzContent-TyperV   rU   Fzsambaverse-conversation-id)Ú
message_idrk   rl   )Úconversation_idrm   Úitem0)ÚidrY   )r_   ÚparamsÚkeyrW   rY   ÚTrue)Úinstancerv   )Ú	instancesrv   rH   rZ   T©ÚheadersÚjsonrF   éÈ   ú2Sambanova / complete call failed with status code Ú.)Ú
isinstancer`   rf   r   r_   r   Úget_secret_valuer[   r}   ÚdumpsrL   ÚrequestsÚSessionÚpostr   r   Ústatus_codeÚRuntimeErrorÚtext)r2   rg   rN   r   rv   Úmessages_dictÚdatarw   rY   r|   r_   Úhttp_sessionÚresponses                r'   Ú_handle_requestzSambaStudio._handle_request  sÏ  € ô$ �fœcÔ"Ø�XˆFà×(Ñ(¨Ó.ˆð  ×!5Ñ!5Ñ5Ø&,¸À¹ÑCÐDˆMØ -¸ÑMÀfÐMˆDØ15·±´ÔS±¡: 3¨ÀÑAR�C˜‘J°ˆDÑSà#*Ø×+Ñ+×<Ñ<Ó>Ð?ð"Aà 2ñŠGð &¨×)=Ñ)=Ñ=Ø�z‰zÐ*¨EÔ2ÜŸ™à+Gà+/¸ÈFÐSTÉIÑVð%ñó‘ð   ™�Ø#¨fÑ5Ð6ˆEØ39·<±<´>ÔW±>¡Z S¨%ÀUÑEV�c˜5‘j°>ˆFÑWØ"¨fÑ5ˆDØ˜d×6Ñ6×GÑGÓIÐJ‰Gð # d×&:Ñ&:Ñ:Ø�z‰zÐ*¨EÔ2ØÐ*Ñ+×/Ñ/°Ó8¸FÒBÜ!ŸZ™Zà/Kð 37Ø,2Ø/5°a©yñ!"ð)ñ	ó‘Fð $ A™Y‘Fà ™�ÙØ$*°fÑ=‘à&, X¸Ñ@�Ø˜d×6Ñ6×GÑGÓIÐJ‰Gô Ø! $×"6Ñ"6Ð!7ØKðLóð ô  ×'Ñ'Ó)ˆÙØ#×(Ñ(Ø×"Ñ"¨G¸$Àtð )ó ‰Hð $×(Ñ(Ø—‘ w°TÀ%ð )ó ˆHð ×Ñ 3Ò&ÜØDØ×'Ñ'Ð(¨Ø—=‘=�/ ð$óð ð
 ˆùóS Tùó* Xs   Á
IÁ!IÃ*
IÃ5Ir�   c                 ó\  — 	 |j                  «       }d| j                  v r|d   d   d   d   }|S d	| j                  v r|d
   d   d   d   }|S d| j                  v r|d   d   d   }|S t        d| j                  › d�«      ‚# t        $ r }t        d|› d|j                  › �«      ‚d}~ww xY w)úÆ
        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   Úmessagerl   rV   r_   rY   Ú
completionrW   ÚpredictionsrH   rZ   )r}   Ú	Exceptionrˆ   r‰   r   rL   ©r2   r�   Úresponse_dictÚer•   s        r'   Ú_process_responsezSambaStudio._process_responseh  sü   € ð	Ø$ŸM™M›OˆMð  ×!5Ñ!5Ñ5Ø& yÑ1°!Ñ4°YÑ?À	ÑJˆJð Ðð &¨×)=Ñ)=Ñ=Ø& wÑ/°Ñ2°7Ñ;¸LÑIˆJð Ðð # d×&:Ñ&:Ñ:Ø& }Ñ5°aÑ8¸ÑFˆJð Ðô	 Ø! $×"6Ñ"6Ð!7ØKðLóð øô! ò 	ÜØMÈaÈSØ˜XŸ]™]˜Oð-óð ûð	ús   ‚B Â	B+ÂB&Â&B+c              #   óH  K  — 	 ddl }d| j                  v �r7|j                  |«      }|j	                  «       D �]  }|j
                  dk(  r&t        d|j                  › d|j                  › d�«      ‚	 |j                  dk7  rÉt        |j                  t        «      r t        j                  |j                  «      }n&t        d|j                  › d|j                  › d�«      ‚|j                  d	«      r&t        d|j                  › d|j                  › d�«      ‚t        |d
   «      dkD  r|d
   d   d   d   }nd}t        |¬«      }|–— �Œ yd| j                  v rM|j#                  «       D ]9  }		 t        j                  |	«      }|d   d   d   d   d   }t        |¬«      }|–— Œ; yd| j                  v rJ|j#                  «       D ]6  }		 t        j                  |	«      }|d   d   d   d   }t        |¬«      }|–— Œ8 yt%        d| j                  › d�«      ‚# t        $ r t        d«      ‚w xY w# t         $ r }t        d|› d|j                  › �«      ‚d}~ww xY w# t         $ r}t        d|› d|	› �«      ‚d}~ww xY w# t         $ r}t        d|› d|	› �«      ‚d}~ww xY w­w)úâ
        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“   Údeltarl   r   ©r‰   ú3Error getting content chunk raw streamed response: údata: rV   Úresultr_   rY   Ústream_tokenzline: rW   Ú	responsesrH   rZ   )Ú	sseclientÚImportErrorr   Ú	SSEClientÚeventsÚeventrˆ   r‡   r‹   r�   r`   r}   Úloadsr[   r\   r   r—   Ú
iter_linesrL   )
r2   r�   rª   Úclientr®   r‹   rl   Úgenerated_chunkrš   Úlines
             r'   Ú_process_stream_responsez$SambaStudio._process_stream_responseŒ  sø  è ø€ ð	Ûð  ×!5Ñ!5Ò5Ø×(Ñ(¨Ó2ˆFØŸ™Ÿ�Ø—;‘; -Ò/Ü&ØKØ#×/Ñ/Ð0°Ø Ÿ:™:˜, að)óð ð
à—z‘z XÒ-Ü% e§j¡j´#Ô6Ü#'§:¡:¨e¯j©jÓ#9™Dä".Ø"SØ#+×#7Ñ#7Ð"8¸Ø#(§:¡: ,¨að!1ó#ð ð
  Ÿ8™8 GÔ,Ü".Ø"SØ#+×#7Ñ#7Ð"8¸Ø#(§:¡: ,¨að!1ó#ð ô
 ˜t I™Ó/°!Ò3Ø&*¨9¡o°aÑ&8¸Ñ&AÀ)Ñ&L™Gà&(˜GÜ*9¸wÔ*G˜Ø-Ò-ùñ; )ðL &¨×)=Ñ)=Ñ=Ø ×+Ñ+Ö-�ð
ÜŸ:™: dÓ+�DØ" 8™n¨WÑ5°aÑ8¸ÑAÀ.ÑQ�GÜ&5¸7Ô&C�OØ)Ó)ñ .ð # d×&:Ñ&:Ñ:Ø ×+Ñ+Ö-�ð
ÜŸ:™: dÓ+�DØ" 8™n¨[Ñ9¸!Ñ<¸^ÑL�GÜ&5¸7Ô&C�OØ)Ó)ñ .ô Ø! $×"6Ñ"6Ð!7ØKðLóð øô[ ò 	ÜðEóð ð	ûôP !ò Ü&ØMÈaÈSØ  §¡ ð.óð ûðûô !ò Ü&ØMÈaÈSØ   ð(óð ûðûô !ò Ü&ØMÈaÈSØ   ð(óð ûðüs‰   ‚J"„H ˆA)J"Á2CH2Å
%J"Å06IÆ&$J"Ç3J Ç>J"ÈH/È/J"È2	IÈ;IÉIÉJ"É	I=É'I8É8I=É=J"Ê 	JÊ	JÊJÊJ"Úrun_managerc              +   ó¢   K  — | j                  ||d¬«      }| j                  |«      D ]#  }|r|j                  |j                  «       |–— Œ% y­w)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   rg   rN   rµ   r9   r�   Úchunks          r'   Ú_streamzSambaStudio._streamë  óN   è ø€ ð  ×'Ñ'¨°ÀÐ'ÓEˆØ×2Ñ2°8Ö<ˆEÙØ×,Ñ,¨U¯Z©ZÔ8Ø‹Kñ =ùó   ‚AAc                 óÄ   — | j                   r.d} | j                  d|||dœ|¤ŽD ]  }||j                  z  }Œ |S | j                  ||d¬«      }| j	                  |«      }|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   ©rg   rN   rµ   Fr·   r%   ©r   r¼   r‰   rŽ   r›   ©r2   rg   rN   rµ   r9   r•   r»   r�   s           r'   Ú_callzSambaStudio._call  ó~   € ð  �>Š>ØˆJØ%˜Ÿ™ð Ø D°kñØEKô�ð ˜eŸj™jÑ(‘
ðð
 Ðà×'Ñ'¨°ÀÐ'ÓFˆØ×+Ñ+¨HÓ5ˆ
ØÐr&   )N©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   rf   r	   r   rŽ   r›   r   r   r´   r
   r¼   rÃ   Ú__classcell__©rB   s   @r'   r   r      s   ø… ñZñx !¨Ô,€O�SÓ,Øá%*±9¸R³=Ô%AÐ˜ÓAØá "¨dÔ3€HˆcÓ3Ø'á r°4Ô8€M�3Ó8Ø#á EÔ*€IˆtÓ*ØKà-1€L�(˜4  S ™>Ñ*Ó1Ø2÷ ñ  ð ð 4ò ó ðð ð
˜D  c ™Nò 
ó ð
ð ðT T¨#¨s¨(¡^ò Tó ðTð ð!˜3ò !ó ð!ð# ð #¨õ #ð$¨ð $°°s¸C°x±ó $ñ4? x°°S±	Ñ':ð ?ÀdÈ3ÐPSÈ8Ánó ?ðH %)Ø$)ñ	dà�d˜3‘i �nÑ%ðdð �t˜C‘yÑ!ð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y)úSambaNovaCloud.ConfigTNr    r%   r&   r'   r(   rØ   {  r)   r&   r(   r*   c                  ó   — y)r,   Fr%   r-   s    r'   r/   z!SambaNovaCloud.is_lc_serializable~  s   € ð r&   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‡  sC   € ð —Z‘ZØŸ™ØŸ/™/Ø×+Ñ+Ø—Z‘ZØ—Z‘ZØ"×1Ñ1ñ
ð 	
r&   c                  ó   — y)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                 óz   •— t        |ddd¬«      |d<   t        t        |dd«      «      |d<   t        ‰| �  di |¤Ž y)	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__�  sP   ø€ ä"6ØØØØBô	#
ˆˆÑô '<Ü  Ð)<Ð>QÓRó'
ˆÐ"Ñ#ô 	‰ÑÑ"˜6Ó"r&   rg   rN   c           	      ód  — t        |t        «      r|g}d|d   dœg}||| j                  || j                  | j                  | j
                  | j                  dœ}|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}d| j                  j                  «       › �ddœ}t        j                  «       }	|r |	j                  | j                  ||d¬	«      }
n|	j                  | j                  ||d
¬	«      }
|
j                  dk7  r&t        d|
j                  › d|
j                   › d�«      ‚|
S c c}}w )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
        ri   r   rj   )rm   rF   rT   rN   rR   rÒ   rÓ   rÔ   rn   ro   rp   Tr{   Fr~   r   r€   )r�   r`   rT   rR   rÒ   rÓ   rÔ   r_   rÑ   r‚   r„   r…   r†   rÐ   r‡   rˆ   r‰   )r2   rg   rN   r   rŠ   r‹   rw   rY   r|   rŒ   r�   s              r'   rŽ   zSambaNovaCloud._handle_requestª  sP  € ô  �fœcÔ"Ø�XˆFà"(°V¸A±YÑ?Ð@ˆà%ØØŸ/™/ØØ—Z‘ZØ×+Ñ+Ø—Z‘ZØ—Z‘Zñ	
ˆð .2¯Z©Z¬\ÔO©\™z˜s E¸UÑ=N��U‘
¨\ˆÑOà& t×'=Ñ'=×'NÑ'NÓ'PÐ&QÐRØ.ñ
ˆô
  ×'Ñ'Ó)ˆÙØ#×(Ñ(Ø×"Ñ"¨G¸$Àtð )ó ‰Hð $×(Ñ(Ø×"Ñ"¨G¸$Àuð )ó ˆHð ×Ñ 3Ò&ÜØDØ×'Ñ'Ð(¨Ø—=‘=�/ ð$óð ð
 ˆùó- Ps   Á-
D,Á8D,r�   c                 óœ   — 	 |j                  «       }|d   d   d   d   }|S # t        $ r }t        d|› d|j                  › �«      ‚d}~ww xY w)r�   r‘   r’   Nr“   r   r”   rl   )r}   r—   rˆ   r‰   r˜   s        r'   r›   z SambaNovaCloud._process_responseà  si   € ð	Ø$ŸM™M›OˆMð # 9Ñ-¨aÑ0°Ñ;¸IÑFˆ
àÐøô ò 	ÜØMÈaÈSØ˜XŸ]™]˜Oð-óð ûð	ús   ‚" ¢	A«AÁAc              #   ó
  K  — 	 ddl }|j                  |«      }|j                  «       D �]  }|j                  dk(  r&t        d|j                  › d|j                  › d�«      ‚	 |j                  dk7  rÉt        |j                  t        «      r t        j                  |j                  «      }n&t        d|j                  › d|j                  › d�«      ‚|j                  d«      r&t        d|j                  › d|j                  › d�«      ‚t        |d	   «      dkD  r|d	   d   d
   d   }nd}t        |¬«      }|–— �Œ y# t        $ r t        d«      ‚w xY w# t        $ r }t        d|› d|j                  › �«      ‚d}~ww xY w­w)r�   r   Nrž   rŸ   r    r€   r¡   r¢   r“   r£   rl   r   r¤   r¥   r¦   )rª   r«   r¬   r­   r®   rˆ   r‡   r‹   r�   r`   r}   r¯   r[   r\   r   r—   )	r2   r�   rª   r±   r®   r‹   rl   r²   rš   s	            r'   r´   z'SambaNovaCloud._process_stream_responseø  sŸ  è ø€ ð	Ûð ×$Ñ$ XÓ.ˆØ—]‘]—_ˆEØ�{‰{˜mÒ+Ü"ØGØ×+Ñ+Ð,¨AØ—z‘z�l !ð%óð ð
à—:‘: Ò)Ü! %§*¡*¬cÔ2Ü#Ÿz™z¨%¯*©*Ó5™ä*ØOØ'×3Ñ3Ð4°AØ$Ÿz™z˜l¨!ð-óð ð
 —x‘x Ô(Ü*ØOØ'×3Ñ3Ð4°AØ$Ÿz™z˜l¨!ð-óð ô
 ˜4 	™?Ó+¨aÒ/Ø"& y¡/°!Ñ"4°WÑ"=¸iÑ"H™à"$˜Ü&5¸7Ô&C�OØ)Ò)ùñ; %øô ò 	ÜðEóð ð	ûôL ò Ü"ØIÈ!ÈØ˜UŸZ™Z˜Lð*óð ûðüsA   ‚F„D? ˆAFÁ#CEÄ;FÄ?EÅFÅ	F Å E;Å;F Æ Frµ   c                 óÄ   — | j                   r.d} | j                  d|||dœ|¤ŽD ]  }||j                  z  }Œ |S | j                  ||d¬«      }| j	                  |«      }|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._call1  rÄ   r&   c              +   ó¢   K  — | j                  ||d¬«      }| j                  |«      D ]#  }|r|j                  |j                  «       |–— Œ% y­w)rå   Tr·   Nr¸   rº   s          r'   r¼   zSambaNovaCloud._streamN  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Ó*Øá#(±¸2³Ô#?Ð�yÓ?Ø!áÐ;Ô<€Eˆ3Ó<Øá EÔ*€IˆtÓ*ØKá DÔ)€J�Ó)Ø á sÔ+€K�Ó+Øá"¨4Ô0€Eˆ8�E‰?Ó0Øá ¨Ô.€Eˆ8�C‰=Ó.Øá ¨/¸4Ð)@ÔA€N�DÓAØA÷ ñ  ð ð 4ò ó ðð ð:˜D  c ™Nò :ó ð:ð ð
 T¨#¨s¨(¡^ò 
ó ð
ð  ð$˜3ò $ó ð$ð# ð #¨õ #ð  %)Ø$)ñ	4à�d˜3‘i �nÑ%ð4ð �t˜C‘yÑ!ð4ð ˜D‘>ð	4ð
 
ó4ðl¨(ð °só ð07°ð 7¸hÀÑ>Wó 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ð      sC   ðÛ ß D× DÑ Dã Ý EÝ 3Ý 2ß Lß %Ý ôO�#ô OôdC�Sõ Cr&   