@basementstudio/sanity-ai-image-plugin 0.0.0 → 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/README.md +281 -257
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/presets/article-featured-image.d.ts +3 -0
- package/dist/presets/article-featured-image.d.ts.map +1 -0
- package/dist/presets/article-featured-image.js +17 -0
- package/dist/presets/article-featured-image.js.map +1 -0
- package/dist/server/constants.d.ts +6 -0
- package/dist/server/constants.d.ts.map +1 -0
- package/{src/server/constants.ts → dist/server/constants.js} +17 -20
- package/dist/server/constants.js.map +1 -0
- package/dist/server/handle-request.d.ts +5 -0
- package/dist/server/handle-request.d.ts.map +1 -0
- package/dist/server/handle-request.js +122 -0
- package/dist/server/handle-request.js.map +1 -0
- package/dist/server/types.d.ts +28 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils.d.ts +50 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/utils.js +274 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -0
- package/dist/studio/components/asset-source.d.ts +4 -0
- package/dist/studio/components/asset-source.d.ts.map +1 -0
- package/dist/studio/components/asset-source.js +163 -0
- package/dist/studio/components/asset-source.js.map +1 -0
- package/dist/studio/components/generate-button-input.d.ts +8 -0
- package/dist/studio/components/generate-button-input.d.ts.map +1 -0
- package/dist/studio/components/generate-button-input.js +186 -0
- package/dist/studio/components/generate-button-input.js.map +1 -0
- package/dist/studio/components/input-router.d.ts +7 -0
- package/dist/studio/components/input-router.d.ts.map +1 -0
- package/dist/studio/components/input-router.js +21 -0
- package/dist/studio/components/input-router.js.map +1 -0
- package/dist/studio/files.d.ts +9 -0
- package/dist/studio/files.d.ts.map +1 -0
- package/dist/studio/files.js +86 -0
- package/dist/studio/files.js.map +1 -0
- package/dist/studio/plugin.d.ts +3 -0
- package/dist/studio/plugin.d.ts.map +1 -0
- package/dist/studio/plugin.js +47 -0
- package/dist/studio/plugin.js.map +1 -0
- package/dist/studio/settings/schema.d.ts +8 -0
- package/dist/studio/settings/schema.d.ts.map +1 -0
- package/dist/studio/settings/schema.js +110 -0
- package/dist/studio/settings/schema.js.map +1 -0
- package/dist/studio/settings/tool.d.ts +3 -0
- package/dist/studio/settings/tool.d.ts.map +1 -0
- package/dist/studio/settings/tool.js +292 -0
- package/dist/studio/settings/tool.js.map +1 -0
- package/dist/studio/settings-data.d.ts +24 -0
- package/dist/studio/settings-data.d.ts.map +1 -0
- package/dist/studio/settings-data.js +99 -0
- package/dist/studio/settings-data.js.map +1 -0
- package/dist/studio/shared-secret.d.ts +9 -0
- package/dist/studio/shared-secret.d.ts.map +1 -0
- package/dist/studio/shared-secret.js +37 -0
- package/dist/studio/shared-secret.js.map +1 -0
- package/dist/utils/config.d.ts +3 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +41 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/context-fields.d.ts +16 -0
- package/dist/utils/context-fields.d.ts.map +1 -0
- package/dist/utils/context-fields.js +104 -0
- package/dist/utils/context-fields.js.map +1 -0
- package/dist/utils/document-paths.d.ts +10 -0
- package/dist/utils/document-paths.d.ts.map +1 -0
- package/dist/utils/document-paths.js +33 -0
- package/dist/utils/document-paths.js.map +1 -0
- package/dist/utils/models.d.ts +22 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +76 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/prompts.d.ts +2 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +7 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shared.d.ts +82 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +13 -0
- package/dist/utils/shared.js.map +1 -0
- package/package.json +53 -47
- package/src/index.ts +0 -23
- package/src/presets/article-featured-image.ts +0 -23
- package/src/server/handle-request.ts +0 -207
- package/src/server/types.ts +0 -30
- package/src/server/utils.ts +0 -395
- package/src/server.ts +0 -14
- package/src/studio/components/asset-source.tsx +0 -297
- package/src/studio/components/generate-button-input.tsx +0 -380
- package/src/studio/components/input-router.tsx +0 -41
- package/src/studio/files.ts +0 -114
- package/src/studio/plugin.tsx +0 -54
- package/src/studio/settings/schema.ts +0 -122
- package/src/studio/settings/tool.tsx +0 -587
- package/src/studio/settings-data.ts +0 -172
- package/src/utils/config.ts +0 -55
- package/src/utils/context-fields.ts +0 -172
- package/src/utils/document-paths.ts +0 -51
- package/src/utils/models.ts +0 -126
- package/src/utils/prompts.ts +0 -6
- package/src/utils/shared.ts +0 -88
package/package.json
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
2
|
"name": "@basementstudio/sanity-ai-image-plugin",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"packageManager": "bun@1.3.7",
|
|
6
6
|
"description": "Portable Sanity Studio plugin and server helper for AI image generation.",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"sideEffects": false,
|
|
9
|
-
"files": [
|
|
10
|
-
"
|
|
11
|
-
"README.md"
|
|
12
|
-
],
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./server": {
|
|
22
|
+
"types": "./dist/server.d.ts",
|
|
23
|
+
"import": "./dist/server.js",
|
|
24
|
+
"default": "./dist/server.js"
|
|
25
|
+
},
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
26
28
|
"scripts": {
|
|
27
29
|
"build": "tsc -p tsconfig.build.json",
|
|
28
30
|
"check": "tsc -p tsconfig.json --noEmit",
|
|
@@ -33,35 +35,39 @@
|
|
|
33
35
|
"version-canary": "changeset version --snapshot canary",
|
|
34
36
|
"release-canary": "changeset publish --tag canary --no-git-tag"
|
|
35
37
|
},
|
|
36
|
-
"keywords": [
|
|
37
|
-
"sanity",
|
|
38
|
-
"sanity-plugin",
|
|
39
|
-
"gemini",
|
|
40
|
-
"image-generation",
|
|
41
|
-
"ai-image-plugin"
|
|
42
|
-
],
|
|
43
|
-
"peerDependencies": {
|
|
44
|
-
"@sanity/ui": "^
|
|
45
|
-
"react": "^
|
|
46
|
-
"react-dom": "^
|
|
47
|
-
"sanity": "^
|
|
48
|
-
},
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
"keywords": [
|
|
39
|
+
"sanity",
|
|
40
|
+
"sanity-plugin",
|
|
41
|
+
"gemini",
|
|
42
|
+
"image-generation",
|
|
43
|
+
"ai-image-plugin"
|
|
44
|
+
],
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@sanity/ui": "^3.1.13",
|
|
47
|
+
"react": "^19.2.0",
|
|
48
|
+
"react-dom": "^19.2.0",
|
|
49
|
+
"sanity": "^5.0.0"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=20.19 <22 || >=22.12"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@ai-sdk/google": "^3",
|
|
56
|
+
"@ai-sdk/openai": "^3",
|
|
57
|
+
"@sanity/studio-secrets": "^4.0.2",
|
|
58
|
+
"ai": "^6"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
55
61
|
"@sanity/ui": "^3.1.14",
|
|
56
62
|
"@changesets/changelog-github": "^0.5.2",
|
|
57
63
|
"@changesets/cli": "^2.29.8",
|
|
58
64
|
"@types/bun": "^1.3.6",
|
|
59
65
|
"@types/node": "^20.19.30",
|
|
60
66
|
"@types/react": "^19.2.9",
|
|
61
|
-
"@types/react-dom": "^19.2.3",
|
|
62
|
-
"react": "^19.2.4",
|
|
63
|
-
"react-dom": "^19.2.4",
|
|
64
|
-
"sanity": "^5.6.0",
|
|
65
|
-
"typescript": "^5.9.3"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
67
|
+
"@types/react-dom": "^19.2.3",
|
|
68
|
+
"react": "^19.2.4",
|
|
69
|
+
"react-dom": "^19.2.4",
|
|
70
|
+
"sanity": "^5.6.0",
|
|
71
|
+
"typescript": "^5.9.3"
|
|
72
|
+
}
|
|
73
|
+
}
|
package/src/index.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
DEFAULT_API_ENDPOINT,
|
|
3
|
-
DEFAULT_ASSET_SOURCE_TARGET_ID,
|
|
4
|
-
MAX_REFERENCE_IMAGES,
|
|
5
|
-
SETTINGS_DOCUMENT_ID,
|
|
6
|
-
SETTINGS_SCHEMA_TYPE,
|
|
7
|
-
SETTINGS_TOOL_NAME,
|
|
8
|
-
SETTINGS_TOOL_TITLE,
|
|
9
|
-
SOURCE_NAME,
|
|
10
|
-
SOURCE_TITLE,
|
|
11
|
-
type AssetSourceTarget,
|
|
12
|
-
type GenerateButtonTarget,
|
|
13
|
-
type PluginOptions,
|
|
14
|
-
type SettingsTargetConfigValue,
|
|
15
|
-
type SettingsValue,
|
|
16
|
-
type StoredImage,
|
|
17
|
-
} from "./utils/shared";
|
|
18
|
-
export {
|
|
19
|
-
SUPPORTED_AI_IMAGE_MODELS,
|
|
20
|
-
type SupportedAiImageModelId,
|
|
21
|
-
} from "./utils/models";
|
|
22
|
-
export { createArticleFeaturedImageTarget } from "./presets/article-featured-image";
|
|
23
|
-
export { aiImagePlugin } from "./studio/plugin";
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { GenerateButtonTarget } from "../utils/shared"
|
|
2
|
-
|
|
3
|
-
export function createArticleFeaturedImageTarget(
|
|
4
|
-
options: Partial<Omit<GenerateButtonTarget, "type">> = {}
|
|
5
|
-
): GenerateButtonTarget {
|
|
6
|
-
return {
|
|
7
|
-
id: options.id || "article-featured-image",
|
|
8
|
-
type: "generateButton",
|
|
9
|
-
title: options.title || "Article Featured Image",
|
|
10
|
-
description:
|
|
11
|
-
options.description ||
|
|
12
|
-
"Adds a Generate button that combines shared art direction, article context, and an optional editor prompt.",
|
|
13
|
-
dialogTitle: options.dialogTitle || "Generate Featured Image",
|
|
14
|
-
documentType: options.documentType || "article",
|
|
15
|
-
fieldPath: options.fieldPath || "featuredImage",
|
|
16
|
-
promptLabel: options.promptLabel || "Custom prompt",
|
|
17
|
-
promptPlaceholder:
|
|
18
|
-
options.promptPlaceholder ||
|
|
19
|
-
"Optional custom instructions for this article image.",
|
|
20
|
-
suggestedContextFieldPaths:
|
|
21
|
-
options.suggestedContextFieldPaths || ["title", "excerpt"],
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isSupportedAiImageModelId,
|
|
3
|
-
resolveAllowedAiImageModel,
|
|
4
|
-
SUPPORTED_AI_IMAGE_MODELS,
|
|
5
|
-
} from "../utils/models";
|
|
6
|
-
import {
|
|
7
|
-
generateImageWithModel,
|
|
8
|
-
getErrorMessage,
|
|
9
|
-
getErrorStatusCode,
|
|
10
|
-
getFormRequestPayload,
|
|
11
|
-
getMissingApiKeyErrorMessage,
|
|
12
|
-
getProviderApiKey,
|
|
13
|
-
getProviderDisplayName,
|
|
14
|
-
getReferenceImageValidationError,
|
|
15
|
-
getSameOriginValidationError,
|
|
16
|
-
isMultipartFormData,
|
|
17
|
-
jsonResponse,
|
|
18
|
-
parseHeaderByteLength,
|
|
19
|
-
resolveRequestOptions,
|
|
20
|
-
} from "./utils";
|
|
21
|
-
import type { RequestOptions, SuccessResponse } from "./types";
|
|
22
|
-
export {
|
|
23
|
-
DEFAULT_MAX_REFERENCE_FILE_BYTES,
|
|
24
|
-
DEFAULT_MODEL,
|
|
25
|
-
DEFAULT_PROVIDER_API_URL,
|
|
26
|
-
SUPPORTED_REFERENCE_IMAGE_TYPES,
|
|
27
|
-
} from "./constants";
|
|
28
|
-
export type { RequestOptions, SuccessResponse } from "./types";
|
|
29
|
-
|
|
30
|
-
export async function handleAiImageRequest(
|
|
31
|
-
request: Request,
|
|
32
|
-
options: RequestOptions = {},
|
|
33
|
-
): Promise<Response> {
|
|
34
|
-
let requestOptions: ReturnType<typeof resolveRequestOptions>;
|
|
35
|
-
|
|
36
|
-
// Normalize server config up front so the rest of the handler can assume a
|
|
37
|
-
// single, fully-resolved set of limits and model choices.
|
|
38
|
-
try {
|
|
39
|
-
requestOptions = resolveRequestOptions(options);
|
|
40
|
-
} catch (error) {
|
|
41
|
-
return jsonResponse(
|
|
42
|
-
{
|
|
43
|
-
error:
|
|
44
|
-
getErrorMessage(error) ||
|
|
45
|
-
"AI Image Plugin server configuration is invalid.",
|
|
46
|
-
},
|
|
47
|
-
500,
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Reject browser requests that do not come from the same Sanity Studio
|
|
52
|
-
// origin when same-origin enforcement is enabled.
|
|
53
|
-
if (requestOptions.enforceSameOrigin) {
|
|
54
|
-
const sameOriginError = getSameOriginValidationError(request);
|
|
55
|
-
|
|
56
|
-
if (sameOriginError) {
|
|
57
|
-
return jsonResponse(
|
|
58
|
-
{
|
|
59
|
-
error: sameOriginError.error,
|
|
60
|
-
},
|
|
61
|
-
sameOriginError.status,
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// The endpoint only accepts multipart form submissions because prompt/model
|
|
67
|
-
// metadata and uploaded reference images arrive together.
|
|
68
|
-
if (!isMultipartFormData(request.headers.get("content-type"))) {
|
|
69
|
-
return jsonResponse(
|
|
70
|
-
{
|
|
71
|
-
error: "AI Image Plugin requires a multipart/form-data request.",
|
|
72
|
-
},
|
|
73
|
-
415,
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Fail early on obviously oversized requests before parsing the body.
|
|
78
|
-
const contentLength = parseHeaderByteLength(
|
|
79
|
-
request.headers.get("content-length"),
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
contentLength !== null &&
|
|
84
|
-
contentLength > requestOptions.maxTotalReferenceBytes
|
|
85
|
-
) {
|
|
86
|
-
return jsonResponse(
|
|
87
|
-
{
|
|
88
|
-
error: `AI Image Plugin requests cannot exceed ${requestOptions.maxTotalReferenceBytes} bytes.`,
|
|
89
|
-
},
|
|
90
|
-
413,
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
let formData: FormData;
|
|
95
|
-
|
|
96
|
-
// Parse the multipart payload into the prompt, optional model override, and
|
|
97
|
-
// the capped list of uploaded reference images.
|
|
98
|
-
try {
|
|
99
|
-
formData = await request.formData();
|
|
100
|
-
} catch {
|
|
101
|
-
return jsonResponse(
|
|
102
|
-
{
|
|
103
|
-
error: "AI Image Plugin could not read the upload payload.",
|
|
104
|
-
},
|
|
105
|
-
400,
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const { prompt, referenceImages, requestedModel } = getFormRequestPayload(
|
|
110
|
-
formData,
|
|
111
|
-
requestOptions.maxReferences,
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
if (!prompt) {
|
|
115
|
-
return jsonResponse({ error: "Prompt is required." }, 400);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Resolve the effective model, then make sure it is both supported by the
|
|
119
|
-
// plugin and allowed by this installation's server config.
|
|
120
|
-
const modelId = requestedModel || requestOptions.defaultModel;
|
|
121
|
-
|
|
122
|
-
if (!isSupportedAiImageModelId(modelId)) {
|
|
123
|
-
return jsonResponse(
|
|
124
|
-
{
|
|
125
|
-
error: `AI Image Plugin does not support the model "${modelId}". Supported models are: ${SUPPORTED_AI_IMAGE_MODELS.join(", ")}.`,
|
|
126
|
-
},
|
|
127
|
-
400,
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (!requestOptions.allowedModels.includes(modelId)) {
|
|
132
|
-
return jsonResponse(
|
|
133
|
-
{
|
|
134
|
-
error: `AI Image Plugin does not allow the model "${modelId}" for this installation.`,
|
|
135
|
-
},
|
|
136
|
-
400,
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const selectedModel = resolveAllowedAiImageModel(
|
|
141
|
-
modelId,
|
|
142
|
-
requestOptions.allowedModels,
|
|
143
|
-
);
|
|
144
|
-
const referenceImageError = getReferenceImageValidationError({
|
|
145
|
-
maxReferenceFileBytes: requestOptions.maxReferenceFileBytes,
|
|
146
|
-
maxTotalReferenceBytes: requestOptions.maxTotalReferenceBytes,
|
|
147
|
-
model: selectedModel,
|
|
148
|
-
referenceImages,
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
if (referenceImageError) {
|
|
152
|
-
return jsonResponse(
|
|
153
|
-
{
|
|
154
|
-
error: referenceImageError.error,
|
|
155
|
-
},
|
|
156
|
-
referenceImageError.status,
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Pick the provider credentials that match the selected model family.
|
|
161
|
-
const apiKey = getProviderApiKey(selectedModel, options);
|
|
162
|
-
|
|
163
|
-
if (!apiKey) {
|
|
164
|
-
return jsonResponse(
|
|
165
|
-
{
|
|
166
|
-
error: getMissingApiKeyErrorMessage(selectedModel),
|
|
167
|
-
},
|
|
168
|
-
500,
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Delegate the actual image generation call and translate provider failures
|
|
173
|
-
// into a stable API response shape for the Studio client.
|
|
174
|
-
try {
|
|
175
|
-
const generatedImage = await generateImageWithModel({
|
|
176
|
-
apiKey,
|
|
177
|
-
model: selectedModel,
|
|
178
|
-
prompt,
|
|
179
|
-
referenceImages,
|
|
180
|
-
...(options.geminiApiUrl ? { geminiApiUrl: options.geminiApiUrl } : {}),
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
if (!generatedImage) {
|
|
184
|
-
return jsonResponse(
|
|
185
|
-
{
|
|
186
|
-
error:
|
|
187
|
-
"AI Image Plugin returned a response, but no generated image was found.",
|
|
188
|
-
},
|
|
189
|
-
502,
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return jsonResponse({
|
|
194
|
-
...generatedImage,
|
|
195
|
-
model: selectedModel,
|
|
196
|
-
} satisfies SuccessResponse);
|
|
197
|
-
} catch (error) {
|
|
198
|
-
return jsonResponse(
|
|
199
|
-
{
|
|
200
|
-
error:
|
|
201
|
-
getErrorMessage(error) ||
|
|
202
|
-
`AI Image Plugin could not reach ${getProviderDisplayName(selectedModel)}.`,
|
|
203
|
-
},
|
|
204
|
-
getErrorStatusCode(error) || 502,
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
}
|
package/src/server/types.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { SupportedAiImageModelId } from "../utils/models";
|
|
2
|
-
|
|
3
|
-
export type GenerateImageFunction = (options: Record<string, unknown>) => Promise<{
|
|
4
|
-
image?: unknown;
|
|
5
|
-
}>;
|
|
6
|
-
|
|
7
|
-
export type GeneratedImagePayload = {
|
|
8
|
-
base64?: string;
|
|
9
|
-
mediaType?: string;
|
|
10
|
-
uint8Array?: Uint8Array;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type SuccessResponse = {
|
|
14
|
-
data: string;
|
|
15
|
-
mimeType: string;
|
|
16
|
-
model: string;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export type RequestOptions = {
|
|
20
|
-
allowedModels?: SupportedAiImageModelId[];
|
|
21
|
-
apiKey?: string;
|
|
22
|
-
enforceSameOrigin?: boolean;
|
|
23
|
-
geminiApiUrl?: string;
|
|
24
|
-
googleApiKey?: string;
|
|
25
|
-
maxReferenceFileBytes?: number;
|
|
26
|
-
maxReferences?: number;
|
|
27
|
-
maxTotalReferenceBytes?: number;
|
|
28
|
-
model?: SupportedAiImageModelId;
|
|
29
|
-
openAiApiKey?: string;
|
|
30
|
-
};
|