Files
hack/tools/scripts/add_new_channels.py
T
chaos 5d215e1649 Add LLM key-hunter toolkit, vault, and skill
- tools/scripts/llm-key-hunter: GitHub leak hunting pipeline (hunt_*,
  pivot miner, two-layer verify/content caches, per-provider verification)
- usable_keys: verified key vault across 12 providers (deepseek, minimax,
  volcanoark, longcat, codingplan, zhipu free-tier, mimo, siliconflow, etc.)
- .grok/skills/llm-key-hunter: operator skill for the hunt/verify/vault flow
- NewAPI channel import scripts and CDP capture helpers
- Result verdict buckets (excluding multi-GB blob caches and dedup dumps)
2026-08-02 06:02:58 +08:00

68 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""Add new usable API keys as channels to NewAPI — without modifying existing channels."""
from newapi_client import (
add_channel, list_channels, list_channel_names, test_channel,
TYPE_OPENAI, TYPE_OLLAMA,
)
from channels_config import build_stepfun, build_ollama_cloud, build_baidu_qianfan
def main():
existing = list_channel_names()
print(f"Existing channels: {sorted(existing)}\n")
new_channels = []
# ─── 1. StepFun (阶跃星辰) — Anthropic-compatible ───────────────
if "StepFun" not in existing:
new_channels.append(build_stepfun())
else:
print("[SKIP] StepFun already exists")
# ─── 2. Ollama Cloud ────────────────────────────────────────────
if "OllamaCloud" not in existing:
new_channels.append(build_ollama_cloud())
else:
print("[SKIP] OllamaCloud already exists")
# ─── 3. Baidu Qianfan Coding Plan ───────────────────────────────
if "BaiduQianfan-Coding" not in existing:
new_channels.append(build_baidu_qianfan())
else:
print("[SKIP] BaiduQianfan-Coding already exists")
# ─── Add all new channels ───────────────────────────────────────
for ch in new_channels:
print(f"[ADD] {ch['name']} (type={ch['type']})...")
success, msg = add_channel(ch)
print(f" -> success={success} msg={msg}")
# If Ollama type 37 failed, retry as OpenAI type 1
if not success and ch["type"] == TYPE_OLLAMA:
print(f" -> Retrying {ch['name']} as OpenAI type (1)...")
ch["type"] = TYPE_OPENAI
success, msg = add_channel(ch)
print(f" -> success={success} msg={msg}")
# Test the channel if added successfully
if success:
for c in list_channels():
if c["name"] == ch["name"]:
print(f" -> Testing channel ID={c['id']}...")
t_success, t_msg, _ = test_channel(c["id"])
print(f" -> test: success={t_success} msg={t_msg[:100]}")
break
print()
# ─── Final listing ──────────────────────────────────────────────
print("=== All channels after update: ===\n")
for ch in list_channels():
print(f" ID={ch['id']:3d} type={ch['type']:2d} status={ch['status']} "
f"name={ch['name']:35s} models={str(ch.get('models', ''))[:80]}")
if __name__ == "__main__":
main()