refactor: cleanup auto-rename code
This commit is contained in:
+34
-9
@@ -12,12 +12,12 @@ export default defineEventHandler(async (event) => {
|
||||
await protectRoute(event);
|
||||
|
||||
const userId = event.context.user!.id;
|
||||
const topicId = getRouterParam(event, 'topicId')!;
|
||||
|
||||
const result = await readValidatedBody(event, (body) =>
|
||||
z
|
||||
.object({
|
||||
modelId: z.string(),
|
||||
topicId: z.string(),
|
||||
prompt: z.string(),
|
||||
providerApiKey: z.string().optional(),
|
||||
})
|
||||
@@ -27,47 +27,72 @@ export default defineEventHandler(async (event) => {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: result.error.issues[0]!.message,
|
||||
data: {
|
||||
code: 'INVALID_BODY',
|
||||
ok: false,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const { modelId, topicId, prompt, providerApiKey } = result.data;
|
||||
const { modelId, prompt, providerApiKey } = result.data;
|
||||
|
||||
const model = await httpClient.fetchOne(httpClient.query('models').Where('id', '=', modelId).Include('provider'));
|
||||
if (model === null || model.providerId !== model.providerId || model.userId !== userId) {
|
||||
if (model === null || model.providerId !== model.providerId || model.userId !== userId || model.provider === null) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Invalid model',
|
||||
statusMessage: 'Invalid model',
|
||||
data: {
|
||||
code: 'INVALID_MODEL',
|
||||
ok: false,
|
||||
}
|
||||
});
|
||||
}
|
||||
assert(model.provider !== null, 'Invalid model provider');
|
||||
|
||||
const providerDetails = await getProviderDetails(model.provider, providerApiKey, model);
|
||||
if (!providerDetails.ok) {
|
||||
switch (providerDetails.error) {
|
||||
case GatewayFetchError.NoProviderApiKey: {
|
||||
setResponseStatus(event, 400, "No provider API key");
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: `${model.provider.type} provider requires an API key`,
|
||||
statusMessage: `${model.provider.type} provider requires an API key`,
|
||||
data: {
|
||||
code: 'NO_PROVIDER_API_KEY',
|
||||
ok: false,
|
||||
}
|
||||
});
|
||||
}
|
||||
case GatewayFetchError.NoProviderBaseUrl: {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Invalid provider URL',
|
||||
statusMessage: 'Invalid provider URL',
|
||||
data: {
|
||||
code: 'BAD_PROVIDER_URL',
|
||||
ok: false,
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const { gateway } = providerDetails.data;
|
||||
assert(gateway !== null, 'Invalid gateway');
|
||||
if (gateway === null) {
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
statusMessage: 'Invalid gateway',
|
||||
data: {
|
||||
code: 'INVALID_GATEWAY',
|
||||
ok: false,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const [renameId, pendingRename] = addPendingRename(topicId);
|
||||
event.waitUntil(autoRename(topicId, renameId, pendingRename.abortController, { gateway: gateway.gateway, model }, gateway.textTransformer, prompt));
|
||||
|
||||
return {
|
||||
success: true,
|
||||
renameId,
|
||||
ok: true,
|
||||
};
|
||||
});
|
||||
|
||||
+17
-3
@@ -1,3 +1,4 @@
|
||||
import * as z from 'zod';
|
||||
import { httpClient } from '~~/server/lib/triplit';
|
||||
import { cancelPendingRename } from '~~/server/utils/renames';
|
||||
import { assert } from '~~/utils/assert';
|
||||
@@ -5,7 +6,20 @@ import { assert } from '~~/utils/assert';
|
||||
export default defineEventHandler(async (event) => {
|
||||
await protectRoute(event);
|
||||
|
||||
const { renameId } = event.context.params!;
|
||||
const body = await readValidatedBody(event, (body) =>
|
||||
z
|
||||
.object({
|
||||
renameId: z.string(),
|
||||
})
|
||||
.safeParse(body),
|
||||
);
|
||||
if (!body.success) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
message: 'Invalid rename ID',
|
||||
});
|
||||
}
|
||||
const { renameId } = body.data;
|
||||
assert(renameId);
|
||||
|
||||
const [success, pendingRename] = cancelPendingRename(renameId);
|
||||
@@ -18,11 +32,11 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
ok: true,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
ok: false,
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user