@elizaos/plugin-groq 1.0.4 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Shaw Walters and elizaOS Contributors
3
+ Copyright (c) 2026 Shaw Walters and elizaOS Contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,244 @@
1
+ // index.ts
2
+ import { createGroq } from "@ai-sdk/groq";
3
+ import { logger, ModelType } from "@elizaos/core";
4
+ import { generateObject, generateText } from "ai";
5
+ var _globalThis = globalThis;
6
+ _globalThis.AI_SDK_LOG_WARNINGS ??= false;
7
+ var DEFAULT_SMALL_MODEL = "llama-3.1-8b-instant";
8
+ var DEFAULT_LARGE_MODEL = "llama-3.3-70b-versatile";
9
+ var DEFAULT_TTS_MODEL = "playai-tts";
10
+ var DEFAULT_TTS_VOICE = "Chip-PlayAI";
11
+ var DEFAULT_TRANSCRIPTION_MODEL = "distil-whisper-large-v3-en";
12
+ var DEFAULT_BASE_URL = "https://api.groq.com/openai/v1";
13
+ function isBrowser() {
14
+ return typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
15
+ }
16
+ function getBaseURL(runtime) {
17
+ const url = runtime.getSetting("GROQ_BASE_URL");
18
+ return typeof url === "string" ? url : DEFAULT_BASE_URL;
19
+ }
20
+ function getSmallModel(runtime) {
21
+ const setting = runtime.getSetting("GROQ_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL");
22
+ return typeof setting === "string" ? setting : DEFAULT_SMALL_MODEL;
23
+ }
24
+ function getLargeModel(runtime) {
25
+ const setting = runtime.getSetting("GROQ_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL");
26
+ return typeof setting === "string" ? setting : DEFAULT_LARGE_MODEL;
27
+ }
28
+ function createGroqClient(runtime) {
29
+ const allowBrowserKey = !isBrowser() || String(runtime.getSetting("GROQ_ALLOW_BROWSER_API_KEY") ?? "").toLowerCase() === "true";
30
+ const apiKey = allowBrowserKey ? runtime.getSetting("GROQ_API_KEY") : undefined;
31
+ return createGroq({
32
+ apiKey: typeof apiKey === "string" ? apiKey : undefined,
33
+ fetch: runtime.fetch ?? undefined,
34
+ baseURL: getBaseURL(runtime)
35
+ });
36
+ }
37
+ function extractRetryDelay(message) {
38
+ const match = message.match(/try again in (\d+\.?\d*)s/i);
39
+ if (match?.[1]) {
40
+ return Math.ceil(Number.parseFloat(match[1]) * 1000) + 1000;
41
+ }
42
+ return 1e4;
43
+ }
44
+ async function generateWithRetry(groq, model, params) {
45
+ const generate = () => generateText({
46
+ model: groq.languageModel(model),
47
+ prompt: params.prompt,
48
+ system: params.system,
49
+ temperature: params.temperature,
50
+ maxRetries: 3,
51
+ frequencyPenalty: params.frequencyPenalty,
52
+ presencePenalty: params.presencePenalty,
53
+ stopSequences: params.stopSequences
54
+ });
55
+ try {
56
+ const { text } = await generate();
57
+ return text;
58
+ } catch (error) {
59
+ if (error instanceof Error && error.message.includes("Rate limit reached")) {
60
+ const delay = extractRetryDelay(error.message);
61
+ logger.warn(`Groq rate limit hit, retrying in ${delay}ms`);
62
+ await new Promise((resolve) => setTimeout(resolve, delay));
63
+ const { text } = await generate();
64
+ return text;
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ var groqPlugin = {
70
+ name: "groq",
71
+ description: "Groq LLM provider - fast inference with Llama and other models",
72
+ async init(_config, runtime) {
73
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
74
+ if (!apiKey && !isBrowser()) {
75
+ throw new Error("GROQ_API_KEY is required");
76
+ }
77
+ },
78
+ models: {
79
+ [ModelType.TEXT_SMALL]: async (runtime, params) => {
80
+ const groq = createGroqClient(runtime);
81
+ const model = getSmallModel(runtime);
82
+ return generateWithRetry(groq, model, {
83
+ prompt: params.prompt,
84
+ system: runtime.character.system,
85
+ temperature: 0.7,
86
+ maxTokens: 8000,
87
+ frequencyPenalty: 0.7,
88
+ presencePenalty: 0.7,
89
+ stopSequences: params.stopSequences || []
90
+ });
91
+ },
92
+ [ModelType.TEXT_LARGE]: async (runtime, params) => {
93
+ const groq = createGroqClient(runtime);
94
+ const model = getLargeModel(runtime);
95
+ return generateWithRetry(groq, model, {
96
+ prompt: params.prompt,
97
+ system: runtime.character.system,
98
+ temperature: params.temperature ?? 0.7,
99
+ maxTokens: params.maxTokens ?? 8192,
100
+ frequencyPenalty: params.frequencyPenalty ?? 0.7,
101
+ presencePenalty: params.presencePenalty ?? 0.7,
102
+ stopSequences: params.stopSequences || []
103
+ });
104
+ },
105
+ [ModelType.OBJECT_SMALL]: async (runtime, params) => {
106
+ const groq = createGroqClient(runtime);
107
+ const model = getSmallModel(runtime);
108
+ const { object } = await generateObject({
109
+ model: groq.languageModel(model),
110
+ output: "no-schema",
111
+ prompt: params.prompt,
112
+ temperature: params.temperature
113
+ });
114
+ return object;
115
+ },
116
+ [ModelType.OBJECT_LARGE]: async (runtime, params) => {
117
+ const groq = createGroqClient(runtime);
118
+ const model = getLargeModel(runtime);
119
+ const { object } = await generateObject({
120
+ model: groq.languageModel(model),
121
+ output: "no-schema",
122
+ prompt: params.prompt,
123
+ temperature: params.temperature
124
+ });
125
+ return object;
126
+ },
127
+ [ModelType.TRANSCRIPTION]: async (runtime, params) => {
128
+ function hasAudioData(obj) {
129
+ return "audioData" in obj && obj.audioData instanceof Uint8Array;
130
+ }
131
+ if (isBrowser()) {
132
+ throw new Error("Groq TRANSCRIPTION is not supported directly in browsers. Use a server proxy or submit a Blob/ArrayBuffer to a server.");
133
+ }
134
+ const hasBuffer = typeof Buffer !== "undefined" && typeof Buffer.isBuffer === "function";
135
+ const audioBuffer = typeof params === "string" ? Buffer.from(params, "base64") : hasBuffer && Buffer.isBuffer(params) ? params : typeof params === "object" && params !== null && hasAudioData(params) ? Buffer.from(params.audioData) : Buffer.alloc(0);
136
+ const baseURL = getBaseURL(runtime);
137
+ const formData = new FormData;
138
+ formData.append("file", new File([audioBuffer], "audio.mp3", { type: "audio/mp3" }));
139
+ formData.append("model", DEFAULT_TRANSCRIPTION_MODEL);
140
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
141
+ const response = await fetch(`${baseURL}/audio/transcriptions`, {
142
+ method: "POST",
143
+ headers: {
144
+ Authorization: `Bearer ${typeof apiKey === "string" ? apiKey : ""}`
145
+ },
146
+ body: formData
147
+ });
148
+ if (!response.ok) {
149
+ throw new Error(`Transcription failed: ${response.status} ${await response.text()}`);
150
+ }
151
+ const data = await response.json();
152
+ return data.text;
153
+ },
154
+ [ModelType.TEXT_TO_SPEECH]: async (runtime, params) => {
155
+ if (isBrowser()) {
156
+ throw new Error("Groq TEXT_TO_SPEECH is not supported directly in browsers. Use a server proxy.");
157
+ }
158
+ const text = typeof params === "string" ? params : params.text;
159
+ const baseURL = getBaseURL(runtime);
160
+ const modelSetting = runtime.getSetting("GROQ_TTS_MODEL");
161
+ const voiceSetting = runtime.getSetting("GROQ_TTS_VOICE");
162
+ const model = typeof modelSetting === "string" ? modelSetting : DEFAULT_TTS_MODEL;
163
+ const voice = typeof voiceSetting === "string" ? voiceSetting : DEFAULT_TTS_VOICE;
164
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
165
+ const response = await fetch(`${baseURL}/audio/speech`, {
166
+ method: "POST",
167
+ headers: {
168
+ Authorization: `Bearer ${typeof apiKey === "string" ? apiKey : ""}`,
169
+ "Content-Type": "application/json"
170
+ },
171
+ body: JSON.stringify({ model, voice, input: text })
172
+ });
173
+ if (!response.ok) {
174
+ throw new Error(`TTS failed: ${response.status} ${await response.text()}`);
175
+ }
176
+ const arrayBuffer = await response.arrayBuffer();
177
+ return new Uint8Array(arrayBuffer);
178
+ }
179
+ },
180
+ tests: [
181
+ {
182
+ name: "groq_plugin_tests",
183
+ tests: [
184
+ {
185
+ name: "validate_api_key",
186
+ fn: async (runtime) => {
187
+ const baseURL = getBaseURL(runtime);
188
+ const response = await fetch(`${baseURL}/models`, {
189
+ headers: {
190
+ Authorization: `Bearer ${runtime.getSetting("GROQ_API_KEY")}`
191
+ }
192
+ });
193
+ if (!response.ok) {
194
+ throw new Error(`API key validation failed: ${response.statusText}`);
195
+ }
196
+ const data = await response.json();
197
+ logger.info(`Groq API validated, ${data.data.length} models available`);
198
+ }
199
+ },
200
+ {
201
+ name: "text_small",
202
+ fn: async (runtime) => {
203
+ const text = await runtime.useModel(ModelType.TEXT_SMALL, {
204
+ prompt: "Say hello in exactly 3 words."
205
+ });
206
+ if (!text || text.length === 0) {
207
+ throw new Error("Empty response from TEXT_SMALL");
208
+ }
209
+ logger.info("TEXT_SMALL:", text);
210
+ }
211
+ },
212
+ {
213
+ name: "text_large",
214
+ fn: async (runtime) => {
215
+ const text = await runtime.useModel(ModelType.TEXT_LARGE, {
216
+ prompt: "What is 2+2? Answer with just the number."
217
+ });
218
+ if (!text || text.length === 0) {
219
+ throw new Error("Empty response from TEXT_LARGE");
220
+ }
221
+ logger.info("TEXT_LARGE:", text);
222
+ }
223
+ },
224
+ {
225
+ name: "object_generation",
226
+ fn: async (runtime) => {
227
+ const obj = await runtime.useModel(ModelType.OBJECT_SMALL, {
228
+ prompt: 'Return a JSON object with name="test" and value=42',
229
+ temperature: 0.5
230
+ });
231
+ logger.info("OBJECT_SMALL:", JSON.stringify(obj));
232
+ }
233
+ }
234
+ ]
235
+ }
236
+ ]
237
+ };
238
+ var typescript_default = groqPlugin;
239
+ export {
240
+ groqPlugin,
241
+ typescript_default as default
242
+ };
243
+
244
+ //# debugId=A6F47EB678C56EF364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../index.ts"],
4
+ "sourcesContent": [
5
+ "import { createGroq } from \"@ai-sdk/groq\";\nimport type { IAgentRuntime, ObjectGenerationParams, Plugin } from \"@elizaos/core\";\nimport { type GenerateTextParams, logger, ModelType } from \"@elizaos/core\";\nimport { generateObject, generateText } from \"ai\";\n\nconst _globalThis = globalThis as typeof globalThis & { AI_SDK_LOG_WARNINGS?: boolean };\n_globalThis.AI_SDK_LOG_WARNINGS ??= false;\nconst DEFAULT_SMALL_MODEL = \"llama-3.1-8b-instant\";\nconst DEFAULT_LARGE_MODEL = \"llama-3.3-70b-versatile\";\nconst DEFAULT_TTS_MODEL = \"playai-tts\";\nconst DEFAULT_TTS_VOICE = \"Chip-PlayAI\";\nconst DEFAULT_TRANSCRIPTION_MODEL = \"distil-whisper-large-v3-en\";\nconst DEFAULT_BASE_URL = \"https://api.groq.com/openai/v1\";\n\nfunction isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nfunction getBaseURL(runtime: IAgentRuntime): string {\n const url = runtime.getSetting(\"GROQ_BASE_URL\");\n return typeof url === \"string\" ? url : DEFAULT_BASE_URL;\n}\n\nfunction getSmallModel(runtime: IAgentRuntime): string {\n const setting = runtime.getSetting(\"GROQ_SMALL_MODEL\") || runtime.getSetting(\"SMALL_MODEL\");\n return typeof setting === \"string\" ? setting : DEFAULT_SMALL_MODEL;\n}\n\nfunction getLargeModel(runtime: IAgentRuntime): string {\n const setting = runtime.getSetting(\"GROQ_LARGE_MODEL\") || runtime.getSetting(\"LARGE_MODEL\");\n return typeof setting === \"string\" ? setting : DEFAULT_LARGE_MODEL;\n}\n\nfunction createGroqClient(runtime: IAgentRuntime) {\n // In browsers, default to *not* sending secrets.\n // Use a server-side proxy and configure GROQ_BASE_URL (or explicitly opt-in).\n const allowBrowserKey =\n !isBrowser() ||\n String(runtime.getSetting(\"GROQ_ALLOW_BROWSER_API_KEY\") ?? \"\").toLowerCase() === \"true\";\n const apiKey = allowBrowserKey ? runtime.getSetting(\"GROQ_API_KEY\") : undefined;\n return createGroq({\n apiKey: typeof apiKey === \"string\" ? apiKey : undefined,\n fetch: runtime.fetch ?? undefined,\n baseURL: getBaseURL(runtime),\n });\n}\n\nfunction extractRetryDelay(message: string): number {\n const match = message.match(/try again in (\\d+\\.?\\d*)s/i);\n if (match?.[1]) {\n return Math.ceil(Number.parseFloat(match[1]) * 1000) + 1000;\n }\n return 10000;\n}\n\nasync function generateWithRetry(\n groq: ReturnType<typeof createGroq>,\n model: string,\n params: {\n prompt: string;\n system?: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stopSequences: string[];\n }\n): Promise<string> {\n const generate = () =>\n generateText({\n model: groq.languageModel(model),\n prompt: params.prompt,\n system: params.system,\n temperature: params.temperature,\n maxRetries: 3,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n\n try {\n const { text } = await generate();\n return text;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Rate limit reached\")) {\n const delay = extractRetryDelay(error.message);\n logger.warn(`Groq rate limit hit, retrying in ${delay}ms`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n const { text } = await generate();\n return text;\n }\n throw error;\n }\n}\n\nexport const groqPlugin: Plugin = {\n name: \"groq\",\n description: \"Groq LLM provider - fast inference with Llama and other models\",\n\n async init(_config: Record<string, string>, runtime: IAgentRuntime): Promise<void> {\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n if (!apiKey && !isBrowser()) {\n throw new Error(\"GROQ_API_KEY is required\");\n }\n },\n\n models: {\n [ModelType.TEXT_SMALL]: async (runtime, params: GenerateTextParams) => {\n const groq = createGroqClient(runtime);\n const model = getSmallModel(runtime);\n\n return generateWithRetry(groq, model, {\n prompt: params.prompt,\n system: runtime.character.system,\n temperature: 0.7,\n maxTokens: 8000,\n frequencyPenalty: 0.7,\n presencePenalty: 0.7,\n stopSequences: params.stopSequences || [],\n });\n },\n\n [ModelType.TEXT_LARGE]: async (runtime, params: GenerateTextParams) => {\n const groq = createGroqClient(runtime);\n const model = getLargeModel(runtime);\n\n return generateWithRetry(groq, model, {\n prompt: params.prompt,\n system: runtime.character.system,\n temperature: params.temperature ?? 0.7,\n maxTokens: params.maxTokens ?? 8192,\n frequencyPenalty: params.frequencyPenalty ?? 0.7,\n presencePenalty: params.presencePenalty ?? 0.7,\n stopSequences: params.stopSequences || [],\n });\n },\n\n [ModelType.OBJECT_SMALL]: async (runtime, params: ObjectGenerationParams) => {\n const groq = createGroqClient(runtime);\n const model = getSmallModel(runtime);\n\n const { object } = await generateObject({\n model: groq.languageModel(model),\n output: \"no-schema\",\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object as Record<\n string,\n string | number | boolean | null | Record<string, string | number | boolean | null>\n >;\n },\n\n [ModelType.OBJECT_LARGE]: async (runtime, params: ObjectGenerationParams) => {\n const groq = createGroqClient(runtime);\n const model = getLargeModel(runtime);\n\n const { object } = await generateObject({\n model: groq.languageModel(model),\n output: \"no-schema\",\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object as Record<\n string,\n string | number | boolean | null | Record<string, string | number | boolean | null>\n >;\n },\n\n [ModelType.TRANSCRIPTION]: async (runtime, params) => {\n type AudioDataShape = { audioData: Uint8Array };\n\n function hasAudioData(obj: object): obj is AudioDataShape {\n return \"audioData\" in obj && (obj as AudioDataShape).audioData instanceof Uint8Array;\n }\n\n if (isBrowser()) {\n throw new Error(\n \"Groq TRANSCRIPTION is not supported directly in browsers. Use a server proxy or submit a Blob/ArrayBuffer to a server.\"\n );\n }\n\n const hasBuffer =\n typeof Buffer !== \"undefined\" &&\n typeof (Buffer as unknown as { isBuffer: (v: unknown) => boolean }).isBuffer === \"function\";\n\n const audioBuffer: Buffer =\n typeof params === \"string\"\n ? Buffer.from(params, \"base64\")\n : hasBuffer &&\n (Buffer as unknown as { isBuffer: (v: unknown) => boolean }).isBuffer(params)\n ? (params as Buffer)\n : typeof params === \"object\" && params !== null && hasAudioData(params)\n ? Buffer.from((params as AudioDataShape).audioData)\n : Buffer.alloc(0);\n const baseURL = getBaseURL(runtime);\n const formData = new FormData();\n formData.append(\n \"file\",\n new File([audioBuffer as BlobPart], \"audio.mp3\", { type: \"audio/mp3\" })\n );\n formData.append(\"model\", DEFAULT_TRANSCRIPTION_MODEL);\n\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n const response = await fetch(`${baseURL}/audio/transcriptions`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${typeof apiKey === \"string\" ? apiKey : \"\"}`,\n },\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Transcription failed: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as { text: string };\n return data.text;\n },\n\n [ModelType.TEXT_TO_SPEECH]: async (runtime: IAgentRuntime, params) => {\n if (isBrowser()) {\n throw new Error(\n \"Groq TEXT_TO_SPEECH is not supported directly in browsers. Use a server proxy.\"\n );\n }\n const text = typeof params === \"string\" ? params : (params as { text: string }).text;\n const baseURL = getBaseURL(runtime);\n const modelSetting = runtime.getSetting(\"GROQ_TTS_MODEL\");\n const voiceSetting = runtime.getSetting(\"GROQ_TTS_VOICE\");\n const model = typeof modelSetting === \"string\" ? modelSetting : DEFAULT_TTS_MODEL;\n const voice = typeof voiceSetting === \"string\" ? voiceSetting : DEFAULT_TTS_VOICE;\n\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n const response = await fetch(`${baseURL}/audio/speech`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${typeof apiKey === \"string\" ? apiKey : \"\"}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ model, voice, input: text }),\n });\n\n if (!response.ok) {\n throw new Error(`TTS failed: ${response.status} ${await response.text()}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n },\n },\n\n tests: [\n {\n name: \"groq_plugin_tests\",\n tests: [\n {\n name: \"validate_api_key\",\n fn: async (runtime) => {\n const baseURL = getBaseURL(runtime);\n const response = await fetch(`${baseURL}/models`, {\n headers: {\n Authorization: `Bearer ${runtime.getSetting(\"GROQ_API_KEY\")}`,\n },\n });\n if (!response.ok) {\n throw new Error(`API key validation failed: ${response.statusText}`);\n }\n const data = (await response.json()) as {\n data: Array<{ id: string; owned_by: string }>;\n };\n logger.info(`Groq API validated, ${data.data.length} models available`);\n },\n },\n {\n name: \"text_small\",\n fn: async (runtime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"Say hello in exactly 3 words.\",\n });\n if (!text || text.length === 0) {\n throw new Error(\"Empty response from TEXT_SMALL\");\n }\n logger.info(\"TEXT_SMALL:\", text);\n },\n },\n {\n name: \"text_large\",\n fn: async (runtime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"What is 2+2? Answer with just the number.\",\n });\n if (!text || text.length === 0) {\n throw new Error(\"Empty response from TEXT_LARGE\");\n }\n logger.info(\"TEXT_LARGE:\", text);\n },\n },\n {\n name: \"object_generation\",\n fn: async (runtime) => {\n const obj = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt: 'Return a JSON object with name=\"test\" and value=42',\n temperature: 0.5,\n });\n logger.info(\"OBJECT_SMALL:\", JSON.stringify(obj));\n },\n },\n ],\n },\n ],\n};\n\nexport default groqPlugin;\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "A6F47EB678C56EF364756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./index.browser";
2
+ export { default } from "./index.browser";
@@ -0,0 +1,2 @@
1
+ export * from "./index.node";
2
+ export { default } from "./index.node";
@@ -0,0 +1,276 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // index.node.ts
30
+ var exports_index_node = {};
31
+ __export(exports_index_node, {
32
+ groqPlugin: () => groqPlugin,
33
+ default: () => typescript_default
34
+ });
35
+ module.exports = __toCommonJS(exports_index_node);
36
+
37
+ // index.ts
38
+ var import_groq = require("@ai-sdk/groq");
39
+ var import_core = require("@elizaos/core");
40
+ var import_ai = require("ai");
41
+ var _globalThis = globalThis;
42
+ _globalThis.AI_SDK_LOG_WARNINGS ??= false;
43
+ var DEFAULT_SMALL_MODEL = "llama-3.1-8b-instant";
44
+ var DEFAULT_LARGE_MODEL = "llama-3.3-70b-versatile";
45
+ var DEFAULT_TTS_MODEL = "playai-tts";
46
+ var DEFAULT_TTS_VOICE = "Chip-PlayAI";
47
+ var DEFAULT_TRANSCRIPTION_MODEL = "distil-whisper-large-v3-en";
48
+ var DEFAULT_BASE_URL = "https://api.groq.com/openai/v1";
49
+ function isBrowser() {
50
+ return typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
51
+ }
52
+ function getBaseURL(runtime) {
53
+ const url = runtime.getSetting("GROQ_BASE_URL");
54
+ return typeof url === "string" ? url : DEFAULT_BASE_URL;
55
+ }
56
+ function getSmallModel(runtime) {
57
+ const setting = runtime.getSetting("GROQ_SMALL_MODEL") || runtime.getSetting("SMALL_MODEL");
58
+ return typeof setting === "string" ? setting : DEFAULT_SMALL_MODEL;
59
+ }
60
+ function getLargeModel(runtime) {
61
+ const setting = runtime.getSetting("GROQ_LARGE_MODEL") || runtime.getSetting("LARGE_MODEL");
62
+ return typeof setting === "string" ? setting : DEFAULT_LARGE_MODEL;
63
+ }
64
+ function createGroqClient(runtime) {
65
+ const allowBrowserKey = !isBrowser() || String(runtime.getSetting("GROQ_ALLOW_BROWSER_API_KEY") ?? "").toLowerCase() === "true";
66
+ const apiKey = allowBrowserKey ? runtime.getSetting("GROQ_API_KEY") : undefined;
67
+ return import_groq.createGroq({
68
+ apiKey: typeof apiKey === "string" ? apiKey : undefined,
69
+ fetch: runtime.fetch ?? undefined,
70
+ baseURL: getBaseURL(runtime)
71
+ });
72
+ }
73
+ function extractRetryDelay(message) {
74
+ const match = message.match(/try again in (\d+\.?\d*)s/i);
75
+ if (match?.[1]) {
76
+ return Math.ceil(Number.parseFloat(match[1]) * 1000) + 1000;
77
+ }
78
+ return 1e4;
79
+ }
80
+ async function generateWithRetry(groq, model, params) {
81
+ const generate = () => import_ai.generateText({
82
+ model: groq.languageModel(model),
83
+ prompt: params.prompt,
84
+ system: params.system,
85
+ temperature: params.temperature,
86
+ maxRetries: 3,
87
+ frequencyPenalty: params.frequencyPenalty,
88
+ presencePenalty: params.presencePenalty,
89
+ stopSequences: params.stopSequences
90
+ });
91
+ try {
92
+ const { text } = await generate();
93
+ return text;
94
+ } catch (error) {
95
+ if (error instanceof Error && error.message.includes("Rate limit reached")) {
96
+ const delay = extractRetryDelay(error.message);
97
+ import_core.logger.warn(`Groq rate limit hit, retrying in ${delay}ms`);
98
+ await new Promise((resolve) => setTimeout(resolve, delay));
99
+ const { text } = await generate();
100
+ return text;
101
+ }
102
+ throw error;
103
+ }
104
+ }
105
+ var groqPlugin = {
106
+ name: "groq",
107
+ description: "Groq LLM provider - fast inference with Llama and other models",
108
+ async init(_config, runtime) {
109
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
110
+ if (!apiKey && !isBrowser()) {
111
+ throw new Error("GROQ_API_KEY is required");
112
+ }
113
+ },
114
+ models: {
115
+ [import_core.ModelType.TEXT_SMALL]: async (runtime, params) => {
116
+ const groq = createGroqClient(runtime);
117
+ const model = getSmallModel(runtime);
118
+ return generateWithRetry(groq, model, {
119
+ prompt: params.prompt,
120
+ system: runtime.character.system,
121
+ temperature: 0.7,
122
+ maxTokens: 8000,
123
+ frequencyPenalty: 0.7,
124
+ presencePenalty: 0.7,
125
+ stopSequences: params.stopSequences || []
126
+ });
127
+ },
128
+ [import_core.ModelType.TEXT_LARGE]: async (runtime, params) => {
129
+ const groq = createGroqClient(runtime);
130
+ const model = getLargeModel(runtime);
131
+ return generateWithRetry(groq, model, {
132
+ prompt: params.prompt,
133
+ system: runtime.character.system,
134
+ temperature: params.temperature ?? 0.7,
135
+ maxTokens: params.maxTokens ?? 8192,
136
+ frequencyPenalty: params.frequencyPenalty ?? 0.7,
137
+ presencePenalty: params.presencePenalty ?? 0.7,
138
+ stopSequences: params.stopSequences || []
139
+ });
140
+ },
141
+ [import_core.ModelType.OBJECT_SMALL]: async (runtime, params) => {
142
+ const groq = createGroqClient(runtime);
143
+ const model = getSmallModel(runtime);
144
+ const { object } = await import_ai.generateObject({
145
+ model: groq.languageModel(model),
146
+ output: "no-schema",
147
+ prompt: params.prompt,
148
+ temperature: params.temperature
149
+ });
150
+ return object;
151
+ },
152
+ [import_core.ModelType.OBJECT_LARGE]: async (runtime, params) => {
153
+ const groq = createGroqClient(runtime);
154
+ const model = getLargeModel(runtime);
155
+ const { object } = await import_ai.generateObject({
156
+ model: groq.languageModel(model),
157
+ output: "no-schema",
158
+ prompt: params.prompt,
159
+ temperature: params.temperature
160
+ });
161
+ return object;
162
+ },
163
+ [import_core.ModelType.TRANSCRIPTION]: async (runtime, params) => {
164
+ function hasAudioData(obj) {
165
+ return "audioData" in obj && obj.audioData instanceof Uint8Array;
166
+ }
167
+ if (isBrowser()) {
168
+ throw new Error("Groq TRANSCRIPTION is not supported directly in browsers. Use a server proxy or submit a Blob/ArrayBuffer to a server.");
169
+ }
170
+ const hasBuffer = typeof Buffer !== "undefined" && typeof Buffer.isBuffer === "function";
171
+ const audioBuffer = typeof params === "string" ? Buffer.from(params, "base64") : hasBuffer && Buffer.isBuffer(params) ? params : typeof params === "object" && params !== null && hasAudioData(params) ? Buffer.from(params.audioData) : Buffer.alloc(0);
172
+ const baseURL = getBaseURL(runtime);
173
+ const formData = new FormData;
174
+ formData.append("file", new File([audioBuffer], "audio.mp3", { type: "audio/mp3" }));
175
+ formData.append("model", DEFAULT_TRANSCRIPTION_MODEL);
176
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
177
+ const response = await fetch(`${baseURL}/audio/transcriptions`, {
178
+ method: "POST",
179
+ headers: {
180
+ Authorization: `Bearer ${typeof apiKey === "string" ? apiKey : ""}`
181
+ },
182
+ body: formData
183
+ });
184
+ if (!response.ok) {
185
+ throw new Error(`Transcription failed: ${response.status} ${await response.text()}`);
186
+ }
187
+ const data = await response.json();
188
+ return data.text;
189
+ },
190
+ [import_core.ModelType.TEXT_TO_SPEECH]: async (runtime, params) => {
191
+ if (isBrowser()) {
192
+ throw new Error("Groq TEXT_TO_SPEECH is not supported directly in browsers. Use a server proxy.");
193
+ }
194
+ const text = typeof params === "string" ? params : params.text;
195
+ const baseURL = getBaseURL(runtime);
196
+ const modelSetting = runtime.getSetting("GROQ_TTS_MODEL");
197
+ const voiceSetting = runtime.getSetting("GROQ_TTS_VOICE");
198
+ const model = typeof modelSetting === "string" ? modelSetting : DEFAULT_TTS_MODEL;
199
+ const voice = typeof voiceSetting === "string" ? voiceSetting : DEFAULT_TTS_VOICE;
200
+ const apiKey = runtime.getSetting("GROQ_API_KEY");
201
+ const response = await fetch(`${baseURL}/audio/speech`, {
202
+ method: "POST",
203
+ headers: {
204
+ Authorization: `Bearer ${typeof apiKey === "string" ? apiKey : ""}`,
205
+ "Content-Type": "application/json"
206
+ },
207
+ body: JSON.stringify({ model, voice, input: text })
208
+ });
209
+ if (!response.ok) {
210
+ throw new Error(`TTS failed: ${response.status} ${await response.text()}`);
211
+ }
212
+ const arrayBuffer = await response.arrayBuffer();
213
+ return new Uint8Array(arrayBuffer);
214
+ }
215
+ },
216
+ tests: [
217
+ {
218
+ name: "groq_plugin_tests",
219
+ tests: [
220
+ {
221
+ name: "validate_api_key",
222
+ fn: async (runtime) => {
223
+ const baseURL = getBaseURL(runtime);
224
+ const response = await fetch(`${baseURL}/models`, {
225
+ headers: {
226
+ Authorization: `Bearer ${runtime.getSetting("GROQ_API_KEY")}`
227
+ }
228
+ });
229
+ if (!response.ok) {
230
+ throw new Error(`API key validation failed: ${response.statusText}`);
231
+ }
232
+ const data = await response.json();
233
+ import_core.logger.info(`Groq API validated, ${data.data.length} models available`);
234
+ }
235
+ },
236
+ {
237
+ name: "text_small",
238
+ fn: async (runtime) => {
239
+ const text = await runtime.useModel(import_core.ModelType.TEXT_SMALL, {
240
+ prompt: "Say hello in exactly 3 words."
241
+ });
242
+ if (!text || text.length === 0) {
243
+ throw new Error("Empty response from TEXT_SMALL");
244
+ }
245
+ import_core.logger.info("TEXT_SMALL:", text);
246
+ }
247
+ },
248
+ {
249
+ name: "text_large",
250
+ fn: async (runtime) => {
251
+ const text = await runtime.useModel(import_core.ModelType.TEXT_LARGE, {
252
+ prompt: "What is 2+2? Answer with just the number."
253
+ });
254
+ if (!text || text.length === 0) {
255
+ throw new Error("Empty response from TEXT_LARGE");
256
+ }
257
+ import_core.logger.info("TEXT_LARGE:", text);
258
+ }
259
+ },
260
+ {
261
+ name: "object_generation",
262
+ fn: async (runtime) => {
263
+ const obj = await runtime.useModel(import_core.ModelType.OBJECT_SMALL, {
264
+ prompt: 'Return a JSON object with name="test" and value=42',
265
+ temperature: 0.5
266
+ });
267
+ import_core.logger.info("OBJECT_SMALL:", JSON.stringify(obj));
268
+ }
269
+ }
270
+ ]
271
+ }
272
+ ]
273
+ };
274
+ var typescript_default = groqPlugin;
275
+
276
+ //# debugId=8681D39937F125C564756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../index.ts"],
4
+ "sourcesContent": [
5
+ "import { createGroq } from \"@ai-sdk/groq\";\nimport type { IAgentRuntime, ObjectGenerationParams, Plugin } from \"@elizaos/core\";\nimport { type GenerateTextParams, logger, ModelType } from \"@elizaos/core\";\nimport { generateObject, generateText } from \"ai\";\n\nconst _globalThis = globalThis as typeof globalThis & { AI_SDK_LOG_WARNINGS?: boolean };\n_globalThis.AI_SDK_LOG_WARNINGS ??= false;\nconst DEFAULT_SMALL_MODEL = \"llama-3.1-8b-instant\";\nconst DEFAULT_LARGE_MODEL = \"llama-3.3-70b-versatile\";\nconst DEFAULT_TTS_MODEL = \"playai-tts\";\nconst DEFAULT_TTS_VOICE = \"Chip-PlayAI\";\nconst DEFAULT_TRANSCRIPTION_MODEL = \"distil-whisper-large-v3-en\";\nconst DEFAULT_BASE_URL = \"https://api.groq.com/openai/v1\";\n\nfunction isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nfunction getBaseURL(runtime: IAgentRuntime): string {\n const url = runtime.getSetting(\"GROQ_BASE_URL\");\n return typeof url === \"string\" ? url : DEFAULT_BASE_URL;\n}\n\nfunction getSmallModel(runtime: IAgentRuntime): string {\n const setting = runtime.getSetting(\"GROQ_SMALL_MODEL\") || runtime.getSetting(\"SMALL_MODEL\");\n return typeof setting === \"string\" ? setting : DEFAULT_SMALL_MODEL;\n}\n\nfunction getLargeModel(runtime: IAgentRuntime): string {\n const setting = runtime.getSetting(\"GROQ_LARGE_MODEL\") || runtime.getSetting(\"LARGE_MODEL\");\n return typeof setting === \"string\" ? setting : DEFAULT_LARGE_MODEL;\n}\n\nfunction createGroqClient(runtime: IAgentRuntime) {\n // In browsers, default to *not* sending secrets.\n // Use a server-side proxy and configure GROQ_BASE_URL (or explicitly opt-in).\n const allowBrowserKey =\n !isBrowser() ||\n String(runtime.getSetting(\"GROQ_ALLOW_BROWSER_API_KEY\") ?? \"\").toLowerCase() === \"true\";\n const apiKey = allowBrowserKey ? runtime.getSetting(\"GROQ_API_KEY\") : undefined;\n return createGroq({\n apiKey: typeof apiKey === \"string\" ? apiKey : undefined,\n fetch: runtime.fetch ?? undefined,\n baseURL: getBaseURL(runtime),\n });\n}\n\nfunction extractRetryDelay(message: string): number {\n const match = message.match(/try again in (\\d+\\.?\\d*)s/i);\n if (match?.[1]) {\n return Math.ceil(Number.parseFloat(match[1]) * 1000) + 1000;\n }\n return 10000;\n}\n\nasync function generateWithRetry(\n groq: ReturnType<typeof createGroq>,\n model: string,\n params: {\n prompt: string;\n system?: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stopSequences: string[];\n }\n): Promise<string> {\n const generate = () =>\n generateText({\n model: groq.languageModel(model),\n prompt: params.prompt,\n system: params.system,\n temperature: params.temperature,\n maxRetries: 3,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n\n try {\n const { text } = await generate();\n return text;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Rate limit reached\")) {\n const delay = extractRetryDelay(error.message);\n logger.warn(`Groq rate limit hit, retrying in ${delay}ms`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n const { text } = await generate();\n return text;\n }\n throw error;\n }\n}\n\nexport const groqPlugin: Plugin = {\n name: \"groq\",\n description: \"Groq LLM provider - fast inference with Llama and other models\",\n\n async init(_config: Record<string, string>, runtime: IAgentRuntime): Promise<void> {\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n if (!apiKey && !isBrowser()) {\n throw new Error(\"GROQ_API_KEY is required\");\n }\n },\n\n models: {\n [ModelType.TEXT_SMALL]: async (runtime, params: GenerateTextParams) => {\n const groq = createGroqClient(runtime);\n const model = getSmallModel(runtime);\n\n return generateWithRetry(groq, model, {\n prompt: params.prompt,\n system: runtime.character.system,\n temperature: 0.7,\n maxTokens: 8000,\n frequencyPenalty: 0.7,\n presencePenalty: 0.7,\n stopSequences: params.stopSequences || [],\n });\n },\n\n [ModelType.TEXT_LARGE]: async (runtime, params: GenerateTextParams) => {\n const groq = createGroqClient(runtime);\n const model = getLargeModel(runtime);\n\n return generateWithRetry(groq, model, {\n prompt: params.prompt,\n system: runtime.character.system,\n temperature: params.temperature ?? 0.7,\n maxTokens: params.maxTokens ?? 8192,\n frequencyPenalty: params.frequencyPenalty ?? 0.7,\n presencePenalty: params.presencePenalty ?? 0.7,\n stopSequences: params.stopSequences || [],\n });\n },\n\n [ModelType.OBJECT_SMALL]: async (runtime, params: ObjectGenerationParams) => {\n const groq = createGroqClient(runtime);\n const model = getSmallModel(runtime);\n\n const { object } = await generateObject({\n model: groq.languageModel(model),\n output: \"no-schema\",\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object as Record<\n string,\n string | number | boolean | null | Record<string, string | number | boolean | null>\n >;\n },\n\n [ModelType.OBJECT_LARGE]: async (runtime, params: ObjectGenerationParams) => {\n const groq = createGroqClient(runtime);\n const model = getLargeModel(runtime);\n\n const { object } = await generateObject({\n model: groq.languageModel(model),\n output: \"no-schema\",\n prompt: params.prompt,\n temperature: params.temperature,\n });\n return object as Record<\n string,\n string | number | boolean | null | Record<string, string | number | boolean | null>\n >;\n },\n\n [ModelType.TRANSCRIPTION]: async (runtime, params) => {\n type AudioDataShape = { audioData: Uint8Array };\n\n function hasAudioData(obj: object): obj is AudioDataShape {\n return \"audioData\" in obj && (obj as AudioDataShape).audioData instanceof Uint8Array;\n }\n\n if (isBrowser()) {\n throw new Error(\n \"Groq TRANSCRIPTION is not supported directly in browsers. Use a server proxy or submit a Blob/ArrayBuffer to a server.\"\n );\n }\n\n const hasBuffer =\n typeof Buffer !== \"undefined\" &&\n typeof (Buffer as unknown as { isBuffer: (v: unknown) => boolean }).isBuffer === \"function\";\n\n const audioBuffer: Buffer =\n typeof params === \"string\"\n ? Buffer.from(params, \"base64\")\n : hasBuffer &&\n (Buffer as unknown as { isBuffer: (v: unknown) => boolean }).isBuffer(params)\n ? (params as Buffer)\n : typeof params === \"object\" && params !== null && hasAudioData(params)\n ? Buffer.from((params as AudioDataShape).audioData)\n : Buffer.alloc(0);\n const baseURL = getBaseURL(runtime);\n const formData = new FormData();\n formData.append(\n \"file\",\n new File([audioBuffer as BlobPart], \"audio.mp3\", { type: \"audio/mp3\" })\n );\n formData.append(\"model\", DEFAULT_TRANSCRIPTION_MODEL);\n\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n const response = await fetch(`${baseURL}/audio/transcriptions`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${typeof apiKey === \"string\" ? apiKey : \"\"}`,\n },\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Transcription failed: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as { text: string };\n return data.text;\n },\n\n [ModelType.TEXT_TO_SPEECH]: async (runtime: IAgentRuntime, params) => {\n if (isBrowser()) {\n throw new Error(\n \"Groq TEXT_TO_SPEECH is not supported directly in browsers. Use a server proxy.\"\n );\n }\n const text = typeof params === \"string\" ? params : (params as { text: string }).text;\n const baseURL = getBaseURL(runtime);\n const modelSetting = runtime.getSetting(\"GROQ_TTS_MODEL\");\n const voiceSetting = runtime.getSetting(\"GROQ_TTS_VOICE\");\n const model = typeof modelSetting === \"string\" ? modelSetting : DEFAULT_TTS_MODEL;\n const voice = typeof voiceSetting === \"string\" ? voiceSetting : DEFAULT_TTS_VOICE;\n\n const apiKey = runtime.getSetting(\"GROQ_API_KEY\");\n const response = await fetch(`${baseURL}/audio/speech`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${typeof apiKey === \"string\" ? apiKey : \"\"}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ model, voice, input: text }),\n });\n\n if (!response.ok) {\n throw new Error(`TTS failed: ${response.status} ${await response.text()}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n },\n },\n\n tests: [\n {\n name: \"groq_plugin_tests\",\n tests: [\n {\n name: \"validate_api_key\",\n fn: async (runtime) => {\n const baseURL = getBaseURL(runtime);\n const response = await fetch(`${baseURL}/models`, {\n headers: {\n Authorization: `Bearer ${runtime.getSetting(\"GROQ_API_KEY\")}`,\n },\n });\n if (!response.ok) {\n throw new Error(`API key validation failed: ${response.statusText}`);\n }\n const data = (await response.json()) as {\n data: Array<{ id: string; owned_by: string }>;\n };\n logger.info(`Groq API validated, ${data.data.length} models available`);\n },\n },\n {\n name: \"text_small\",\n fn: async (runtime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"Say hello in exactly 3 words.\",\n });\n if (!text || text.length === 0) {\n throw new Error(\"Empty response from TEXT_SMALL\");\n }\n logger.info(\"TEXT_SMALL:\", text);\n },\n },\n {\n name: \"text_large\",\n fn: async (runtime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"What is 2+2? Answer with just the number.\",\n });\n if (!text || text.length === 0) {\n throw new Error(\"Empty response from TEXT_LARGE\");\n }\n logger.info(\"TEXT_LARGE:\", text);\n },\n },\n {\n name: \"object_generation\",\n fn: async (runtime) => {\n const obj = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt: 'Return a JSON object with name=\"test\" and value=42',\n temperature: 0.5,\n });\n logger.info(\"OBJECT_SMALL:\", JSON.stringify(obj));\n },\n },\n ],\n },\n ],\n};\n\nexport default groqPlugin;\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "8681D39937F125C564756E2164756E21",
9
+ "names": []
10
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,2 @@
1
- import { Plugin } from '@elizaos/core';
2
-
3
- declare const groqPlugin: Plugin;
4
-
5
- export { groqPlugin as default, groqPlugin };
1
+ export * from "./node/index";
2
+ export { default } from "./node/index";
@@ -0,0 +1,2 @@
1
+ export * from "./index.node";
2
+ export { default } from "./index.node";