@glueco/plugin-llm-groq 0.1.0

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.
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/contracts.ts
21
+ var contracts_exports = {};
22
+ __export(contracts_exports, {
23
+ ACTIONS: () => ACTIONS,
24
+ ChatCompletionChoiceSchema: () => ChatCompletionChoiceSchema,
25
+ ChatCompletionChunkSchema: () => ChatCompletionChunkSchema,
26
+ ChatCompletionRequestSchema: () => ChatCompletionRequestSchema,
27
+ ChatCompletionResponseSchema: () => ChatCompletionResponseSchema,
28
+ ChatMessageSchema: () => ChatMessageSchema,
29
+ DEFAULT_GROQ_MODELS: () => DEFAULT_GROQ_MODELS,
30
+ ENFORCEMENT_SUPPORT: () => ENFORCEMENT_SUPPORT,
31
+ PLUGIN_ID: () => PLUGIN_ID,
32
+ PROVIDER: () => PROVIDER,
33
+ RESOURCE_TYPE: () => RESOURCE_TYPE,
34
+ UsageSchema: () => UsageSchema,
35
+ VERSION: () => VERSION
36
+ });
37
+ module.exports = __toCommonJS(contracts_exports);
38
+ var import_zod = require("zod");
39
+ var ChatMessageSchema = import_zod.z.object({
40
+ role: import_zod.z.enum(["system", "user", "assistant", "tool"]),
41
+ content: import_zod.z.union([
42
+ import_zod.z.string(),
43
+ import_zod.z.array(
44
+ import_zod.z.object({
45
+ type: import_zod.z.string(),
46
+ text: import_zod.z.string().optional(),
47
+ image_url: import_zod.z.object({
48
+ url: import_zod.z.string(),
49
+ detail: import_zod.z.string().optional()
50
+ }).optional()
51
+ })
52
+ )
53
+ ]).nullable(),
54
+ name: import_zod.z.string().optional(),
55
+ tool_calls: import_zod.z.array(
56
+ import_zod.z.object({
57
+ id: import_zod.z.string(),
58
+ type: import_zod.z.literal("function"),
59
+ function: import_zod.z.object({
60
+ name: import_zod.z.string(),
61
+ arguments: import_zod.z.string()
62
+ })
63
+ })
64
+ ).optional(),
65
+ tool_call_id: import_zod.z.string().optional()
66
+ });
67
+ var ChatCompletionRequestSchema = import_zod.z.object({
68
+ model: import_zod.z.string(),
69
+ messages: import_zod.z.array(ChatMessageSchema),
70
+ temperature: import_zod.z.number().min(0).max(2).optional(),
71
+ top_p: import_zod.z.number().min(0).max(1).optional(),
72
+ n: import_zod.z.number().int().min(1).max(10).optional(),
73
+ stream: import_zod.z.boolean().optional(),
74
+ stop: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional(),
75
+ max_tokens: import_zod.z.number().int().positive().optional(),
76
+ max_completion_tokens: import_zod.z.number().int().positive().optional(),
77
+ presence_penalty: import_zod.z.number().min(-2).max(2).optional(),
78
+ frequency_penalty: import_zod.z.number().min(-2).max(2).optional(),
79
+ logit_bias: import_zod.z.record(import_zod.z.number()).optional(),
80
+ user: import_zod.z.string().optional(),
81
+ tools: import_zod.z.array(
82
+ import_zod.z.object({
83
+ type: import_zod.z.literal("function"),
84
+ function: import_zod.z.object({
85
+ name: import_zod.z.string(),
86
+ description: import_zod.z.string().optional(),
87
+ parameters: import_zod.z.record(import_zod.z.unknown()).optional()
88
+ })
89
+ })
90
+ ).optional(),
91
+ tool_choice: import_zod.z.union([
92
+ import_zod.z.literal("none"),
93
+ import_zod.z.literal("auto"),
94
+ import_zod.z.literal("required"),
95
+ import_zod.z.object({
96
+ type: import_zod.z.literal("function"),
97
+ function: import_zod.z.object({ name: import_zod.z.string() })
98
+ })
99
+ ]).optional(),
100
+ response_format: import_zod.z.object({
101
+ type: import_zod.z.enum(["text", "json_object"])
102
+ }).optional(),
103
+ seed: import_zod.z.number().int().optional()
104
+ });
105
+ var ChatCompletionChoiceSchema = import_zod.z.object({
106
+ index: import_zod.z.number(),
107
+ message: import_zod.z.object({
108
+ role: import_zod.z.literal("assistant"),
109
+ content: import_zod.z.string().nullable(),
110
+ tool_calls: import_zod.z.array(
111
+ import_zod.z.object({
112
+ id: import_zod.z.string(),
113
+ type: import_zod.z.literal("function"),
114
+ function: import_zod.z.object({
115
+ name: import_zod.z.string(),
116
+ arguments: import_zod.z.string()
117
+ })
118
+ })
119
+ ).optional()
120
+ }),
121
+ finish_reason: import_zod.z.string().nullable()
122
+ });
123
+ var UsageSchema = import_zod.z.object({
124
+ prompt_tokens: import_zod.z.number(),
125
+ completion_tokens: import_zod.z.number(),
126
+ total_tokens: import_zod.z.number()
127
+ });
128
+ var ChatCompletionResponseSchema = import_zod.z.object({
129
+ id: import_zod.z.string(),
130
+ object: import_zod.z.literal("chat.completion"),
131
+ created: import_zod.z.number(),
132
+ model: import_zod.z.string(),
133
+ choices: import_zod.z.array(ChatCompletionChoiceSchema),
134
+ usage: UsageSchema.optional()
135
+ });
136
+ var ChatCompletionChunkSchema = import_zod.z.object({
137
+ id: import_zod.z.string(),
138
+ object: import_zod.z.literal("chat.completion.chunk"),
139
+ created: import_zod.z.number(),
140
+ model: import_zod.z.string(),
141
+ choices: import_zod.z.array(
142
+ import_zod.z.object({
143
+ index: import_zod.z.number(),
144
+ delta: import_zod.z.object({
145
+ role: import_zod.z.string().optional(),
146
+ content: import_zod.z.string().optional(),
147
+ tool_calls: import_zod.z.array(
148
+ import_zod.z.object({
149
+ index: import_zod.z.number(),
150
+ id: import_zod.z.string().optional(),
151
+ type: import_zod.z.literal("function").optional(),
152
+ function: import_zod.z.object({
153
+ name: import_zod.z.string().optional(),
154
+ arguments: import_zod.z.string().optional()
155
+ }).optional()
156
+ })
157
+ ).optional()
158
+ }),
159
+ finish_reason: import_zod.z.string().nullable()
160
+ })
161
+ )
162
+ });
163
+ var PLUGIN_ID = "llm:groq";
164
+ var RESOURCE_TYPE = "llm";
165
+ var PROVIDER = "groq";
166
+ var VERSION = "1.0.0";
167
+ var DEFAULT_GROQ_MODELS = [
168
+ "llama-3.3-70b-versatile",
169
+ "llama-3.1-70b-versatile",
170
+ "llama-3.1-8b-instant",
171
+ "llama3-70b-8192",
172
+ "llama3-8b-8192",
173
+ "mixtral-8x7b-32768",
174
+ "gemma2-9b-it"
175
+ ];
176
+ var ACTIONS = ["chat.completions"];
177
+ var ENFORCEMENT_SUPPORT = [
178
+ "model",
179
+ "max_tokens",
180
+ "streaming"
181
+ ];
182
+ // Annotate the CommonJS export names for ESM import in node:
183
+ 0 && (module.exports = {
184
+ ACTIONS,
185
+ ChatCompletionChoiceSchema,
186
+ ChatCompletionChunkSchema,
187
+ ChatCompletionRequestSchema,
188
+ ChatCompletionResponseSchema,
189
+ ChatMessageSchema,
190
+ DEFAULT_GROQ_MODELS,
191
+ ENFORCEMENT_SUPPORT,
192
+ PLUGIN_ID,
193
+ PROVIDER,
194
+ RESOURCE_TYPE,
195
+ UsageSchema,
196
+ VERSION
197
+ });
198
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts.ts"],"sourcesContent":["// ============================================\n// GROQ PLUGIN CONTRACTS\n// Shared request/response schemas for proxy and client\n// ============================================\n\nimport { z } from \"zod\";\n\n// ============================================\n// REQUEST SCHEMAS (OpenAI-compatible)\n// ============================================\n\nexport const ChatMessageSchema = z.object({\n role: z.enum([\"system\", \"user\", \"assistant\", \"tool\"]),\n content: z\n .union([\n z.string(),\n z.array(\n z.object({\n type: z.string(),\n text: z.string().optional(),\n image_url: z\n .object({\n url: z.string(),\n detail: z.string().optional(),\n })\n .optional(),\n }),\n ),\n ])\n .nullable(),\n name: z.string().optional(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n tool_call_id: z.string().optional(),\n});\n\nexport type ChatMessage = z.infer<typeof ChatMessageSchema>;\n\nexport const ChatCompletionRequestSchema = z.object({\n model: z.string(),\n messages: z.array(ChatMessageSchema),\n temperature: z.number().min(0).max(2).optional(),\n top_p: z.number().min(0).max(1).optional(),\n n: z.number().int().min(1).max(10).optional(),\n stream: z.boolean().optional(),\n stop: z.union([z.string(), z.array(z.string())]).optional(),\n max_tokens: z.number().int().positive().optional(),\n max_completion_tokens: z.number().int().positive().optional(),\n presence_penalty: z.number().min(-2).max(2).optional(),\n frequency_penalty: z.number().min(-2).max(2).optional(),\n logit_bias: z.record(z.number()).optional(),\n user: z.string().optional(),\n tools: z\n .array(\n z.object({\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.record(z.unknown()).optional(),\n }),\n }),\n )\n .optional(),\n tool_choice: z\n .union([\n z.literal(\"none\"),\n z.literal(\"auto\"),\n z.literal(\"required\"),\n z.object({\n type: z.literal(\"function\"),\n function: z.object({ name: z.string() }),\n }),\n ])\n .optional(),\n response_format: z\n .object({\n type: z.enum([\"text\", \"json_object\"]),\n })\n .optional(),\n seed: z.number().int().optional(),\n});\n\nexport type ChatCompletionRequest = z.infer<typeof ChatCompletionRequestSchema>;\n\n// ============================================\n// RESPONSE SCHEMAS (OpenAI-compatible)\n// ============================================\n\nexport const ChatCompletionChoiceSchema = z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n});\n\nexport type ChatCompletionChoice = z.infer<typeof ChatCompletionChoiceSchema>;\n\nexport const UsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const ChatCompletionResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\"),\n created: z.number(),\n model: z.string(),\n choices: z.array(ChatCompletionChoiceSchema),\n usage: UsageSchema.optional(),\n});\n\nexport type ChatCompletionResponse = z.infer<\n typeof ChatCompletionResponseSchema\n>;\n\n// ============================================\n// STREAMING RESPONSE SCHEMAS\n// ============================================\n\nexport const ChatCompletionChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\"),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.string().optional(),\n content: z.string().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n }),\n ),\n});\n\nexport type ChatCompletionChunk = z.infer<typeof ChatCompletionChunkSchema>;\n\n// ============================================\n// PLUGIN CONSTANTS\n// ============================================\n\nexport const PLUGIN_ID = \"llm:groq\" as const;\nexport const RESOURCE_TYPE = \"llm\" as const;\nexport const PROVIDER = \"groq\" as const;\nexport const VERSION = \"1.0.0\";\n\n/** Default allowed models */\nexport const DEFAULT_GROQ_MODELS = [\n \"llama-3.3-70b-versatile\",\n \"llama-3.1-70b-versatile\",\n \"llama-3.1-8b-instant\",\n \"llama3-70b-8192\",\n \"llama3-8b-8192\",\n \"mixtral-8x7b-32768\",\n \"gemma2-9b-it\",\n] as const;\n\n/** Supported actions */\nexport const ACTIONS = [\"chat.completions\"] as const;\nexport type GroqAction = (typeof ACTIONS)[number];\n\n/** Enforcement knobs */\nexport const ENFORCEMENT_SUPPORT = [\n \"model\",\n \"max_tokens\",\n \"streaming\",\n] as const;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,31 @@
1
+ import {
2
+ ACTIONS,
3
+ ChatCompletionChoiceSchema,
4
+ ChatCompletionChunkSchema,
5
+ ChatCompletionRequestSchema,
6
+ ChatCompletionResponseSchema,
7
+ ChatMessageSchema,
8
+ DEFAULT_GROQ_MODELS,
9
+ ENFORCEMENT_SUPPORT,
10
+ PLUGIN_ID,
11
+ PROVIDER,
12
+ RESOURCE_TYPE,
13
+ UsageSchema,
14
+ VERSION
15
+ } from "./chunk-MRDVVFUV.mjs";
16
+ export {
17
+ ACTIONS,
18
+ ChatCompletionChoiceSchema,
19
+ ChatCompletionChunkSchema,
20
+ ChatCompletionRequestSchema,
21
+ ChatCompletionResponseSchema,
22
+ ChatMessageSchema,
23
+ DEFAULT_GROQ_MODELS,
24
+ ENFORCEMENT_SUPPORT,
25
+ PLUGIN_ID,
26
+ PROVIDER,
27
+ RESOURCE_TYPE,
28
+ UsageSchema,
29
+ VERSION
30
+ };
31
+ //# sourceMappingURL=contracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,4 @@
1
+ export { default, default as groqPlugin } from './proxy.mjs';
2
+ export { ACTIONS, ChatCompletionChoice, ChatCompletionChoiceSchema, ChatCompletionChunk, ChatCompletionChunkSchema, ChatCompletionRequest, ChatCompletionRequestSchema, ChatCompletionResponse, ChatCompletionResponseSchema, ChatMessage, ChatMessageSchema, DEFAULT_GROQ_MODELS, ENFORCEMENT_SUPPORT, GroqAction, PLUGIN_ID, PROVIDER, RESOURCE_TYPE, Usage, UsageSchema, VERSION } from './contracts.mjs';
3
+ import '@glueco/shared';
4
+ import 'zod';
@@ -0,0 +1,4 @@
1
+ export { default, default as groqPlugin } from './proxy.js';
2
+ export { ACTIONS, ChatCompletionChoice, ChatCompletionChoiceSchema, ChatCompletionChunk, ChatCompletionChunkSchema, ChatCompletionRequest, ChatCompletionRequestSchema, ChatCompletionResponse, ChatCompletionResponseSchema, ChatMessage, ChatMessageSchema, DEFAULT_GROQ_MODELS, ENFORCEMENT_SUPPORT, GroqAction, PLUGIN_ID, PROVIDER, RESOURCE_TYPE, Usage, UsageSchema, VERSION } from './contracts.js';
3
+ import '@glueco/shared';
4
+ import 'zod';
package/dist/index.js ADDED
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ ACTIONS: () => ACTIONS,
24
+ ChatCompletionChoiceSchema: () => ChatCompletionChoiceSchema,
25
+ ChatCompletionChunkSchema: () => ChatCompletionChunkSchema,
26
+ ChatCompletionRequestSchema: () => ChatCompletionRequestSchema,
27
+ ChatCompletionResponseSchema: () => ChatCompletionResponseSchema,
28
+ ChatMessageSchema: () => ChatMessageSchema,
29
+ DEFAULT_GROQ_MODELS: () => DEFAULT_GROQ_MODELS,
30
+ ENFORCEMENT_SUPPORT: () => ENFORCEMENT_SUPPORT,
31
+ PLUGIN_ID: () => PLUGIN_ID,
32
+ PROVIDER: () => PROVIDER,
33
+ RESOURCE_TYPE: () => RESOURCE_TYPE,
34
+ UsageSchema: () => UsageSchema,
35
+ VERSION: () => VERSION,
36
+ default: () => proxy_default,
37
+ groqPlugin: () => groqPlugin
38
+ });
39
+ module.exports = __toCommonJS(src_exports);
40
+
41
+ // src/proxy.ts
42
+ var import_shared = require("@glueco/shared");
43
+
44
+ // src/contracts.ts
45
+ var import_zod = require("zod");
46
+ var ChatMessageSchema = import_zod.z.object({
47
+ role: import_zod.z.enum(["system", "user", "assistant", "tool"]),
48
+ content: import_zod.z.union([
49
+ import_zod.z.string(),
50
+ import_zod.z.array(
51
+ import_zod.z.object({
52
+ type: import_zod.z.string(),
53
+ text: import_zod.z.string().optional(),
54
+ image_url: import_zod.z.object({
55
+ url: import_zod.z.string(),
56
+ detail: import_zod.z.string().optional()
57
+ }).optional()
58
+ })
59
+ )
60
+ ]).nullable(),
61
+ name: import_zod.z.string().optional(),
62
+ tool_calls: import_zod.z.array(
63
+ import_zod.z.object({
64
+ id: import_zod.z.string(),
65
+ type: import_zod.z.literal("function"),
66
+ function: import_zod.z.object({
67
+ name: import_zod.z.string(),
68
+ arguments: import_zod.z.string()
69
+ })
70
+ })
71
+ ).optional(),
72
+ tool_call_id: import_zod.z.string().optional()
73
+ });
74
+ var ChatCompletionRequestSchema = import_zod.z.object({
75
+ model: import_zod.z.string(),
76
+ messages: import_zod.z.array(ChatMessageSchema),
77
+ temperature: import_zod.z.number().min(0).max(2).optional(),
78
+ top_p: import_zod.z.number().min(0).max(1).optional(),
79
+ n: import_zod.z.number().int().min(1).max(10).optional(),
80
+ stream: import_zod.z.boolean().optional(),
81
+ stop: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional(),
82
+ max_tokens: import_zod.z.number().int().positive().optional(),
83
+ max_completion_tokens: import_zod.z.number().int().positive().optional(),
84
+ presence_penalty: import_zod.z.number().min(-2).max(2).optional(),
85
+ frequency_penalty: import_zod.z.number().min(-2).max(2).optional(),
86
+ logit_bias: import_zod.z.record(import_zod.z.number()).optional(),
87
+ user: import_zod.z.string().optional(),
88
+ tools: import_zod.z.array(
89
+ import_zod.z.object({
90
+ type: import_zod.z.literal("function"),
91
+ function: import_zod.z.object({
92
+ name: import_zod.z.string(),
93
+ description: import_zod.z.string().optional(),
94
+ parameters: import_zod.z.record(import_zod.z.unknown()).optional()
95
+ })
96
+ })
97
+ ).optional(),
98
+ tool_choice: import_zod.z.union([
99
+ import_zod.z.literal("none"),
100
+ import_zod.z.literal("auto"),
101
+ import_zod.z.literal("required"),
102
+ import_zod.z.object({
103
+ type: import_zod.z.literal("function"),
104
+ function: import_zod.z.object({ name: import_zod.z.string() })
105
+ })
106
+ ]).optional(),
107
+ response_format: import_zod.z.object({
108
+ type: import_zod.z.enum(["text", "json_object"])
109
+ }).optional(),
110
+ seed: import_zod.z.number().int().optional()
111
+ });
112
+ var ChatCompletionChoiceSchema = import_zod.z.object({
113
+ index: import_zod.z.number(),
114
+ message: import_zod.z.object({
115
+ role: import_zod.z.literal("assistant"),
116
+ content: import_zod.z.string().nullable(),
117
+ tool_calls: import_zod.z.array(
118
+ import_zod.z.object({
119
+ id: import_zod.z.string(),
120
+ type: import_zod.z.literal("function"),
121
+ function: import_zod.z.object({
122
+ name: import_zod.z.string(),
123
+ arguments: import_zod.z.string()
124
+ })
125
+ })
126
+ ).optional()
127
+ }),
128
+ finish_reason: import_zod.z.string().nullable()
129
+ });
130
+ var UsageSchema = import_zod.z.object({
131
+ prompt_tokens: import_zod.z.number(),
132
+ completion_tokens: import_zod.z.number(),
133
+ total_tokens: import_zod.z.number()
134
+ });
135
+ var ChatCompletionResponseSchema = import_zod.z.object({
136
+ id: import_zod.z.string(),
137
+ object: import_zod.z.literal("chat.completion"),
138
+ created: import_zod.z.number(),
139
+ model: import_zod.z.string(),
140
+ choices: import_zod.z.array(ChatCompletionChoiceSchema),
141
+ usage: UsageSchema.optional()
142
+ });
143
+ var ChatCompletionChunkSchema = import_zod.z.object({
144
+ id: import_zod.z.string(),
145
+ object: import_zod.z.literal("chat.completion.chunk"),
146
+ created: import_zod.z.number(),
147
+ model: import_zod.z.string(),
148
+ choices: import_zod.z.array(
149
+ import_zod.z.object({
150
+ index: import_zod.z.number(),
151
+ delta: import_zod.z.object({
152
+ role: import_zod.z.string().optional(),
153
+ content: import_zod.z.string().optional(),
154
+ tool_calls: import_zod.z.array(
155
+ import_zod.z.object({
156
+ index: import_zod.z.number(),
157
+ id: import_zod.z.string().optional(),
158
+ type: import_zod.z.literal("function").optional(),
159
+ function: import_zod.z.object({
160
+ name: import_zod.z.string().optional(),
161
+ arguments: import_zod.z.string().optional()
162
+ }).optional()
163
+ })
164
+ ).optional()
165
+ }),
166
+ finish_reason: import_zod.z.string().nullable()
167
+ })
168
+ )
169
+ });
170
+ var PLUGIN_ID = "llm:groq";
171
+ var RESOURCE_TYPE = "llm";
172
+ var PROVIDER = "groq";
173
+ var VERSION = "1.0.0";
174
+ var DEFAULT_GROQ_MODELS = [
175
+ "llama-3.3-70b-versatile",
176
+ "llama-3.1-70b-versatile",
177
+ "llama-3.1-8b-instant",
178
+ "llama3-70b-8192",
179
+ "llama3-8b-8192",
180
+ "mixtral-8x7b-32768",
181
+ "gemma2-9b-it"
182
+ ];
183
+ var ACTIONS = ["chat.completions"];
184
+ var ENFORCEMENT_SUPPORT = [
185
+ "model",
186
+ "max_tokens",
187
+ "streaming"
188
+ ];
189
+
190
+ // src/proxy.ts
191
+ var GROQ_API_URL = "https://api.groq.com/openai/v1";
192
+ var GroqApiError = class extends Error {
193
+ constructor(status, body) {
194
+ super(`Groq API error: ${status}`);
195
+ this.status = status;
196
+ this.body = body;
197
+ this.name = "GroqApiError";
198
+ }
199
+ };
200
+ function mapGroqError(error) {
201
+ let parsed = {};
202
+ try {
203
+ parsed = JSON.parse(error.body);
204
+ } catch {
205
+ }
206
+ const message = parsed.error?.message || error.body;
207
+ switch (error.status) {
208
+ case 400:
209
+ return { status: 400, code: "BAD_REQUEST", message, retryable: false };
210
+ case 401:
211
+ return {
212
+ status: 401,
213
+ code: "UNAUTHORIZED",
214
+ message: "Invalid API key",
215
+ retryable: false
216
+ };
217
+ case 403:
218
+ return { status: 403, code: "FORBIDDEN", message, retryable: false };
219
+ case 404:
220
+ return { status: 404, code: "NOT_FOUND", message, retryable: false };
221
+ case 429:
222
+ return { status: 429, code: "RATE_LIMITED", message, retryable: true };
223
+ case 500:
224
+ case 502:
225
+ case 503:
226
+ return {
227
+ status: error.status,
228
+ code: "PROVIDER_ERROR",
229
+ message,
230
+ retryable: true
231
+ };
232
+ default:
233
+ return {
234
+ status: error.status,
235
+ code: "UNKNOWN",
236
+ message,
237
+ retryable: false
238
+ };
239
+ }
240
+ }
241
+ var groqPlugin = {
242
+ ...(0, import_shared.createPluginBase)({
243
+ id: PLUGIN_ID,
244
+ resourceType: RESOURCE_TYPE,
245
+ provider: PROVIDER,
246
+ version: VERSION,
247
+ name: "Groq LLM",
248
+ actions: [...ACTIONS],
249
+ supports: {
250
+ enforcement: [...ENFORCEMENT_SUPPORT]
251
+ },
252
+ // Client contract metadata for SDK-compatible plugins
253
+ client: {
254
+ namespace: "groq",
255
+ actions: {
256
+ "chat.completions": {
257
+ description: "Generate chat completions using Groq's fast LLM inference"
258
+ }
259
+ }
260
+ }
261
+ }),
262
+ // Credential schema for UI
263
+ credentialSchema: {
264
+ fields: [
265
+ {
266
+ name: "apiKey",
267
+ type: "secret",
268
+ label: "API Key",
269
+ description: "Your Groq API key",
270
+ required: true
271
+ },
272
+ {
273
+ name: "baseUrl",
274
+ type: "url",
275
+ label: "Base URL",
276
+ description: "Custom API base URL (optional)",
277
+ required: false,
278
+ default: GROQ_API_URL
279
+ }
280
+ ]
281
+ },
282
+ validateAndShape(action, input, constraints) {
283
+ if (action !== "chat.completions") {
284
+ return { valid: false, error: `Unsupported action: ${action}` };
285
+ }
286
+ const parsed = ChatCompletionRequestSchema.safeParse(input);
287
+ if (!parsed.success) {
288
+ return {
289
+ valid: false,
290
+ error: `Invalid request: ${parsed.error.errors.map((e) => e.message).join(", ")}`
291
+ };
292
+ }
293
+ const request = parsed.data;
294
+ const enforcement = {
295
+ model: request.model,
296
+ stream: request.stream ?? false,
297
+ usesTools: Array.isArray(request.tools) && request.tools.length > 0,
298
+ maxOutputTokens: request.max_tokens ?? request.max_completion_tokens
299
+ };
300
+ const allowedModels = constraints.allowedModels ?? [...DEFAULT_GROQ_MODELS];
301
+ if (!allowedModels.includes(request.model)) {
302
+ return {
303
+ valid: false,
304
+ error: `Model '${request.model}' not allowed. Allowed: ${allowedModels.join(", ")}`
305
+ };
306
+ }
307
+ const maxTokens = constraints.maxOutputTokens ?? 4096;
308
+ const requestedTokens = request.max_tokens ?? request.max_completion_tokens;
309
+ if (requestedTokens && requestedTokens > maxTokens) {
310
+ return {
311
+ valid: false,
312
+ error: `max_tokens (${requestedTokens}) exceeds limit (${maxTokens})`
313
+ };
314
+ }
315
+ if (request.stream && constraints.allowStreaming === false) {
316
+ return {
317
+ valid: false,
318
+ error: "Streaming is not allowed for this app"
319
+ };
320
+ }
321
+ const shapedRequest = {
322
+ ...request,
323
+ max_tokens: requestedTokens ? Math.min(requestedTokens, maxTokens) : maxTokens
324
+ };
325
+ return { valid: true, shapedInput: shapedRequest, enforcement };
326
+ },
327
+ async execute(action, shapedInput, ctx, options) {
328
+ const request = shapedInput;
329
+ const baseUrl = ctx.config?.baseUrl || GROQ_API_URL;
330
+ const response = await fetch(`${baseUrl}/chat/completions`, {
331
+ method: "POST",
332
+ headers: {
333
+ "Content-Type": "application/json",
334
+ Authorization: `Bearer ${ctx.secret}`
335
+ },
336
+ body: JSON.stringify(request),
337
+ signal: options.signal
338
+ });
339
+ if (!response.ok) {
340
+ const errorBody = await response.text();
341
+ throw new GroqApiError(response.status, errorBody);
342
+ }
343
+ if (request.stream) {
344
+ return {
345
+ stream: response.body,
346
+ contentType: "text/event-stream"
347
+ };
348
+ } else {
349
+ const json = await response.json();
350
+ return {
351
+ response: json,
352
+ contentType: "application/json",
353
+ usage: this.extractUsage(json)
354
+ };
355
+ }
356
+ },
357
+ extractUsage(response) {
358
+ const res = response;
359
+ return {
360
+ inputTokens: res.usage?.prompt_tokens,
361
+ outputTokens: res.usage?.completion_tokens,
362
+ totalTokens: res.usage?.total_tokens,
363
+ model: res.model
364
+ };
365
+ },
366
+ mapError(error) {
367
+ if (error instanceof GroqApiError) {
368
+ return mapGroqError(error);
369
+ }
370
+ return {
371
+ status: 500,
372
+ code: "INTERNAL_ERROR",
373
+ message: error instanceof Error ? error.message : "Unknown error",
374
+ retryable: false
375
+ };
376
+ }
377
+ };
378
+ var proxy_default = groqPlugin;
379
+ // Annotate the CommonJS export names for ESM import in node:
380
+ 0 && (module.exports = {
381
+ ACTIONS,
382
+ ChatCompletionChoiceSchema,
383
+ ChatCompletionChunkSchema,
384
+ ChatCompletionRequestSchema,
385
+ ChatCompletionResponseSchema,
386
+ ChatMessageSchema,
387
+ DEFAULT_GROQ_MODELS,
388
+ ENFORCEMENT_SUPPORT,
389
+ PLUGIN_ID,
390
+ PROVIDER,
391
+ RESOURCE_TYPE,
392
+ UsageSchema,
393
+ VERSION,
394
+ groqPlugin
395
+ });
396
+ //# sourceMappingURL=index.js.map