|
15 | 15 | from typing import Any |
16 | 16 |
|
17 | 17 | from oddish.config import ( |
| 18 | + DEEPSEEK_DEFAULT_BASE_URL, |
18 | 19 | FIREWORKS_DEFAULT_BASE_URL, |
19 | 20 | META_DEFAULT_BASE_URL, |
20 | 21 | MINIMAX_DEFAULT_BASE_URL, |
|
23 | 24 | ZAI_DEFAULT_BASE_URL, |
24 | 25 | infer_model_provider_prefix, |
25 | 26 | is_anthropic_hdo_model, |
| 27 | + is_deepseek_model, |
26 | 28 | is_fireworks_model, |
27 | 29 | is_meta_model, |
28 | 30 | is_minimax_model, |
|
49 | 51 | ZAI_BASE_URL_KEYS = ("ZAI_BASE_URL",) |
50 | 52 | MINIMAX_BASE_URL_KEYS = ("MINIMAX_BASE_URL",) |
51 | 53 | MOONSHOT_BASE_URL_KEYS = ("MOONSHOT_BASE_URL",) |
| 54 | +DEEPSEEK_BASE_URL_KEYS = ("DEEPSEEK_BASE_URL",) |
52 | 55 | GEMINI_BASE_URL_KEYS = ( |
53 | 56 | "GOOGLE_GEMINI_BASE_URL", |
54 | 57 | "GEMINI_API_BASE_URL", |
|
78 | 81 | *ZAI_BASE_URL_KEYS, |
79 | 82 | *MINIMAX_BASE_URL_KEYS, |
80 | 83 | *MOONSHOT_BASE_URL_KEYS, |
| 84 | + *DEEPSEEK_BASE_URL_KEYS, |
81 | 85 | *GEMINI_BASE_URL_KEYS, |
82 | 86 | *CURSOR_BASE_URL_KEYS, |
83 | 87 | ) |
|
113 | 117 | # is keyed on a ``cursor/`` model prefix. |
114 | 118 | TBH_BASE_URL_KEYS = ("TBH_BASE_URL",) |
115 | 119 | _TBH_RUNTIME_HOSTS = ("api.meta.ai",) |
| 120 | +_DSH_INSTALL_HOSTS: tuple[str, ...] = ( |
| 121 | + "raw.githubusercontent.com", |
| 122 | + "github.com", |
| 123 | + "objects.githubusercontent.com", |
| 124 | + "codeload.github.com", |
| 125 | + "nodejs.org", |
| 126 | + "registry.npmjs.org", |
| 127 | +) |
| 128 | +_DSH_DEEPSEEK_RUNTIME_HOSTS = ("api.deepseek.com",) |
116 | 129 | # opencode has no pre-baked worker image: Harbor's ``OpenCode.install`` |
117 | 130 | # bootstraps nvm, a Node runtime, and the ``opencode-ai`` npm package during |
118 | 131 | # agent SETUP -- which runs under the ENVIRONMENT baseline, before the |
|
131 | 144 | "nodejs.org", # Node runtime downloaded by nvm |
132 | 145 | "registry.npmjs.org", # npm metadata + package tarballs |
133 | 146 | ) |
134 | | -_AGENT_RUNTIME_HOSTS: dict[str, tuple[str, ...]] = {"tbh": _TBH_RUNTIME_HOSTS} |
| 147 | +_AGENT_RUNTIME_HOSTS: dict[str, tuple[str, ...]] = { |
| 148 | + "tbh": _TBH_RUNTIME_HOSTS, |
| 149 | + "dsh": _DSH_INSTALL_HOSTS + _DSH_DEEPSEEK_RUNTIME_HOSTS, |
| 150 | +} |
135 | 151 |
|
136 | 152 | _DEFAULT_BEDROCK_REGION = "us-east-1" |
137 | 153 | _BEDROCK_STS_DOMAINS = ("sts.amazonaws.com",) |
@@ -235,11 +251,17 @@ def agent_runtime_hosts( |
235 | 251 | extra_env = agent_kwargs.get("extra_env") |
236 | 252 | if not override and isinstance(extra_env, Mapping): |
237 | 253 | override = next( |
238 | | - (extra_env.get(k) for k in TBH_BASE_URL_KEYS if extra_env.get(k)), None |
| 254 | + ( |
| 255 | + extra_env.get(k) |
| 256 | + for k in (*TBH_BASE_URL_KEYS, *DEEPSEEK_BASE_URL_KEYS) |
| 257 | + if extra_env.get(k) |
| 258 | + ), |
| 259 | + None, |
239 | 260 | ) |
240 | 261 | if not override and isinstance(agent_env, Mapping): |
241 | 262 | override = next( |
242 | | - (agent_env.get(k) for k in TBH_BASE_URL_KEYS if agent_env.get(k)), None |
| 263 | + (agent_env.get(k) for k in (*TBH_BASE_URL_KEYS, *DEEPSEEK_BASE_URL_KEYS) if agent_env.get(k)), |
| 264 | + None, |
243 | 265 | ) |
244 | 266 | if isinstance(override, str): |
245 | 267 | host = _host_from_url(override) |
@@ -320,6 +342,12 @@ def outbound_hosts_for_model( |
320 | 342 | ) |
321 | 343 | if host: |
322 | 344 | hosts.append(host) |
| 345 | + elif is_deepseek_model(model_name): |
| 346 | + host = _default_host( |
| 347 | + os.environ.get("DEEPSEEK_BASE_URL") or DEEPSEEK_DEFAULT_BASE_URL |
| 348 | + ) |
| 349 | + if host: |
| 350 | + hosts.append(host) |
323 | 351 | elif is_xai_model(model_name): |
324 | 352 | hosts.extend(_XAI_HOSTS) |
325 | 353 | elif is_meta_model(model_name): |
|
0 commit comments