UNPKG

i18n-ai-translate

Version:

AI-powered localization CLI, Node library, and GitHub Action. Translate i18next JSON, Gettext PO, Java .properties, and iOS .strings with ChatGPT, Claude, Gemini, or local Ollama models.

62 lines (52 loc) 1.92 kB
// Focused coverage for processModelArgs — exercises the per-engine // defaults and the --tokens-per-minute parser in isolation. process.env.OPENAI_API_KEY = "test"; process.env.ANTHROPIC_API_KEY = "test"; process.env.GEMINI_API_KEY = "test"; import Engine from "../enums/engine"; import { processModelArgs } from "../cli_helpers"; describe("processModelArgs tokensPerMinute", () => { it("defaults to undefined (no cap) for every engine", () => { // The TPM cap is opt-in: mistakenly throttling a paid-tier user // is worse than relying on RPM + provider 429s for free-tier. for (const engine of [ Engine.ChatGPT, Engine.Claude, Engine.Gemini, Engine.Ollama, ]) { const args = processModelArgs({ engine }); expect(args.tokensPerMinute).toBeUndefined(); } }); it("honors a user-supplied --tokens-per-minute value", () => { const args = processModelArgs({ engine: Engine.ChatGPT, tokensPerMinute: "50000", }); expect(args.tokensPerMinute).toBe(50000); }); it("treats --tokens-per-minute 0 as explicitly disabling the cap", () => { const args = processModelArgs({ engine: Engine.ChatGPT, tokensPerMinute: "0", }); expect(args.tokensPerMinute).toBeUndefined(); }); it("rejects negative --tokens-per-minute values", () => { expect(() => processModelArgs({ engine: Engine.ChatGPT, tokensPerMinute: "-1", }), ).toThrow(/non-negative/); }); it("rejects non-numeric --tokens-per-minute values", () => { expect(() => processModelArgs({ engine: Engine.ChatGPT, tokensPerMinute: "lots", }), ).toThrow(/non-negative/); }); });