Spaces:
Build error
Build error
dorphalsig commited on
Commit ·
8da3765
1
Parent(s): 88b3b41
Add Anthropic url overrides via ANTHROPIC_TARGET_URL env var and --anthropic-api-url flag
Browse files- headroom/cli/proxy.py +8 -0
- headroom/proxy/server.py +9 -0
headroom/cli/proxy.py
CHANGED
|
@@ -94,6 +94,11 @@ from .main import main
|
|
| 94 |
default="openai",
|
| 95 |
help="Provider for any-llm backend: openai, mistral, groq, ollama, etc. (default: openai)",
|
| 96 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
@click.option(
|
| 98 |
"--openai-api-url",
|
| 99 |
default=None,
|
|
@@ -149,6 +154,7 @@ def proxy(
|
|
| 149 |
no_learn: bool,
|
| 150 |
backend: str,
|
| 151 |
anyllm_provider: str,
|
|
|
|
| 152 |
openai_api_url: str | None,
|
| 153 |
gemini_api_url: str | None,
|
| 154 |
region: str,
|
|
@@ -181,6 +187,7 @@ def proxy(
|
|
| 181 |
raise SystemExit(1) from None
|
| 182 |
|
| 183 |
# Resolve API URL overrides: CLI flag > env var > None
|
|
|
|
| 184 |
effective_openai_api_url = openai_api_url or os.environ.get("OPENAI_TARGET_API_URL")
|
| 185 |
effective_gemini_api_url = gemini_api_url or os.environ.get("GEMINI_TARGET_API_URL")
|
| 186 |
|
|
@@ -200,6 +207,7 @@ def proxy(
|
|
| 200 |
config = ProxyConfig(
|
| 201 |
host=host,
|
| 202 |
port=port,
|
|
|
|
| 203 |
openai_api_url=effective_openai_api_url,
|
| 204 |
gemini_api_url=effective_gemini_api_url,
|
| 205 |
mode=effective_mode,
|
|
|
|
| 94 |
default="openai",
|
| 95 |
help="Provider for any-llm backend: openai, mistral, groq, ollama, etc. (default: openai)",
|
| 96 |
)
|
| 97 |
+
@click.option(
|
| 98 |
+
"--anthropic-api-url",
|
| 99 |
+
default=None,
|
| 100 |
+
help="Custom Anthropic API URL for passthrough endpoints (env: ANTHROPIC_TARGET_API_URL)",
|
| 101 |
+
)
|
| 102 |
@click.option(
|
| 103 |
"--openai-api-url",
|
| 104 |
default=None,
|
|
|
|
| 154 |
no_learn: bool,
|
| 155 |
backend: str,
|
| 156 |
anyllm_provider: str,
|
| 157 |
+
anthropic_api_url: str | None,
|
| 158 |
openai_api_url: str | None,
|
| 159 |
gemini_api_url: str | None,
|
| 160 |
region: str,
|
|
|
|
| 187 |
raise SystemExit(1) from None
|
| 188 |
|
| 189 |
# Resolve API URL overrides: CLI flag > env var > None
|
| 190 |
+
effective_anthropic_api_url = anthropic_api_url or os.environ.get("ANTHROPIC_TARGET_API_URL")
|
| 191 |
effective_openai_api_url = openai_api_url or os.environ.get("OPENAI_TARGET_API_URL")
|
| 192 |
effective_gemini_api_url = gemini_api_url or os.environ.get("GEMINI_TARGET_API_URL")
|
| 193 |
|
|
|
|
| 207 |
config = ProxyConfig(
|
| 208 |
host=host,
|
| 209 |
port=port,
|
| 210 |
+
anthropic_api_url=effective_anthropic_api_url,
|
| 211 |
openai_api_url=effective_openai_api_url,
|
| 212 |
gemini_api_url=effective_gemini_api_url,
|
| 213 |
mode=effective_mode,
|
headroom/proxy/server.py
CHANGED
|
@@ -685,6 +685,7 @@ class ProxyConfig:
|
|
| 685 |
# Server
|
| 686 |
host: str = "127.0.0.1"
|
| 687 |
port: int = 8787
|
|
|
|
| 688 |
openai_api_url: str | None = None # Custom OpenAI API URL override
|
| 689 |
gemini_api_url: str | None = None # Custom Gemini API URL override
|
| 690 |
|
|
@@ -1688,6 +1689,14 @@ class HeadroomProxy:
|
|
| 1688 |
def __init__(self, config: ProxyConfig):
|
| 1689 |
self.config = config
|
| 1690 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1691 |
# Override OPENAI_API_URL with config if set
|
| 1692 |
# Strip trailing /v1 or /v1/ to avoid double-path (e.g., .../v1/v1/models)
|
| 1693 |
if config.openai_api_url:
|
|
|
|
| 685 |
# Server
|
| 686 |
host: str = "127.0.0.1"
|
| 687 |
port: int = 8787
|
| 688 |
+
anthropic_api_url: str | None = None # Custom Anthropic API URL override
|
| 689 |
openai_api_url: str | None = None # Custom OpenAI API URL override
|
| 690 |
gemini_api_url: str | None = None # Custom Gemini API URL override
|
| 691 |
|
|
|
|
| 1689 |
def __init__(self, config: ProxyConfig):
|
| 1690 |
self.config = config
|
| 1691 |
|
| 1692 |
+
# Override ANTHROPIC_API_URL with config if set
|
| 1693 |
+
# Strip trailing /v1 or /v1/ to avoid double-path (e.g., .../v1/v1/models)
|
| 1694 |
+
if config.anthropic_api_url:
|
| 1695 |
+
url = config.anthropic_api_url.rstrip("/")
|
| 1696 |
+
if url.endswith("/v1"):
|
| 1697 |
+
url = url[:-3]
|
| 1698 |
+
HeadroomProxy.ANTHROPIC_API_URL = url
|
| 1699 |
+
|
| 1700 |
# Override OPENAI_API_URL with config if set
|
| 1701 |
# Strip trailing /v1 or /v1/ to avoid double-path (e.g., .../v1/v1/models)
|
| 1702 |
if config.openai_api_url:
|