Configure Groq local development with hot reload and testing. Use when setting up a development environment, configuring test workflows, or establishing a fast iteration cycle with Groq. Trigger with...
Set up a fast, reproducible local development workflow for Groq. Groq's sub-second response times make it uniquely suited for tight dev loops -- you get LLM responses fast enough to iterate without context-switching. This skill scaffolds a project, a memoized client, model constants, and a two-tier test strategy (mocked unit tests + opt-in live integration tests). The lean skeleton lives here; the full code lives in references/implementation.md and references/examples.md.
groq-sdk installed (npm install groq-sdk)GROQ_API_KEY set (free tier is fine for development)The groq-sdk client reads GROQ_API_KEY from the environment automatically —
new Groq() and getGroqClient() both pick it up. Get a key at
console.groq.com/keys, store it in a
git-ignored .env.local, and commit only .env.example as a template. Never
hardcode the key or commit .env.local.
Follow these seven steps in order. Steps 1-2 lay out the project; steps 3-4 centralize the client and model IDs; steps 5-6 establish the test tiers; step 7 templates the environment. Full code for each is in the reference files.
src/groq/{client,models,completions}.ts, tests/, and .env.local / .env.example.dev (tsx watch), test / test:watch (vitest), and test:integration scripts.getGroqClient() that fails fast when GROQ_API_KEY is missing and a resetClient() for tests.MODELS map with DEV_MODEL defaulting to llama-3.1-8b-instant to conserve dev quota.vi.mock("groq-sdk") so unit tests run sub-second with zero API calls.GROQ_INTEGRATION=1 with describe.skipIf so the default run stays offline..env.example, git-ignore .env.local.// src/groq/client.ts -- lazily-memoized singleton
import Groq from "groq-sdk";
let _client: Groq | null = null;
export function getGroqClient(): Groq {
if (!_client) {
if (!process.env.GROQ_API_KEY) {
throw new Error("GROQ_API_KEY not set. Copy .env.example to .env.local");
}
_client = new Groq({ apiKey: process.env.GROQ_API_KEY, maxRetries: 2, timeout: 30_000 });
}
return _client;
}
export function resetClient(): void { _client = null; }
See references/implementation.md for the full
project scaffold, package.json, model constants, and .env.example, and
references/examples.md for the complete unit and
integration test files.
Applying the workflow produces:
src/groq/{client,models,completions}.ts and a tests/ directory.getGroqClient() that shares one configured client and throws an actionable error when GROQ_API_KEY is unset.MODELS map + DEV_MODEL constant so dev runs on the cheap 8B model.npm run test:watch, no API calls) and opt-in live tests (npm run test:integration, gated on GROQ_INTEGRATION=1)..env.example template committed for the team, with real secrets in a git-ignored .env.local.| Error | Cause | Solution |
|---|---|---|
GROQ_API_KEY not set |
Missing .env.local | Copy from .env.example |
| Test timeout | Live API call in unit test | Mock groq-sdk in unit tests |
429 rate_limit_exceeded |
Free tier RPM hit | Wait 60s or use test:watch with longer intervals |
| Port already in use | Another tsx watch running | Kill process or change port |
llama-3.1-8b-instant during development (lowest quota usage, fastest).temperature: 0 for deterministic outputs during debugging.max_tokens conservatively to avoid burning through free tier.Run the hot-reload app and the mocked unit-test watcher side by side, then exercise the live API only when you opt in:
npm run dev # tsx watch src/index.ts (hot reload)
npm run test:watch # vitest --watch (mocked, no API calls)
npm run test:integration # GROQ_INTEGRATION=1 vitest (live API)
For the complete mocked unit test (vi.mock("groq-sdk")) and the
GROQ_INTEGRATION-gated live integration test, see
references/examples.md.
groq-sdk-patterns skill.