Implement Groq webhook signature validation and event handling. Use when setting up webhook endpoints, implementing signature verification, or handling Groq event notifications securely. Trigger with phrases like "groq webhook", "groq events", "groq webhook signature", "handle groq events", "groq notifications".
From groq-packnpx claudepluginhub nickloveinvesting/nick-love-plugins --plugin groq-packThis skill is limited to using the following tools:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
Build event-driven architectures around Groq's ultra-fast LLM inference API. Groq does not provide native webhooks, but its sub-second response times at api.groq.com enable unique patterns: real-time streaming, batch processing with callbacks, and event-driven pipelines where Groq acts as the processing engine within your webhook infrastructure.
GROQ_API_KEY environment variablenpm install groq-sdk or pip install groq)| Pattern | Trigger | Use Case |
|---|---|---|
| Streaming SSE | Client request | Real-time chat responses |
| Batch completion callback | Queue job finishes | Document processing pipeline |
| Webhook processor | Incoming webhook | Process events with Groq LLM |
| Health monitor | Scheduled check | API availability tracking |
import Groq from "groq-sdk";
const groq = new Groq({ apiKey: process.env.GROQ_API_KEY! });
// Express SSE endpoint
app.post("/api/chat/stream", async (req, res) => {
const { messages, model } = req.body;
res.writeHead(200, { # HTTP 200 OK
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
});
const stream = await groq.chat.completions.create({
model: model || "llama-3.3-70b-versatile",
messages,
stream: true,
max_tokens: 2048, # 2048: 2 KB
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
res.write(`data: ${JSON.stringify({ content })}\n\n`);
}
}
res.write("data: [DONE]\n\n");
res.end();
});
import { Queue, Worker } from "bullmq";
const groqQueue = new Queue("groq-batch");
// Queue a batch of prompts with callback webhook
async function queueBatch(prompts: string[], callbackUrl: string) {
const batchId = crypto.randomUUID();
for (const [index, prompt] of prompts.entries()) {
await groqQueue.add("inference", {
batchId,
index,
prompt,
callbackUrl,
totalItems: prompts.length,
});
}
return batchId;
}
const worker = new Worker("groq-batch", async (job) => {
const { prompt, callbackUrl, batchId, index, totalItems } = job.data;
const completion = await groq.chat.completions.create({
model: "llama-3.3-70b-versatile",
messages: [{ role: "user", content: prompt }],
});
const result = {
batchId,
index,
content: completion.choices[0].message.content,
usage: completion.usage,
model: completion.model,
processingTime: completion.usage?.total_time,
};
// Fire callback webhook on completion
await fetch(callbackUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
event: "groq.batch_item.completed",
data: result,
}),
});
return result;
});
// Use Groq to process incoming webhook events with LLM
async function processWebhookWithGroq(event: any) {
const completion = await groq.chat.completions.create({
model: "llama-3.1-8b-instant",
messages: [
{
role: "system",
content: "Classify this event and extract key information. Respond with JSON.",
},
{
role: "user",
content: JSON.stringify(event),
},
],
response_format: { type: "json_object" },
temperature: 0,
});
return JSON.parse(completion.choices[0].message.content!);
}
async function checkGroqHealth(): Promise<boolean> {
try {
const start = Date.now();
await groq.chat.completions.create({
model: "llama-3.1-8b-instant",
messages: [{ role: "user", content: "ping" }],
max_tokens: 1,
});
const latency = Date.now() - start;
console.log(`Groq health: OK (${latency}ms)`);
return true;
} catch (error) {
console.error("Groq health check failed:", error);
return false;
}
}
| Issue | Cause | Solution |
|---|---|---|
| Rate limited (429) | Too many requests | Implement exponential backoff, use queue |
| Model unavailable | Service capacity | Fall back to smaller model variant |
| Streaming disconnect | Network timeout | Implement reconnection with last token |
| JSON parse error | Malformed response | Use response_format and validate output |
import asyncio
from groq import AsyncGroq
client = AsyncGroq(api_key=os.environ["GROQ_API_KEY"])
async def process_batch(prompts: list[str]):
tasks = [
client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=[{"role": "user", "content": p}],
)
for p in prompts
]
return await asyncio.gather(*tasks)
For deployment setup, see groq-deploy-integration.