hermes-hub/src/antigravity_provider/hermes_provider.py
2026-08-20 00:17:11 +07:00

81 lines
2.9 KiB
Python

from __future__ import annotations
from typing import Any
from .models import DEFAULT_MODEL, KNOWN_MODELS, clamp_reasoning_effort
PROVIDER_NAME = "antigravity"
PLACEHOLDER_API_KEY_ENV = "ANTIGRAVITY_HERMES_API_KEY"
PLACEHOLDER_API_KEY = "antigravity-dummy-default"
DUMMY_BASE_URL = "http://127.0.0.1:8765/v1"
def _reasoning_effort(reasoning_config: dict | None, model: str | None = None) -> str | None:
if not isinstance(reasoning_config, dict):
return None
if reasoning_config.get("enabled") is False:
return "off"
effort = str(reasoning_config.get("effort") or "").strip().lower().replace("_", "-")
if effort in {"none", "off", "disabled"}:
return "off"
if effort in {"minimal", "minimum", "low", "medium", "high", "xhigh", "max"}:
return clamp_reasoning_effort(model or DEFAULT_MODEL, effort)
return None
def register_provider_profile() -> bool:
"""Register the Antigravity provider when running inside Hermes."""
try:
from providers import register_provider
from providers.base import OMIT_TEMPERATURE, ProviderProfile
except Exception:
return False
class AntigravityProfile(ProviderProfile):
def build_api_kwargs_extras(
self,
*,
reasoning_config: dict | None = None,
**context: Any,
) -> tuple[dict[str, Any], dict[str, Any]]:
top_level: dict[str, Any] = {}
effort = _reasoning_effort(reasoning_config, context.get("model"))
if effort:
top_level["reasoning_effort"] = effort
return {}, top_level
def get_max_tokens(self, model: str | None) -> int | None:
return KNOWN_MODELS.get(model or "") or KNOWN_MODELS.get(DEFAULT_MODEL)
def fetch_models(self, **kwargs: Any) -> list[str] | None:
# Dynamic discovery from agy subprocess, fallback to static list
try:
from .agy_subprocess import discover_models
dynamic = discover_models()
if dynamic:
return list(dynamic.keys())
except Exception:
pass
return list(KNOWN_MODELS)
register_provider(
AntigravityProfile(
name=PROVIDER_NAME,
aliases=("google-antigravity",),
display_name="Google Antigravity",
description="Google Antigravity via Hermes in-process provider plugin",
env_vars=(PLACEHOLDER_API_KEY_ENV,),
base_url=DUMMY_BASE_URL,
auth_type="api_key",
supports_health_check=False,
supports_vision=True,
fallback_models=tuple(KNOWN_MODELS),
default_aux_model=DEFAULT_MODEL,
fixed_temperature=OMIT_TEMPERATURE,
)
)
return True
# Directory-style model-provider plugins are imported for side effects.
register_provider_profile()