Files
k-dense-ai--scientific-agen…/skills/autoskill/scripts/backends.py
T
2026-07-13 12:12:01 +08:00

72 lines
2.3 KiB
Python

import os
import httpx
class ClaudeBackend:
def __init__(self, api_key, model, client=None):
self.api_key = api_key
self.model = model
self.client = client or httpx.Client(base_url="https://api.anthropic.com", timeout=60.0)
def __call__(self, prompt):
response = self.client.post(
"/v1/messages",
headers={
"x-api-key": self.api_key,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
json={
"model": self.model,
"max_tokens": 4096,
"messages": [{"role": "user", "content": prompt}],
},
)
response.raise_for_status()
payload = response.json()
return payload["content"][0]["text"]
class LocalBackend:
def __init__(self, endpoint, model, client=None):
self.endpoint = endpoint
self.model = model
self.client = client or httpx.Client(base_url=endpoint, timeout=120.0)
def __call__(self, prompt):
response = self.client.post(
"/chat/completions",
json={
"model": self.model,
"messages": [{"role": "user", "content": prompt}],
},
)
response.raise_for_status()
payload = response.json()
return payload["choices"][0]["message"]["content"]
def make_backend(config):
kind = config.get("backend")
if kind == "claude":
api_key = os.environ.get("ANTHROPIC_API_KEY")
if not api_key:
raise RuntimeError("ANTHROPIC_API_KEY environment variable not set")
model = config.get("claude", {}).get("model", "claude-opus-4-7")
return ClaudeBackend(api_key=api_key, model=model)
if kind == "foundry":
api_key = os.environ.get("FOUNDRY_API_KEY")
if not api_key:
raise RuntimeError("FOUNDRY_API_KEY environment variable not set")
f = config.get("foundry", {})
client = httpx.Client(base_url=f["endpoint"], timeout=60.0)
return ClaudeBackend(api_key=api_key, model=f.get("model", "claude-opus-4-7"), client=client)
if kind == "local":
l = config.get("local", {})
return LocalBackend(endpoint=l["endpoint"], model=l["model"])
raise ValueError(f"unknown backend: {kind!r}")