41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { type ActionFunctionArgs } from '@remix-run/node';
|
|
import type { UIMessage } from 'ai';
|
|
import { requireAuth } from '~/lib/.server/auth';
|
|
import { streamEnhancer } from '~/lib/.server/llm/stream-enhancer';
|
|
import { createScopedLogger } from '~/lib/.server/logger';
|
|
import { getModel, MINOR_MODEL } from '~/lib/modules/constants';
|
|
import { errorResponse } from '~/utils/api-response';
|
|
|
|
export async function action(args: ActionFunctionArgs) {
|
|
const authResult = await requireAuth(args.request, { isApi: true });
|
|
|
|
if (authResult instanceof Response) {
|
|
return authResult;
|
|
}
|
|
|
|
const userId = authResult.userInfo?.sub as string;
|
|
if (!userId) {
|
|
return errorResponse(401, '用户未登录');
|
|
}
|
|
|
|
return enhancerAction({ ...args, userId });
|
|
}
|
|
|
|
const logger = createScopedLogger('api.enhancher');
|
|
|
|
export type EnhancerActionArgs = ActionFunctionArgs & {
|
|
userId: string;
|
|
};
|
|
|
|
async function enhancerAction({ request, userId }: EnhancerActionArgs) {
|
|
const { messages } = await request.json<{
|
|
messages: UIMessage[];
|
|
}>();
|
|
|
|
logger.info(`User ${userId} => Enhancing prompt: ${messages}`);
|
|
return streamEnhancer({
|
|
messages,
|
|
model: getModel(MINOR_MODEL),
|
|
});
|
|
}
|