68 lines
1.5 KiB
JavaScript
68 lines
1.5 KiB
JavaScript
|
|
// src/controllers/model.controller.js
|
||
|
|
// 모델 컨트롤러
|
||
|
|
|
||
|
|
const { LLMProvider } = require('../models');
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 사용 가능한 모델 목록 조회
|
||
|
|
*/
|
||
|
|
exports.list = async (req, res, next) => {
|
||
|
|
try {
|
||
|
|
const providers = await LLMProvider.getActiveProviders();
|
||
|
|
|
||
|
|
// OpenAI 호환 형식으로 변환
|
||
|
|
const models = providers.map((provider) => ({
|
||
|
|
id: provider.modelName,
|
||
|
|
object: 'model',
|
||
|
|
created: Math.floor(new Date(provider.createdAt).getTime() / 1000),
|
||
|
|
owned_by: provider.name,
|
||
|
|
permission: [],
|
||
|
|
root: provider.modelName,
|
||
|
|
parent: null,
|
||
|
|
}));
|
||
|
|
|
||
|
|
return res.json({
|
||
|
|
object: 'list',
|
||
|
|
data: models,
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
return next(error);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 모델 상세 정보 조회
|
||
|
|
*/
|
||
|
|
exports.get = async (req, res, next) => {
|
||
|
|
try {
|
||
|
|
const { id } = req.params;
|
||
|
|
|
||
|
|
const provider = await LLMProvider.findOne({
|
||
|
|
where: { modelName: id, isActive: true },
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!provider) {
|
||
|
|
return res.status(404).json({
|
||
|
|
error: {
|
||
|
|
message: `모델 '${id}'을(를) 찾을 수 없습니다.`,
|
||
|
|
type: 'invalid_request_error',
|
||
|
|
param: 'model',
|
||
|
|
code: 'model_not_found',
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return res.json({
|
||
|
|
id: provider.modelName,
|
||
|
|
object: 'model',
|
||
|
|
created: Math.floor(new Date(provider.createdAt).getTime() / 1000),
|
||
|
|
owned_by: provider.name,
|
||
|
|
permission: [],
|
||
|
|
root: provider.modelName,
|
||
|
|
parent: null,
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
return next(error);
|
||
|
|
}
|
||
|
|
};
|