mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-24 16:12:23 +03:00
Cherry-picked the author's cleaned single-commit head onto the current tip. One fix applied pre-merge: the removal migration collided at number 161 with today's config_audit_log migration (#11103) — renumbered to 162_remove_hackclub_provider.sql. Focused tests: remove-hackclub-11118 + provider-metrics-deleted-provider green; check:provider-consistency OK (266/348/0). Provider removal requested by Hack Club maintainers (#11118). Thank you @rqzbeh!
This commit is contained in:
@@ -120,7 +120,6 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve
|
|||||||
| `firecrawl` | caution | Cloud API ToS has no explicit personal-proxy prohibition found, but the open-source self-hosted version is AGPL-3.0 (re… |
|
| `firecrawl` | caution | Cloud API ToS has no explicit personal-proxy prohibition found, but the open-source self-hosted version is AGPL-3.0 (re… |
|
||||||
| `gemini` | caution | ToS explicitly states the free tier is for "developers building with Google AI models for professional or business purp… |
|
| `gemini` | caution | ToS explicitly states the free tier is for "developers building with Google AI models for professional or business purp… |
|
||||||
| `groq` | caution | Services Agreement §6.3 prohibits reselling, sublicensing, or distributing API access; §3.2 bars reselling/leasing acco… |
|
| `groq` | caution | Services Agreement §6.3 prohibits reselling, sublicensing, or distributing API access; §3.2 bars reselling/leasing acco… |
|
||||||
| `hackclub` | caution | Service is explicitly scoped to Hack Club teen members building projects/learning; no public ToS found explicitly permi… |
|
|
||||||
| `huggingchat` | caution | Hugging Face ToS does not explicitly ban personal self-hosted proxies, but supplemental terms (referenced but not fully… |
|
| `huggingchat` | caution | Hugging Face ToS does not explicitly ban personal self-hosted proxies, but supplemental terms (referenced but not fully… |
|
||||||
| `huggingface` | caution | ToS grants a limited license to access/use the service; the document does not explicitly permit or forbid a single-user… |
|
| `huggingface` | caution | ToS grants a limited license to access/use the service; the document does not explicitly permit or forbid a single-user… |
|
||||||
| `hyperbolic` | caution | ToS grants API access "solely for your own personal or internal business purposes" and explicitly prohibits licensing, … |
|
| `hyperbolic` | caution | ToS grants API access "solely for your own personal or internal business purposes" and explicitly prohibits licensing, … |
|
||||||
@@ -222,7 +221,6 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve
|
|||||||
| `duckduckgo-web` | keyless | — | — | avoid | 6 |
|
| `duckduckgo-web` | keyless | — | — | avoid | 6 |
|
||||||
| `freemodel-dev` | keyless | — | — | unknown | 4 |
|
| `freemodel-dev` | keyless | — | — | unknown | 4 |
|
||||||
| `friendliai` | keyless | — | — | avoid | 2 |
|
| `friendliai` | keyless | — | — | avoid | 2 |
|
||||||
| `hackclub` | keyless | — | — | caution | 3 |
|
|
||||||
| `iflytek` | keyless | — | — | avoid | 1 |
|
| `iflytek` | keyless | — | — | avoid | 1 |
|
||||||
| `inference-net` | keyless | — | — | caution | 3 |
|
| `inference-net` | keyless | — | — | caution | 3 |
|
||||||
| `liquid` | keyless | — | — | unknown | 1 |
|
| `liquid` | keyless | — | — | unknown | 1 |
|
||||||
@@ -280,7 +278,6 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve
|
|||||||
- **`gitlawb`** — The shipped freeNote "Free tier available" is effectively stale. The original free MiMo access was removed in May 2026; the only remaining "free" option is a temporary promotional model (Nemotron 3 U…
|
- **`gitlawb`** — The shipped freeNote "Free tier available" is effectively stale. The original free MiMo access was removed in May 2026; the only remaining "free" option is a temporary promotional model (Nemotron 3 U…
|
||||||
- **`gitlawb-gmi`** — Partially still accurate — free tier exists but is now narrowed to a single model (Nemotron 3 Ultra) after MiMo free access was revoked in late May 2026. The shipped note "Free tier available" unders…
|
- **`gitlawb-gmi`** — Partially still accurate — free tier exists but is now narrowed to a single model (Nemotron 3 Ultra) after MiMo free access was revoked in late May 2026. The shipped note "Free tier available" unders…
|
||||||
- **`groq`** — The shipped freeNote "30 RPM / 14.4K RPD" is accurate only for llama-3.1-8b-instant. Most other models (including llama-3.3-70b-versatile) have a much lower 1K RPD cap. The note omits model-specific …
|
- **`groq`** — The shipped freeNote "30 RPM / 14.4K RPD" is accurate only for llama-3.1-8b-instant. Most other models (including llama-3.3-70b-versatile) have a much lower 1K RPD cap. The note omits model-specific …
|
||||||
- **`hackclub`** — The "30+ models" count appears accurate and still matches. The core offering remains free for Hack Club members. No evidence of tightening — still "$0 ALWAYS FREE" per the homepage. The freeNote omit…
|
|
||||||
- **`huggingchat`** — The shipped freeNote ("Free LLM chat — no subscription required. Rate limits apply.") is partially accurate but significantly understates the restrictions. The free tier now operates on a hard $0.10/…
|
- **`huggingchat`** — The shipped freeNote ("Free LLM chat — no subscription required. Rate limits apply.") is partially accurate but significantly understates the restrictions. The free tier now operates on a hard $0.10/…
|
||||||
- **`huggingface`** — Significantly tightened. The shipped freeNote ("Free Inference API for thousands of models") implied unlimited/generous free access, but as of mid-2025 the free tier is capped at $0.10/month in recur…
|
- **`huggingface`** — Significantly tightened. The shipped freeNote ("Free Inference API for thousands of models") implied unlimited/generous free access, but as of mid-2025 the free tier is capped at $0.10/month in recur…
|
||||||
- **`hyperbolic`** — Our shipped freeNote says "$1-5 trial credits on signup" — the $1 trial credit portion is accurate, but the "$5" figure refers to the minimum deposit required to unlock GPU rental (not free credits g…
|
- **`hyperbolic`** — Our shipped freeNote says "$1-5 trial credits on signup" — the $1 trial credit portion is accurate, but the "$5" figure refers to the minimum deposit required to unlock GPU rental (not free credits g…
|
||||||
|
|||||||
@@ -213,7 +213,6 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
|
|||||||
| `glm-cn` | `glmcn` | GLM Coding (China) | API key | [link](https://open.bigmodel.cn) | — |
|
| `glm-cn` | `glmcn` | GLM Coding (China) | API key | [link](https://open.bigmodel.cn) | — |
|
||||||
| `glmt` | `glmt` | GLM Thinking | API key | [link](https://open.bigmodel.cn) | — |
|
| `glmt` | `glmt` | GLM Thinking | API key | [link](https://open.bigmodel.cn) | — |
|
||||||
| `groq` | `groq` | Groq | API key | [link](https://groq.com) | Free tier: 30 RPM / 14.4K RPD — no credit card |
|
| `groq` | `groq` | Groq | API key | [link](https://groq.com) | Free tier: 30 RPM / 14.4K RPD — no credit card |
|
||||||
| `hackclub` | `hc` | Hackclub AI | API key, aggregator | [link](https://ai.hackclub.com) | Sign in with your Hack Club account at ai.hackclub.com. |
|
|
||||||
| `haiper` | `hp` | Haiper | API key, video | [link](https://haiper.ai) | Get API key at haiper.ai/haiper-api |
|
| `haiper` | `hp` | Haiper | API key, video | [link](https://haiper.ai) | Get API key at haiper.ai/haiper-api |
|
||||||
| `hcnsec` | `hcnsec` | Huancheng Public API | API key | [link](https://api.hcnsec.cn) | Get API key at api.hcnsec.cn |
|
| `hcnsec` | `hcnsec` | Huancheng Public API | API key | [link](https://api.hcnsec.cn) | Get API key at api.hcnsec.cn |
|
||||||
| `helixmind` | `helixmind` | HelixMind | API key, aggregator | [link](https://helixmind.online) | Previously circulated 3 RPM/50 RPD and no-card claims were not confirmed during the 2026-08-02 audit; current quota and billing require account verification. |
|
| `helixmind` | `helixmind` | HelixMind | API key, aggregator | [link](https://helixmind.online) | Previously circulated 3 RPM/50 RPD and no-card claims were not confirmed during the 2026-08-02 audit; current quota and billing require account verification. |
|
||||||
|
|||||||
@@ -194,9 +194,6 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
|||||||
{ provider: "groq", modelId: "openai/gpt-oss-120b", displayName: "GPT-OSS 120B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
{ provider: "groq", modelId: "openai/gpt-oss-120b", displayName: "GPT-OSS 120B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
||||||
{ provider: "groq", modelId: "openai/gpt-oss-20b", displayName: "GPT-OSS 20B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
{ provider: "groq", modelId: "openai/gpt-oss-20b", displayName: "GPT-OSS 20B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
||||||
{ provider: "groq", modelId: "qwen/qwen3-32b", displayName: "Qwen3 32B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
{ provider: "groq", modelId: "qwen/qwen3-32b", displayName: "Qwen3 32B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution", hardStopGuaranteed: true },
|
||||||
{ provider: "hackclub", modelId: "meta-llama/llama-3.3-70b-instruct", displayName: "Llama 3.3 70B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" },
|
|
||||||
{ provider: "hackclub", modelId: "mistralai/mistral-7b-instruct", displayName: "Mistral 7B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" },
|
|
||||||
{ provider: "hackclub", modelId: "deepseek-ai/deepseek-coder-33b", displayName: "DeepSeek Coder 33B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" },
|
|
||||||
{ provider: "huggingchat", modelId: "baidu/ERNIE-4.5-VL-424B-A47B-Base-PT", displayName: "ERNIE 4.5 VL 424B A47B Base PT", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
{ provider: "huggingchat", modelId: "baidu/ERNIE-4.5-VL-424B-A47B-Base-PT", displayName: "ERNIE 4.5 VL 424B A47B Base PT", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
||||||
{ provider: "huggingchat", modelId: "CohereLabs/c4ai-command-r7b-12-2024", displayName: "Command R7B 12-2024", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
{ provider: "huggingchat", modelId: "CohereLabs/c4ai-command-r7b-12-2024", displayName: "Command R7B 12-2024", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
||||||
{ provider: "huggingchat", modelId: "CohereLabs/command-a-reasoning-08-2025", displayName: "Command A Reasoning 08-2025", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
{ provider: "huggingchat", modelId: "CohereLabs/command-a-reasoning-08-2025", displayName: "Command A Reasoning 08-2025", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" },
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ import { togetherProvider } from "./registry/together/index.ts";
|
|||||||
import { cohereProvider } from "./registry/cohere/index.ts";
|
import { cohereProvider } from "./registry/cohere/index.ts";
|
||||||
import { cursorProvider, cursor_apiProvider } from "./registry/cursor/index.ts";
|
import { cursorProvider, cursor_apiProvider } from "./registry/cursor/index.ts";
|
||||||
import { volcengineProvider } from "./registry/volcengine/index.ts";
|
import { volcengineProvider } from "./registry/volcengine/index.ts";
|
||||||
import { hackclubProvider } from "./registry/hackclub/index.ts";
|
|
||||||
import { freetheaiProvider } from "./registry/freetheai/index.ts";
|
import { freetheaiProvider } from "./registry/freetheai/index.ts";
|
||||||
import { g4f_groqProvider } from "./registry/g4f-groq/index.ts";
|
import { g4f_groqProvider } from "./registry/g4f-groq/index.ts";
|
||||||
import { g4f_geminiProvider } from "./registry/g4f-gemini/index.ts";
|
import { g4f_geminiProvider } from "./registry/g4f-gemini/index.ts";
|
||||||
@@ -336,7 +335,6 @@ export const REGISTRY: Record<string, RegistryEntry> = {
|
|||||||
cursor: cursorProvider,
|
cursor: cursorProvider,
|
||||||
"cursor-api": cursor_apiProvider,
|
"cursor-api": cursor_apiProvider,
|
||||||
volcengine: volcengineProvider,
|
volcengine: volcengineProvider,
|
||||||
hackclub: hackclubProvider,
|
|
||||||
freetheai: freetheaiProvider,
|
freetheai: freetheaiProvider,
|
||||||
"g4f-groq": g4f_groqProvider,
|
"g4f-groq": g4f_groqProvider,
|
||||||
"g4f-gemini": g4f_geminiProvider,
|
"g4f-gemini": g4f_geminiProvider,
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
import type { RegistryEntry } from "../../shared.ts";
|
|
||||||
|
|
||||||
export const hackclubProvider: RegistryEntry = {
|
|
||||||
id: "hackclub",
|
|
||||||
alias: "hc",
|
|
||||||
format: "openai",
|
|
||||||
executor: "default",
|
|
||||||
baseUrl: "https://ai.hackclub.com/proxy/v1/chat/completions",
|
|
||||||
modelsUrl: "https://ai.hackclub.com/proxy/v1/models",
|
|
||||||
authType: "optional",
|
|
||||||
authHeader: "bearer",
|
|
||||||
passthroughModels: true,
|
|
||||||
defaultContextLength: 128000,
|
|
||||||
models: [
|
|
||||||
{ id: "meta-llama/llama-3.3-70b-instruct", name: "Llama 3.3 70B" },
|
|
||||||
{ id: "mistralai/mistral-7b-instruct", name: "Mistral 7B" },
|
|
||||||
{ id: "deepseek-ai/deepseek-coder-33b", name: "DeepSeek Coder 33B" },
|
|
||||||
],
|
|
||||||
};
|
|
||||||
21
src/lib/db/migrations/162_remove_hackclub_provider.sql
Normal file
21
src/lib/db/migrations/162_remove_hackclub_provider.sql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
-- 162_remove_hackclub_provider.sql
|
||||||
|
-- Hack Club AI provider was removed from OmniRoute at the request of Hack Club's
|
||||||
|
-- maintainers (#11118). Clean up any locally stored configuration for it.
|
||||||
|
-- Historical request and usage records are intentionally preserved under the
|
||||||
|
-- provider identity that existed when they were written.
|
||||||
|
|
||||||
|
DELETE FROM provider_connections
|
||||||
|
WHERE provider = 'hackclub';
|
||||||
|
|
||||||
|
DELETE FROM registered_keys
|
||||||
|
WHERE provider = 'hackclub';
|
||||||
|
|
||||||
|
DELETE FROM provider_key_limits
|
||||||
|
WHERE provider = 'hackclub';
|
||||||
|
|
||||||
|
DELETE FROM discovery_results
|
||||||
|
WHERE provider_id = 'hackclub';
|
||||||
|
|
||||||
|
DELETE FROM key_value
|
||||||
|
WHERE namespace = 'customModels'
|
||||||
|
AND key = 'hackclub';
|
||||||
@@ -106,7 +106,6 @@ export const AGGREGATOR_PROVIDER_IDS = new Set([
|
|||||||
"empower",
|
"empower",
|
||||||
"poe",
|
"poe",
|
||||||
"chutes",
|
"chutes",
|
||||||
"hackclub",
|
|
||||||
"freetheai",
|
"freetheai",
|
||||||
"g4f-groq",
|
"g4f-groq",
|
||||||
"g4f-gemini",
|
"g4f-gemini",
|
||||||
@@ -238,7 +237,6 @@ const EXPLICIT_OPTIONAL_APIKEY_PROVIDER_IDS = new Set([
|
|||||||
"searxng-search",
|
"searxng-search",
|
||||||
"firecrawl",
|
"firecrawl",
|
||||||
"copilot-web",
|
"copilot-web",
|
||||||
"hackclub",
|
|
||||||
"g4f-groq",
|
"g4f-groq",
|
||||||
"g4f-gemini",
|
"g4f-gemini",
|
||||||
"g4f-pollinations",
|
"g4f-pollinations",
|
||||||
|
|||||||
7
tests/unit/remove-hackclub-11118.test.ts
Normal file
7
tests/unit/remove-hackclub-11118.test.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import test from "node:test";
|
||||||
|
import assert from "node:assert/strict";
|
||||||
|
import { REGISTRY } from "../../open-sse/config/providers/index.ts";
|
||||||
|
|
||||||
|
test("hackclub provider is removed from REGISTRY", () => {
|
||||||
|
assert.equal("hackclub" in REGISTRY, false);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user