Ë
    µŒj2  ã                  ó0  — d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ dZ G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ dee«      Z" G d„ dee"«      Z#y)é    )ÚannotationsN)ÚABCÚabstractmethod)ÚEnum)ÚAnyÚDictÚIteratorÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úpre_init)Ú	BaseModelÚ
ConfigDictÚField)Úenforce_stop_tokenszocid1.generativeaiendpointc                  ó:   — e Zd Zeedd„«       «       Zedd„«       Zy)ÚProviderc                 ó   — y ©N© ©Úselfs    út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/oci_generative_ai.pyÚstop_sequence_keyzProvider.stop_sequence_key   s   € à(+ó    c                 ó   — y r   r   ©r   Úresponses     r   Úcompletion_response_to_textz$Provider.completion_response_to_text   s   € ØADr   N©ÚreturnÚstr©r!   r   r$   r%   )Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r"   r   r   r   r   r      s&   „ ØØÚ+ó ó à+àÚDó ÙDr   r   c                  ó,   — e Zd ZU dZded<   dd„Zdd„Zy)	ÚCohereProviderÚstop_sequencesr%   r   c                ó2   — ddl m} |j                  | _        y ©Nr   ©Úmodels)Úoci.generative_ai_inferencer1   ÚCohereLlmInferenceRequestÚllm_inference_request©r   r1   s     r   Ú__init__zCohereProvider.__init__   s   € Ý6à%+×%EÑ%EˆÕ"r   c                ó\   — |j                   j                  j                  d   j                  S ©Nr   )ÚdataÚinference_responseÚgenerated_textsÚtextr    s     r   r"   z*CohereProvider.completion_response_to_text$   s#   € Ø�}‰}×/Ñ/×?Ñ?ÀÑB×GÑGÐGr   N©r$   ÚNoner&   ©r'   r(   r)   r   Ú__annotations__r6   r"   r   r   r   r,   r,      s   … Ø-Ð�sÓ-óFô
Hr   r,   c                  ó,   — e Zd ZU dZded<   dd„Zdd„Zy)	ÚMetaProviderÚstopr%   r   c                ó2   — ddl m} |j                  | _        y r/   )r2   r1   ÚLlamaLlmInferenceRequestr4   r5   s     r   r6   zMetaProvider.__init__+   s   € Ý6à%+×%DÑ%DˆÕ"r   c                ó\   — |j                   j                  j                  d   j                  S r8   )r9   r:   Úchoicesr<   r    s     r   r"   z(MetaProvider.completion_response_to_text0   s#   € Ø�}‰}×/Ñ/×7Ñ7¸Ñ:×?Ñ?Ð?r   Nr=   r&   r?   r   r   r   rB   rB   (   s   … Ø#Ð�sÓ#óEô
@r   rB   c                  ó    — e Zd ZdZdZdZdZdZy)ÚOCIAuthTypez'OCI authentication types as enumerator.é   é   é   é   N)r'   r(   r)   Ú__doc__ÚAPI_KEYÚSECURITY_TOKENÚINSTANCE_PRINCIPALÚRESOURCE_PRINCIPALr   r   r   rI   rI   4   s   „ Ù1à€GØ€NØÐØÑr   rI   c                  ó  — e Zd ZU dZ edd¬«      Zded<   dZded	<   	 d
Zded<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	  eddd¬«      Zedd„«       Zedd„«       Zdd„Zy) ÚOCIGenAIBasezBase class for OCI GenAI modelsNT)ÚdefaultÚexcluder   ÚclientrO   zOptional[str]Ú	auth_typeÚDEFAULTÚauth_profilez~/.oci/configÚauth_file_locationÚmodel_idÚproviderzOptional[Dict]Úmodel_kwargsÚservice_endpointÚcompartment_idFÚboolÚ	is_streamÚforbidr   )ÚextraÚarbitrary_types_allowedÚprotected_namespacesc                ó–  ‡— |d   �|S 	 ddl Ši d|d   ‰j                  j                  ddœ}|d   t        d«      j                  k(  r9‰j
                  j                  |d	   |d
   ¬«      |d<   |j                  dd«       nó|d   t        d«      j                  k(  r@	 	 	 	 dˆfd„}‰j
                  j                  |d	   |d
   ¬«      |d<    ||d   ¬«      |d<   n˜|d   t        d«      j                  k(  r(‰j                  j                  j                  «       |d<   nU|d   t        d«      j                  k(  r(‰j                  j                  j                  «       |d<   nt        d|d   › d�«      ‚ ‰j                  j                  di |¤Ž|d<   |S # t        $ r}t!        d«      |‚d}~wt"        $ r}t        d|«      |‚d}~ww xY w)zBValidate that OCI config and python package exists in environment.rW   Nr   r_   )é
   éð   )ÚconfigÚsignerr_   Úretry_strategyÚtimeoutrX   rJ   r[   rZ   )Úfile_locationÚprofile_namerj   rk   rK   c                ó:  •— ‰j                   j                  | j                  d«      d «      }t        t	        | j                  d«      «      d¬«      5 }|j                  «       }d d d «       ‰j                  j                  j                  |«      S # 1 sw Y   Œ/xY w)NÚkey_fileÚsecurity_token_filezutf-8)Úencoding)	rk   Úload_private_key_from_fileÚgetÚopenr%   ÚreadÚauthÚsignersÚSecurityTokenSigner)Ú
oci_configÚpkÚfÚ	st_stringÚocis       €r   Úmake_security_token_signerzEOCIGenAIBase.validate_environment.<locals>.make_security_token_signer‹   s‚   ø€ ð Ÿ™×>Ñ>Ø"Ÿ™ zÓ2°Dó�Bô Ü˜JŸN™NÐ+@ÓAÓBÈWõàØ$%§F¡F£H˜	÷ð Ÿ8™8×+Ñ+×?Ñ?À	È2ÓNÐN÷	ð ús   ÁBÂB)r{   rL   rM   z)Please provide valid value to auth_type, z is not valid.zYCould not import oci python package. Please make sure you have the oci package installed.zâCould not authenticate with OCI client.
                If INSTANCE_PRINCIPAL or RESOURCE_PRINCIPAL is used, 
                please check the specified
                auth_profile, auth_file_location and auth_type are valid.)r{   zdict[str, Any]r$   z&'oci.auth.signers.SecurityTokenSigner'r   )r   ÚretryÚDEFAULT_RETRY_STRATEGYrI   Únamerj   Ú	from_fileÚpoprx   ry   Ú%InstancePrincipalsSecurityTokenSignerÚget_resource_principals_signerÚ
ValueErrorÚgenerative_ai_inferenceÚGenerativeAiInferenceClientÚImportErrorÚModuleNotFoundErrorÚ	Exception)ÚclsÚvaluesÚclient_kwargsr€   ÚexÚer   s         @r   Úvalidate_environmentz!OCIGenAIBase.validate_environmentp   s1  ø€ ð
 �(ÑÐ'ØˆMðD	Ûð ØØ$*Ð+=Ñ$>Ø"%§)¡)×"BÑ"BØ$ñˆMð �kÑ"¤k°!£n×&9Ñ&9Ò9Ø*-¯*©*×*>Ñ*>Ø"(Ð)=Ñ">Ø!'¨Ñ!7ð +?ó +�˜hÑ'ð ×!Ñ! (¨DÕ1Ø˜Ñ$¬°A«×(;Ñ(;Ò;ð
OØ .ð
Oà;õ
Oð +.¯*©*×*>Ñ*>Ø"(Ð)=Ñ">Ø!'¨Ñ!7ð +?ó +�˜hÑ'ñ +EØ,¨XÑ6ô+�˜hÒ'ð ˜Ñ$¬°A«×(;Ñ(;Ò;à—H‘H×$Ñ$×JÑJÓLð ˜hÒ'ð ˜Ñ$¬°A«×(;Ñ(;Ò;à—H‘H×$Ñ$×CÑCÓEð ˜hÒ'ô !Ø?Ø˜kÑ*Ð+¨>ð;óð ð
  W˜s×:Ñ:×VÑVñ  Øñ ˆF�8Ñð$ ˆøô ò 	Ü%ðGóð ðûô ò 	ÜðMð óð ðûð	ús$   ŠF	F Æ	GÆF*Æ*GÆ6GÇGc                ó.   — | j                   xs i }i d|i¥S )zGet the identifying parameters.r^   )r^   )r   Ú_model_kwargss     r   Ú_identifying_paramsz OCIGenAIBase._identifying_paramsÀ   s+   € ð ×)Ñ)Ò/¨Rˆð
Ø˜}Ð-ð
ð 	
r   c                óþ   — | j                   �| j                   }nC| j                  €t        d«      ‚| j                  j                  d«      d   j	                  «       }||vrt        d| j                  › d�«      ‚||   S )Nzƒmodel_id is required to derive the provider, please provide the provider explicitly or specify the model_id to derive the provider.Ú.r   z(Invalid provider derived from model_id: zL Please explicitly pass in the supported provider when using custom endpoint)r]   r\   rˆ   ÚsplitÚlower)r   Úprovider_mapr]   s      r   Ú_get_providerzOCIGenAIBase._get_providerÈ   s�   € Ø�=‰=Ð$Ø—}‘}‰Hà�}‰}Ð$Ü ð;óð ð
 —}‘}×*Ñ*¨3Ó/°Ñ2×8Ñ8Ó:ˆHà˜<Ñ'ÜØ:¸4¿=¹=¸/ð J-ð -óð ð
 ˜HÑ%Ð%r   )r�   r   r$   r   ©r$   úMapping[str, Any])r›   rž   r$   r   )r'   r(   r)   rN   r   rW   r@   rX   rZ   r[   r\   r]   r^   r_   r`   rb   r   Úmodel_configr   r“   r*   r–   rœ   r   r   r   rT   rT   =   sÞ   … Ù)á ¨dÔ3€FˆCÓ3à(€Iˆ}Ó(ðð #,€L�-Ó+ðð )8Ð˜Ó7ðð #€HˆmÓ"Ø7à"€HˆmÓ"ðð
 $(€L�.Ó'Ø0à&*Ð�mÓ*Øà$(€N�MÓ(Øà€IˆtÓØ1áØ°È2ô€Lð òMó ðMð^ ò
ó ð
ô&r   rT   c                  óº   — e Zd ZdZ edd¬«      Zedd„«       Zedd„«       Zedd„«       Z		 	 	 	 	 	 	 	 dd„Z
dd	„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zy
)ÚOCIGenAIaÀ  OCI large language models.

    To authenticate, the OCI client uses the methods described in
    https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_authentication_methods.htm

    The authentifcation method is passed through auth_type and should be one of:
    API_KEY (default), SECURITY_TOKEN, INSTANCE_PRINCIPAL, RESOURCE_PRINCIPAL

    Make sure you have the required policies (profile/roles) to
    access the OCI Generative AI service.
    If a specific config profile is used, you must pass
    the name of the profile (from ~/.oci/config) through auth_profile.
    If a specific config file location is used, you must pass
    the file location where profile name configs present
    through auth_file_location

    To use, you must provide the compartment id
    along with the endpoint url, and model id
    as named parameters to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms import OCIGenAI

            llm = OCIGenAI(
                    model_id="MY_MODEL_ID",
                    service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
                    compartment_id="MY_OCID"
                )
    rc   T)rd   re   c                 ó   — y)zReturn type of llm.Úoci_generative_ai_completionr   r   s    r   Ú	_llm_typezOCIGenAI._llm_type  s   € ð .r   c                ó,   — t        «       t        «       dœS )zGet the provider map)ÚcohereÚmeta)r,   rB   r   s    r   Ú_provider_mapzOCIGenAI._provider_map  s   € ô %Ó&Ü “Nñ
ð 	
r   c                ó:   — | j                  | j                  ¬«      S )z Get the internal provider object)r›   )rœ   r¨   r   s    r   Ú	_providerzOCIGenAI._provider  s   € ð ×!Ñ!¨t×/AÑ/AÐ!ÓBÐBr   c           	     óê  — ddl m} | j                  xs i }|�||| j                  j                  <   | j
                  €t        d«      ‚| j
                  j                  t        «      r|j                  | j
                  ¬«      }n|j                  | j
                  ¬«      }i |¥|¥}||d<   | j                  |d<   |j                  | j                  | | j                  j                  d	i |¤Ž¬«      }|S )
Nr   r0   zDmodel_id is required to call the model, please provide the model_id.)Úendpoint_id)r\   Úpromptrb   )r`   Úserving_modeÚinference_requestr   )r2   r1   r^   rª   r   r\   rˆ   Ú
startswithÚCUSTOM_ENDPOINT_PREFIXÚDedicatedServingModeÚOnDemandServingModerb   ÚGenerateTextDetailsr`   r4   )	r   r­   rC   Úkwargsr1   r•   r®   Úinference_paramsÚinvocation_objs	            r   Ú_prepare_invocation_objectz#OCIGenAI._prepare_invocation_object  sù   € õ 	7à×)Ñ)Ò/¨RˆØÐØ>BˆM˜$Ÿ.™.×:Ñ:Ñ;à�=‰=Ð ÜØVóð ð �=‰=×#Ñ#Ô$:Ô;Ø!×6Ñ6À4Ç=Á=Ð6ÓQ‰Là!×5Ñ5¸t¿}¹}Ð5ÓMˆLà6˜mÐ6¨vÐ6ÐØ%+Ð˜Ñ"Ø(,¯©Ð˜Ñ%à×3Ñ3Ø×.Ñ.Ø%ØB˜dŸn™n×BÑBÑVÐEUÑVð 4ó 
ˆð Ðr   c                óX   — | j                   j                  |«      }|�t        ||«      }|S r   )rª   r"   r   )r   r!   rC   r<   s       r   Ú_process_responsezOCIGenAI._process_response4  s-   € Ø�~‰~×9Ñ9¸(ÓCˆàÐÜ& t¨TÓ2ˆDàˆr   Nc                ó  — | j                   r;d} | j                  |||fi |¤ŽD ]  }||j                  z  }Œ |�t        ||«      }|S | j	                  |||«      }| j
                  j                  |«      }| j                  ||«      S )ak  Call out to OCIGenAI generate 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.

        Example:
            .. code-block:: python

               response = llm.invoke("Tell me a joke.")
        Ú )rb   Ú_streamr<   r   r¸   rW   Úgenerate_textrº   )	r   r­   rC   Úrun_managerrµ   r<   Úchunkr·   r!   s	            r   Ú_callzOCIGenAI._call<  s�   € ð* �>Š>ØˆDØ%˜Ÿ™ f¨d°KÑJÀ6ÔJ�Ø˜Ÿ
™
Ñ"‘ð KàÐÜ*¨4°Ó6�ØˆKà×8Ñ8¸ÀÀvÓNˆØ—;‘;×,Ñ,¨^Ó<ˆØ×%Ñ% h°Ó5Ð5r   c              +  óh  K  — d| _         | j                  |||«      }| j                  j                  |«      }|j                  j                  «       D ]\  }t        j                  |j                  «      }d|v r|d   }	nd}	t        |	¬«      }
|r|j                  |
j                  |
¬«       |
–— Œ^ y­w)ac  Stream OCIGenAI LLM on given prompt.

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

        Returns:
            An iterator of GenerationChunks.

        Example:
            .. code-block:: python

            response = llm.stream("Tell me a joke.")
        Tr<   r¼   )r<   )rÀ   N)rb   r¸   rW   r¾   r9   ÚeventsÚjsonÚloadsr   Úon_llm_new_tokenr<   )r   r­   rC   r¿   rµ   r·   r!   ÚeventÚ	json_loadÚevent_data_textrÀ   s              r   r½   zOCIGenAI._stream]  s    è ø€ ð, ˆŒØ×8Ñ8¸ÀÀvÓNˆØ—;‘;×,Ñ,¨^Ó<ˆà—]‘]×)Ñ)Ö+ˆEÜŸ
™
 5§:¡:Ó.ˆIØ˜Ñ"Ø"+¨FÑ"3‘à"$�Ü#¨Ô9ˆEÙØ×,Ñ,¨U¯Z©Z¸uÐ,ÔEØ‹Kñ ,ùs   ‚B0B2r#   r�   )r$   r   )r­   r%   rC   úOptional[List[str]]rµ   úDict[str, Any]r$   rË   )r!   r   rC   rÊ   r$   r%   )NN)
r­   r%   rC   rÊ   r¿   ú"Optional[CallbackManagerForLLMRun]rµ   r   r$   r%   )
r­   r%   rC   rÊ   r¿   rÌ   rµ   r   r$   zIterator[GenerationChunk])r'   r(   r)   rN   r   rŸ   r*   r¤   r¨   rª   r¸   rº   rÁ   r½   r   r   r   r¡   r¡   Ý   sý   „ ññ@ ØØ $ô€Lð
 ò.ó ð.ð ò
ó ð
ð òCó ðCðØðØ!4ðØ>Lðà	óó>ð %)Ø:>ð	6àð6ð "ð6ð 8ð	6ð
 ð6ð 
ó6ðH %)Ø:>ð	#àð#ð "ð#ð 8ð	#ð
 ð#ð 
#ô#r   r¡   )$Ú
__future__r   rÄ   Úabcr   r   Úenumr   Útypingr   r   r	   r
   r   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.utilsr   Úpydanticr   r   r   Úlangchain_community.llms.utilsr   r±   r   r,   rB   rI   rT   r¡   r   r   r   Ú<module>r×      s‰   ðÝ "ã ß #Ý ß ?× ?å =Ý 3Ý 2Ý )ß 1Ñ 1å >à5Ð ôEˆsô Eô	H�Xô 	Hô	@�8ô 	@ô�$ô ô]&�9˜cô ]&ô@cˆs�Lõ cr   