Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/alcafer2011_antigravity.json
T

1 line
34 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "alcafer2011/antigravity", "files": {"src/providerCatalog.js": {"b004d67566fd93489bf4cb3fbc1b4d93bfed8e95": {"t": 1785768876.9269176, "n": 32790, "h": "d1a42bf1831b3598", "c": "\"use strict\";\n\n/**\n * providerCatalog — CATALOGO PRECONFIGURATO di TUTTI i provider LLM noti\n * (OpenAI-compatibili) + delle piattaforme GPU dove ospitare i modelli tuoi.\n *\n * ★ 2026-07-30 — PERCHÉ ESISTE QUESTO FILE\n * Il cacciatore di taglie proponeva provider (letti dalle liste online) che NON\n * erano nel registro: creavi la chiave, la incollavi e il rilevamento diceva\n * \"provider non riconosciuto\", oppure il selettore manuale conteneva solo i 25\n * provider scritti a mano in providerRegistry.js. Qui c'è la lista LARGA, già\n * pronta con endpoint, nome della variabile .env, formato della chiave e alias\n * (i nomi con cui le liste online li chiamano), così:\n * 1) incolli la chiave → il provider si riconosce da solo (detect);\n * 2) se non si riconosce → il selettore manuale contiene TUTTI questi provider;\n * 3) il cacciatore, quando trova \"Nebius\"/\"Cohere\"/\"Scaleway\"/..., riesce ad\n * agganciarli a una voce vera (knownId) e mostra il bottone \"Incolla qui\".\n *\n * providerRegistry.js FONDE questo catalogo con le sue voci curate: le voci\n * curate VINCONO (hanno note/quote tarate a mano), da qui arriva tutto il resto.\n *\n * Campi (stessi di providerRegistry, più questi):\n * aliases[] nomi alternativi (come li scrivono le liste online / il cacciatore)\n * verified true = endpoint controllato · false = plausibile ma da confermare\n * col bottone \"Verifica\" del pannello chiavi. Le voci non verificate\n * restano selezionabili: al massimo il probe risponde 404 e lo vedi.\n * strong true = il prefisso della chiave è UNICO → riconoscimento diretto\n * freeModels[] modelli gratuiti noti (per la scheda del cacciatore)\n *\n * REGOLA: qui NON vanno chiavi/segreti. Solo endpoint pubblici e link ufficiali.\n */\n\nconst NV = \"⚠️ endpoint da confermare col bottone «Verifica» dopo aver salvato la chiave.\";\n\nconst CATALOG = [\n // ================= GRANDI CLOUD / OPENAI-COMPAT =========================\n {\n id: \"nebius\", label: \"Nebius AI Studio\", env: \"NEBIUS_API_KEY\",\n host: \"api.studio.nebius.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^eyJ[A-Za-z0-9_-]+\\./, strong: false,\n keyFmt: \"JWT (inizia con eyJ...)\", signup: \"https://studio.nebius.com/settings/api-keys\",\n free: true, billed: true, verified: true,\n aliases: [\"nebius\", \"nebius ai studio\", \"nebius token factory\"],\n freeModels: [\"meta-llama/Llama-3.3-70B-Instruct\", \"Qwen/Qwen2.5-Coder-32B-Instruct\", \"deepseek-ai/DeepSeek-V3\"],\n note: \"Catalogo open grosso (llama, qwen-coder, deepseek) con credito iniziale gratuito. Chiave JWT come Hyperbolic: se il rilevamento propone entrambi, scegli tu.\"\n },\n {\n id: \"moonshot\", label: \"Moonshot AI (Kimi)\", env: \"MOONSHOT_API_KEY\",\n host: \"api.moonshot.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk- (es. sk-xxxx)\",\n signup: \"https://platform.moonshot.ai/console/api-keys\",\n free: false, billed: true, verified: true,\n aliases: [\"moonshot\", \"moonshot ai\", \"kimi\", \"kimi k2\", \"moonshotai\"],\n freeModels: [],\n note: \"Kimi K2 (contesto enorme, forte nel coding agentico). A consumo, prezzi bassi.\"\n },\n {\n id: \"zai\", label: \"Z.ai (GLM / Zhipu)\", env: \"ZAI_API_KEY\",\n host: \"api.z.ai\", chatPath: \"/api/paas/v4/chat/completions\", modelsPath: null,\n detect: /^[0-9a-f]{32}\\.[A-Za-z0-9]{10,}$/, keyFmt: \"Forma id.segreto (32 esadecimali + punto + segreto)\",\n signup: \"https://z.ai/manage-apikey/apikey-list\",\n free: true, billed: true, verified: true,\n aliases: [\"z ai\", \"zai\", \"zhipu\", \"zhipu ai\", \"glm\", \"bigmodel\"],\n freeModels: [\"glm-4.5-flash\", \"glm-4.6-flash\"],\n note: \"GLM (glm-4.x/5): i modelli *-flash hanno un piano gratuito. Chiave in forma id.segreto come Ollama Cloud: se il rilevamento è incerto, scegli tu.\"\n },\n {\n id: \"bigmodel\", label: \"Zhipu BigModel (Cina)\", env: \"BIGMODEL_API_KEY\",\n host: \"open.bigmodel.cn\", chatPath: \"/api/paas/v4/chat/completions\", modelsPath: null,\n detect: /^[0-9a-f]{32}\\.[A-Za-z0-9]{10,}$/, keyFmt: \"Forma id.segreto (come Z.ai)\",\n signup: \"https://open.bigmodel.cn/usercenter/apikeys\",\n free: true, billed: true, verified: true,\n aliases: [\"bigmodel\", \"open bigmodel\", \"zhipu bigmodel\", \"chatglm\"],\n freeModels: [\"glm-4-flash\", \"glm-4.5-flash\"],\n note: \"Portale cinese di Zhipu: glm-4-flash gratis. Stesso endpoint di Z.ai ma dominio .cn (più lento dall'Italia).\"\n },\n {\n id: \"minimax\", label: \"MiniMax\", env: \"MINIMAX_API_KEY\",\n host: \"api.minimax.io\", chatPath: \"/v1/text/chatcompletion_v2\", modelsPath: null,\n detect: /^eyJ[A-Za-z0-9_-]+\\./, keyFmt: \"JWT (inizia con eyJ...)\",\n signup: \"https://www.minimax.io/platform/user-center/basic-information/interface-key\",\n free: false, billed: true, verified: false,\n aliases: [\"minimax\", \"minimax m2\", \"minimaxi\"],\n freeModels: [],\n note: \"MiniMax M2 (coding/agent, contesto grande). Endpoint OpenAI-compat su /v1/text/chatcompletion_v2. \" + NV\n },\n {\n id: \"siliconflow\", label: \"SiliconFlow\", env: \"SILICONFLOW_API_KEY\",\n host: \"api.siliconflow.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk- (es. sk-xxxx)\",\n signup: \"https://cloud.siliconflow.com/account/ak\",\n free: true, billed: true, verified: true,\n aliases: [\"siliconflow\", \"silicon flow\", \"siliconcloud\"],\n freeModels: [\"Qwen/Qwen2.5-7B-Instruct\", \"THUDM/glm-4-9b-chat\", \"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B\"],\n note: \"Gateway cinese con molti modelli open; alcuni piccoli sono gratis a vita, gli altri a consumo economico.\"\n },\n {\n id: \"hunyuan\", label: \"Tencent Hunyuan\", env: \"HUNYUAN_API_KEY\",\n host: \"api.hunyuan.cloud.tencent.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk- (es. sk-xxxx)\",\n signup: \"https://console.cloud.tencent.com/hunyuan/api-key\",\n free: true, billed: true, verified: false,\n aliases: [\"hunyuan\", \"tencent\", \"tencent hunyuan\", \"tencent cloud\"],\n freeModels: [\"hunyuan-lite\"],\n note: \"hunyuan-lite è gratuito; i modelli grossi a consumo. \" + NV\n },\n {\n id: \"stepfun\", label: \"StepFun\", env: \"STEPFUN_API_KEY\",\n host: \"api.stepfun.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://platform.stepfun.com/interface-key\",\n free: false, billed: true, verified: false,\n aliases: [\"stepfun\", \"step fun\", \"step-3\", \"step 3.5\"],\n freeModels: [],\n note: \"Modelli step-* (gli stessi :free che passano da Kilo). \" + NV\n },\n {\n id: \"qianfan\", label: \"Baidu Qianfan (ERNIE)\", env: \"QIANFAN_API_KEY\",\n host: \"qianfan.baidubce.com\", chatPath: \"/v2/chat/completions\", modelsPath: null,\n detect: /^bce-v3\\//, strong: true, keyFmt: \"Inizia con bce-v3/ (es. bce-v3/ALTAK-...)\",\n signup: \"https://console.bce.baidu.com/iam/#/iam/apikey/list\",\n free: true, billed: true, verified: false,\n aliases: [\"qianfan\", \"baidu\", \"baidu qianfan\", \"ernie\", \"wenxin\"],\n freeModels: [\"ernie-speed-128k\", \"ernie-lite-8k\"],\n note: \"ERNIE: le versioni speed/lite sono gratuite. \" + NV\n },\n {\n id: \"modelscope\", label: \"ModelScope (Alibaba, free)\", env: \"MODELSCOPE_API_KEY\",\n host: \"api-inference.modelscope.cn\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^ms-[0-9a-fA-F-]{20,}$/, strong: true, keyFmt: \"Inizia con ms- (es. ms-xxxxxxxx-....)\",\n signup: \"https://modelscope.cn/my/myaccesstoken\",\n free: true, billed: false, verified: true,\n aliases: [\"modelscope\", \"model scope\", \"modelscope inference\"],\n freeModels: [\"Qwen/Qwen3-Coder-480B-A35B-Instruct\", \"deepseek-ai/DeepSeek-V3\", \"Qwen/QwQ-32B\"],\n note: \"GRATIS ~2000 chiamate/giorno su modelli GROSSI (qwen3-coder-480b, deepseek). Serve solo un account ModelScope (Alibaba), niente carta.\"\n },\n {\n id: \"ppinfra\", label: \"PPIO / PPInfra (Novita Cina)\", env: \"PPINFRA_API_KEY\",\n host: \"api.ppinfra.com\", chatPath: \"/v3/openai/chat/completions\", modelsPath: \"/v3/openai/models\",\n detect: /^sk_/, keyFmt: \"Inizia con sk_ (come Novita)\",\n signup: \"https://ppinfra.com/settings/key-management\",\n free: true, billed: true, verified: false,\n aliases: [\"ppinfra\", \"ppio\", \"pp infra\"],\n freeModels: [],\n note: \"Gemello cinese di Novita (stessa API /v3/openai). Credito di benvenuto. \" + NV\n },\n\n // ================= GATEWAY / AGGREGATORI ================================\n {\n id: \"vercel\", label: \"Vercel AI Gateway\", env: \"VERCEL_AI_API_KEY\",\n host: \"ai-gateway.vercel.sh\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^vck_/, strong: true, keyFmt: \"Inizia con vck_ (es. vck_xxxx)\",\n signup: \"https://vercel.com/docs/ai-gateway\",\n free: true, billed: true, verified: true,\n aliases: [\"vercel\", \"vercel ai gateway\", \"ai gateway\"],\n freeModels: [\"(router a molti provider — credito mensile incluso nel piano Hobby)\"],\n note: \"Aggregatore: una chiave sola, tutti i provider dietro. Credito gratuito mensile col piano Hobby.\"\n },\n {\n id: \"requesty\", label: \"Requesty (router)\", env: \"REQUESTY_API_KEY\",\n host: \"router.requesty.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://app.requesty.ai/api-keys\",\n free: true, billed: true, verified: false,\n aliases: [\"requesty\", \"requesty router\", \"requesty ai\"],\n freeModels: [],\n note: \"Router tipo OpenRouter con credito di prova. \" + NV\n },\n {\n id: \"aimlapi\", label: \"AI/ML API\", env: \"AIMLAPI_API_KEY\",\n host: \"api.aimlapi.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^[0-9a-fA-F]{32,80}$/, keyFmt: \"chiave esadecimale (32–80 caratteri)\",\n signup: \"https://aimlapi.com/app/keys\",\n free: true, billed: true, verified: false,\n aliases: [\"aimlapi\", \"ai ml api\", \"ai/ml api\"],\n freeModels: [\"(200+ modelli, piccolo credito free all'iscrizione)\"],\n note: \"Aggregatore con 200+ modelli e un piccolo credito gratuito. \" + NV\n },\n {\n id: \"aihubmix\", label: \"AiHubMix\", env: \"AIHUBMIX_API_KEY\",\n host: \"aihubmix.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk-\",\n signup: \"https://aihubmix.com/token\",\n free: false, billed: true, verified: false,\n aliases: [\"aihubmix\", \"ai hub mix\"],\n freeModels: [],\n note: \"Aggregatore (anche modelli cinesi) OpenAI-compat. \" + NV\n },\n {\n id: \"api302\", label: \"302.AI\", env: \"API302_API_KEY\",\n host: \"api.302.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk-\",\n signup: \"https://dash.302.ai/apis/list\",\n free: false, billed: true, verified: false,\n aliases: [\"302 ai\", \"302ai\", \"302.ai\"],\n freeModels: [],\n note: \"Aggregatore a consumo, credito di prova all'iscrizione. \" + NV\n },\n\n // ================= PROVIDER CON PIANO FREE / TRIAL ======================\n {\n id: \"cohere\", label: \"Cohere (trial gratis)\", env: \"COHERE_API_KEY\",\n host: \"api.cohere.ai\", chatPath: \"/compatibility/v1/chat/completions\", modelsPath: \"/compatibility/v1/models\",\n detect: /^[A-Za-z0-9]{40}$/, keyFmt: \"40 caratteri alfanumerici\",\n signup: \"https://dashboard.cohere.com/api-keys\",\n free: true, billed: false, verified: true,\n aliases: [\"cohere\", \"command a\", \"command r\", \"command r+\"],\n freeModels: [\"command-a-03-2025\", \"command-r-plus-08-2024\", \"command-r7b-12-2024\"],\n note: \"Chiave 'Trial' gratuita: 1000 chiamate/mese, nessuna carta. ★ Ora punta all'endpoint OpenAI-compat /compatibility/v1, quindi può entrare nel failover (prima era escluso).\"\n },\n {\n id: \"codestral\", label: \"Mistral Codestral (chiave free dedicata)\", env: \"CODESTRAL_API_KEY\",\n host: \"codestral.mistral.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^[A-Za-z0-9]{32}$/, keyFmt: \"32 caratteri alfanumerici (come Mistral)\",\n signup: \"https://console.mistral.ai/codestral\",\n free: true, billed: false, verified: true,\n aliases: [\"codestral\", \"mistral codestral\", \"codestral api\"],\n freeModels: [\"codestral-latest\", \"codestral-2501\"],\n note: \"Chiave Codestral SEPARATA e gratuita (endpoint dedicato codestral.mistral.ai): ottima per il completamento di codice.\"\n },\n {\n id: \"upstage\", label: \"Upstage Solar\", env: \"UPSTAGE_API_KEY\",\n host: \"api.upstage.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^up_/, strong: true, keyFmt: \"Inizia con up_ (es. up_xxxx)\",\n signup: \"https://console.upstage.ai/api-keys\",\n free: true, billed: true, verified: true,\n aliases: [\"upstage\", \"solar\", \"solar pro\", \"upstage solar\"],\n freeModels: [\"solar-pro2 (credito di benvenuto)\"],\n note: \"Solar Pro (coreano, veloce e capace). Credito gratuito all'iscrizione.\"\n },\n {\n id: \"friendli\", label: \"FriendliAI\", env: \"FRIENDLI_TOKEN\",\n host: \"api.friendli.ai\", chatPath: \"/serverless/v1/chat/completions\", modelsPath: \"/serverless/v1/models\",\n detect: /^flp_/, strong: true, keyFmt: \"Inizia con flp_ (es. flp_xxxx)\",\n signup: \"https://suite.friendli.ai/user-settings/tokens\",\n free: true, billed: true, verified: true,\n aliases: [\"friendli\", \"friendliai\", \"friendli ai\", \"periflow\"],\n freeModels: [\"meta-llama-3.3-70b-instruct\", \"deepseek-r1\", \"qwen2.5-coder-32b\"],\n note: \"Serverless veloce sui modelli open, con credito gratuito iniziale.\"\n },\n {\n id: \"inference-net\", label: \"Inference.net\", env: \"INFERENCE_API_KEY\",\n host: \"api.inference.net\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^inference-/, strong: true, keyFmt: \"Inizia con inference- (es. inference-xxxx)\",\n signup: \"https://inference.net/dashboard/api-keys\",\n free: true, billed: true, verified: true,\n aliases: [\"inference net\", \"inference.net\", \"inferencenet\"],\n freeModels: [\"meta-llama/llama-3.3-70b-instruct/fp-8\", \"deepseek/deepseek-r1-distill-llama-70b\"],\n note: \"Credito gratuito iniziale su modelli open. OpenAI-compat pulito.\"\n },\n {\n id: \"kluster\", label: \"Kluster.ai\", env: \"KLUSTER_API_KEY\",\n host: \"api.kluster.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://platform.kluster.ai/apikeys\",\n free: true, billed: true, verified: true,\n aliases: [\"kluster\", \"kluster ai\", \"kluster.ai\"],\n freeModels: [\"klusterai/Meta-Llama-3.3-70B-Instruct-Turbo\", \"deepseek-ai/DeepSeek-V3\"],\n note: \"Credito di prova gratuito su modelli open grossi (e batch a metà prezzo).\"\n },\n {\n id: \"io-intelligence\", label: \"io.net Intelligence (free)\", env: \"IOINTELLIGENCE_API_KEY\",\n host: \"api.intelligence.io.solutions\", chatPath: \"/api/v1/chat/completions\", modelsPath: \"/api/v1/models\",\n detect: /^eyJ[A-Za-z0-9_-]+\\./, keyFmt: \"JWT (inizia con eyJ...)\",\n signup: \"https://ai.io.net/ai/api-keys\",\n free: true, billed: false, verified: true,\n aliases: [\"io net\", \"io.net\", \"io intelligence\", \"ionet\"],\n freeModels: [\"meta-llama/Llama-3.3-70B-Instruct\", \"deepseek-ai/DeepSeek-R1-0528\", \"Qwen/Qwen3-235B-A22B\"],\n note: \"Piano GRATUITO con quota giornaliera su modelli grossi (llama-70b, deepseek-r1, qwen-235b). Chiave JWT.\"\n },\n {\n id: \"scaleway\", label: \"Scaleway Generative APIs\", env: \"SCALEWAY_API_KEY\",\n host: \"api.scaleway.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, strong: true,\n keyFmt: \"UUID (8-4-4-4-12, es. 0a1b2c3d-....)\",\n signup: \"https://console.scaleway.com/iam/api-keys\",\n free: true, billed: true, verified: true,\n aliases: [\"scaleway\", \"scaleway generative apis\", \"scaleway ai\"],\n freeModels: [\"llama-3.3-70b-instruct\", \"qwen2.5-coder-32b-instruct\", \"deepseek-r1-distill-llama-70b\"],\n note: \"Datacenter europeo (Parigi): quota gratuita mensile, poi a consumo. Buono se ti interessa che i dati restino in UE.\"\n },\n {\n id: \"lambda\", label: \"Lambda Inference\", env: \"LAMBDA_API_KEY\",\n host: \"api.lambda.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^secret_/, strong: true, keyFmt: \"Inizia con secret_ (es. secret_xxxx)\",\n signup: \"https://cloud.lambda.ai/api-keys\",\n free: false, billed: true, verified: true,\n aliases: [\"lambda\", \"lambda labs\", \"lambda ai\", \"lambda inference\"],\n freeModels: [],\n note: \"Modelli open a prezzi bassi (llama, qwen, deepseek). A consumo.\"\n },\n {\n id: \"baseten\", label: \"Baseten\", env: \"BASETEN_API_KEY\",\n host: \"inference.baseten.co\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://app.baseten.co/settings/api_keys\",\n free: true, billed: true, verified: false,\n aliases: [\"baseten\", \"base ten\"],\n freeModels: [\"(credito di prova su llama/qwen/deepseek)\"],\n note: \"Model APIs OpenAI-compat + possibilità di ospitare modelli tuoi. Credito di prova. \" + NV\n },\n {\n id: \"avian\", label: \"Avian.io\", env: \"AVIAN_API_KEY\",\n host: \"api.avian.io\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://avian.io/dashboard\",\n free: false, billed: true, verified: false,\n aliases: [\"avian\", \"avian io\", \"avian.io\"],\n freeModels: [],\n note: \"Inference veloce su modelli open. \" + NV\n },\n {\n id: \"parasail\", label: \"Parasail\", env: \"PARASAIL_API_KEY\",\n host: \"api.parasail.io\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://www.parasail.io/\",\n free: true, billed: true, verified: false,\n aliases: [\"parasail\", \"parasail io\"],\n freeModels: [\"(credito di prova, modelli open)\"],\n note: \"Serverless su GPU a basso costo, credito di prova. \" + NV\n },\n {\n id: \"ai21\", label: \"AI21 Jamba\", env: \"AI21_API_KEY\",\n host: \"api.ai21.com\", chatPath: \"/studio/v1/chat/completions\", modelsPath: null,\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://studio.ai21.com/account/api-key\",\n free: true, billed: true, verified: false,\n aliases: [\"ai21\", \"ai21 labs\", \"jamba\"],\n freeModels: [\"jamba-mini (credito di prova)\"],\n note: \"Jamba (contesto lunghissimo). Credito di prova gratuito. \" + NV\n },\n {\n id: \"writer\", label: \"Writer Palmyra\", env: \"WRITER_API_KEY\",\n host: \"api.writer.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://app.writer.com/aistudio/organization/api-keys\",\n free: true, billed: true, verified: false,\n aliases: [\"writer\", \"writer ai\", \"palmyra\"],\n freeModels: [\"palmyra-x5 (credito di prova)\"],\n note: \"Palmyra X (buono sui testi lunghi). Credito di prova. \" + NV\n },\n {\n id: \"reka\", label: \"Reka AI\", env: \"REKA_API_KEY\",\n host: \"api.reka.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://platform.reka.ai/apikeys\",\n free: false, billed: true, verified: false,\n aliases: [\"reka\", \"reka ai\", \"reka core\", \"reka flash\"],\n freeModels: [],\n note: \"Reka Flash/Core (multimodale). \" + NV\n },\n\n // ================= SENZA FILTRI / ROLEPLAY (uncensored) ==================\n {\n id: \"nanogpt\", label: \"NanoGPT (senza filtri)\", env: \"NANOGPT_API_KEY\",\n host: \"nano-gpt.com\", chatPath: \"/api/v1/chat/completions\", modelsPath: \"/api/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://nano-gpt.com/api\",\n free: false, billed: true, uncensored: true, verified: true,\n aliases: [\"nanogpt\", \"nano gpt\", \"nano-gpt\"],\n freeModels: [\"(pay-per-prompt: anche modelli abliterated/uncensored)\"],\n note: \"Si paga a singolo prompt (pochi centesimi, carta o cripto) e include modelli SENZA FILTRI. Nessun abbonamento.\"\n },\n {\n id: \"infermatic\", label: \"Infermatic / TotalGPT (RP senza filtri)\", env: \"INFERMATIC_API_KEY\",\n host: \"api.totalgpt.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://infermatic.ai/\",\n free: false, billed: true, uncensored: true, verified: false,\n aliases: [\"infermatic\", \"totalgpt\", \"total gpt\", \"infermatic ai\"],\n freeModels: [\"(abbonamento fisso: modelli RP/abliterated illimitati)\"],\n note: \"Abbonamento mensile fisso con modelli roleplay/abliterated (Midnight-Miqu, magnum...). \" + NV\n },\n {\n id: \"mancer\", label: \"Mancer (senza filtri)\", env: \"MANCER_API_KEY\",\n host: \"neuro.mancer.tech\", chatPath: \"/oai/v1/chat/completions\", modelsPath: \"/oai/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://mancer.tech/\",\n free: false, billed: true, uncensored: true, verified: false,\n aliases: [\"mancer\", \"mancer tech\", \"mancer ai\"],\n freeModels: [\"(a crediti: mytholite, weaver — nessun filtro)\"],\n note: \"Storico provider RP senza filtri, a crediti. Endpoint OpenAI-compat su /oai/v1. \" + NV\n },\n {\n id: \"targon\", label: \"Targon (Bittensor)\", env: \"TARGON_API_KEY\",\n host: \"api.targon.com\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sn4_/, strong: true, keyFmt: \"Inizia con sn4_ (es. sn4_xxxx)\",\n signup: \"https://targon.com/\",\n free: true, billed: false, uncensored: true, verified: false,\n aliases: [\"targon\", \"bittensor\", \"sybil\", \"manifold\"],\n freeModels: [\"deepseek-ai/DeepSeek-V3\", \"(modelli open serviti dai miner Bittensor)\"],\n note: \"Rete decentralizzata Bittensor: quota gratuita, nessun filtro aggiunto dal gateway. \" + NV\n },\n {\n id: \"nineteen\", label: \"Nineteen.ai (Bittensor)\", env: \"NINETEEN_API_KEY\",\n host: \"api.nineteen.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: null, keyFmt: \"Chiave alfanumerica lunga (senza prefisso fisso)\",\n signup: \"https://nineteen.ai/app/api\",\n free: true, billed: false, uncensored: true, verified: false,\n aliases: [\"nineteen\", \"nineteen ai\", \"nineteen.ai\", \"sn19\"],\n freeModels: [\"unsloth/Llama-3.2-3B-Instruct\", \"(modelli open dai miner)\"],\n note: \"Gateway Bittensor con piano gratuito, modelli open senza filtri aggiuntivi. \" + NV\n },\n {\n id: \"redpill\", label: \"RedPill\", env: \"REDPILL_API_KEY\",\n host: \"api.redpill.ai\", chatPath: \"/v1/chat/completions\", modelsPath: \"/v1/models\",\n detect: /^sk-/, keyFmt: \"Inizia con sk-\",\n signup: \"https://red-pill.ai/\",\n free: false, billed: true, uncensored: true, verified: false,\n aliases: [\"redpill\", \"red pill\", \"red-pill\"],\n freeModels: [],\n note: \"Router (anche TEE/privacy) con modelli open non filtrati. \" + NV\n }\n];\n\n/**\n * PIATTAFORME GPU aggiuntive (dove PORTI i tuoi modelli abliterated).\n * Stessa forma di gpuPlatforms.PLATFORMS: gpuPlatforms le fonde con le sue e\n * le sue vincono (Kaggle è cablata e ha lo stato live).\n */\nconst PLATFORMS_EXTRA = [\n {\n id: \"beam\", url: \"https://www.beam.cloud/\", name: \"Beam Cloud (serverless GPU)\",\n kind: \"freemium\", freeGpu: true, alwaysOn: false, uncensoredOk: true, remote: false,\n costo: \"ore GPU gratis ogni mese sul free tier, poi a consumo al secondo\",\n pros: [\n \"Ore GPU gratis ogni mese senza carta\",\n \"Serverless: paghi solo i secondi di inferenza\",\n \"Container tuoi: nessun controllo sui modelli abliterated\",\n \"Deploy da CLI in un minuto\"\n ],\n cons: [\n \"Cold start di qualche decina di secondi\",\n \"Serve un token nel .env per accenderlo da remoto (non ancora cablato)\"\n ],\n howto: \"Da cablare: BEAM_TOKEN nel .env, deploy di un endpoint Ollama/vLLM e puntarlo al failover come Kaggle.\",\n note: \"Buon compromesso: gratis all'inizio e non si scollega come Colab.\"\n },\n {\n id: \"cerebrium\", url: \"https://www.cerebrium.ai/\", name: \"Cerebrium (serverless GPU)\",\n kind: \"freemium\", freeGpu: true, alwaysOn: false, uncensoredOk: true, remote: false,\n costo: \"credito gratuito iniziale, poi fatturazione al secondo\",\n pros: [\"Credito iniziale gratis\", \"Scale-to-zero: spento non costa\", \"Modelli tuoi senza restrizioni\"],\n cons: [\"Finito il credito si paga\", \"Cold start\", \"Non ancora cablato in Antigravity\"],\n howto: \"Da cablare: deploy di un runtime vLLM/Ollama e puntarlo al failover.\",\n note: \"Alternativa a Modal, molto simile nell'uso.\"\n },\n {\n id: \"koyeb\", url: \"https://www.koyeb.com/\", name: \"Koyeb (dominio stabile, GPU a consumo)\",\n kind: \"freemium\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"free tier solo CPU; GPU a consumo con scale-to-zero\",\n pros: [\"Servizi sempre accesi con dominio pubblico incluso (niente ngrok)\", \"Deploy da Git/Docker semplicissimo\"],\n cons: [\"Le GPU non sono gratis\", \"Sul free tier (CPU) girano solo modelli minuscoli\"],\n howto: \"Utile come PONTE stabile (dominio fisso) davanti a un backend GPU, al posto di ngrok.\",\n note: \"Da considerare per togliere di mezzo ngrok, più che per la GPU.\"\n },\n {\n id: \"flyio\", url: \"https://fly.io/gpu\", name: \"Fly.io (GPU a consumo)\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"GPU a ore, con macchine che si sospendono da sole quando sono inattive\",\n pros: [\"Macchine sospendibili: paghi solo quando servono\", \"Rete globale e dominio stabile\", \"Nessun limite sui modelli\"],\n cons: [\"Nessuna GPU gratis\", \"Serve carta di credito\"],\n howto: \"Da cablare: FLY_API_TOKEN nel .env per accendere/spegnere la macchina come Kaggle.\",\n note: \"Buono se vuoi un endpoint tuo affidabile pagando a ore.\"\n },\n {\n id: \"tensordock\", url: \"https://tensordock.com/\", name: \"TensorDock (marketplace GPU)\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"marketplace: prezzi molto bassi anche su 4090/A100\",\n pros: [\"Prezzi bassissimi\", \"VM complete: ci metti quello che vuoi\", \"Nessun limite sui modelli\"],\n cons: [\"A pagamento\", \"Affidabilità variabile (host indipendenti)\", \"Setup manuale\"],\n howto: \"Da cablare: API TensorDock per creare/distruggere la VM da remoto.\",\n note: \"Alternativa a Vast.ai, spesso con listino più chiaro.\"\n },\n {\n id: \"jarvislabs\", url: \"https://jarvislabs.ai/\", name: \"JarvisLabs (GPU a ore, disco che resta)\",\n kind: \"paid\", freeGpu: false, alwaysOn: false, uncensoredOk: true, remote: false,\n costo: \"a ore (A5000/A6000), con pausa/riprendi\",\n pros: [\"Pausa e riprendi tenendo il disco: i modelli restano scaricati\", \"Semplice, orientato ai notebook\", \"API per accendere/spegnere\"],\n cons: [\"A pagamento\", \"Niente free tier\"],\n howto: \"Da cablare: JARVISLABS_API_KEY per accendere/spegnere e puntare al failover.\",\n note: \"Comodo perché il disco resta: non riscarichi 20 GB di modello ogni volta.\"\n },\n {\n id: \"novita-gpu\", url: \"https://novita.ai/gpu-instance\", name: \"Novita GPU Instance\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"a ore (4090/A100), fatturazione al minuto\",\n pros: [\"Stesso account che usi già per l'API Novita\", \"Template Ollama/vLLM pronti\", \"Modelli tuoi senza restrizioni\"],\n cons: [\"A pagamento\", \"Nessuna GPU gratis\"],\n howto: \"Da cablare: la chiave Novita che hai già serve anche per le istanze GPU.\",\n note: \"Se hai già la chiave Novita, è la strada più corta per una GPU 24/7.\"\n },\n {\n id: \"sagemaker-lab\", url: \"https://studiolab.sagemaker.aws/\", name: \"Amazon SageMaker Studio Lab\",\n kind: \"free\", freeGpu: true, alwaysOn: false, uncensoredOk: true, remote: false,\n costo: \"0€ — sessioni GPU a tempo, nessuna carta di credito\",\n pros: [\"GPU gratis senza carta\", \"Ambiente persistente (il disco resta)\", \"Più stabile di Colab\"],\n cons: [\"Sessioni a tempo, poi va riavviato a mano\", \"Approvazione dell'account non immediata\", \"Non gestibile da remoto\"],\n howto: \"Alternativa gratuita a Kaggle quando la quota settimanale è finita.\",\n note: \"Ore GPU gratis in più, utili come riserva.\"\n },\n {\n id: \"saturn\", url: \"https://saturncloud.io/\", name: \"Saturn Cloud (free GPU)\",\n kind: \"freemium\", freeGpu: true, alwaysOn: false, uncensoredOk: true, remote: false,\n costo: \"0€ — ore di calcolo gratis ogni mese (una parte su GPU)\",\n pros: [\"Ore GPU gratis al mese\", \"Ambienti Jupyter persistenti\", \"Niente carta per il free tier\"],\n cons: [\"Risorse gratis limitate e a volte in coda\", \"Non cablato in Antigravity\"],\n howto: \"Come Kaggle: notebook con Ollama + tunnel, da puntare al failover.\",\n note: \"Buona riserva quando Kaggle è a quota zero.\"\n },\n {\n id: \"thunder\", url: \"https://www.thundercompute.com/\", name: \"Thunder Compute (GPU low cost)\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"A100 virtualizzata a poche decine di centesimi l'ora, al minuto\",\n pros: [\"Tra i prezzi più bassi per una A100\", \"CLI semplice, istanze in pochi secondi\", \"Nessun limite sui modelli\"],\n cons: [\"A pagamento\", \"GPU virtualizzata: qualche punto percentuale di prestazioni in meno\"],\n howto: \"Da cablare: token nel .env per accendere/spegnere l'istanza.\",\n note: \"Se serve un modello 70B senza spendere come su AWS.\"\n },\n {\n id: \"primeintellect\", url: \"https://www.primeintellect.ai/\", name: \"Prime Intellect (confronto prezzi GPU)\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"aggregatore: prende il prezzo più basso tra molti fornitori\",\n pros: [\"Confronta i prezzi di molti fornitori in un unico posto\", \"API unica per accendere/spegnere\", \"Nessun limite sui modelli\"],\n cons: [\"A pagamento\", \"La qualità dipende dal fornitore che ti assegna\"],\n howto: \"Da cablare: API key per creare/distruggere l'istanza dal telefono.\",\n note: \"Comodo per trovare la GPU più economica disponibile al momento.\"\n },\n {\n id: \"hyperstack\", url: \"https://www.hyperstack.cloud/\", name: \"Hyperstack (GPU europee)\",\n kind: \"paid\", freeGpu: false, alwaysOn: true, uncensoredOk: true, remote: false,\n costo: \"a ore (A100/H100), datacenter in Europa\",\n pros: [\"Datacenter europei: latenza bassa dall'Italia e dati in UE\", \"API completa per accendere/spegnere\", \"Modelli tuoi senza restrizioni\"],\n cons: [\"A pagamento\", \"Niente free tier\"],\n howto: \"Da cablare: HYPERSTACK_API_KEY nel .env.\",\n note: \"La scelta 'europea' se ti interessa dove stanno i dati.\"\n }\n];\n\nmodule.exports = { CATALOG, PLATFORMS_EXTRA };\n"}}}}