fix: get models openai

This commit is contained in:
Davidson Gomes
2024-08-02 10:49:06 -03:00
parent fd64ea07d0
commit 3fa6b1fcc5
6 changed files with 117 additions and 57 deletions

View File

@@ -79,6 +79,12 @@ export class OpenaiController {
return this.openaiService.fetchSessions(instance, openaiBotId);
}
public async getModels(instance: InstanceDto) {
if (!configService.get<Openai>('OPENAI').ENABLED) throw new BadRequestException('Openai is disabled');
return this.openaiService.getModels(instance);
}
public async ignoreJid(instance: InstanceDto, data: OpenaiIgnoreJidDto) {
if (!configService.get<Openai>('OPENAI').ENABLED) throw new BadRequestException('Openai is disabled');

View File

@@ -146,6 +146,16 @@ export class OpenaiRouter extends RouterBroker {
execute: (instance, data) => openaiController.ignoreJid(instance, data),
});
res.status(HttpStatus.OK).json(response);
})
.get(this.routerPath('getModels'), ...guards, async (req, res) => {
const response = await this.dataValidate<InstanceDto>({
request: req,
schema: instanceSchema,
ClassRef: InstanceDto,
execute: (instance) => openaiController.getModels(instance),
});
res.status(HttpStatus.OK).json(response);
});
}

View File

@@ -647,6 +647,42 @@ export class OpenaiService {
}
}
public async getModels(instance: InstanceDto) {
const instanceId = await this.prismaRepository.instance
.findFirst({
where: {
name: instance.instanceName,
},
})
.then((instance) => instance.id);
if (!instanceId) throw new Error('Instance not found');
const defaultSettings = await this.prismaRepository.openaiSetting.findFirst({
where: {
instanceId: instanceId,
},
include: {
OpenaiCreds: true,
},
});
if (!defaultSettings) throw new Error('Settings not found');
const { apiKey } = defaultSettings.OpenaiCreds;
try {
this.client = new OpenAI({ apiKey });
const models: any = await this.client.models.list();
return models?.body?.data;
} catch (error) {
this.logger.error(error);
throw new Error('Error fetching models');
}
}
public async ignoreJid(instance: InstanceDto, data: OpenaiIgnoreJidDto) {
try {
const instanceId = await this.prismaRepository.instance