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)
This commit is contained in:
1 parent
a3f698806b
commit
5d215e1649
684 files changed
+133838
No files matched your search
@@ -0,0 +1,67 @@
|
||||
#!/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()
|
||||
Reference in new issue
Block a user