First slice of #3701: quota tracking for Groq via x-ratelimit-* response headers on the models endpoint (no dedicated quota endpoint exists, and reading usage costs zero tokens). - usage/groq.js: parse request+token limit/remaining headers; Go-style duration reset headers ("2m59.56s") resolve to future timestamps; missing key/401/403 -> message, 2xx without headers -> soft "not tracked yet" with quotas:{} - registry/groq.js: transport.usage.url (reuses validateUrl) + features {usage, usageApikey} - services/usage.js: groq entry in USAGE_HANDLERS - ProviderLimits/utils.js: parseQuotaData case (absolute used/total, codex/kiro style) - tests: groq-usage.test.js (registry flags, header parsing, soft not-tracked path, missing key/401, parseQuotaData)
48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
export default {
|
|
id: "groq",
|
|
priority: 60,
|
|
hasFree: true,
|
|
alias: "groq",
|
|
display: {
|
|
name: "Groq",
|
|
icon: "speed",
|
|
color: "#F55036",
|
|
textIcon: "GQ",
|
|
website: "https://groq.com",
|
|
notice: {
|
|
apiKeyUrl: "https://console.groq.com/keys",
|
|
},
|
|
},
|
|
category: "apikey",
|
|
transport: {
|
|
baseUrl: "https://api.groq.com/openai/v1/chat/completions",
|
|
validateUrl: "https://api.groq.com/openai/v1/models",
|
|
// No dedicated quota endpoint; rate-limit info rides on x-ratelimit-*
|
|
// response headers, always included. Reuse the models list (already
|
|
// used as validateUrl) so reading usage never costs tokens.
|
|
usage: {
|
|
url: "https://api.groq.com/openai/v1/models",
|
|
},
|
|
},
|
|
models: [
|
|
{ id: "llama-3.3-70b-versatile", name: "Llama 3.3 70B" },
|
|
{ id: "meta-llama/llama-4-maverick-17b-128e-instruct", name: "Llama 4 Maverick" },
|
|
{ id: "qwen/qwen3-32b", name: "Qwen3 32B" },
|
|
{ id: "openai/gpt-oss-120b", name: "GPT-OSS 120B" },
|
|
{ id: "whisper-large-v3", name: "Whisper Large v3", params: ["language","response_format","temperature","prompt"], kind: "stt" },
|
|
{ id: "whisper-large-v3-turbo", name: "Whisper Large v3 Turbo", params: ["language","response_format","temperature","prompt"], kind: "stt" },
|
|
{ id: "distil-whisper-large-v3-en", name: "Distil Whisper Large v3 EN", params: ["language","response_format","temperature","prompt"], kind: "stt" },
|
|
],
|
|
serviceKinds: ["llm","imageToText","stt"],
|
|
sttConfig: {
|
|
baseUrl: "https://api.groq.com/openai/v1/audio/transcriptions",
|
|
authType: "apikey",
|
|
authHeader: "bearer",
|
|
format: "openai",
|
|
},
|
|
features: {
|
|
usage: true,
|
|
usageApikey: true,
|
|
},
|
|
};
|