lobe-chat
1import { ModelProvider } from '@/libs/agent-runtime';
2import { createHeaderWithAuth } from '@/services/_auth';
3import { OpenAIImagePayload } from '@/types/openai/image';
4
5import { API_ENDPOINTS } from './_url';
6
7interface FetchOptions {
8signal?: AbortSignal | undefined;
9}
10
11class ImageGenerationService {
12async generateImage(params: Omit<OpenAIImagePayload, 'model' | 'n'>, options?: FetchOptions) {
13const payload: OpenAIImagePayload = { ...params, model: 'dall-e-3', n: 1 };
14
15const provider = ModelProvider.OpenAI;
16
17const headers = await createHeaderWithAuth({
18headers: { 'Content-Type': 'application/json' },
19provider,
20});
21
22const res = await fetch(API_ENDPOINTS.images(provider), {
23body: JSON.stringify(payload),
24headers: headers,
25method: 'POST',
26signal: options?.signal,
27});
28if (!res.ok) {
29throw await res.json();
30}
31
32const urls = await res.json();
33
34return urls[0] as string;
35}
36}
37
38export const imageGenerationService = new ImageGenerationService();
39