§
    šŠtj"  ã                   ó"  — d dl m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mZmZ  G d„ dee¦  «        Z G d„ d	ee¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )é    )ÚEnum)ÚAnyÚDictÚListÚLiteralÚMappingÚOptionalÚUnionN)ÚDocument)Ú	BaseModelÚ	SecretStrÚmodel_validatorc                   ó   — e Zd ZdZdZdZdZdS )Ú
ArceeRoutez1Routes available for the Arcee API as enumerator.zmodels/generatezmodels/retrievezmodels/status/{id_or_name}N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚgenerateÚretrieveÚmodel_training_status© ó    úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/arcee.pyr   r      s&   € € € € € Ø;Ð;à €HØ €HØ8ÐÐÐr   r   c                   ó   — e Zd ZdZdZdZdS )ÚDALMFilterTypez:Filter types available for a DALM retrieval as enumerator.Úfuzzy_searchÚstrict_searchN)r   r   r   r   r   r   r   r   r   r   r      s   € € € € € ØDÐDà!€LØ#€M€M€Mr   r   c                   ó„   — e Zd ZU dZeed<   eed<   eed<   dZeed<    e	d¬¦  «        e
d	ed
efd„¦   «         ¦   «         ZdS )Ú
DALMFilteraX  Filters available for a DALM retrieval and generation.

    Arguments:
        field_name: The field to filter on. Can be 'document' or 'name' to filter
            on your document's raw text or title. Any other field will be presumed
            to be a metadata field you included when uploading your context data
        filter_type: Currently 'fuzzy_search' and 'strict_search' are supported.
            'fuzzy_search' means a fuzzy search on the provided field is performed.
            The exact strict doesn't need to exist in the document
            for this to find a match.
            Very useful for scanning a document for some keyword terms.
            'strict_search' means that the exact string must appear
            in the provided field.
            This is NOT an exact eq filter. ie a document with content
            "the happy dog crossed the street" will match on a strict_search of
            "dog" but won't match on "the dog".
            Python equivalent of `return search_string in full_string`.
        value: The actual value to search for in the context data/metadata
    Ú
field_nameÚfilter_typeÚvalueFÚ_is_metadataÚbefore)ÚmodeÚvaluesÚreturnc                 ó:   — |                      d¦  «        dv|d<   |S )zDdocument and name are reserved arcee keys. Anything else is metadatar!   )ÚdocumentÚnameÚ_is_meta)Úget)Úclsr'   s     r   Úset_metazDALMFilter.set_meta6   s%   € ð $ŸZšZ¨Ñ5Ô5Ð=QÐQˆˆzÑØˆr   N)r   r   r   r   ÚstrÚ__annotations__r   r$   Úboolr   Úclassmethodr   r   r/   r   r   r   r    r       s”   € € € € € € ðð ð( €O€O�OØÐÐÑØ€J€J�JØ€L�$ÐÐÑà€_˜(Ð#Ñ#Ô#Øð˜dð  sð ð ð ñ „[ñ $Ô#ðð ð r   r    c                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )ÚArceeDocumentSourcezSource of an Arcee document.r*   r+   ÚidN)r   r   r   r   r0   r1   r   r   r   r5   r5   >   s1   € € € € € € Ø&Ð&à€M€M�MØ
€I€I�IØ€G€G�G€G€Gr   r5   c                   ó<   — e Zd ZU dZeed<   eed<   eed<   eed<   dS )ÚArceeDocumentzArcee document.Úindexr6   ÚscoreÚsourceN)r   r   r   r   r0   r1   Úfloatr5   r   r   r   r8   r8   F   s?   € € € € € € ØÐà€J€J�JØ€G€G�GØ€L€L�LØÐÐÑÐÐr   r8   c                   ó2   — e Zd ZdZededefd„¦   «         ZdS )ÚArceeDocumentAdapterzAdapter for Arcee documentsÚarcee_documentr(   c           	      óŠ   — t          |j        j        |j        j        |j        j        |j        |j        |j        dœ¬¦  «        S )z=Adapts an `ArceeDocument` to a langchain's `Document` object.)r+   Ú	source_idr9   r6   r:   )Úpage_contentÚmetadata)r   r;   r*   r+   r6   r9   r:   )r.   r?   s     r   ÚadaptzArceeDocumentAdapter.adaptR   sT   € õ Ø'Ô.Ô7ð 'Ô-Ô2Ø+Ô2Ô5à'Ô-Ø$Ô'Ø'Ô-ðð ð
ñ 
ô 
ð 	
r   N)r   r   r   r   r3   r8   r   rD   r   r   r   r>   r>   O   sF   € € € € € Ø%Ð%àð
 =ð 
°Xð 
ð 
ð 
ñ „[ð
ð 
ð 
r   r>   c                   ó€  — e Zd ZdZdeeef         dededeeee	f                  def
d„Z
dd
„Z	 	 	 dded         deeef         deeee	f                  dee         dee         defd„Zddee         defd„Zdeeef         defd„Zdedeee	f         deee	f         fd„Zdede	defd„Zdede	dee         fd„Zd	S )ÚArceeWrapperzMWrapper for Arcee API.

    For more details, see: https://www.arcee.ai/
    Úarcee_api_keyÚarcee_api_urlÚarcee_api_versionÚmodel_kwargsÚ
model_namec                 ó¼  — t          |t          ¦  «        rt          |¦  «        }n|}|| _        || _        || _        || _        	 t          j        j	         
                    |¬¦  «        }|                      d|¦  «        }|                     d¦  «        | _        |                     d¦  «        | _        dS # t          $ r}	t          d|› d|	› �¦  «        |	‚d}	~	ww xY w)a5  Initialize ArceeWrapper.

        Arguments:
            arcee_api_key: API key for Arcee API.
            arcee_api_url: URL for Arcee API.
            arcee_api_version: Version of Arcee API.
            model_kwargs: Keyword arguments for Arcee API.
            model_name: Name of an Arcee model.
        )Ú
id_or_namer-   Úmodel_idÚstatusz2Error while validating model training status for 'z': N)Ú
isinstancer0   r   rG   rJ   rH   rI   r   r   r#   ÚformatÚ_make_requestr-   rN   Ú	ExceptionÚ
ValueError)
ÚselfrG   rH   rI   rJ   rK   Úarcee_api_key_ÚrouteÚresponseÚes
             r   Ú__init__zArceeWrapper.__init__i   sõ   € õ" �m¥SÑ)Ô)ð 	+Ý& }Ñ5Ô5ˆNˆNà*ˆNØ(6ˆÔØ(ˆÔØ*ˆÔØ!2ˆÔð	ÝÔ4Ô:×AÒAÈZÐAÑXÔXˆEØ×)Ò)¨%°Ñ7Ô7ˆHØ$ŸLšL¨Ñ4Ô4ˆDŒMØ)1¯ª°hÑ)?Ô)?ˆDÔ&Ð&Ð&øÝð 	ð 	ð 	ÝØWÀZÐWÐWÐTUÐWÐWñô àðøøøøð	øøøs   ÁA/B6 Â6
CÃ CÃCr(   Nc                 óL   — | j         dk    rt          d| j        › d�¦  «        ‚d S )NÚtraining_completezModel z4 is not ready. Please wait for training to complete.)r   rS   rN   )rU   s    r   Úvalidate_model_training_statusz+ArceeWrapper.validate_model_training_status�   sC   € ØÔ%Ð)<Ò<Ð<Ýð8˜œð 8ð 8ð 8ñô ð ð =Ð<r   Úmethod)Úpostr-   rW   ÚbodyÚparamsÚheadersc                 ó
  — |                       |¬¦  «        }|                      |¬¦  «        }t          t          |¦  «        } |||||¬¦  «        }|j        dvrt          d|j        › �¦  «        ‚|                     ¦   «         S )a  Make a request to the Arcee API
        Args:
            method: The HTTP method to use
            route: The route to call
            body: The body of the request
            params: The query params of the request
            headers: The headers of the request
        )rb   )rW   )Újsonra   rb   )éÈ   éÉ   z"Failed to make request. Response: )Ú_make_request_headersÚ_make_request_urlÚgetattrÚrequestsÚstatus_coderS   Útextrd   )	rU   r^   rW   r`   ra   rb   ÚurlÚreq_typerX   s	            r   rR   zArceeWrapper._make_request”   sŒ   € ð  ×,Ò,°WÐ,Ñ=Ô=ˆØ×$Ò$¨5Ð$Ñ1Ô1ˆå�8 VÑ,Ô,ˆà�8˜C d°6À7ÐKÑKÔKˆØÔ zÐ1Ð1ÝÐPÀÄÐPÐPÑQÔQÐQØ�}Š}‰ŒÐr   c                 óð   — |pi }t          | j        t          ¦  «        s$t          dt	          | j        ¦  «        › �¦  «        ‚| j                             ¦   «         }|ddœ}|                     |¦  «         |S )Nz'arcee_api_key must be a SecretStr. Got zapplication/json)zX-TokenzContent-Type)rP   rG   r   Ú	TypeErrorÚtypeÚget_secret_valueÚupdate)rU   rb   Úapi_keyÚinternal_headerss       r   rg   z"ArceeWrapper._make_request_headers®   s‹   € Ø�-˜RˆÝ˜$Ô,­iÑ8Ô8ð 	ÝØT½$¸tÔ?QÑ:RÔ:RÐTÐTñô ð ð Ô$×5Ò5Ñ7Ô7ˆàØ.ð
ð 
Ðð 	�ŠÐ'Ñ(Ô(Ð(Øˆr   c                 ó*   — | j         › d| j        › d|› �S )Nú/)rH   rI   )rU   rW   s     r   rh   zArceeWrapper._make_request_url¼   s$   € ØÔ$ÐGÐG tÔ'=ÐGÐGÀÐGÐGÐGr   ÚpromptÚkwargsc                 óÄ   — | j         pi }i |¥|¥}d„ |                     dg ¦  «        D ¦   «         }t          | j        ||                     dd¦  «        || j        ¬¦  «        S )z;Make the request body for generate/retrieve models endpointc                 ó&   — g | ]}t          d i |¤Ž‘ŒS ©r   )r    )Ú.0Úfs     r   ú
<listcomp>z>ArceeWrapper._make_request_body_for_models.<locals>.<listcomp>Æ   s"   € ÐGÐGÐG q•:�?�? �?�?ÐGÐGÐGr   ÚfiltersÚsizeé   )rN   Úqueryr�   r€   r6   )rJ   r-   ÚdictrN   )rU   rx   ry   Ú_model_kwargsÚ_paramsr€   s         r   Ú_make_request_body_for_modelsz*ArceeWrapper._make_request_body_for_models¿   sy   € ð Ô)Ð/¨RˆØ-�]Ð- fÐ-ˆàGÐG¨G¯KªK¸	À2Ñ,FÔ,FÐGÑGÔGˆÝØ”]ØØ—’˜V QÑ'Ô'ØØŒ}ð
ñ 
ô 
ð 	
r   c           	      óz   — |                       dt          j        j         | j        dd|i|¤Ž¬¦  «        }|d         S )a+  Generate text from Arcee DALM.

        Args:
            prompt: Prompt to generate text from.
            size: The max number of context results to retrieve. Defaults to 3.
              (Can be less if filters are provided).
            filters: Filters to apply to the context dataset.
        r_   rx   ©r^   rW   r`   rl   r   )rR   r   r   r#   r‡   )rU   rx   ry   rX   s       r   r   zArceeWrapper.generateÏ   s^   € ð ×%Ò%ØÝÔ%Ô+Ø3�Ô3ð ð Øðàðð ð &ñ 
ô 
ˆð ˜ÔÐr   rƒ   c           	      óŽ   — |                       dt          j        j         | j        dd|i|¤Ž¬¦  «        }d„ |d         D ¦   «         S )aI  Retrieve {size} contexts with your retriever for a given query

        Args:
            query: Query to submit to the model
            size: The max number of context results to retrieve. Defaults to 3.
              (Can be less if filters are provided).
            filters: Filters to apply to the context dataset.
        r_   rx   r‰   c           	      óV   — g | ]&}t                                t          d i |¤Ž¦  «        ‘Œ'S r|   )r>   rD   r8   )r}   Údocs     r   r   z)ArceeWrapper.retrieve.<locals>.<listcomp>ý   sD   € ð 
ð 
ð 
àõ !×&Ò&¥}Ð';Ð';°sÐ';Ð';Ñ<Ô<ð
ð 
ð 
r   Úresultsr   )rR   r   r   r#   r‡   )rU   rƒ   ry   rX   s       r   r   zArceeWrapper.retrieveç   sw   € ð ×%Ò%ØÝÔ%Ô+Ø3�Ô3ð ð Øðàðð ð &ñ 
ô 
ˆð
ð 
à 	Ô*ð
ñ 
ô 
ð 	
r   )r(   N)NNN)N)r   r   r   r   r
   r0   r   r	   r   r   rZ   r]   r   r   r   r„   rR   rg   rh   r‡   r   r   r   r   r   r   r   rF   rF   c   s  € € € € € ðð ð
"à˜S )˜^Ô,ð"ð ð"ð ð	"ð
 ˜t C¨ Hœ~Ô.ð"ð ð"ð "ð "ð "ðHð ð ð ð -1Ø!%Ø"&ðð à˜Ô&ðð �Z �_Ô%ðð �w˜s C˜xÔ(Ô)ð	ð
 ˜”ðð ˜$”ðð 
ðð ð ð ð4ð ¨X°d¬^ð Àtð ð ð ð ðH u¨Z¸¨_Ô'=ð HÀ#ð Hð Hð Hð Hð
Øð
Ø%,¨S°#¨XÔ%6ð
à	��c�Ô	ð
ð 
ð 
ð 
ð  àð ð ð ð 
ð	 ð  ð  ð  ð0
àð
ð ð
ð 
ˆhŒð	
ð 
ð 
ð 
ð 
ð 
r   rF   )Úenumr   Útypingr   r   r   r   r   r	   r
   rj   Úlangchain_core.retrieversr   Úpydanticr   r   r   r0   r   r   r    r5   r8   r>   rF   r   r   r   ú<module>r’      sÃ  ðð
 Ð Ð Ð Ð Ð Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð9ð 9ð 9ð 9ð 9��dñ 9ô 9ð 9ð$ð $ð $ð $ð $�S˜$ñ $ô $ð $ðð ð ð ð �ñ ô ð ðDð ð ð ð ˜)ñ ô ð ð ð  ð  ð  ð  �Iñ  ô  ð  ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð(]
ð ]
ð ]
ð ]
ð ]
ñ ]
ô ]
ð ]
ð ]
ð ]
r   