
    sj|                        d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddZ
 G d de	          ZddZ edddddd e            dddddd          Z ee           dS )a  Meta Model API (Muse Spark) provider plugin for Hermes Agent.

Provider profile for Meta Superintelligence Labs' Muse Spark family, served
via the OpenAI-compatible Meta Model API at ``https://api.meta.ai/v1``.

Bundled from https://github.com/albertodepaola/hermes-meta-provider. Hermes'
provider discovery (``providers/__init__.py``) imports it on first
``get_provider_profile()`` / ``list_providers()`` call, and the module-level
``register_provider()`` below wires it into the registry.

Design notes
------------
* **Zero core edits.** Everything rides on ``ProviderProfile`` hooks. No changes
  to hermes' ``model_metadata.py`` / ``models.py`` / ``run_agent.py`` are needed:
  - Context window (1M), reasoning and vision capabilities already resolve from
    models.dev for the muse-spark family, so no static ctx table entry is required.
  - The reasoning dial is emitted as a **top-level ``reasoning_effort``** kwarg
    (returned in the ``top_level`` slot of ``build_api_kwargs_extras``), which the
    chat-completions transport merges unconditionally. This deliberately avoids
    the ``extra_body.reasoning`` path, whose emission is gated by a hardcoded
    host allowlist in core (``AIAgent._supports_reasoning_extra_body``) that a
    third-party plugin must not edit.
* **Meta 400 on ``reasoning_effort: "none"``.** Muse rejects ``none``; disabling
  reasoning maps to ``"minimal"`` instead.
* **``default_max_tokens=16384``.** Muse spends completion budget on hidden
  reasoning tokens first; small caps can finish with empty content.
    )annotationsN)Any)register_provider)ProviderProfilereasoning_configdict | Nonereturnstrc                    | pi }|                     d          du rdS t          |                     d          pd                                                                          }|dv r
|dk    rdndS d	d
lm}m}  |||          }||v r|ndS )a!  Map Hermes' reasoning_config to a Meta-safe ``reasoning_effort`` value.

    Meta's vocabulary (minimal..xhigh; rejects ``none``) is declared in
    agent.reasoning_effort. Disabled/"none" maps to ``minimal`` (the closest
    Meta has to off); unset/bespoke levels fall to ``medium``.
    enabledFminimaleffort >   r   noner   mediumr   )META_AI_EFFORTSclamp_effort)getr
   striploweragent.reasoning_effortr   r   )r   rcr   r   r   clampeds         L/home/agent/.hermes/hermes-agent/plugins/model-providers/meta-ai/__init__.py_resolve_effortr   &   s     
	RB	vviE!!y!!'R((..006688F"f,,yy(:DDDDDDDDl6?33G0077h>    c                  "    e Zd ZdZdddddZdS )MetaAIProfileu>   Meta Model API — top-level reasoning_effort, self-contained.NF)r   supports_reasoningr   r   r   boolcontextr   r	   %tuple[dict[str, Any], dict[str, Any]]c               (    i dt          |          ifS )ai  Emit ``reasoning_effort`` as a top-level api kwarg.

        We ignore the core ``supports_reasoning`` gate on purpose: that flag is
        driven by a host allowlist in core we cannot (and should not) edit from
        an out-of-tree plugin. Muse Spark always accepts ``reasoning_effort``,
        so we resolve it from ``reasoning_config`` directly.
        reasoning_effort)r   )selfr   r   r!   s       r   build_api_kwargs_extrasz%MetaAIProfile.build_api_kwargs_extras=   s     &8H(I(IJJJr   )r   r   r   r    r!   r   r	   r"   )__name__
__module____qualname____doc__r&    r   r   r   r   :   sH        HH
 )-#(	K K K K K K K Kr   r   c                 T    t          j        dd                                          pdS )zGAllow a base-URL override via ``META_BASE_URL`` without editing config.META_BASE_URLr   zhttps://api.meta.ai/v1)osgetenvr   r+   r   r   	_base_urlr0   N   s&    9_b))//11M5MMr   zmeta-ai)metamusez
muse-sparkz	model-apimslzMeta Model APIz4Meta Muse Spark family (Meta Superintelligence Labs)zhttps://developer.meta.com/ai/)MODEL_API_KEYMETA_API_KEYMETA_MODEL_API_KEYr-   api_keycodex_responsesTmuse-spark-1.2-contributori @  )zmuse-spark-1.2r9   )namealiasesdisplay_namedescription
signup_urlenv_varsbase_url	auth_typeapi_modesupports_visiondefault_aux_modeldefault_max_tokensfallback_models)r   r   r	   r
   )r	   r
   )r*   
__future__r   r.   typingr   	providersr   providers.baser   r   r   r0   meta_air+   r   r   <module>rL      s'   8 # " " " " " 				       ' ' ' ' ' ' * * * * * *? ? ? ?(K K K K KO K K K(N N N N
 -	>!F/UY[[  3 9     D  '     r   