Add files via upload

This commit is contained in:
Shangding Gu
2026-04-01 15:19:29 -07:00
committed by GitHub
parent 3c58834a6a
commit 25aae479a5
8 changed files with 2103 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
"""Configuration management for nano claude (multi-provider)."""
import os
import json
from pathlib import Path
CONFIG_DIR = Path.home() / ".nano_claude"
CONFIG_FILE = CONFIG_DIR / "config.json"
HISTORY_FILE = CONFIG_DIR / "input_history.txt"
SESSIONS_DIR = CONFIG_DIR / "sessions"
DEFAULTS = {
"model": "claude-opus-4-6",
"max_tokens": 8192,
"permission_mode": "auto", # auto | accept-all | manual
"verbose": False,
"thinking": False,
"thinking_budget": 10000,
"custom_base_url": "", # for "custom" provider
# Per-provider API keys (optional; env vars take priority)
# "anthropic_api_key": "sk-ant-..."
# "openai_api_key": "sk-..."
# "gemini_api_key": "..."
# "kimi_api_key": "..."
# "qwen_api_key": "..."
# "zhipu_api_key": "..."
# "deepseek_api_key": "..."
}
def load_config() -> dict:
CONFIG_DIR.mkdir(exist_ok=True)
SESSIONS_DIR.mkdir(exist_ok=True)
cfg = dict(DEFAULTS)
if CONFIG_FILE.exists():
try:
cfg.update(json.loads(CONFIG_FILE.read_text()))
except Exception:
pass
# Backward-compat: legacy single api_key → anthropic_api_key
if cfg.get("api_key") and not cfg.get("anthropic_api_key"):
cfg["anthropic_api_key"] = cfg.pop("api_key")
# Also accept ANTHROPIC_API_KEY env for backward-compat
if not cfg.get("anthropic_api_key"):
cfg["anthropic_api_key"] = os.environ.get("ANTHROPIC_API_KEY", "")
return cfg
def save_config(cfg: dict):
CONFIG_DIR.mkdir(exist_ok=True)
data = dict(cfg)
CONFIG_FILE.write_text(json.dumps(data, indent=2))
def current_provider(cfg: dict) -> str:
from providers import detect_provider
return detect_provider(cfg.get("model", "claude-opus-4-6"))
def has_api_key(cfg: dict) -> bool:
"""Check whether the active provider has an API key configured."""
from providers import get_api_key
pname = current_provider(cfg)
key = get_api_key(pname, cfg)
return bool(key)
def calc_cost(model: str, in_tokens: int, out_tokens: int) -> float:
from providers import calc_cost as _cc
return _cc(model, in_tokens, out_tokens)