@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.
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +345 -0
- package/dist/index.js.map +1 -0
- package/package.json +58 -0
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|