mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-01 08:21:50 +08:00
135 lines
4.5 KiB
Python
135 lines
4.5 KiB
Python
|
|
"""Source-of-truth contracts for built-in providers without models.dev catalogs."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Dict, List, Tuple
|
||
|
|
|
||
|
|
VOLCENGINE_PROVIDER = "volcengine"
|
||
|
|
BYTEPLUS_PROVIDER = "byteplus"
|
||
|
|
|
||
|
|
VOLCENGINE_STANDARD_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3"
|
||
|
|
VOLCENGINE_CODING_PLAN_BASE_URL = "https://ark.cn-beijing.volces.com/api/coding/v3"
|
||
|
|
BYTEPLUS_STANDARD_BASE_URL = "https://ark.ap-southeast.bytepluses.com/api/v3"
|
||
|
|
BYTEPLUS_CODING_PLAN_BASE_URL = "https://ark.ap-southeast.bytepluses.com/api/coding/v3"
|
||
|
|
|
||
|
|
VOLCENGINE_STANDARD_MODELS: Tuple[str, ...] = (
|
||
|
|
"doubao-seed-2-0-pro-260215",
|
||
|
|
"doubao-seed-2-0-lite-260215",
|
||
|
|
"doubao-seed-2-0-mini-260215",
|
||
|
|
"doubao-seed-2-0-code-preview-260215",
|
||
|
|
"kimi-k2-5-260127",
|
||
|
|
"glm-4-7-251222",
|
||
|
|
"deepseek-v3-2-251201",
|
||
|
|
)
|
||
|
|
|
||
|
|
VOLCENGINE_CODING_PLAN_MODELS: Tuple[str, ...] = (
|
||
|
|
"doubao-seed-2.0-code",
|
||
|
|
"doubao-seed-2.0-pro",
|
||
|
|
"doubao-seed-2.0-lite",
|
||
|
|
"doubao-seed-code",
|
||
|
|
"minimax-m2.5",
|
||
|
|
"glm-4.7",
|
||
|
|
"deepseek-v3.2",
|
||
|
|
"kimi-k2.5",
|
||
|
|
)
|
||
|
|
|
||
|
|
BYTEPLUS_STANDARD_MODELS: Tuple[str, ...] = (
|
||
|
|
"seed-2-0-pro-260328",
|
||
|
|
"seed-2-0-lite-260228",
|
||
|
|
"seed-2-0-mini-260215",
|
||
|
|
"kimi-k2-5-260127",
|
||
|
|
"glm-4-7-251222",
|
||
|
|
)
|
||
|
|
|
||
|
|
BYTEPLUS_CODING_PLAN_MODELS: Tuple[str, ...] = (
|
||
|
|
"dola-seed-2.0-pro",
|
||
|
|
"dola-seed-2.0-lite",
|
||
|
|
"bytedance-seed-code",
|
||
|
|
"glm-4.7",
|
||
|
|
"kimi-k2.5",
|
||
|
|
"gpt-oss-120b",
|
||
|
|
)
|
||
|
|
|
||
|
|
VOLCENGINE_STANDARD_MODEL_REFS: Tuple[str, ...] = tuple(
|
||
|
|
f"{VOLCENGINE_PROVIDER}/{model_id}" for model_id in VOLCENGINE_STANDARD_MODELS
|
||
|
|
)
|
||
|
|
VOLCENGINE_CODING_PLAN_MODEL_REFS: Tuple[str, ...] = tuple(
|
||
|
|
f"{VOLCENGINE_PROVIDER}-coding-plan/{model_id}" for model_id in VOLCENGINE_CODING_PLAN_MODELS
|
||
|
|
)
|
||
|
|
BYTEPLUS_STANDARD_MODEL_REFS: Tuple[str, ...] = tuple(
|
||
|
|
f"{BYTEPLUS_PROVIDER}/{model_id}" for model_id in BYTEPLUS_STANDARD_MODELS
|
||
|
|
)
|
||
|
|
BYTEPLUS_CODING_PLAN_MODEL_REFS: Tuple[str, ...] = tuple(
|
||
|
|
f"{BYTEPLUS_PROVIDER}-coding-plan/{model_id}" for model_id in BYTEPLUS_CODING_PLAN_MODELS
|
||
|
|
)
|
||
|
|
|
||
|
|
PROVIDER_MODEL_CATALOGS: Dict[str, Tuple[str, ...]] = {
|
||
|
|
VOLCENGINE_PROVIDER: VOLCENGINE_STANDARD_MODEL_REFS + VOLCENGINE_CODING_PLAN_MODEL_REFS,
|
||
|
|
BYTEPLUS_PROVIDER: BYTEPLUS_STANDARD_MODEL_REFS + BYTEPLUS_CODING_PLAN_MODEL_REFS,
|
||
|
|
}
|
||
|
|
|
||
|
|
MODEL_CONTEXT_WINDOWS: Dict[str, int] = {
|
||
|
|
"doubao-seed-2-0-pro-260215": 256000,
|
||
|
|
"doubao-seed-2-0-lite-260215": 256000,
|
||
|
|
"doubao-seed-2-0-mini-260215": 256000,
|
||
|
|
"doubao-seed-2-0-code-preview-260215": 256000,
|
||
|
|
"kimi-k2-5-260127": 256000,
|
||
|
|
"glm-4-7-251222": 200000,
|
||
|
|
"deepseek-v3-2-251201": 128000,
|
||
|
|
"doubao-seed-2.0-code": 256000,
|
||
|
|
"doubao-seed-2.0-pro": 256000,
|
||
|
|
"doubao-seed-2.0-lite": 256000,
|
||
|
|
"doubao-seed-code": 256000,
|
||
|
|
"minimax-m2.5": 200000,
|
||
|
|
"glm-4.7": 200000,
|
||
|
|
"deepseek-v3.2": 128000,
|
||
|
|
"kimi-k2.5": 256000,
|
||
|
|
"seed-2-0-pro-260328": 256000,
|
||
|
|
"seed-2-0-lite-260228": 256000,
|
||
|
|
"seed-2-0-mini-260215": 256000,
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def provider_models(provider_id: str) -> List[str]:
|
||
|
|
"""Return the full user-facing model catalog for a provider."""
|
||
|
|
return list(PROVIDER_MODEL_CATALOGS.get(provider_id, ()))
|
||
|
|
|
||
|
|
|
||
|
|
def _bare_model_name(model_name: str) -> str:
|
||
|
|
value = (model_name or "").strip()
|
||
|
|
if not value:
|
||
|
|
return ""
|
||
|
|
if "/" in value:
|
||
|
|
return value.split("/", 1)[1].strip()
|
||
|
|
return value
|
||
|
|
|
||
|
|
|
||
|
|
def is_coding_plan_model(provider_id: str, model_name: str) -> bool:
|
||
|
|
"""Return True when a model belongs to the coding-plan catalog."""
|
||
|
|
raw = (model_name or "").strip()
|
||
|
|
bare = _bare_model_name(raw)
|
||
|
|
if provider_id == VOLCENGINE_PROVIDER:
|
||
|
|
return raw in VOLCENGINE_CODING_PLAN_MODEL_REFS or bare in VOLCENGINE_CODING_PLAN_MODELS
|
||
|
|
if provider_id == BYTEPLUS_PROVIDER:
|
||
|
|
return raw in BYTEPLUS_CODING_PLAN_MODEL_REFS or bare in BYTEPLUS_CODING_PLAN_MODELS
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
def base_url_for_provider_model(provider_id: str, model_name: str) -> str:
|
||
|
|
"""Resolve the source-of-truth base URL for a provider+model pair."""
|
||
|
|
if provider_id == VOLCENGINE_PROVIDER:
|
||
|
|
if is_coding_plan_model(provider_id, model_name):
|
||
|
|
return VOLCENGINE_CODING_PLAN_BASE_URL
|
||
|
|
return VOLCENGINE_STANDARD_BASE_URL
|
||
|
|
if provider_id == BYTEPLUS_PROVIDER:
|
||
|
|
if is_coding_plan_model(provider_id, model_name):
|
||
|
|
return BYTEPLUS_CODING_PLAN_BASE_URL
|
||
|
|
return BYTEPLUS_STANDARD_BASE_URL
|
||
|
|
return ""
|
||
|
|
|
||
|
|
|
||
|
|
def model_context_window(model_name: str) -> int | None:
|
||
|
|
"""Return a known context window for a model, if specified by the contract."""
|
||
|
|
bare = _bare_model_name(model_name)
|
||
|
|
return MODEL_CONTEXT_WINDOWS.get(bare)
|