@teamflojo/floimg-openai 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,83 @@
1
+ import type { ImageGenerator, GeneratorSchema, VisionProvider, VisionProviderSchema, TextProvider, TextProviderSchema } from "@teamflojo/floimg";
2
+ export interface OpenAIConfig {
3
+ apiKey?: string;
4
+ model?: "dall-e-2" | "dall-e-3";
5
+ quality?: "standard" | "hd";
6
+ style?: "vivid" | "natural";
7
+ }
8
+ export interface OpenAIGenerateParams {
9
+ prompt: string;
10
+ model?: "dall-e-2" | "dall-e-3";
11
+ size?: "256x256" | "512x512" | "1024x1024" | "1024x1792" | "1792x1024";
12
+ quality?: "standard" | "hd";
13
+ style?: "vivid" | "natural";
14
+ n?: number;
15
+ }
16
+ /**
17
+ * Schema for the OpenAI DALL-E generator
18
+ */
19
+ export declare const openaiSchema: GeneratorSchema;
20
+ /**
21
+ * Create an OpenAI DALL-E image generator
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import createClient from '@teamflojo/floimg';
26
+ * import openai from '@teamflojo/floimg-openai';
27
+ *
28
+ * const floimg = createClient();
29
+ * floimg.registerGenerator(openai({ apiKey: process.env.OPENAI_API_KEY }));
30
+ *
31
+ * const image = await floimg.generate({
32
+ * generator: 'openai',
33
+ * params: {
34
+ * prompt: 'A serene mountain landscape at sunset',
35
+ * model: 'dall-e-3',
36
+ * quality: 'hd',
37
+ * }
38
+ * });
39
+ * ```
40
+ */
41
+ export default function openai(config?: OpenAIConfig): ImageGenerator;
42
+ export interface OpenAIVisionConfig {
43
+ apiKey?: string;
44
+ model?: "gpt-4o" | "gpt-4o-mini" | "gpt-4-turbo";
45
+ maxTokens?: number;
46
+ }
47
+ export interface OpenAIVisionParams {
48
+ prompt?: string;
49
+ outputFormat?: "text" | "json";
50
+ maxTokens?: number;
51
+ }
52
+ /**
53
+ * Schema for the OpenAI Vision provider
54
+ */
55
+ export declare const openaiVisionSchema: VisionProviderSchema;
56
+ /**
57
+ * Create an OpenAI Vision provider for image analysis
58
+ */
59
+ export declare function openaiVision(config?: OpenAIVisionConfig): VisionProvider;
60
+ export interface OpenAITextConfig {
61
+ apiKey?: string;
62
+ model?: "gpt-4o" | "gpt-4o-mini" | "gpt-4-turbo" | "gpt-3.5-turbo";
63
+ maxTokens?: number;
64
+ temperature?: number;
65
+ }
66
+ export interface OpenAITextParams {
67
+ prompt: string;
68
+ systemPrompt?: string;
69
+ context?: string;
70
+ outputFormat?: "text" | "json";
71
+ maxTokens?: number;
72
+ temperature?: number;
73
+ }
74
+ /**
75
+ * Schema for the OpenAI Text provider
76
+ */
77
+ export declare const openaiTextSchema: TextProviderSchema;
78
+ /**
79
+ * Create an OpenAI Text provider for text generation
80
+ */
81
+ export declare function openaiText(config?: OpenAITextConfig): TextProvider;
82
+ export { openai };
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAGd,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IACvE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,eA2C1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,cAAc,CAyFxE;AAMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,oBAwBhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,cAAc,CAiF5E;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAwC9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,gBAAqB,GAAG,YAAY,CAiFtE;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,345 @@
1
+ import OpenAI from "openai";
2
+ /**
3
+ * Schema for the OpenAI DALL-E generator
4
+ */
5
+ export const openaiSchema = {
6
+ name: "openai",
7
+ description: "Generate images using OpenAI's DALL-E models",
8
+ category: "AI",
9
+ parameters: {
10
+ prompt: {
11
+ type: "string",
12
+ title: "Prompt",
13
+ description: "Describe the image you want to generate",
14
+ },
15
+ model: {
16
+ type: "string",
17
+ title: "Model",
18
+ description: "DALL-E model to use",
19
+ enum: ["dall-e-2", "dall-e-3"],
20
+ default: "dall-e-3",
21
+ },
22
+ size: {
23
+ type: "string",
24
+ title: "Size",
25
+ description: "Image dimensions",
26
+ enum: ["256x256", "512x512", "1024x1024", "1024x1792", "1792x1024"],
27
+ default: "1024x1024",
28
+ },
29
+ quality: {
30
+ type: "string",
31
+ title: "Quality",
32
+ description: "Image quality (DALL-E 3 only)",
33
+ enum: ["standard", "hd"],
34
+ default: "standard",
35
+ },
36
+ style: {
37
+ type: "string",
38
+ title: "Style",
39
+ description: "Image style (DALL-E 3 only)",
40
+ enum: ["vivid", "natural"],
41
+ default: "vivid",
42
+ },
43
+ },
44
+ requiredParameters: ["prompt"],
45
+ isAI: true,
46
+ requiresApiKey: true,
47
+ apiKeyEnvVar: "OPENAI_API_KEY",
48
+ };
49
+ /**
50
+ * Create an OpenAI DALL-E image generator
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import createClient from '@teamflojo/floimg';
55
+ * import openai from '@teamflojo/floimg-openai';
56
+ *
57
+ * const floimg = createClient();
58
+ * floimg.registerGenerator(openai({ apiKey: process.env.OPENAI_API_KEY }));
59
+ *
60
+ * const image = await floimg.generate({
61
+ * generator: 'openai',
62
+ * params: {
63
+ * prompt: 'A serene mountain landscape at sunset',
64
+ * model: 'dall-e-3',
65
+ * quality: 'hd',
66
+ * }
67
+ * });
68
+ * ```
69
+ */
70
+ export default function openai(config = {}) {
71
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
72
+ if (!apiKey) {
73
+ throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
74
+ }
75
+ const client = new OpenAI({ apiKey });
76
+ return {
77
+ name: "openai",
78
+ schema: openaiSchema,
79
+ async generate(params) {
80
+ const { prompt, model = config.model || "dall-e-3", size = "1024x1024", quality = config.quality || "standard", style = config.style || "vivid", n = 1, } = params;
81
+ if (!prompt) {
82
+ throw new Error("prompt is required for OpenAI image generation");
83
+ }
84
+ // DALL-E 3 only supports n=1
85
+ if (model === "dall-e-3" && n !== 1) {
86
+ throw new Error("DALL-E 3 only supports generating 1 image at a time (n=1)");
87
+ }
88
+ // DALL-E 3 has specific size constraints
89
+ if (model === "dall-e-3") {
90
+ const validSizes = ["1024x1024", "1024x1792", "1792x1024"];
91
+ if (!validSizes.includes(size)) {
92
+ throw new Error(`DALL-E 3 only supports sizes: ${validSizes.join(", ")}. Got: ${size}`);
93
+ }
94
+ }
95
+ // Generate image
96
+ const response = await client.images.generate({
97
+ model,
98
+ prompt,
99
+ size: size,
100
+ quality: model === "dall-e-3" ? quality : undefined,
101
+ style: model === "dall-e-3" ? style : undefined,
102
+ n,
103
+ response_format: "url",
104
+ });
105
+ if (!response.data || response.data.length === 0) {
106
+ throw new Error("No image data returned from OpenAI");
107
+ }
108
+ const imageUrl = response.data[0].url;
109
+ if (!imageUrl) {
110
+ throw new Error("No image URL returned from OpenAI");
111
+ }
112
+ // Download the image
113
+ const imageResponse = await fetch(imageUrl);
114
+ if (!imageResponse.ok) {
115
+ throw new Error(`Failed to download image: ${imageResponse.statusText}`);
116
+ }
117
+ const arrayBuffer = await imageResponse.arrayBuffer();
118
+ const bytes = Buffer.from(arrayBuffer);
119
+ // Parse dimensions from size parameter
120
+ const [width, height] = size.split("x").map(Number);
121
+ return {
122
+ bytes,
123
+ mime: "image/png",
124
+ width,
125
+ height,
126
+ source: `ai:openai:${model}`,
127
+ metadata: {
128
+ prompt,
129
+ model,
130
+ quality,
131
+ style,
132
+ revisedPrompt: response.data[0].revised_prompt,
133
+ },
134
+ };
135
+ },
136
+ };
137
+ }
138
+ /**
139
+ * Schema for the OpenAI Vision provider
140
+ */
141
+ export const openaiVisionSchema = {
142
+ name: "openai-vision",
143
+ description: "Analyze images using OpenAI's GPT-4 Vision models",
144
+ parameters: {
145
+ prompt: {
146
+ type: "string",
147
+ title: "Prompt",
148
+ description: "What to analyze or ask about the image",
149
+ default: "Describe this image in detail.",
150
+ },
151
+ outputFormat: {
152
+ type: "string",
153
+ title: "Output Format",
154
+ description: "Response format: plain text or structured JSON",
155
+ enum: ["text", "json"],
156
+ default: "text",
157
+ },
158
+ maxTokens: {
159
+ type: "number",
160
+ title: "Max Tokens",
161
+ description: "Maximum tokens in the response",
162
+ default: 1000,
163
+ },
164
+ },
165
+ };
166
+ /**
167
+ * Create an OpenAI Vision provider for image analysis
168
+ */
169
+ export function openaiVision(config = {}) {
170
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
171
+ if (!apiKey) {
172
+ throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
173
+ }
174
+ const client = new OpenAI({ apiKey });
175
+ return {
176
+ name: "openai-vision",
177
+ schema: openaiVisionSchema,
178
+ async analyze(input, params) {
179
+ const { prompt = "Describe this image in detail.", outputFormat = "text", maxTokens = config.maxTokens || 1000, } = params;
180
+ const model = config.model || "gpt-4o";
181
+ // Convert image to base64 data URL
182
+ const base64 = input.bytes.toString("base64");
183
+ const dataUrl = `data:${input.mime};base64,${base64}`;
184
+ // Build messages with image
185
+ const systemPrompt = outputFormat === "json"
186
+ ? "You are a helpful assistant that analyzes images. Always respond with valid JSON."
187
+ : "You are a helpful assistant that analyzes images.";
188
+ const userPrompt = outputFormat === "json"
189
+ ? `${prompt}\n\nRespond with a JSON object containing your analysis.`
190
+ : prompt;
191
+ const response = await client.chat.completions.create({
192
+ model,
193
+ max_tokens: maxTokens,
194
+ messages: [
195
+ { role: "system", content: systemPrompt },
196
+ {
197
+ role: "user",
198
+ content: [
199
+ { type: "text", text: userPrompt },
200
+ {
201
+ type: "image_url",
202
+ image_url: { url: dataUrl, detail: "auto" },
203
+ },
204
+ ],
205
+ },
206
+ ],
207
+ });
208
+ const content = response.choices[0]?.message?.content || "";
209
+ // Try to parse JSON if requested
210
+ let parsed;
211
+ if (outputFormat === "json") {
212
+ try {
213
+ parsed = JSON.parse(content);
214
+ }
215
+ catch {
216
+ // If JSON parsing fails, treat as text
217
+ }
218
+ }
219
+ return {
220
+ type: parsed ? "json" : "text",
221
+ content,
222
+ parsed,
223
+ source: `ai:openai-vision:${model}`,
224
+ metadata: {
225
+ model,
226
+ prompt,
227
+ usage: response.usage,
228
+ },
229
+ };
230
+ },
231
+ };
232
+ }
233
+ /**
234
+ * Schema for the OpenAI Text provider
235
+ */
236
+ export const openaiTextSchema = {
237
+ name: "openai-text",
238
+ description: "Generate text using OpenAI's GPT models",
239
+ parameters: {
240
+ prompt: {
241
+ type: "string",
242
+ title: "Prompt",
243
+ description: "The prompt for text generation",
244
+ },
245
+ systemPrompt: {
246
+ type: "string",
247
+ title: "System Prompt",
248
+ description: "Optional system prompt to guide the model's behavior",
249
+ },
250
+ context: {
251
+ type: "string",
252
+ title: "Context",
253
+ description: "Optional context from a previous step (e.g., vision analysis)",
254
+ },
255
+ outputFormat: {
256
+ type: "string",
257
+ title: "Output Format",
258
+ description: "Response format: plain text or structured JSON",
259
+ enum: ["text", "json"],
260
+ default: "text",
261
+ },
262
+ maxTokens: {
263
+ type: "number",
264
+ title: "Max Tokens",
265
+ description: "Maximum tokens in the response",
266
+ default: 1000,
267
+ },
268
+ temperature: {
269
+ type: "number",
270
+ title: "Temperature",
271
+ description: "Creativity level (0-2)",
272
+ default: 0.7,
273
+ },
274
+ },
275
+ requiredParameters: ["prompt"],
276
+ };
277
+ /**
278
+ * Create an OpenAI Text provider for text generation
279
+ */
280
+ export function openaiText(config = {}) {
281
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
282
+ if (!apiKey) {
283
+ throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
284
+ }
285
+ const client = new OpenAI({ apiKey });
286
+ return {
287
+ name: "openai-text",
288
+ schema: openaiTextSchema,
289
+ async generate(params) {
290
+ const { prompt, systemPrompt, context, outputFormat = "text", maxTokens = config.maxTokens || 1000, temperature = config.temperature || 0.7, } = params;
291
+ if (!prompt) {
292
+ throw new Error("prompt is required for OpenAI text generation");
293
+ }
294
+ const model = config.model || "gpt-4o";
295
+ // Build system message
296
+ let system = systemPrompt || "You are a helpful assistant.";
297
+ if (outputFormat === "json") {
298
+ system += " Always respond with valid JSON.";
299
+ }
300
+ // Build user message with optional context
301
+ let userMessage = prompt;
302
+ if (context) {
303
+ userMessage = `Context from previous analysis:\n${context}\n\n${prompt}`;
304
+ }
305
+ if (outputFormat === "json") {
306
+ userMessage += "\n\nRespond with a JSON object.";
307
+ }
308
+ const response = await client.chat.completions.create({
309
+ model,
310
+ max_tokens: maxTokens,
311
+ temperature,
312
+ messages: [
313
+ { role: "system", content: system },
314
+ { role: "user", content: userMessage },
315
+ ],
316
+ });
317
+ const content = response.choices[0]?.message?.content || "";
318
+ // Try to parse JSON if requested
319
+ let parsed;
320
+ if (outputFormat === "json") {
321
+ try {
322
+ parsed = JSON.parse(content);
323
+ }
324
+ catch {
325
+ // If JSON parsing fails, treat as text
326
+ }
327
+ }
328
+ return {
329
+ type: parsed ? "json" : "text",
330
+ content,
331
+ parsed,
332
+ source: `ai:openai-text:${model}`,
333
+ metadata: {
334
+ model,
335
+ prompt,
336
+ temperature,
337
+ usage: response.usage,
338
+ },
339
+ };
340
+ },
341
+ };
342
+ }
343
+ // Named export alias for default
344
+ export { openai };
345
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@teamflojo/floimg-openai",
3
+ "version": "0.1.0",
4
+ "description": "OpenAI image generation, vision, and text providers for floimg",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "dev": "tsc --watch",
22
+ "typecheck": "tsc --noEmit",
23
+ "clean": "rm -rf dist",
24
+ "prepublishOnly": "npm run build",
25
+ "test": "vitest --run"
26
+ },
27
+ "keywords": [
28
+ "floimg",
29
+ "openai",
30
+ "dall-e",
31
+ "gpt-4",
32
+ "image-generation",
33
+ "vision",
34
+ "ai"
35
+ ],
36
+ "author": "Brett Cooke",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/TeamFlojo/floimg.git",
41
+ "directory": "packages/floimg-openai"
42
+ },
43
+ "peerDependencies": {
44
+ "@teamflojo/floimg": "^0.2.0"
45
+ },
46
+ "dependencies": {
47
+ "openai": "^4.76.0"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.10.2",
51
+ "@teamflojo/floimg": "workspace:*",
52
+ "typescript": "^5.7.2",
53
+ "vitest": "^2.1.8"
54
+ },
55
+ "engines": {
56
+ "node": ">=18.0.0"
57
+ }
58
+ }