@teamflojo/floimg 0.6.0 → 0.6.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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/upload.d.ts +0 -3
- package/dist/cli/commands/upload.d.ts.map +0 -1
- package/dist/cli/commands/upload.js +0 -59
- package/dist/cli/commands/upload.js.map +0 -1
- package/dist/providers/ai/index.d.ts +0 -7
- package/dist/providers/ai/index.d.ts.map +0 -1
- package/dist/providers/ai/index.js +0 -7
- package/dist/providers/ai/index.js.map +0 -1
- package/dist/providers/ai/openai.d.ts +0 -121
- package/dist/providers/ai/openai.d.ts.map +0 -1
- package/dist/providers/ai/openai.js +0 -367
- package/dist/providers/ai/openai.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { FloImg } from "./core/client.js";
|
|
|
2
2
|
import { FluentBuilder, createFluent } from "./core/fluent.js";
|
|
3
3
|
import type { FloimgConfig } from "./core/types.js";
|
|
4
4
|
import type { FluentSource } from "./core/fluent.js";
|
|
5
|
-
export type { FloimgConfig, ImageBlob, MimeType, ImageGenerator, TransformProvider, StoreProvider, GenerateInput, TransformInput, UploadInput, UploadResult, Pipeline, PipelineStep, PipelineResult, ParameterSchema, GeneratorSchema, TransformOperationSchema, SaveProviderSchema, ClientCapabilities, DataBlob, NodeOutput, VisionProvider, TextProvider, VisionProviderSchema, TextProviderSchema, VisionInput, TextGenerateInput, SvgProvider, AiProvider, } from "./core/types.js";
|
|
5
|
+
export type { FloimgConfig, ImageBlob, MimeType, ImageGenerator, TransformProvider, StoreProvider, GenerateInput, TransformInput, UploadInput, UploadResult, Pipeline, PipelineStep, PipelineResult, ParameterSchema, GeneratorSchema, TransformOperationSchema, SaveProviderSchema, ClientCapabilities, DataBlob, NodeOutput, VisionProvider, TextProvider, VisionProviderSchema, TextProviderSchema, VisionInput, TextGenerateInput, SaveProvider, SaveResult, SvgProvider, AiProvider, } from "./core/types.js";
|
|
6
6
|
export { isImageBlob, isDataBlob } from "./core/types.js";
|
|
7
7
|
export { FloimgError, ProviderNotFoundError, ConfigurationError, TransformError, UploadError, GenerationError, } from "./core/errors.js";
|
|
8
8
|
export { ShapesProvider } from "./providers/svg/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,EAEd,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAEjB,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CA2B9D;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM;;;CAA+B,CAAC;AAGnD,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,EAEd,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAEjB,YAAY,EACZ,UAAU,EAEV,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CA2B9D;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM;;;CAA+B,CAAC;AAGnD,eAAe,YAAY,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0C/D,qBAAqB;AACrB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1D,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,wBAAwB;AACxB,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAG/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY,CAAC,SAAuB,EAAE;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,+BAA+B;IAC/B,MAAM,CAAC,iBAAiB,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IAE/C,wCAAwC;IACxC,MAAM,CAAC,yBAAyB,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAE/D,0BAA0B;IAC1B,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,CAAC,oBAAoB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1D,+DAA+D;IAC/D,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACvD,MAAM,CAAC,oBAAoB,CACzB,IAAI,cAAc,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM;YAC7B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM;YAC7B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ;YACjC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW;SACxC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0BAA0B;AAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AAGvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;AAEnD,iBAAiB;AACjB,eAAe,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAuDtB,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { readFile } from "fs/promises";
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
import createClient from "../../index.js";
|
|
4
|
-
import { loadConfig, mergeCliArgs } from "../../config/loader.js";
|
|
5
|
-
export const uploadCommand = new Command("upload")
|
|
6
|
-
.description("Upload an image to cloud storage")
|
|
7
|
-
.requiredOption("--in <path>", "Input file path")
|
|
8
|
-
.requiredOption("--key <key>", "Storage key/path")
|
|
9
|
-
.option("--provider <name>", "Storage provider name (overrides config)")
|
|
10
|
-
.option("--bucket <name>", "S3 bucket name (overrides config)")
|
|
11
|
-
.option("--region <region>", "S3 region (overrides config)")
|
|
12
|
-
.option("--config <path>", "Path to config file")
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
try {
|
|
15
|
-
let config = await loadConfig(options.config);
|
|
16
|
-
// Merge CLI arguments (they have highest priority)
|
|
17
|
-
config = mergeCliArgs(config, {
|
|
18
|
-
provider: options.provider,
|
|
19
|
-
bucket: options.bucket,
|
|
20
|
-
region: options.region,
|
|
21
|
-
});
|
|
22
|
-
const client = createClient(config);
|
|
23
|
-
// Read input file
|
|
24
|
-
const inputBytes = await readFile(options.in);
|
|
25
|
-
// Detect MIME type from file extension
|
|
26
|
-
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
27
|
-
let mime = "image/png";
|
|
28
|
-
if (ext === "svg")
|
|
29
|
-
mime = "image/svg+xml";
|
|
30
|
-
else if (ext === "jpg" || ext === "jpeg")
|
|
31
|
-
mime = "image/jpeg";
|
|
32
|
-
else if (ext === "webp")
|
|
33
|
-
mime = "image/webp";
|
|
34
|
-
else if (ext === "avif")
|
|
35
|
-
mime = "image/avif";
|
|
36
|
-
const inputBlob = {
|
|
37
|
-
bytes: inputBytes,
|
|
38
|
-
mime,
|
|
39
|
-
};
|
|
40
|
-
const result = await client.upload({
|
|
41
|
-
blob: inputBlob,
|
|
42
|
-
key: options.key,
|
|
43
|
-
provider: options.provider,
|
|
44
|
-
});
|
|
45
|
-
console.log(`Image uploaded successfully!`);
|
|
46
|
-
console.log(`Key: ${result.key}`);
|
|
47
|
-
if (result.url) {
|
|
48
|
-
console.log(`URL: ${result.url}`);
|
|
49
|
-
}
|
|
50
|
-
if (result.etag) {
|
|
51
|
-
console.log(`ETag: ${result.etag}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
console.error("Error uploading image:", error instanceof Error ? error.message : error);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=upload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGlE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kCAAkC,CAAC;KAC/C,cAAc,CAAC,aAAa,EAAE,iBAAiB,CAAC;KAChD,cAAc,CAAC,aAAa,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,mDAAmD;QACnD,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9C,uCAAuC;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QACvD,IAAI,IAAI,GAAa,WAAW,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,eAAe,CAAC;aACrC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACzD,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACxC,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;QAE7C,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,UAAU;YACjB,IAAI;SACL,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { OpenAIGenerator } from "./openai.js";
|
|
2
|
-
export type { OpenAIConfig, OpenAIGenerateParams } from "./openai.js";
|
|
3
|
-
export { OpenAIVisionProvider } from "./openai.js";
|
|
4
|
-
export type { OpenAIVisionConfig, OpenAIVisionParams } from "./openai.js";
|
|
5
|
-
export { OpenAITextProvider } from "./openai.js";
|
|
6
|
-
export type { OpenAITextConfig, OpenAITextParams } from "./openai.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ai/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/ai/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,0BAA0B;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import type { ImageGenerator, ImageBlob, DataBlob, GeneratorSchema, VisionProvider, VisionProviderSchema, TextProvider, TextProviderSchema } from "../../core/types.js";
|
|
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 generator
|
|
18
|
-
*/
|
|
19
|
-
export declare const openaiSchema: GeneratorSchema;
|
|
20
|
-
/**
|
|
21
|
-
* OpenAI DALL-E image generator
|
|
22
|
-
*
|
|
23
|
-
* Generates images using OpenAI's DALL-E models (DALL-E 2 or DALL-E 3).
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const generator = new OpenAIGenerator({ apiKey: process.env.OPENAI_API_KEY });
|
|
28
|
-
* const image = await generator.generate({
|
|
29
|
-
* prompt: "A purple gradient background for a presentation slide",
|
|
30
|
-
* model: "dall-e-3",
|
|
31
|
-
* size: "1792x1024",
|
|
32
|
-
* quality: "hd"
|
|
33
|
-
* });
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare class OpenAIGenerator implements ImageGenerator {
|
|
37
|
-
readonly name = "openai";
|
|
38
|
-
readonly schema: GeneratorSchema;
|
|
39
|
-
private client;
|
|
40
|
-
private config;
|
|
41
|
-
constructor(config?: OpenAIConfig);
|
|
42
|
-
generate(params: Record<string, unknown>): Promise<ImageBlob>;
|
|
43
|
-
}
|
|
44
|
-
export interface OpenAIVisionConfig {
|
|
45
|
-
apiKey?: string;
|
|
46
|
-
model?: "gpt-4o" | "gpt-4o-mini" | "gpt-4-turbo";
|
|
47
|
-
maxTokens?: number;
|
|
48
|
-
}
|
|
49
|
-
export interface OpenAIVisionParams {
|
|
50
|
-
prompt?: string;
|
|
51
|
-
outputFormat?: "text" | "json";
|
|
52
|
-
maxTokens?: number;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Schema for the OpenAI Vision provider
|
|
56
|
-
*/
|
|
57
|
-
export declare const openaiVisionSchema: VisionProviderSchema;
|
|
58
|
-
/**
|
|
59
|
-
* OpenAI Vision provider for image analysis using GPT-4V
|
|
60
|
-
*
|
|
61
|
-
* Analyzes images and returns text or structured JSON descriptions.
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const vision = new OpenAIVisionProvider({ apiKey: process.env.OPENAI_API_KEY });
|
|
66
|
-
* const result = await vision.analyze(imageBlob, {
|
|
67
|
-
* prompt: "What objects are in this image?",
|
|
68
|
-
* outputFormat: "json"
|
|
69
|
-
* });
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
export declare class OpenAIVisionProvider implements VisionProvider {
|
|
73
|
-
readonly name = "openai-vision";
|
|
74
|
-
readonly schema: VisionProviderSchema;
|
|
75
|
-
private client;
|
|
76
|
-
private config;
|
|
77
|
-
constructor(config?: OpenAIVisionConfig);
|
|
78
|
-
analyze(input: ImageBlob, params: Record<string, unknown>): Promise<DataBlob>;
|
|
79
|
-
}
|
|
80
|
-
export interface OpenAITextConfig {
|
|
81
|
-
apiKey?: string;
|
|
82
|
-
model?: "gpt-4o" | "gpt-4o-mini" | "gpt-4-turbo" | "gpt-3.5-turbo";
|
|
83
|
-
maxTokens?: number;
|
|
84
|
-
temperature?: number;
|
|
85
|
-
}
|
|
86
|
-
export interface OpenAITextParams {
|
|
87
|
-
prompt: string;
|
|
88
|
-
systemPrompt?: string;
|
|
89
|
-
context?: string;
|
|
90
|
-
outputFormat?: "text" | "json";
|
|
91
|
-
maxTokens?: number;
|
|
92
|
-
temperature?: number;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Schema for the OpenAI Text provider
|
|
96
|
-
*/
|
|
97
|
-
export declare const openaiTextSchema: TextProviderSchema;
|
|
98
|
-
/**
|
|
99
|
-
* OpenAI Text provider for text generation using GPT models
|
|
100
|
-
*
|
|
101
|
-
* Generates text for prompts, descriptions, code, and other content.
|
|
102
|
-
* Can chain with vision analysis by accepting context from previous steps.
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```typescript
|
|
106
|
-
* const text = new OpenAITextProvider({ apiKey: process.env.OPENAI_API_KEY });
|
|
107
|
-
* const result = await text.generate({
|
|
108
|
-
* prompt: "Write a haiku about this scene",
|
|
109
|
-
* context: "A serene mountain lake at sunset with mist rising",
|
|
110
|
-
* });
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
export declare class OpenAITextProvider implements TextProvider {
|
|
114
|
-
readonly name = "openai-text";
|
|
115
|
-
readonly schema: TextProviderSchema;
|
|
116
|
-
private client;
|
|
117
|
-
private config;
|
|
118
|
-
constructor(config?: OpenAITextConfig);
|
|
119
|
-
generate(params: Record<string, unknown>): Promise<DataBlob>;
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/ai/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
import OpenAI from "openai";
|
|
2
|
-
/**
|
|
3
|
-
* Schema for the OpenAI 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
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* OpenAI DALL-E image generator
|
|
48
|
-
*
|
|
49
|
-
* Generates images using OpenAI's DALL-E models (DALL-E 2 or DALL-E 3).
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* const generator = new OpenAIGenerator({ apiKey: process.env.OPENAI_API_KEY });
|
|
54
|
-
* const image = await generator.generate({
|
|
55
|
-
* prompt: "A purple gradient background for a presentation slide",
|
|
56
|
-
* model: "dall-e-3",
|
|
57
|
-
* size: "1792x1024",
|
|
58
|
-
* quality: "hd"
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
61
|
-
*/
|
|
62
|
-
export class OpenAIGenerator {
|
|
63
|
-
name = "openai";
|
|
64
|
-
schema = openaiSchema;
|
|
65
|
-
client;
|
|
66
|
-
config;
|
|
67
|
-
constructor(config = {}) {
|
|
68
|
-
this.config = config;
|
|
69
|
-
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
70
|
-
if (!apiKey) {
|
|
71
|
-
throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
|
|
72
|
-
}
|
|
73
|
-
this.client = new OpenAI({ apiKey });
|
|
74
|
-
}
|
|
75
|
-
async generate(params) {
|
|
76
|
-
const { prompt, model = this.config.model || "dall-e-3", size = "1024x1024", quality = this.config.quality || "standard", style = this.config.style || "vivid", n = 1, } = params;
|
|
77
|
-
if (!prompt) {
|
|
78
|
-
throw new Error("prompt is required for OpenAI image generation");
|
|
79
|
-
}
|
|
80
|
-
// DALL-E 3 only supports n=1
|
|
81
|
-
if (model === "dall-e-3" && n !== 1) {
|
|
82
|
-
throw new Error("DALL-E 3 only supports generating 1 image at a time (n=1)");
|
|
83
|
-
}
|
|
84
|
-
// DALL-E 3 has specific size constraints
|
|
85
|
-
if (model === "dall-e-3") {
|
|
86
|
-
const validSizes = ["1024x1024", "1024x1792", "1792x1024"];
|
|
87
|
-
if (!validSizes.includes(size)) {
|
|
88
|
-
throw new Error(`DALL-E 3 only supports sizes: ${validSizes.join(", ")}. Got: ${size}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// Generate image
|
|
92
|
-
const response = await this.client.images.generate({
|
|
93
|
-
model,
|
|
94
|
-
prompt,
|
|
95
|
-
size: size,
|
|
96
|
-
quality: model === "dall-e-3" ? quality : undefined,
|
|
97
|
-
style: model === "dall-e-3" ? style : undefined,
|
|
98
|
-
n,
|
|
99
|
-
response_format: "url", // Get URL first, then download
|
|
100
|
-
});
|
|
101
|
-
if (!response.data || response.data.length === 0) {
|
|
102
|
-
throw new Error("No image data returned from OpenAI");
|
|
103
|
-
}
|
|
104
|
-
const imageUrl = response.data[0].url;
|
|
105
|
-
if (!imageUrl) {
|
|
106
|
-
throw new Error("No image URL returned from OpenAI");
|
|
107
|
-
}
|
|
108
|
-
// Download the image
|
|
109
|
-
const imageResponse = await fetch(imageUrl);
|
|
110
|
-
if (!imageResponse.ok) {
|
|
111
|
-
throw new Error(`Failed to download image: ${imageResponse.statusText}`);
|
|
112
|
-
}
|
|
113
|
-
const arrayBuffer = await imageResponse.arrayBuffer();
|
|
114
|
-
const bytes = Buffer.from(arrayBuffer);
|
|
115
|
-
// Parse dimensions from size parameter
|
|
116
|
-
const [width, height] = size.split("x").map(Number);
|
|
117
|
-
return {
|
|
118
|
-
bytes,
|
|
119
|
-
mime: "image/png", // OpenAI always returns PNG
|
|
120
|
-
width,
|
|
121
|
-
height,
|
|
122
|
-
source: `ai:openai:${model}`,
|
|
123
|
-
metadata: {
|
|
124
|
-
prompt,
|
|
125
|
-
model,
|
|
126
|
-
quality,
|
|
127
|
-
style,
|
|
128
|
-
revisedPrompt: response.data[0].revised_prompt,
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Schema for the OpenAI Vision provider
|
|
135
|
-
*/
|
|
136
|
-
export const openaiVisionSchema = {
|
|
137
|
-
name: "openai-vision",
|
|
138
|
-
description: "Analyze images using OpenAI's GPT-4 Vision models",
|
|
139
|
-
parameters: {
|
|
140
|
-
prompt: {
|
|
141
|
-
type: "string",
|
|
142
|
-
title: "Prompt",
|
|
143
|
-
description: "What to analyze or ask about the image",
|
|
144
|
-
default: "Describe this image in detail.",
|
|
145
|
-
},
|
|
146
|
-
outputFormat: {
|
|
147
|
-
type: "string",
|
|
148
|
-
title: "Output Format",
|
|
149
|
-
description: "Response format: plain text or structured JSON",
|
|
150
|
-
enum: ["text", "json"],
|
|
151
|
-
default: "text",
|
|
152
|
-
},
|
|
153
|
-
maxTokens: {
|
|
154
|
-
type: "number",
|
|
155
|
-
title: "Max Tokens",
|
|
156
|
-
description: "Maximum tokens in the response",
|
|
157
|
-
default: 1000,
|
|
158
|
-
},
|
|
159
|
-
},
|
|
160
|
-
};
|
|
161
|
-
/**
|
|
162
|
-
* OpenAI Vision provider for image analysis using GPT-4V
|
|
163
|
-
*
|
|
164
|
-
* Analyzes images and returns text or structured JSON descriptions.
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* ```typescript
|
|
168
|
-
* const vision = new OpenAIVisionProvider({ apiKey: process.env.OPENAI_API_KEY });
|
|
169
|
-
* const result = await vision.analyze(imageBlob, {
|
|
170
|
-
* prompt: "What objects are in this image?",
|
|
171
|
-
* outputFormat: "json"
|
|
172
|
-
* });
|
|
173
|
-
* ```
|
|
174
|
-
*/
|
|
175
|
-
export class OpenAIVisionProvider {
|
|
176
|
-
name = "openai-vision";
|
|
177
|
-
schema = openaiVisionSchema;
|
|
178
|
-
client;
|
|
179
|
-
config;
|
|
180
|
-
constructor(config = {}) {
|
|
181
|
-
this.config = config;
|
|
182
|
-
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
183
|
-
if (!apiKey) {
|
|
184
|
-
throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
|
|
185
|
-
}
|
|
186
|
-
this.client = new OpenAI({ apiKey });
|
|
187
|
-
}
|
|
188
|
-
async analyze(input, params) {
|
|
189
|
-
const { prompt = "Describe this image in detail.", outputFormat = "text", maxTokens = this.config.maxTokens || 1000, } = params;
|
|
190
|
-
const model = this.config.model || "gpt-4o";
|
|
191
|
-
// Convert image to base64 data URL
|
|
192
|
-
const base64 = input.bytes.toString("base64");
|
|
193
|
-
const dataUrl = `data:${input.mime};base64,${base64}`;
|
|
194
|
-
// Build messages with image
|
|
195
|
-
const systemPrompt = outputFormat === "json"
|
|
196
|
-
? "You are a helpful assistant that analyzes images. Always respond with valid JSON."
|
|
197
|
-
: "You are a helpful assistant that analyzes images.";
|
|
198
|
-
const userPrompt = outputFormat === "json"
|
|
199
|
-
? `${prompt}\n\nRespond with a JSON object containing your analysis.`
|
|
200
|
-
: prompt;
|
|
201
|
-
const response = await this.client.chat.completions.create({
|
|
202
|
-
model,
|
|
203
|
-
max_tokens: maxTokens,
|
|
204
|
-
messages: [
|
|
205
|
-
{ role: "system", content: systemPrompt },
|
|
206
|
-
{
|
|
207
|
-
role: "user",
|
|
208
|
-
content: [
|
|
209
|
-
{ type: "text", text: userPrompt },
|
|
210
|
-
{
|
|
211
|
-
type: "image_url",
|
|
212
|
-
image_url: { url: dataUrl, detail: "auto" },
|
|
213
|
-
},
|
|
214
|
-
],
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
});
|
|
218
|
-
const content = response.choices[0]?.message?.content || "";
|
|
219
|
-
// Try to parse JSON if requested
|
|
220
|
-
let parsed;
|
|
221
|
-
if (outputFormat === "json") {
|
|
222
|
-
try {
|
|
223
|
-
parsed = JSON.parse(content);
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
// If JSON parsing fails, treat as text
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return {
|
|
230
|
-
type: parsed ? "json" : "text",
|
|
231
|
-
content,
|
|
232
|
-
parsed,
|
|
233
|
-
source: `ai:openai-vision:${model}`,
|
|
234
|
-
metadata: {
|
|
235
|
-
model,
|
|
236
|
-
prompt,
|
|
237
|
-
usage: response.usage,
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Schema for the OpenAI Text provider
|
|
244
|
-
*/
|
|
245
|
-
export const openaiTextSchema = {
|
|
246
|
-
name: "openai-text",
|
|
247
|
-
description: "Generate text using OpenAI's GPT models",
|
|
248
|
-
parameters: {
|
|
249
|
-
prompt: {
|
|
250
|
-
type: "string",
|
|
251
|
-
title: "Prompt",
|
|
252
|
-
description: "The prompt for text generation",
|
|
253
|
-
},
|
|
254
|
-
systemPrompt: {
|
|
255
|
-
type: "string",
|
|
256
|
-
title: "System Prompt",
|
|
257
|
-
description: "Optional system prompt to guide the model's behavior",
|
|
258
|
-
},
|
|
259
|
-
context: {
|
|
260
|
-
type: "string",
|
|
261
|
-
title: "Context",
|
|
262
|
-
description: "Optional context from a previous step (e.g., vision analysis)",
|
|
263
|
-
},
|
|
264
|
-
outputFormat: {
|
|
265
|
-
type: "string",
|
|
266
|
-
title: "Output Format",
|
|
267
|
-
description: "Response format: plain text or structured JSON",
|
|
268
|
-
enum: ["text", "json"],
|
|
269
|
-
default: "text",
|
|
270
|
-
},
|
|
271
|
-
maxTokens: {
|
|
272
|
-
type: "number",
|
|
273
|
-
title: "Max Tokens",
|
|
274
|
-
description: "Maximum tokens in the response",
|
|
275
|
-
default: 1000,
|
|
276
|
-
},
|
|
277
|
-
temperature: {
|
|
278
|
-
type: "number",
|
|
279
|
-
title: "Temperature",
|
|
280
|
-
description: "Creativity level (0-2)",
|
|
281
|
-
default: 0.7,
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
requiredParameters: ["prompt"],
|
|
285
|
-
};
|
|
286
|
-
/**
|
|
287
|
-
* OpenAI Text provider for text generation using GPT models
|
|
288
|
-
*
|
|
289
|
-
* Generates text for prompts, descriptions, code, and other content.
|
|
290
|
-
* Can chain with vision analysis by accepting context from previous steps.
|
|
291
|
-
*
|
|
292
|
-
* @example
|
|
293
|
-
* ```typescript
|
|
294
|
-
* const text = new OpenAITextProvider({ apiKey: process.env.OPENAI_API_KEY });
|
|
295
|
-
* const result = await text.generate({
|
|
296
|
-
* prompt: "Write a haiku about this scene",
|
|
297
|
-
* context: "A serene mountain lake at sunset with mist rising",
|
|
298
|
-
* });
|
|
299
|
-
* ```
|
|
300
|
-
*/
|
|
301
|
-
export class OpenAITextProvider {
|
|
302
|
-
name = "openai-text";
|
|
303
|
-
schema = openaiTextSchema;
|
|
304
|
-
client;
|
|
305
|
-
config;
|
|
306
|
-
constructor(config = {}) {
|
|
307
|
-
this.config = config;
|
|
308
|
-
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
309
|
-
if (!apiKey) {
|
|
310
|
-
throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.");
|
|
311
|
-
}
|
|
312
|
-
this.client = new OpenAI({ apiKey });
|
|
313
|
-
}
|
|
314
|
-
async generate(params) {
|
|
315
|
-
const { prompt, systemPrompt, context, outputFormat = "text", maxTokens = this.config.maxTokens || 1000, temperature = this.config.temperature || 0.7, } = params;
|
|
316
|
-
if (!prompt) {
|
|
317
|
-
throw new Error("prompt is required for OpenAI text generation");
|
|
318
|
-
}
|
|
319
|
-
const model = this.config.model || "gpt-4o";
|
|
320
|
-
// Build system message
|
|
321
|
-
let system = systemPrompt || "You are a helpful assistant.";
|
|
322
|
-
if (outputFormat === "json") {
|
|
323
|
-
system += " Always respond with valid JSON.";
|
|
324
|
-
}
|
|
325
|
-
// Build user message with optional context
|
|
326
|
-
let userMessage = prompt;
|
|
327
|
-
if (context) {
|
|
328
|
-
userMessage = `Context from previous analysis:\n${context}\n\n${prompt}`;
|
|
329
|
-
}
|
|
330
|
-
if (outputFormat === "json") {
|
|
331
|
-
userMessage += "\n\nRespond with a JSON object.";
|
|
332
|
-
}
|
|
333
|
-
const response = await this.client.chat.completions.create({
|
|
334
|
-
model,
|
|
335
|
-
max_tokens: maxTokens,
|
|
336
|
-
temperature,
|
|
337
|
-
messages: [
|
|
338
|
-
{ role: "system", content: system },
|
|
339
|
-
{ role: "user", content: userMessage },
|
|
340
|
-
],
|
|
341
|
-
});
|
|
342
|
-
const content = response.choices[0]?.message?.content || "";
|
|
343
|
-
// Try to parse JSON if requested
|
|
344
|
-
let parsed;
|
|
345
|
-
if (outputFormat === "json") {
|
|
346
|
-
try {
|
|
347
|
-
parsed = JSON.parse(content);
|
|
348
|
-
}
|
|
349
|
-
catch {
|
|
350
|
-
// If JSON parsing fails, treat as text
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
return {
|
|
354
|
-
type: parsed ? "json" : "text",
|
|
355
|
-
content,
|
|
356
|
-
parsed,
|
|
357
|
-
source: `ai:openai-text:${model}`,
|
|
358
|
-
metadata: {
|
|
359
|
-
model,
|
|
360
|
-
prompt,
|
|
361
|
-
temperature,
|
|
362
|
-
usage: response.usage,
|
|
363
|
-
},
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/ai/openai.ts"],"names":[],"mappings":"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"}
|