§
    øžyjô
  ã                  óè   — d Z ddlmZ ddlZddlZddlZddlmZ ddlZ	ddl
mZ ddlmZmZ  ej        e¦  «        ZdZdZdd„Z G d„ de¦  «        Z eddddddedd¬¦	  «	        Z ee¦  «         dS )z!Actual Computer provider profile.é    )ÚannotationsN)Úurlparse)Úregister_provider)ÚProviderProfileÚ_profile_user_agentzhttps://api.actual.inc/v1zhttp://127.0.0.1:8080/v1Úbase_urlÚstrÚreturnc                ó’  — t          | pd¦  «                             ¦   «                              d¦  «        }|st          S 	 t	          |¦  «        }|j        pd                     ¦   «                              d¦  «        }|j                             d¦  «        }n# t          $ r |cY S w xY w|dk    r	|dv r|dz   S |dv r	|dv r|dz   S |S )NÚ ú/ú.zapi.actual.inc>   r   r   z/v1>   ú::1ú0.0.0.0ú	127.0.0.1Ú	localhost)	r	   ÚstripÚrstripÚDEFAULT_ACTUAL_BASE_URLr   ÚhostnameÚlowerÚpathÚ	Exception)r   ÚurlÚparsedÚhostr   s        úM/home/ragecks/.hermes/hermes-agent/plugins/model-providers/actual/__init__.pyÚ_normalize_actual_base_urlr      sñ   € Ý
ˆhˆn˜"Ñ
Ô
×
#Ò
#Ñ
%Ô
%×
,Ò
,¨SÑ
1Ô
1€CØð 'Ý&Ð&ðÝ˜#‘”ˆØ”Ð% 2×,Ò,Ñ.Ô.×5Ò5°cÑ:Ô:ˆØŒ{×!Ò! #Ñ&Ô&ˆˆøÝð ð ð Øˆ
ˆ
ˆ
ðøøøàÐÒÐ D¨IÐ$5Ð$5Ø�U‰{ÐØÐ;Ð;Ð;ÀÈ	Ð@QÐ@QØ�U‰{ÐØ€Js   ÁAB ÂB(Â'B(c                  ó$   — e Zd ZdZddddœdd„ZdS )ÚActualProfilezñActual Computer provider.

    Hosted inference defaults to api.actual.inc. Local inference is exposed by
    the Actual client only when it runs in offline mode, so users opt into it by
    setting ACTUAL_BASE_URL to the local API URL.
    Ng       @)Úapi_keyr   Útimeoutr!   ú
str | Noner   r"   Úfloatr
   úlist[str] | Nonec               ó*  — t          t          j        dd¦  «                             ¦   «         p|p| j        ¦  «        }|sd S t
          j                             |dz   ¦  «        }|r|                     dd|› �¦  «         |                     dd¦  «         |                     dt          ¦   «         ¦  «         	 t
          j         
                    ||¬	¦  «        5 }t          j        |                     ¦   «                              ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |t           ¦  «        r|n|                     d
g ¦  «        }d„ |D ¦   «         S # t$          $ r&}t&                               d|¦  «         Y d }~d S d }~ww xY w)NÚACTUAL_BASE_URLr   z/modelsÚAuthorizationzBearer ÚAcceptzapplication/jsonz
User-Agent)r"   Údatac                óP   — g | ]#}t          |t          ¦  «        ¯d |v ¯|d          ‘Œ$S )Úid)Ú
isinstanceÚdict)Ú.0Úms     r   ú
<listcomp>z.ActualProfile.fetch_models.<locals>.<listcomp>D   s0   € ÐPÐPÐP ­j¸½DÑ.AÔ.AÐPÀdÈaÀiÀi�A�d”GÀiÀiÀió    zfetch_models(actual): %s)r   ÚosÚgetenvr   r   ÚurllibÚrequestÚRequestÚ
add_headerr   ÚurlopenÚjsonÚloadsÚreadÚdecoder-   ÚlistÚgetr   ÚloggerÚdebug)	Úselfr!   r   r"   ÚreqÚrespr*   ÚitemsÚexcs	            r   Úfetch_modelszActualProfile.fetch_models-   sÊ  € õ .ÝŒIÐ'¨Ñ,Ô,×2Ò2Ñ4Ô4ÐQ¸ÐQÀDÄMñ
ô 
ˆð ð 	Ø�4åŒn×$Ò$ X°	Ñ%9Ñ:Ô:ˆØð 	AØ�NŠN˜?Ð,?°gÐ,?Ð,?Ñ@Ô@Ð@Ø�Š�xÐ!3Ñ4Ô4Ð4Ø�Š�|Õ%8Ñ%:Ô%:Ñ;Ô;Ð;ð	Ý”×'Ò'¨°WÐ'Ñ=Ô=ð 8ÀÝ”z $§)¢)¡+¤+×"4Ò"4Ñ"6Ô"6Ñ7Ô7�ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8å& t­TÑ2Ô2ÐL�D�D¸¿ºÀÈÑ8LÔ8LˆEØPÐP UÐPÑPÔPÐPøÝð 	ð 	ð 	Ý�LŠLÐ3°SÑ9Ô9Ð9Ø�4�4�4�4�4øøøøð	øøøs<   Â8!E" Ã9DÄE" ÄD"Ä"E" Ä%D"Ä&;E" Å"
FÅ,FÆF)r!   r#   r   r#   r"   r$   r
   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   © r2   r   r    r    %   sG   € € € € € ðð ð #Ø#Øðð ð ð ð ð ð ð r2   r    Úactual)zactual-computerÚactualcomputerÚacizActual ComputerzeActual Computer - hosted inference via api.actual.inc, or local offline inference via ACTUAL_BASE_URLzhttps://actual.inc)ÚACTUAL_API_KEYr'   r!   Úcodex_responses)	ÚnameÚaliasesÚdisplay_nameÚdescriptionÚ
signup_urlÚenv_varsr   Ú	auth_typeÚapi_mode)r   r	   r
   r	   )rK   Ú
__future__r   r:   Úloggingr3   Úurllib.parser   Úurllib.requestr5   Ú	providersr   Úproviders.baser   r   Ú	getLoggerrH   r@   r   ÚDEFAULT_ACTUAL_LOCAL_BASE_URLr   r    rM   rL   r2   r   ú<module>rb      s-  ðØ 'Ð 'à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à	ˆÔ	˜8Ñ	$Ô	$€à5Ð Ø :Ð ðð ð ð ð""ð "ð "ð "ð "�Oñ "ô "ð "ðJ 
ˆØ	Ø8Ø"ð	0ð $Ø2Ø$ØØð
ñ 
ô 
€ð Ð �&Ñ Ô Ð Ð Ð r2   