§
    šŠtjé1  ã                  óV  — 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#dS )é    )ÚannotationsN)ÚABCÚabstractmethod)ÚEnum)ÚAnyÚDictÚIteratorÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Úpre_init)Ú	BaseModelÚ
ConfigDictÚField)Úenforce_stop_tokenszocid1.generativeaiendpointc                  óN   — e Zd Zeedd„¦   «         ¦   «         Zed	d„¦   «         ZdS )
ÚProviderÚreturnÚstrc                ó   — d S ©N© ©Úselfs    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/oci_generative_ai.pyÚstop_sequence_keyzProvider.stop_sequence_key   s   € à(+¨ó    Úresponser   c                ó   — d S r   r   ©r   r!   s     r   Úcompletion_response_to_textz$Provider.completion_response_to_text   s   € ØADÀr    N©r   r   ©r!   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r$   r   r    r   r   r      sF   € € € € € ØØØ+Ð+Ð+ñ „^ñ „Xà+àØDÐDÐDñ „^ØDÐDÐDr    r   c                  ó.   — e Zd ZU dZded<   dd„Zdd	„Zd
S )ÚCohereProviderÚstop_sequencesr   r   r   ÚNonec                ó*   — ddl m} |j        | _        d S ©Nr   ©Úmodels)Úoci.generative_ai_inferencer2   ÚCohereLlmInferenceRequestÚllm_inference_request©r   r2   s     r   Ú__init__zCohereProvider.__init__   s%   € Ø6Ð6Ð6Ð6Ð6Ð6à%+Ô%EˆÔ"Ð"Ð"r    r!   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ÐGr    N©r   r.   r&   ©r'   r(   r)   r   Ú__annotations__r7   r$   r   r    r   r,   r,      sZ   € € € € € € Ø-ÐÐ-Ð-Ð-Ñ-ðFð Fð Fð Fð
Hð Hð Hð Hð Hð Hr    r,   c                  ó.   — e Zd ZU dZded<   dd„Zdd	„Zd
S )ÚMetaProviderÚstopr   r   r   r.   c                ó*   — ddl m} |j        | _        d S r0   )r3   r2   ÚLlamaLlmInferenceRequestr5   r6   s     r   r7   zMetaProvider.__init__+   s%   € Ø6Ð6Ð6Ð6Ð6Ð6à%+Ô%DˆÔ"Ð"Ð"r    r!   r   c                ó:   — |j         j        j        d         j        S r9   )r:   r;   Úchoicesr=   r#   s     r   r$   z(MetaProvider.completion_response_to_text0   s   € ØŒ}Ô/Ô7¸Ô:Ô?Ð?r    Nr>   r&   r?   r   r    r   rB   rB   (   sZ   € € € € € € Ø#ÐÐ#Ð#Ð#Ñ#ðEð Eð Eð Eð
@ð @ð @ð @ð @ð @r    rB   c                  ó"   — e Zd ZdZdZdZdZdZdS )Ú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Ð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dS )%Ú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_namespacesÚvaluesr   r   c                ó¾  ‡— |d         �|S 	 ddl Ši d|d         ‰j        j        ddœ}|d         t          d¦  «        j        k    rB‰j                             |d	         |d
         ¬¦  «        |d<   |                     dd¦  «         nþ|d         t          d¦  «        j        k    rGdˆfd„}‰j                             |d	         |d
         ¬¦  «        |d<    ||d         ¬¦  «        |d<   n™|d         t          d¦  «        j        k    r"‰j        j	         
                    ¦   «         |d<   nY|d         t          d¦  «        j        k    r"‰j        j	                             ¦   «         |d<   nt          d|d         › d�¦  «        ‚ ‰j        j        di |¤Ž|d<   n@# t          $ r}t!          d¦  «        |‚d}~wt"          $ r}t          d|¦  «        |‚d}~ww xY w|S )zBValidate that OCI config and python package exists in environment.rW   Nr   r_   )é
   éð   )ÚconfigÚsignerr_   Úretry_strategyÚtimeoutrX   rJ   r[   rZ   )Úfile_locationÚprofile_namerk   rl   rK   Ú
oci_configúdict[str, Any]r   ú&'oci.auth.signers.SecurityTokenSigner'c                óZ  •— ‰j                              |                      d¦  «        d ¦  «        }t          t	          |                      d¦  «        ¦  «        d¬¦  «        5 }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   ‰j        j                             ||¦  «        S )NÚkey_fileÚsecurity_token_filezutf-8)Úencoding)	rl   Úload_private_key_from_fileÚgetÚopenr   ÚreadÚauthÚsignersÚSecurityTokenSigner)rq   ÚpkÚfÚ	st_stringÚocis       €r   Úmake_security_token_signerzEOCIGenAIBase.validate_environment.<locals>.make_security_token_signer‹   sÛ   ø€ ð œ×>Ò>Ø"Ÿš zÑ2Ô2°Dñô �Bõ Ý˜JŸNšNÐ+@ÑAÔAÑBÔBÈWðñ ô ð -àØ$%§F¢F¡H¤H˜	ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð œ8Ô+×?Ò?À	È2ÑNÔNÐNs   Á!BÂBÂ	B)rq   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.)rq   rr   r   rs   r   )r‚   ÚretryÚDEFAULT_RETRY_STRATEGYrI   Únamerk   Ú	from_fileÚpopr|   r}   Ú%InstancePrincipalsSecurityTokenSignerÚget_resource_principals_signerÚ
ValueErrorÚgenerative_ai_inferenceÚGenerativeAiInferenceClientÚImportErrorÚModuleNotFoundErrorÚ	Exception)Úclsrg   Úclient_kwargsrƒ   ÚexÚer‚   s         @r   Úvalidate_environmentz!OCIGenAIBase.validate_environmentp   s¥  ø€ ð
 �(ÔÐ'ØˆMðD	ØˆJˆJˆJð ØØ$*Ð+=Ô$>Ø"%¤)Ô"BØ$ðð ˆMð �kÔ"¥k°!¡n¤nÔ&9Ò9Ð9Ø*-¬*×*>Ò*>Ø"(Ð)=Ô">Ø!'¨Ô!7ð +?ñ +ô +�˜hÑ'ð ×!Ò! (¨DÑ1Ô1Ð1Ð1Ø˜Ô$­°A©¬Ô(;Ò;Ð;ð
Oð 
Oð 
Oð 
Oð 
Oð 
Oð +.¬*×*>Ò*>Ø"(Ð)=Ô">Ø!'¨Ô!7ð +?ñ +ô +�˜hÑ'ð +EÐ*DØ,¨XÔ6ð+ñ +ô +�˜hÑ'Ð'ð ˜Ô$­°A©¬Ô(;Ò;Ð;à”HÔ$×JÒJÑLÔLð ˜hÑ'Ð'ð ˜Ô$­°A©¬Ô(;Ò;Ð;à”HÔ$×CÒCÑEÔEð ˜hÑ'Ð'õ !ð;Ø˜kÔ*ð;ð ;ð ;ñô ð ð
  W˜sÔ:ÔVð  ð  Øð ð  ˆF�8ÑÐøõ ð 	ð 	ð 	Ý%ðGñô ð ðøøøøõ ð 	ð 	ð 	ÝðMð ñô ð ðøøøøð	øøøð ˆs$   �FF Æ
GÆ'F7Æ7GÇGÇGúMapping[str, Any]c                ó    — | j         pi }i d|i¥S )zGet the identifying parameters.r^   )r^   )r   Ú_model_kwargss     r   Ú_identifying_paramsz OCIGenAIBase._identifying_paramsÀ   s(   € ð Ô)Ð/¨Rˆð
Ø˜}Ð-ð
ð 	
r    Úprovider_mapc                óø   — | j         �| j         }nH| j        €t          d¦  «        ‚| j                             d¦  «        d                              ¦   «         }||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   rš   r]   s      r   Ú_get_providerzOCIGenAIBase._get_providerÈ   sœ   € ØŒ=Ð$Ø”}ˆHˆHàŒ}Ð$Ý ð;ñô ð ð
 ”}×*Ò*¨3Ñ/Ô/°Ô2×8Ò8Ñ:Ô:ˆHà˜<Ð'Ð'Ýð-¸4¼=ð -ð -ð -ñô ð ð
 ˜HÔ%Ð%r    )rg   r   r   r   ©r   r–   )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   =   sx  € € € € € € Ø)Ð)à�% ¨dÐ3Ñ3Ô3€FÐ3Ð3Ð3Ñ3à(€IÐ(Ð(Ð(Ñ(ðð #,€LÐ+Ð+Ð+Ñ+ðð )8ÐÐ7Ð7Ð7Ñ7ðð #€HÐ"Ð"Ð"Ñ"Ø7à"€HÐ"Ð"Ð"Ñ"ðð
 $(€LÐ'Ð'Ð'Ñ'Ø0à&*ÐÐ*Ð*Ð*Ñ*Øà$(€NÐ(Ð(Ð(Ñ(Øà€IÐÐÐÑØ1à�:Ø°È2ðñ ô €Lð ðMð Mð Mñ „XðMð^ ð
ð 
ð 
ñ „Xð
ð&ð &ð &ð &ð &ð &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dS )"Ú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   r   r   c                ó   — dS )zReturn type of llm.Úoci_generative_ai_completionr   r   s    r   Ú	_llm_typezOCIGenAI._llm_type  s
   € ð .Ð-r    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”Nð
ð 
ð 	
r    r   c                ó8   — |                       | j        ¬¦  «        S )z Get the internal provider object)rš   )rŸ   rª   r   s    r   Ú	_providerzOCIGenAI._provider  s   € ð ×!Ò!¨tÔ/AÐ!ÑBÔBÐBr    ÚpromptrC   úOptional[List[str]]ÚkwargsúDict[str, Any]c           	     ó¢  — ddl m} | j        pi }|�||| j        j        <   | j        €t          d¦  «        ‚| j                             t          ¦  «        r| 	                    | j        ¬¦  «        }n| 
                    | j        ¬¦  «        }i |¥|¥}||d<   | j        |d<   |                     | j        | | j        j        d	i |¤Ž¬¦  «        }|S )
Nr   r1   zDmodel_id is required to call the model, please provide the model_id.)Úendpoint_id)r\   r­   rb   )r`   Úserving_modeÚinference_requestr   )r3   r2   r^   r¬   r   r\   r‹   Ú
startswithÚCUSTOM_ENDPOINT_PREFIXÚDedicatedServingModeÚOnDemandServingModerb   ÚGenerateTextDetailsr`   r5   )	r   r­   rC   r¯   r2   r˜   r³   Úinference_paramsÚinvocation_objs	            r   Ú_prepare_invocation_objectz#OCIGenAI._prepare_invocation_object  s  € ð 	7Ð6Ð6Ð6Ð6Ð6àÔ)Ð/¨RˆØÐØ>BˆM˜$œ.Ô:Ñ;àŒ=Ð ÝØVñô ð ð Œ=×#Ò#Õ$:Ñ;Ô;ð 	NØ!×6Ò6À4Ä=Ð6ÑQÔQˆLˆLà!×5Ò5¸t¼}Ð5ÑMÔMˆLà6˜mÐ6¨vÐ6ÐØ%+Ð˜Ñ"Ø(,¬Ð˜Ñ%à×3Ò3ØÔ.Ø%ØB˜dœnÔBÐVÐVÐEUÐVÐVð 4ñ 
ô 
ˆð Ðr    r!   c                ó^   — | j                              |¦  «        }|�t          ||¦  «        }|S r   )r¬   r$   r   )r   r!   rC   r=   s       r   Ú_process_responsezOCIGenAI._process_response4  s1   € ØŒ~×9Ò9¸(ÑCÔCˆàÐÝ& t¨TÑ2Ô2ˆDàˆr    NÚrun_managerú"Optional[CallbackManagerForLLMRun]c                ó  — | j         r3d} | j        |||fi |¤ŽD ]}||j        z  }Œ|�t          ||¦  «        }|S |                      |||¦  «        }| 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   r¿   r¯   r=   Úchunkr»   r!   s	            r   Ú_callzOCIGenAI._call<  s¤   € ð* Œ>ð 	ØˆDØ%˜œ f¨d°KÐJÐJÀ6ÐJÐJð #ð #�Ø˜œ
Ñ"��ØÐÝ*¨4°Ñ6Ô6�ØˆKà×8Ò8¸ÀÀvÑNÔNˆØ”;×,Ò,¨^Ñ<Ô<ˆØ×%Ò% h°Ñ5Ô5Ð5r    úIterator[GenerationChunk]c              +  óf  K  — d| _         |                      |||¦  «        }| j                             |¦  «        }|j                             ¦   «         D ]\}t          j        |j        ¦  «        }d|v r	|d         }	nd}	t          |	¬¦  «        }
|r| 	                    |
j
        |
¬¦  «         |
V — Œ]dS )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Ä   r:   Ú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ÔNˆØ”;×,Ò,¨^Ñ<Ô<ˆà”]×)Ò)Ñ+Ô+ð 		ð 		ˆEÝœ
 5¤:Ñ.Ô.ˆIØ˜Ð"Ð"Ø"+¨FÔ"3��à"$�Ý#¨Ð9Ñ9Ô9ˆEØð FØ×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEØˆKˆKˆKˆKð		ð 		r    r%   r    )r   r   )r­   r   rC   r®   r¯   r°   r   r°   )r!   r   rC   r®   r   r   )NN)
r­   r   rC   r®   r¿   rÀ   r¯   r   r   r   )
r­   r   rC   r®   r¿   rÀ   r¯   r   r   rÇ   )r'   r(   r)   rN   r   r¡   r*   r¦   rª   r¬   r¼   r¾   rÆ   rÃ   r   r    r   r£   r£   Ý   s  € € € € € ðð ð@ �:ØØ $ðñ ô €Lð
 ð.ð .ð .ñ „Xð.ð ð
ð 
ð 
ñ „Xð
ð ðCð Cð Cñ „XðCðð ð ð ð>ð ð ð ð %)Ø:>ð	6ð 6ð 6ð 6ð 6ðH %)Ø:>ð	#ð #ð #ð #ð #ð #ð #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Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à >Ð >Ð >Ð >Ð >Ð >à5Ð ðEð Eð Eð Eð Eˆsñ Eô Eð Eð	Hð 	Hð 	Hð 	Hð 	H�Xñ 	Hô 	Hð 	Hð	@ð 	@ð 	@ð 	@ð 	@�8ñ 	@ô 	@ð 	@ðð ð ð ð �$ñ ô ð ð]&ð ]&ð ]&ð ]&ð ]&�9˜cñ ]&ô ]&ð ]&ð@cð cð cð cð cˆs�Lñ cô cð cð cð cr    