§
    æ˜ºh"  ã                   ó"  — 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mZmZ d dl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)Ú	BaseModelÚ	SecretStrÚroot_validator)ÚDocumentc                   ó   — 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© ó    úk/var/www/html/services/rag-service/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                   óp   — 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
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Ú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   r   r-   r   r   r   r    r       s…   € € € € € € ðð ð( €O€O�OØÐÐÑØ€J€J�JØ€L�$ÐÐÑà€^ÑÔð˜dð  tð ð ð ñ Ôðð ð 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   r.   r/   r   r   r   r2   r2   =   s1   € € € € € € Ø&Ð&à€M€M�MØ
€I€I�IØ€G€G�G€G€Gr   r2   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.Úindexr3   ÚscoreÚsourceN)r   r   r   r   r.   r/   Úfloatr2   r   r   r   r5   r5   E   s?   € € € € € € ØÐà€J€J�JØ€G€G�GØ€L€L�LØÐÐÑÐÐr   r5   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_idr6   r3   r7   )Úpage_contentÚmetadata)r   r8   r(   r)   r3   r6   r7   )r,   r<   s     r   ÚadaptzArceeDocumentAdapter.adaptQ   sT   € õ Ø'Ô.Ô7ð 'Ô-Ô2Ø+Ô2Ô5à'Ô-Ø$Ô'Ø'Ô-ðð ð
ñ 
ô 
ð 	
r   N)r   r   r   r   Úclassmethodr5   r   rA   r   r   r   r;   r;   N   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)Ú
isinstancer.   r   rE   rH   rF   rG   r   r   r#   ÚformatÚ_make_requestr+   rL   Ú	ExceptionÚ
ValueError)
ÚselfrE   rF   rG   rH   rI   Úarcee_api_key_ÚrouteÚresponseÚes
             r   Ú__init__zArceeWrapper.__init__h   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   rQ   rL   )rS   s    r   Úvalidate_model_training_statusz+ArceeWrapper.validate_model_training_statusŒ   sC   € ØÔ%Ð)<Ò<Ð<Ýð8˜œð 8ð 8ð 8ñô ð ð =Ð<r   Úmethod)Úpostr+   rU   Ú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
        )r`   )rU   )Újsonr_   r`   )éÈ   éÉ   z"Failed to make request. Response: )Ú_make_request_headersÚ_make_request_urlÚgetattrÚrequestsÚstatus_coderQ   Útextrb   )	rS   r\   rU   r^   r_   r`   ÚurlÚreq_typerV   s	            r   rP   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)rN   rE   r   Ú	TypeErrorÚtypeÚget_secret_valueÚupdate)rS   r`   Úapi_keyÚinternal_headerss       r   re   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ú/)rF   rG   )rS   rU   s     r   rf   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é   )rL   Úqueryr   r~   r3   )rH   r+   ÚdictrL   )rS   rv   rw   Ú_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]   rv   ©r\   rU   r^   rj   r   )rP   r   r   r#   r…   )rS   rv   rw   rV   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]   rv   r‡   c           	      óV   — g | ]&}t                                t          d i |¤Ž¦  «        ‘Œ'S rz   )r;   rA   r5   )r{   Údocs     r   r}   z)ArceeWrapper.retrieve.<locals>.<listcomp>ü   sD   € ð 
ð 
ð 
àõ !×&Ò&¥}Ð';Ð';°sÐ';Ð';Ñ<Ô<ð
ð 
ð 
r   Úresultsr   )rP   r   r   r#   r…   )rS   r�   rw   rV   s       r   r   zArceeWrapper.retrieveæ   sw   € ð ×%Ò%ØÝÔ%Ô+Ø3�Ô3ð ð Øðàðð ð &ñ 
ô 
ˆð
ð 
à 	Ô*ð
ñ 
ô 
ð 	
r   )r&   N)NNN)N)r   r   r   r   r
   r.   r   r	   r   r   rX   r[   r   r   r   r‚   rP   re   rf   r…   r   r   r   r   r   r   r   rD   rD   b   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   rD   )Úenumr   Útypingr   r   r   r   r   r	   r
   rh   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.retrieversr   r.   r   r   r    r2   r5   r;   rD   r   r   r   ú<module>r�      sÃ  ðð
 Ð Ð Ð Ð Ð Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà €€€Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ .Ð .Ð .Ð .Ð .Ð .ð9ð 9ð 9ð 9ð 9��dñ 9ô 9ð 9ð$ð $ð $ð $ð $�S˜$ñ $ô $ð $ðð ð ð ð �ñ ô ð ðBð ð ð ð ˜)ñ ô ð ð ð  ð  ð  ð  �Iñ  ô  ð  ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð(]
ð ]
ð ]
ð ]
ð ]
ñ ]
ô ]
ð ]
ð ]
ð ]
r   