Skip to content

Commit e4a0bdc

Browse files
committed
Fix: Custom Provider Support Image Generation
1 parent 850b981 commit e4a0bdc

File tree

3 files changed

+67
-50
lines changed

3 files changed

+67
-50
lines changed

src/components/settings/ApiManagement.tsx

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -166,24 +166,24 @@ export const ApiManagement: React.FC<ApiManagementProps> = ({
166166
};
167167

168168
// Handle capability change
169-
// const handleCapabilityChange = (capability: AIServiceCapability, isChecked: boolean) => {
170-
// if (!currentEditModel) return;
169+
const handleCapabilityChange = (capability: AIServiceCapability, isChecked: boolean) => {
170+
if (!currentEditModel) return;
171171

172-
// let updatedCapabilities = [...currentEditModel.modelCapabilities];
172+
let updatedCapabilities = [...currentEditModel.modelCapabilities];
173173

174-
// if (isChecked) {
175-
// if (!updatedCapabilities.includes(capability)) {
176-
// updatedCapabilities.push(capability);
177-
// }
178-
// } else {
179-
// updatedCapabilities = updatedCapabilities.filter(cap => cap !== capability);
180-
// }
174+
if (isChecked) {
175+
if (!updatedCapabilities.includes(capability)) {
176+
updatedCapabilities.push(capability);
177+
}
178+
} else {
179+
updatedCapabilities = updatedCapabilities.filter(cap => cap !== capability);
180+
}
181181

182-
// setCurrentEditModel({
183-
// ...currentEditModel,
184-
// modelCapabilities: updatedCapabilities
185-
// });
186-
// };
182+
setCurrentEditModel({
183+
...currentEditModel,
184+
modelCapabilities: updatedCapabilities
185+
});
186+
};
187187

188188
// Get capability icon
189189
const getCapabilityIcon = (capability: AIServiceCapability) => {
@@ -288,17 +288,14 @@ export const ApiManagement: React.FC<ApiManagementProps> = ({
288288
></textarea>
289289
</div> */}
290290

291-
{/* <div>
291+
<div>
292292
<label className="block mb-2 text-sm font-medium text-gray-700">
293293
Capabilities
294294
</label>
295295
<div className="space-y-2">
296296
{[
297297
{capability: AIServiceCapability.TextCompletion, label: 'Text Completion'},
298-
{capability: AIServiceCapability.Reasoning, label: 'Reasoning'},
299-
{capability: AIServiceCapability.VisionAnalysis, label: 'Vision'},
300-
{capability: AIServiceCapability.ToolUsage, label: 'Tool Usage'},
301-
{capability: AIServiceCapability.Embedding, label: 'Embedding'}
298+
{capability: AIServiceCapability.ImageGeneration, label: 'Image Generation'},
302299
].map(({capability, label}) => (
303300
<div key={capability} className="flex items-center">
304301
<input
@@ -317,7 +314,7 @@ export const ApiManagement: React.FC<ApiManagementProps> = ({
317314
</div>
318315
))}
319316
</div>
320-
</div> */}
317+
</div>
321318
</div>
322319

323320
<div className="flex justify-end mt-6 space-x-2">

src/services/providers/custom-service.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,29 @@ export class CustomService implements AiServiceProvider {
143143
*/
144144
public async getImageGeneration(
145145
prompt: string,
146-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
147146
options: {
148147
size?: `${number}x${number}`;
148+
aspectRatio?: `${number}:${number}`;
149149
style?: string;
150150
quality?: string;
151-
} = {}
152-
): Promise<string[]> {
153-
throw new Error('Not implemented');
151+
}
152+
): Promise<string[] | Uint8Array<ArrayBufferLike>[]> {
153+
154+
const imageModel = this.openAIProvider.imageModel('dall-e-3');
155+
156+
const result = await imageModel.doGenerate({
157+
prompt: prompt,
158+
n: 1,
159+
size: options.size || '1024x1024',
160+
aspectRatio: options.aspectRatio || '1:1',
161+
seed: 42,
162+
providerOptions: {
163+
"openai": {
164+
"style": options.style || 'vivid'
165+
}
166+
}
167+
});
168+
169+
return result.images;
154170
}
155171
}

src/services/settings-service.ts

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ import { v4 as uuidv4 } from 'uuid';
99
*/
1010
const DEFAULT_SETTINGS: UserSettings = {
1111
providers: {
12-
['TensorBlock']: {
13-
providerId: 'TensorBlock',
14-
providerName: 'TensorBlock',
15-
apiKey: '',
16-
baseUrl: 'http://54.177.123.202:8000/v1',
17-
customProvider: false,
18-
models:[
19-
{
20-
modelName: 'GPT-4o',
21-
modelId: 'gpt-4o',
22-
modelCategory: 'GPT 4',
23-
modelDescription: 'GPT-4o is the latest and most powerful model from OpenAI.',
24-
modelCapabilities: [AIServiceCapability.TextCompletion, AIServiceCapability.WebSearch],
25-
modelRefUUID: uuidv4(),
26-
},
27-
{
28-
modelName: 'DALL-E 3',
29-
modelId: 'dall-e-3',
30-
modelCategory: 'Image Generation',
31-
modelDescription: 'DALL-E 3 is OpenAI\'s advanced image generation model.',
32-
modelCapabilities: [AIServiceCapability.ImageGeneration],
33-
modelRefUUID: uuidv4(),
34-
},
35-
]
36-
},
12+
// ['TensorBlock']: {
13+
// providerId: 'TensorBlock',
14+
// providerName: 'TensorBlock',
15+
// apiKey: '',
16+
// baseUrl: 'http://54.177.123.202:8000/v1',
17+
// customProvider: false,
18+
// models:[
19+
// {
20+
// modelName: 'GPT-4o',
21+
// modelId: 'gpt-4o',
22+
// modelCategory: 'GPT 4',
23+
// modelDescription: 'GPT-4o is the latest and most powerful model from OpenAI.',
24+
// modelCapabilities: [AIServiceCapability.TextCompletion, AIServiceCapability.WebSearch],
25+
// modelRefUUID: uuidv4(),
26+
// },
27+
// {
28+
// modelName: 'DALL-E 3',
29+
// modelId: 'dall-e-3',
30+
// modelCategory: 'Image Generation',
31+
// modelDescription: 'DALL-E 3 is OpenAI\'s advanced image generation model.',
32+
// modelCapabilities: [AIServiceCapability.ImageGeneration],
33+
// modelRefUUID: uuidv4(),
34+
// },
35+
// ]
36+
// },
3737
['OpenAI']: {
3838
providerId: 'OpenAI',
3939
providerName: 'OpenAI',
@@ -348,6 +348,10 @@ export class SettingsService {
348348
});
349349
}
350350
}
351+
else if(provider === 'TensorBlock'){
352+
// Remove Default TensorBlock provider
353+
delete this.settings.providers[provider];
354+
}
351355
}
352356
}
353357

0 commit comments

Comments
 (0)