Files
hack/tools/scripts/llm-key-hunter/providers_all_deep.py
T

418 lines
22 KiB
Python

#!/usr/bin/env python3
"""Provider registry for hunt_all_deep.py."""
FAKES = ["xxxx", "your-", "example", "1234567890", "replace", "changeme",
"placeholder", "sk-test", "your_api", "your-api", "<your", "<sk-",
"sk-0000", "your-key", "demo", "sample", "test_key", "dummy",
"aaaaaaaa", "bbbbbbbb", "sk-proj-0000", "sk-..."]
def build(ov):
S = {}
S["minimax"] = dict(
queries=['"sk-cp-" minimaxi', '"sk-cp-" "MiniMax-M2"',
'"api.minimaxi.com" sk-', '"api.minimax.io" sk-',
'"minimax" "sk-cp-" extension:py',
'"minimax" "sk-cp-" extension:js',
'"minimax" "sk-cp-" extension:ts',
'"MINIMAX_API_KEY" extension:env',
'"MINIMAX_API_KEY" extension:json',
'"abab6.5s-chat" api_key'],
patterns=[r"sk-cp-[A-Za-z0-9_\-]{40,140}", r"sk-[A-Za-z0-9]{48,90}\b"],
verify=ov("https://api.minimaxi.com/v1", "/text/chatcompletion_v2",
["MiniMax-M2.5", "MiniMax-M2.7", "MiniMax-M3", "abab6.5s-chat"]),
context=["minimaxi.com", "minimax.io", "minimax", "abab6.5", "minimaxi",
"minimax-m2", "minimax_api"])
S["deepseek"] = dict(
queries=['"api.deepseek.com" sk-', '"DEEPSEEK_API_KEY" extension:env',
'"DEEPSEEK_API_KEY" extension:json', 'deepseek sk- extension:py',
'"deepseek-chat" api_key extension:py',
'"deepseek-reasoner" sk-'],
patterns=[r"sk-[0-9a-fA-F]{32}\b"],
verify=ov("https://api.deepseek.com", "/chat/completions",
["deepseek-chat", "deepseek-reasoner"]),
context=["deepseek", "deepseek-chat", "deepseek-reasoner"])
S["kimi"] = dict(
queries=['"api.moonshot.cn" sk-', '"MOONSHOT_API_KEY" extension:env',
'"MOONSHOT_API_KEY" extension:json', 'moonshot sk- extension:py',
'"moonshot-v1" api_key', '"kimi" "sk-" extension:env'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.moonshot.cn/v1", "/chat/completions",
["moonshot-v1-8k", "moonshot-v1-32k"]),
context=["moonshot", "kimi", "api.moonshot"])
S["siliconflow"] = dict(
queries=['"api.siliconflow.cn" sk-', '"SILICONFLOW_API_KEY" extension:env',
'"SILICONFLOW_API_KEY" extension:json',
'"siliconflow" "sk-" extension:py',
'"SiliconCloud" api_key'],
patterns=[r"sk-[A-Za-z0-9]{48}\b"],
verify=ov("https://api.siliconflow.cn", "/v1/chat/completions",
["Qwen/Qwen2.5-7B-Instruct", "deepseek-ai/DeepSeek-V3"]),
context=["siliconflow", "siliconcloud"])
S["zhipu_coding"] = dict(
queries=['"open.bigmodel.cn/api/coding" sk-', '"ZHIPU_API_KEY" extension:env',
'"ZHIPU_API_KEY" extension:json', '"bigmodel.cn" sk- extension:py',
'"glm-5.2" api_key extension:json', '"glm-4" "api_key" extension:py'],
patterns=[r"\b[0-9a-fA-F]{32}\.[A-Za-z0-9]{16}\b"],
verify=ov("https://open.bigmodel.cn/api/coding/paas/v4", "/chat/completions",
["glm-4.7-flash", "glm-4.5-flash", "glm-4-flash", "glm-5.2"]),
context=["bigmodel", "zhipu", "glm-", "paas/v4"])
S["zhipu_paas"] = dict(
queries=['"open.bigmodel.cn/api/paas" sk-', '"bigmodel.cn/api/paas"',
'"https://open.bigmodel.cn" extension:json', 'zhipuai sk- extension:py'],
patterns=[r"\b[0-9a-fA-F]{32}\.[A-Za-z0-9]{16}\b"],
verify=ov("https://open.bigmodel.cn/api/paas/v4", "/chat/completions",
["glm-4-flash", "glm-4.5-flash"]),
context=["open.bigmodel.cn", "zhipuai", "bigmodel.cn"])
S["ali_coding"] = dict(
queries=['"coding.dashscope.aliyuncs.com" sk-', '"DASHSCOPE_API_KEY" extension:env',
'"DASHSCOPE_API_KEY" extension:json', '"sk-sp-" dashscope',
'"qwen3-coder" api_key extension:json', '"bailian" "sk-sp-"'],
patterns=[r"sk-sp-[0-9a-fA-F]{32}\b", r"sk-[0-9a-fA-F]{32}\b"],
verify=ov("https://coding.dashscope.aliyuncs.com/v1", "/chat/completions",
["qwen3-coder-plus", "qwen-plus", "qwen3.7-max"]),
context=["dashscope", "bailian", "aliyun", "qwen", "coding.dashscope"])
S["dashscope"] = dict(
queries=['"dashscope.aliyuncs.com/compatible-mode" sk-',
'"dashscope.aliyuncs.com" "sk-" extension:py',
'"DASHSCOPE_API_KEY" sk- extension:py'],
patterns=[r"sk-[0-9a-fA-F]{32}\b"],
verify=ov("https://dashscope.aliyuncs.com/compatible-mode/v1", "/chat/completions",
["qwen-plus", "qwen-turbo", "qwen-max"]),
context=["dashscope", "compatible-mode", "aliyun", "qwen"])
S["volcano"] = dict(
queries=['"ark.cn-beijing.volces.com/api/v3"', '"VOLC_ACCESSKEY" extension:env',
'"ARK_API_KEY" extension:env', '"ARK_API_KEY" extension:json',
'"volces" "sk-" extension:py', '"doubao" "api_key" extension:json',
'"ep-" volces extension:py'],
patterns=[r"\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b"],
verify=ov("https://ark.cn-beijing.volces.com/api/v3", "/chat/completions",
["doubao-seed-1-6-250615", "doubao-seed-1-6-flash-250615",
"doubao-1-5-lite-32k-250115", "doubao-1-5-pro-32k-250115"]),
context=["volces", "volcengine", "ark.cn-beijing", "doubao", "火山"])
S["longcat"] = dict(
queries=['"api.longcat.chat" sk-', '"LONGCAT_API_KEY" extension:env',
'"LONGCAT_API_KEY" extension:json', '"LongCat-2.0" api_key',
'"longcat" "ak_" extension:py'],
patterns=[r"ak_[A-Za-z0-9_-]{20,60}"],
verify=ov("https://api.longcat.chat/openai/v1", "/chat/completions",
["LongCat-2.0"]),
context=["longcat", "meituan", "api.longcat"])
S["mimo"] = dict(
queries=['"api.xiaomimimo.com" sk-', '"MIMO_API_KEY" extension:env',
'"xiaomimimo" "sk-" extension:py', '"MiMo" api_key extension:json',
'"sk-cx-" mimo'],
patterns=[r"sk-cx-[A-Za-z0-9]{45,55}", r"sk-cx-[A-Za-z0-9]+"],
verify=ov("https://api.xiaomimimo.com/v1", "/chat/completions",
["mimo-v2.5", "MiMo-7B"]),
context=["mimo", "xiaomi"])
S["qwen"] = S["dashscope"] # alias captured under dashscope queries too
S["iflytek"] = dict(
queries=['"astron-code" extension:json', '"spark-api" "APIKey" extension:json',
'"iflytek" "api_key" extension:py', '"xfyun" "APISecret" extension:py',
'"iFlytek" "APIKey" extension:env'],
patterns=[r"\b[0-9a-fA-F]{32,40}\b"],
verify=ov("https://maas-api.cn-huabei-1.xfyun.cn/v1", "/chat/completions",
["astron-code-latest", "generalv3.5"]),
context=["iflytek", "xfyun", "spark", "xunfei", "astron", "讯飞"])
S["openrouter"] = dict(
queries=['"openrouter.ai/api" "sk-or-v1-"', '"OPENROUTER_API_KEY" extension:env',
'"OPENROUTER_API_KEY" extension:json', '"sk-or-v1-" extension:py',
'"openrouter.ai" Bearer extension:py'],
patterns=[r"sk-or-v1-[0-9a-fA-F]{40,80}"],
verify=ov("https://openrouter.ai/api/v1", "/chat/completions",
["openai/gpt-4o-mini", "google/gemini-flash-1.5",
"meta-llama/llama-3.1-8b-instruct:free"]),
context=["openrouter"])
S["groq"] = dict(
queries=['"api.groq.com" "gsk_"', '"GROQ_API_KEY" extension:env',
'"GROQ_API_KEY" extension:json', '"gsk_" extension:py',
'"groq" "gsk_" extension:yaml'],
patterns=[r"gsk_[A-Za-z0-9]{40,60}"],
verify=ov("https://api.groq.com/openai/v1", "/chat/completions",
["llama-3.1-8b-instant", "llama3-8b-8192", "mixtral-8x7b-32768"]),
context=["groq"])
S["anthropic"] = dict(
queries=['"api.anthropic.com" "sk-ant-"', '"ANTHROPIC_API_KEY" extension:env',
'"ANTHROPIC_API_KEY" extension:json', '"sk-ant-api03" extension:py',
'"x-api-key" "sk-ant" extension:py'],
patterns=[r"sk-ant-[A-Za-z0-9_\-]{60,120}"],
verify=ov("https://api.anthropic.com", "/v1/messages",
["claude-3-5-haiku-20241022", "claude-haiku-4-5-20251001"],
extra_headers={"anthropic-version": "2023-06-01"}),
context=["anthropic", "claude"])
S["openai"] = dict(
queries=['"api.openai.com" "sk-"', '"OPENAI_API_KEY" extension:env',
'"OPENAI_API_KEY" extension:json', '"sk-proj-" extension:py',
'"sk-proj-" extension:env', '"openai" "sk-" extension:yaml'],
patterns=[r"sk-proj-[A-Za-z0-9_\-]{20,200}", r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.openai.com/v1", "/chat/completions",
["gpt-4o-mini", "gpt-3.5-turbo"]),
context=["openai", "gpt-"])
S["togetherai"] = dict(
queries=['"api.together.xyz" sk-', '"TOGETHER_API_KEY" extension:env',
'"TOGETHER_API_KEY" extension:json', '"together.ai" "sk-" extension:py',
'"togethercomputer" "sk-" extension:py'],
patterns=[r"sk-[A-Za-z0-9]{40,80}\b"],
verify=ov("https://api.together.xyz/v1", "/chat/completions",
["meta-llama/Llama-3.3-70B-Instruct-Turbo",
"meta-llama/Llama-3.1-8B-Instruct-Turbo"]),
context=["together"])
S["mistral"] = dict(
queries=['"api.mistral.ai" sk-', '"MISTRAL_API_KEY" extension:env',
'"MISTRAL_API_KEY" extension:json', '"mistralai" "sk-" extension:py',
'"mistral.ai" Bearer extension:py'],
patterns=[r"sk-[A-Za-z0-9]{30,60}\b"],
verify=ov("https://api.mistral.ai/v1", "/chat/completions",
["open-mistral-nemo", "mistral-tiny", "codestral-latest"]),
context=["mistral"])
S["xai"] = dict(
queries=['"api.x.ai" sk-', '"XAI_API_KEY" extension:env',
'"XAI_API_KEY" extension:json', '"x.ai" "sk-" extension:py',
'"grok" "XAI_API_KEY" extension:py'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.x.ai/v1", "/chat/completions",
["grok-2", "grok-beta", "grok-4.5"]),
context=["x.ai", "xai", "grok"])
S["google"] = dict(
queries=['"generativelanguage.googleapis.com" AIza',
'"GEMINI_API_KEY" extension:env', '"GOOGLE_API_KEY" extension:json',
'"AIzaSy" extension:py', '"AIzaSy" extension:env'],
patterns=[r"AIza[0-9A-Za-z_\-]{35}"],
verify=None, # custom: Google uses non-OpenAI path, handled in main
context=["generativelanguage", "gemini", "googleapis"])
S["deepinfra"] = dict(
queries=['"api.deepinfra.com" sk-', '"DEEPINFRA_API_TOKEN" extension:env',
'"deepinfra" "sk-" extension:py', '"DEEPINFRA_TOKEN" extension:json'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.deepinfra.com/v1/openai", "/chat/completions",
["meta-llama/Meta-Llama-3.1-8B-Instruct",
"Qwen/Qwen2.5-72B-Instruct"]),
context=["deepinfra"])
S["fireworks"] = dict(
queries=['"api.fireworks.ai" sk-', '"FIREWORKS_API_KEY" extension:env',
'"fireworks" "sk-" extension:py', '"FIREWORKS_API_KEY" extension:json'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.fireworks.ai/inference/v1", "/chat/completions",
["accounts/fireworks/models/llama-v3p1-8b-instruct"]),
context=["fireworks"])
S["stepfun"] = dict(
queries=['"api.stepfun.com" sk-', '"STEPFUN_API_KEY" extension:env',
'"stepfun" "sk-" extension:py', '"step-1" api_key extension:json'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.stepfun.com/v1", "/chat/completions",
["step-3.7-flash", "step-2-16k"]),
context=["stepfun", "阶跃"])
S["yi"] = dict(
queries=['"api.lingyiwanwu.com" sk-', '"LINGYI_API_KEY" extension:env',
'"lingyiwanwu" "sk-" extension:py', '"01-ai" "sk-" extension:py',
'"yi-large" api_key extension:json'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://api.lingyiwanwu.com/v1", "/chat/completions",
["yi-lightning", "yi-large"]),
context=["lingyiwanwu", "01.ai", "零一万物"])
S["baidu_qianfan"] = dict(
queries=['"qianfan.baidubce.com" sk-', '"QIANFAN_ACCESS_KEY" extension:env',
'"qianfan" "sk-" extension:py', '"ERNIE" api_key extension:json'],
patterns=[r"sk-[A-Za-z0-9]{30,60}\b", r"bce-v3/[A-Za-z0-9/]+=+"],
verify=ov("https://qianfan.baidubce.com/v2", "/chat/completions",
["ernie-4.0-8k-latest", "ernie-speed-128k"]),
context=["qianfan", "baidubce", "wenxin", "ernie", "千帆"])
# SCNet / Compshare / OpenCode / Infini use non-standard paths
S["compshare"] = dict(
queries=['"api.compshare.cn" sk-', '"COMPSHARE_API_KEY" extension:env',
'"compshare" "sk-" extension:py', '"ucloud" "sk-" extension:json'],
patterns=[r"sk-[A-Za-z0-9_\-]{40,100}"],
verify=ov("https://api.compshare.cn/v1", "/chat/completions",
["gpt-4o-mini", "claude-3-5-haiku-20241022"]),
context=["compshare", "ucloud"])
S["opencode_go"] = dict(
queries=['"opencode.ai/zen/go"', '"zen/go/v1"', '"OPENCODE_GO_API_KEY"',
'"OPENCODE_GO_KEY"', '"ANOMALY_API_KEY"', '"opencode-go" sk-'],
patterns=[r"sk-[A-Za-z0-9_\-]{40,80}"],
verify=ov("https://opencode.ai/zen/go/v1", "/chat/completions",
["grok-4.5", "glm-5.2", "minimax-m3"]),
context=["opencode", "anomaly", "zen/go"])
S["infini"] = dict(
queries=['"cloud.infini-ai.com" sk-', '"INFINI_API_KEY" extension:env',
'"infini-ai" "sk-" extension:py', '"INFINI_API_KEY" extension:json'],
patterns=[r"sk-[A-Za-z0-9]{40,60}\b"],
verify=ov("https://cloud.infini-ai.com/maas/v1", "/chat/completions",
["deepseek-v3", "qwen2.5-72b-instruct"]),
context=["infini"])
S["scnet"] = dict(
queries=['"scnet.cn" "sk-sp-"', '"SCNET_API_KEY" extension:env',
'"scnet" "sk-tp-" extension:py', '"scnet" "sk-sp-" extension:json'],
patterns=[r"sk-sp-[A-Za-z0-9]{40,80}", r"sk-tp-[A-Za-z0-9]{40,80}"],
verify=ov("https://api.scnet.cn/v1", "/chat/completions",
["qwen-max", "deepseek-v3"]),
context=["scnet"])
# ── 2026-08-03 batch: newly confirmed OpenAI-compatible CN platforms ──
S["360zhinao"] = dict(
queries=['"api.360.cn" sk-', '"api.360.cn/v1"',
'"QH360_API_KEY" extension:env', '"360GPT_API_KEY" extension:env',
'"ZHINAO_API_KEY" extension:env', '"360AI_API_KEY" extension:env',
'"360gpt" "sk-" extension:py', '"360gpt" "sk-" extension:js',
'"360智脑" sk- extension:py', '"360 zhinao" api_key',
'"360gpt-pro" api_key', '"360gpt-turbo" api_key',
'"api.360.cn" extension:json', '"360.cn/v1/chat/completions"',
'"QH360_API_KEY" extension:json', '"360CHAT_API_KEY"'],
patterns=[r"sk-[A-Za-z0-9]{32,64}\b"],
verify=ov("https://api.360.cn/v1", "/chat/completions",
["360gpt-pro", "360gpt-turbo", "360gpt2-pro"]),
context=["360.cn", "360gpt", "zhinao", "智脑", "qh360", "360ai"])
S["tencent_lkeap"] = dict(
queries=['"api.lkeap.cloud.tencent.com"', '"lkeap.cloud.tencent.com" sk-',
'"LKEAP_API_KEY" extension:env', '"TENCENT_LKEAP" extension:env',
'"lkeap" "sk-" extension:py', '"lkeap" "sk-" extension:js',
'"hunyuan-code" api_key', '"hunyuan-coding" api_key',
'"lkeap.cloud.tencent.com/v1"', '"deepseek-v3" "lkeap"',
'"hunyuan-turbo" "api_key" tencent',
'"api.lkeap" extension:json', '"LKEAP_SECRET" extension:env'],
patterns=[r"sk-[A-Za-z0-9]{32,64}\b"],
verify=ov("https://api.lkeap.cloud.tencent.com/v1", "/chat/completions",
["hunyuan-turbo", "hunyuan-code-latest",
"deepseek-v3", "glm-4.7"]),
context=["lkeap", "tencent.com", "hunyuan-code", "腾讯元器", "知识引擎"])
S["iflytek_maas"] = dict(
queries=['"maas-api.cn-huabei-1.xf-yun.com"',
'"maas-api" "xf-yun" sk-',
'"IFLYTEK_MAAS_API_KEY" extension:env',
'"MAAS_API_KEY" "xf-yun" extension:env',
'"xf-yun.com/v1" extension:json',
'"iflytek-maas" sk- extension:py',
'"讯飞" "maas-api" api_key',
'"generalv3.5" "api_key" xfyun',
'"maas-api.xf-yun" extension:py',
'"4.0Ultra" "xf-yun" api_key'],
patterns=[r"sk-[A-Za-z0-9]{32,64}\b",
r"\b[A-Za-z0-9]{32,48}\b"],
verify=ov("https://maas-api.cn-huabei-1.xf-yun.com/v1",
"/chat/completions",
["xop3qwen1b7", "xopglm5", "xopkimik26",
"xsparkx2flash", "xsparkx2",
"generalv3.5", "4.0Ultra", "generalv3"]),
context=["maas-api", "xf-yun", "xfyun", "iflytek", "讯飞", "spark-api"])
S["sensenova"] = dict(
queries=['"api.sensenova.cn"', '"sensenova" "sk-" extension:py',
'"SENSENOVA_API_KEY" extension:env',
'"SENSENOVA_API_KEY" extension:json',
'"SenseNova" api_key extension:js',
'"sensenova.cn/v1" extension:json',
'"商汤" "sensenova" api_key', '"sensechat" api_key extension:py',
'"sensenova" "Bearer" extension:py',
'"SENSECHAT_API_KEY" extension:env',
'"sensenova" "ACCESS_KEY" extension:env',
'"api.sensenova.cn/compatible-mode"'],
patterns=[r"sk-[A-Za-z0-9]{32,64}\b",
r"\b[A-Za-z0-9]{32,48}\b"],
verify=ov("https://api.sensenova.cn/compatible-mode/v1",
"/chat/completions",
["SenseChat-5", "SenseChat-Turbo",
"deepseek-v3", "glm-4.7"]),
context=["sensenova", "sensechat", "sensetime", "商汤", "日日新"])
# Tencent Hunyuan — OpenAI-compatible endpoint (distinct from LKEAP)
S["tencent_hunyuan"] = dict(
queries=['"api.hunyuan.cloud.tencent.com"',
'"hunyuan.cloud.tencent.com" sk-',
'"HUNYUAN_API_KEY" extension:env',
'"HUNYUAN_API_KEY" extension:json',
'"hunyuan" "sk-" extension:py',
'"hunyuan-turbos-latest" api_key',
'"hunyuan-turbo" api_key extension:json',
'"hunyuan-code" "api_key" tencent',
'"hunyuan.cloud.tencent.com/v1"'],
patterns=[r"sk-[A-Za-z0-9]{32,64}\b"],
verify=ov("https://api.hunyuan.cloud.tencent.com/v1", "/chat/completions",
["hunyuan-turbos-latest", "hunyuan-turbo",
"hunyuan-standard", "hunyuan-code-latest"]),
context=["hunyuan.cloud.tencent", "hunyuan", "腾讯混元"])
# DMXAPI — one_api-style relay (popular CN aggregator)
S["dmxapi"] = dict(
queries=['"www.dmxapi.cn" sk-', '"dmxapi.cn" "sk-" extension:py',
'"dmxapi" "DMXAPI_API_KEY" extension:env',
'"DMX_API_KEY" extension:env', '"dmxapi.cn/v1" extension:json',
'"dmxapi" "Bearer" extension:py', '"dmxapi.cn" extension:js'],
patterns=[r"sk-[A-Za-z0-9]{32,80}\b"],
verify=ov("https://www.dmxapi.cn/v1", "/chat/completions",
["gpt-4o-mini", "gpt-3.5-turbo", "claude-3-5-haiku-20241022",
"deepseek-chat", "glm-4-flash"]),
context=["dmxapi", "dmxapi.cn"])
# CloseAI / CloseAI-Asia relay
S["closeai"] = dict(
queries=['"api.closeai-asia.com"', '"closeai-asia" sk- extension:py',
'"closeai-asia" extension:env', '"CLOSEAI_API_KEY" extension:env',
'"closeai-asia.com/v1" extension:json',
'"closeai" "Bearer" extension:js',
'"api.closeai-proxy.com" sk-'],
patterns=[r"sk-[A-Za-z0-9]{32,80}\b"],
verify=ov("https://api.closeai-asia.com/v1", "/chat/completions",
["gpt-4o-mini", "gpt-3.5-turbo", "claude-3-5-haiku-20241022"]),
context=["closeai-asia", "closeai-proxy", "closeai"])
# API2D (oa.api2d.net) — Chinese OpenAI/Anthropic relay
S["api2d"] = dict(
queries=['"oa.api2d.net" sk-', '"api2d.net" "sk-" extension:py',
'"API2D_API_KEY" extension:env', '"API2D_KEY" extension:env',
'"api2d.net/v1" extension:json', '"api2d" "Bearer" extension:js',
'"fk" "api2d" extension:py', '"api2d" extension:env',
'"oa.api2d.net" extension:json'],
patterns=[r"sk-[A-Za-z0-9]{32,80}\b", r"fk[A-Za-z0-9]{30,80}\b"],
verify=ov("https://oa.api2d.net/v1", "/chat/completions",
["gpt-4o-mini", "gpt-3.5-turbo", "claude-3-5-haiku-20241022"]),
context=["api2d", "oa.api2d.net"])
# AIHubMix — international+CN model aggregator
S["aihubmix"] = dict(
queries=['"aihubmix.com" sk-', '"aihubmix" "sk-" extension:py',
'"AIHUBMIX_API_KEY" extension:env', '"AIHUBMIX_KEY" extension:env',
'"aihubmix.com/v1" extension:json',
'"aihubmix" "Bearer" extension:js',
'"aihubmix" extension:env', '"api.aihubmix.com" sk-'],
patterns=[r"sk-[A-Za-z0-9]{32,80}\b"],
verify=ov("https://aihubmix.com/v1", "/chat/completions",
["gpt-4o-mini", "gpt-3.5-turbo", "claude-3-5-haiku-20241022",
"deepseek-chat", "glm-4-flash"]),
context=["aihubmix"])
for spec in S.values():
spec["fakes"] = FAKES
return S