ai-chatbot/lib/ai/bltcy-image-models.ts
Your Name 0edd9872ea
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: add BLTCY Flux image providers
2026-04-18 10:29:30 +08:00

176 lines
5.2 KiB
TypeScript

export type BltcyImageModelKind = "flux-image-edit" | "flux-bfl-async-edit";
export type BltcyImageModelPreset = {
modelId: string;
displayName: string;
description: string;
kind: BltcyImageModelKind;
supportsVision: boolean;
supportsImageGen: boolean;
capabilities?: Record<string, any>;
defaultParams: Record<string, any>;
imageGenConfig: Record<string, any>;
sortOrder: number;
};
export const BLTCY_IMAGE_OPENAI_BASE_URL = "https://api.bltcy.ai/v1";
export const BLTCY_BFL_BASE_URL = "https://api.bltcy.ai";
export const BLTCY_FLUX_PRICE_PAGE_URL =
"https://api.bltcy.ai/models?category=%E7%BB%98%E5%9B%BE&provider=Flux";
export const BLTCY_FLUX_GENERATIONS_DOC_URL =
"https://gpt-best.apifox.cn/api-258068997";
export const BLTCY_FLUX_EDITS_DOC_URL =
"https://gpt-best.apifox.cn/api-303213093";
export const BLTCY_BFL_GET_RESULT_DOC_URL =
"https://gpt-best.apifox.cn/api-306433290";
export const BLTCY_BFL_FLUX_DEV_DOC_URL =
"https://gpt-best.apifox.cn/api-306433294";
export const BLTCY_BFL_FLUX_KONTEXT_DOC_URL =
"https://gpt-best.apifox.cn/api-306433308";
export const BLTCY_FLUX_PRICE_CHECKED_AT = "2026-04-18";
export const BLTCY_IMAGE_PROVIDER_PRESET = {
name: "柏拉图 Flux 图片编辑",
type: "openai-image" as const,
baseUrl: BLTCY_IMAGE_OPENAI_BASE_URL,
};
export const BLTCY_BFL_PROVIDER_PRESET = {
name: "柏拉图 BFL 异步编辑",
type: "bfl-image" as const,
baseUrl: BLTCY_BFL_BASE_URL,
};
const DEFAULT_IMAGE_CONFIG = {
maxImages: 1,
supportsSize: true,
supports1K: true,
supports2K: true,
supports4K: true,
supportsPromptExtend: false,
supportsNegativePrompt: false,
supportsWatermark: false,
supportsSeed: false,
creditCostPerImage: 0,
enableLoadingPlaceholder: true,
loadingColor: "cyan",
};
function fluxEditPreset(
sortOrder: number,
modelId: string,
displayName: string,
priceNote: string
): BltcyImageModelPreset {
return {
modelId,
displayName,
description: `${displayName},柏拉图 Flux OpenAI Images 兼容图片生成/编辑模型。${priceNote},实际计费以柏拉图价格页为准。`,
kind: "flux-image-edit",
supportsVision: true,
supportsImageGen: true,
capabilities: {
provider: "bltcy",
family: "flux",
apiFormat: "openai-images",
supportedModes: ["text-to-image", "image-edit"],
endpoints: {
generations: "/v1/images/generations",
edits: "/v1/images/edits",
},
maxReferenceImages: 1,
pricePage: BLTCY_FLUX_PRICE_PAGE_URL,
priceCheckedAt: BLTCY_FLUX_PRICE_CHECKED_AT,
},
defaultParams: {
provider: "bltcy",
family: "flux",
kind: "flux-image-edit",
apiFormat: "openai-images",
generationsEndpoint: "/v1/images/generations",
editsEndpoint: "/v1/images/edits",
docs: {
generations: BLTCY_FLUX_GENERATIONS_DOC_URL,
edits: BLTCY_FLUX_EDITS_DOC_URL,
},
pricePage: BLTCY_FLUX_PRICE_PAGE_URL,
priceCheckedAt: BLTCY_FLUX_PRICE_CHECKED_AT,
priceNote,
},
imageGenConfig: DEFAULT_IMAGE_CONFIG,
sortOrder,
};
}
function bflAsyncEditPreset(options: {
sortOrder: number;
modelId: string;
displayName: string;
endpoint: string;
priceNote: string;
}): BltcyImageModelPreset {
const { sortOrder, modelId, displayName, endpoint, priceNote } = options;
return {
modelId,
displayName,
description: `${displayName},柏拉图 BFL 官方格式异步图片编辑模型。${priceNote},实际计费以柏拉图价格页为准。`,
kind: "flux-bfl-async-edit",
supportsVision: true,
supportsImageGen: true,
capabilities: {
provider: "bltcy",
family: "flux",
apiFormat: "bfl-official",
asyncTask: true,
supportedModes: ["text-to-image", "image-edit"],
endpoints: {
submit: endpoint,
getResult: "/bfl/v1/get_result",
},
maxReferenceImages: 1,
pricePage: BLTCY_FLUX_PRICE_PAGE_URL,
priceCheckedAt: BLTCY_FLUX_PRICE_CHECKED_AT,
},
defaultParams: {
provider: "bltcy",
family: "flux",
kind: "flux-bfl-async-edit",
apiFormat: "bfl-official",
asyncTask: true,
submitEndpoint: endpoint,
getResultEndpoint: "/bfl/v1/get_result",
docs: {
submit: BLTCY_BFL_FLUX_KONTEXT_DOC_URL,
getResult: BLTCY_BFL_GET_RESULT_DOC_URL,
},
pricePage: BLTCY_FLUX_PRICE_PAGE_URL,
priceCheckedAt: BLTCY_FLUX_PRICE_CHECKED_AT,
priceNote,
},
imageGenConfig: DEFAULT_IMAGE_CONFIG,
sortOrder,
};
}
export const BLTCY_IMAGE_MODEL_PRESETS: BltcyImageModelPreset[] = [
fluxEditPreset(10, "flux-kontext-pro", "Flux Kontext Pro", "fal 组 0.12/次"),
fluxEditPreset(20, "flux-kontext-max", "Flux Kontext Max", "fal 组 0.24/次"),
];
export const BLTCY_BFL_MODEL_PRESETS: BltcyImageModelPreset[] = [
bflAsyncEditPreset({
sortOrder: 10,
modelId: "bfl/flux-kontext-pro",
displayName: "BFL Flux Kontext Pro",
endpoint: "/bfl/v1/flux-kontext-pro",
priceNote: "fal 组 0.12/次",
}),
bflAsyncEditPreset({
sortOrder: 20,
modelId: "bfl/flux-kontext-max",
displayName: "BFL Flux Kontext Max",
endpoint: "/bfl/v1/flux-kontext-max",
priceNote: "fal 组 0.24/次",
}),
];