- Статья: заголовок + ссылка (truncate), title в URL, articleTitle в Message - Локализация Sources, Research Progress, Answer, шагов, formingAnswer - Подсказки: промпт без жёсткого примера, разнообразие, label 'Что ещё спросить' - embeddedTranslations, countryToLocale, locale инструкция для LLM Co-authored-by: Cursor <cursoragent@cursor.com>
99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
import {
|
||
getConfiguredModelProviders,
|
||
isEnvOnlyMode,
|
||
} from '@/lib/config/serverRegistry';
|
||
import ModelRegistry from '@/lib/models/registry';
|
||
import { NextRequest } from 'next/server';
|
||
|
||
export const GET = async () => {
|
||
try {
|
||
const envOnlyMode = isEnvOnlyMode();
|
||
const configuredProviders = getConfiguredModelProviders();
|
||
|
||
const registry = new ModelRegistry();
|
||
const activeProviders = await registry.getActiveProviders();
|
||
|
||
const filteredProviders = activeProviders.filter((p) => {
|
||
return !p.chatModels.some((m) => m.key === 'error');
|
||
});
|
||
|
||
// env-only: если у провайдера пустой chatModels, подставляем модель из конфига
|
||
const providers =
|
||
envOnlyMode && configuredProviders.length > 0
|
||
? filteredProviders.map((p) => {
|
||
if (p.chatModels.length > 0) return p;
|
||
const configProvider = configuredProviders.find((c) => c.id === p.id);
|
||
const fallbackChat =
|
||
(configProvider?.chatModels?.length ?? 0) > 0
|
||
? configProvider!.chatModels
|
||
: [{ key: 'gpt-4', name: 'gpt-4' }];
|
||
return { ...p, chatModels: fallbackChat };
|
||
})
|
||
: filteredProviders;
|
||
|
||
return Response.json(
|
||
{
|
||
providers,
|
||
envOnlyMode: envOnlyMode,
|
||
},
|
||
{
|
||
status: 200,
|
||
},
|
||
);
|
||
} catch (err) {
|
||
console.error('An error occurred while fetching providers', err);
|
||
return Response.json(
|
||
{
|
||
message: 'An error has occurred.',
|
||
},
|
||
{
|
||
status: 500,
|
||
},
|
||
);
|
||
}
|
||
};
|
||
|
||
export const POST = async (req: NextRequest) => {
|
||
if (isEnvOnlyMode()) {
|
||
return Response.json({ message: 'Not available.' }, { status: 405 });
|
||
}
|
||
|
||
try {
|
||
const body = await req.json();
|
||
const { type, name, config } = body;
|
||
|
||
if (!type || !name || !config) {
|
||
return Response.json(
|
||
{
|
||
message: 'Missing required fields.',
|
||
},
|
||
{
|
||
status: 400,
|
||
},
|
||
);
|
||
}
|
||
|
||
const registry = new ModelRegistry();
|
||
const newProvider = await registry.addProvider(type, name, config);
|
||
|
||
return Response.json(
|
||
{
|
||
provider: newProvider,
|
||
},
|
||
{
|
||
status: 200,
|
||
},
|
||
);
|
||
} catch (err) {
|
||
console.error('An error occurred while creating provider', err);
|
||
return Response.json(
|
||
{
|
||
message: 'An error has occurred.',
|
||
},
|
||
{
|
||
status: 500,
|
||
},
|
||
);
|
||
}
|
||
};
|