Groq

Lightweight, dependency-free, in-memory Groq API fake. Groq is OpenAI-compatible and mounts its API under /openai/v1, so the official groq-sdk (and the openai SDK pointed at Groq) work against this fake. All generated content is deterministic — derived from a hash of the input.

Default port: 4750

Quick start

import { GroqServer } from "./services/groq/src/server.js";

const server = new GroqServer(4750);
await server.start();
// ... run your app/tests ...
await server.stop();

Point the real groq-sdk at it via baseURL:

import Groq from "groq-sdk";

const groq = new Groq({
  apiKey: "gsk_parlel",
  baseURL: "http://127.0.0.1:4750/openai/v1",
});

const completion = await groq.chat.completions.create({
  model: "llama-3.3-70b-versatile",
  messages: [{ role: "user", content: "Hello Groq" }],
});
// completion.choices[0].message.content => deterministic text

Implemented operations

All /openai/v1/* routes require an Authorization: Bearer <key> header (any non-empty bearer token is accepted). State is in-memory and ephemeral.

Service & inspection operations (parlel extensions)

SDK usage example

from openai import OpenAI

client = OpenAI(api_key="gsk_parlel", base_url="http://127.0.0.1:4750/openai/v1")
resp = client.chat.completions.create(
    model="llama-3.3-70b-versatile",
    messages=[{"role": "user", "content": "Hello Groq"}],
)
print(resp.choices[0].message.content)

Access via MCP / preview URL

HTTP services are auto-exposed at the Daytona preview URL. Send requests to the preview URL with the x-daytona-preview-token header. Set GROQ_BASE_URL to <preview-url>/openai/v1.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
chat.completions (+ streaming SSE, x_groq)✅ Supported
models list/retrieve✅ Supported
Request inspection✅ Supported (parlel extension)
Real model inference / quality✓ By design — Deterministic stub output — repeatable assertions, no API spend
Audio transcription (whisper)⟳ Roadmap
tools / function calling◐ Accepted, not executed
Token counts◐ Approximate word-based
Bearer-token validity / quota✓ By design — Never throttles — local tests run at full speed, zero cost

Manifest

See services/groq/manifest.json:

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

GROQ_API_KEY=gsk_parlel
GROQ_BASE_URL=http://parlel-bridge:4750/openai/v1
<!-- parlel:testenv:end -->