ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

CodexBar Groq Provider 深度解析:从浏览器会话抓取控制台用量到 Enterprise Prometheus 兜底

CodexBar Groq Provider 深度解析:从浏览器会话抓取控制台用量到 Enterprise Prometheus 兜底 CodexBar Groq Provider 深度解析从浏览器会话抓取控制台用量到 Enterprise Prometheus 兜底【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBarCodexBar 的 Groq Provider 通过读取浏览器中console.groq.com的登录会话Stytch Cookie直接调用控制台平台 API展示组织级每日花费Spend、Token 与请求量历史取代了旧版只能描述限流状态的公共 API 指标当没有可用会话时还会回退到仅限 Enterprise 的 Prometheus 指标通道。读完本文你将掌握 Groq 数据源的完整选择顺序、Stytch 会话刷新与 JWT 换取机制、活动数据 API 的字段语义与聚合方式以及 CLI 调试与故障排查的完整方案。为什么从“速率限制”转向“控制台用量”早期 CodexBar 的 Groq 用量展示依赖公共 API 返回的限流信息它描述的只是“请求/Token 被节流”的状态而不是真实消费。文档 docs/groq.md 明确指出这一设计转变现在用量与花费来自console.groq.com 仪表盘 API通过浏览器会话读取得到的是真实可审计的组织使用数据。从源码结构看这一转变体现在 GroqProviderDescriptor.swift 的 Provider 元数据中会话标签为Requests请求量周标签为TokensToken 量dashboardURL指向https://console.groq.com/dashboard/usage默认未启用defaultEnabled: false需在设置中手动开启“Show Groq usage”CLI 名称groqcloud别名groq、groq-api。数据源与选择顺序默认的auto流水线按以下顺序取数ConsoleWeb首选从浏览器读取控制台会话 Cookie调用平台活动 API 获取每日花费/Token/请求历史Prometheus 指标Enterprise API Key兜底仅在“没有可用会话 已配置 API Key”时使用该能力为 Enterprise 专属标准 Key 在此路径拿不到数据。sourceModes支持三种模式模式含义web仅使用 Console 控制台会话api仅使用 Prometheus 指标auto先 Console失败后回退 Prometheus该三态在 GroqProviderDescriptor.swift 的ProviderFetchPlan中映射到具体策略GroqConsoleWebFetchStrategy与prometheusStrategy()默认顺序为控制台优先。ConsoleWeb数据源详解会话 Cookie 的来源与优先级会话来自groq.com域名的 Cookie按浏览器导入顺序读取具体在 GroqConsoleSession.swift 中定义Cookie生命周期用途stytch_session约 30 天长期不透明令牌首选stytch_session_jwt约 5 分钟短期 JWT仅在无法刷新时直接兜底使用Cookie 导入的域名为[groq.com, console.groq.com]导入时会做多浏览器合并按Network → Primary → Safari的优先级排序同名记录取expires更晚更新鲜的那条同属一个浏览器 Profile 的多条记录会先合并再组装出SessionInfo包含sessionToken、directJWT与来源标签。该逻辑同样支持手动粘贴 Cookie Header 的入口session(fromCookieHeader:)会经CookieHeaderNormalizer归一化后解析出两个 Cookie。Stytch JWT 刷新机制由于stytch_session_jwt很快过期且只有控制台标签页打开时 SPA 才会自动刷新它CodexBar 在每次拉取前用长期不透明令牌向Stytch B2B 前端 SDK 端点换取全新 JWT——这与控制台 Web 应用自身发起的调用完全相同。实现在 GroqConsoleStytch.swift端点POST https://api.stytchb2b.groq.com/sdk/v1/b2b/sessions/authenticate认证头Authorization: Basic base64(publicToken:sessionToken)附加头X-SDK-ClientBase64 编码的 Stytch SDK 识别信息标识调用应用为console.groq.com、X-SDK-Parent-Host与Origin: https://console.groq.com请求体{session_token: token, session_duration_minutes: 30}即请求一个 30 分钟的会话 JWT请求超时 20 秒401/403 映射为accessDenied其余非 2xx 映射为apiError其中的 publishable公开Stytch Token 已内置设计上只授权来自console.groq.com来源的 SDK 调用若 Groq 轮换该 Token可通过环境变量覆盖GROQ_STYTCH_PUBLIC_TOKEN—— 覆盖内置的公开 TokenGROQ_STYTCH_URL—— 覆盖 Stytch 端点基址默认https://api.stytchb2b.groq.com活动数据 API 与组织 ID 解析拿到新鲜 JWT 后GroqConsoleFetcher.swift 调用平台活动 APIGET https://api.groq.com/platform/v1/organizations/{orgId}/activity?start_date{unix}end_date{unix} Authorization: Bearer fresh session JWT要点组织 ID 从 JWT 声明中读取优先读取https://groq.com/organization声明中的id缺失时回退到https://stytch.com/organization声明的slug见 GroqConsoleFetcher.swift。注意这里不做签名验证——API 自身会校验令牌本地读取仅为路由定位。时间窗口默认拉取近 30 天historyDays被钳制在 1365 之间窗口从 N-1 天前的当日零点覆盖到今天的完整一天以 Unix 秒为单位传给 API。活动行的聚合与快照投影每个活动行是按模型、按天的粒度cost、n_context_tokens_total、n_non_cached_context_tokens_total缓存输入 context − non-cached、n_generated_tokens_total、num_requests。CodexBar 在makeSnapshot中把这些行聚合进每日桶GroqConsoleUsageSnapshot.swift按本地日历日分组模型名为空的记录归入unknown桶内累计请求数、非缓存输入 Token、缓存输入 Token、输出 Token、总 Tokencontext generated与花费每日桶内模型按总 Token 降序排列顶部模型topModels会聚合出全窗口的模型级用量。聚合结果投影为与 OpenAI API Provider 完全一致的成本历史cost-history形状因此可以直接复用在线的成本历史内联仪表盘Daily spend图表、Spend/Requests/Tokens 汇总行以及有缓存输入时追加的 “Cached input” 行。快照的costProvenance标记为vendorMetered厂商计费口径并携带组织名与Console登录方式用于身份与账户标识。测试与 CLI 覆盖文档提供了两个环境变量便于 CLI/测试验证GROQ_SESSION_TOKEN—— 一个不透明stytch_session值走完整刷新路径GROQ_SESSION_JWT—— 直接使用的会话 JWT跳过刷新验证快但几分钟即过期。实测命令GROQ_SESSION_TOKENstytch_session codexbar usage --provider groq --json环境变量优先级最高resolveSessions首先检查环境覆盖命中后直接返回不再访问浏览器 Cookie 存储在非 macOS 平台如 Linux 构建上环境覆盖是唯一会话来源见 GroqConsoleSession.swift 的非 Apple 分支。Prometheus 指标Enterprise可选当没有可用会话但配置了 Enterprise API Key 时走 GroqUsageFetcher.swift 的 Prometheus 路径GET https://api.groq.com/v1/metrics/prometheus/api/v1/query?queryPromQL Authorization: Bearer GROQ_API_KEY它会并发执行 4 条rate5m5 分钟速率PromQL 查询指标PromQL 查询请求速率sum(model_project_id_status_code:requests:rate5m)输入 Token 速率sum(model_project_id:tokens_in:rate5m)输出 Token 速率sum(model_project_id:tokens_out:rate5m)缓存命中速率sum(model_project_id:prompt_cache_hits:rate5m)解析时仅取每个序列最后一个采样值并求和series.value?.last换算成req/min、tok/min、cache/min展示。标准 Key 在此端点会收到 HTTP 404Enterprise 专属功能该路径对它们而言只是静默无数据不会报错中断。API Key 可配置在~/.codexbar/config.json设置 → Providers → Groq或通过GROQ_API_KEY注入。环境变量与配置速查表变量用途默认值GROQ_SESSION_TOKEN不透明会话令牌CLI/测试走刷新路径无GROQ_SESSION_JWT会话 JWTCLI/测试跳过刷新无GROQ_STYTCH_PUBLIC_TOKEN覆盖 Stytch 公开 Token内置值GROQ_STYTCH_URL覆盖 Stytch 端点基址https://api.stytchb2b.groq.comGROQ_API_KEYPrometheus 兜底用 Enterprise API Key无GROQ_API_URLAPI 端点覆盖需 HTTPS 或裸主机见 GroqSettingsReader.swifthttps://api.groq.com/v1GROQ_API_URL覆盖会经过ProviderEndpointOverrideValidator.normalizedHTTPSURL校验非 HTTPS/非法主机直接抛invalidEndpointOverride防止端点被篡改。源码地图职责文件控制台数据拉取GroqConsoleFetcher.swift会话导入与 JWT 解析GroqConsoleSession.swiftStytch 刷新GroqConsoleStytch.swift快照/成本历史投影GroqConsoleUsageSnapshot.swiftPrometheus 兜底GroqUsageFetcher.swiftProvider 装配GroqProviderDescriptor.swift设置读取GroqSettingsReader.swiftApp 内实现GroqProviderImplementation.swift测试与验证依据仓库测试验证了关键行为GroqConsoleFetcherTests.swift 验证了组织 ID 从 JWT 声明的解析https://groq.com/organization优先、https://stytch.com/organizationslug 兜底、畸形 JWT 返回 nil以及活动行到每日桶的聚合多模型同日合并、跨天拆分、cost/token/request 累计GroqUsageFetcherTests.swift 覆盖 Prometheus 标量解析status: success、数值/字符串采样值GroqMenuCardModelTests.swift 覆盖菜单卡片模型侧的展示投影。故障排查要点missingSession未找到控制台会话。先在浏览器登录 console.groq.com或用GROQ_SESSION_TOKEN/GROQ_SESSION_JWT显式注入invalidSession/accessDenied会话失效或无权。控制台策略会尝试下一个候选会话全部失败且无直接 JWT 时抛错回退语义GroqConsoleWebFetchStrategy.shouldFallback规定只有missingSession、invalidSession、accessDenied才回退到 PrometheusapiError/parseFailed属于控制台通道自身的异常不再回退无数据但无报错大概率是标准 API Key 命中 Prometheus 的 404 路径属于预期行为配 Enterprise Key 或登录控制台即可恢复完整用量展示。综上所述Groq Provider 的完整链路是浏览器 Cookie或环境覆盖→ Stytch 刷新换取短期 JWT → 平台活动 API 拉取按模型/按日明细 → 聚合投影为成本历史仪表盘缺会话时再由 Enterprise Prometheus 指标兜底。这套设计既绕开了短命 JWT 的后台刷新难题又保证了“真实消费而非限流状态”的数据口径。【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表