You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
import { requireUser } from "#server/utils/context";
|
|
import { getProviderById } from "#server/service/llm";
|
|
import { dbGlobal } from "drizzle-pkg/lib/db";
|
|
import { llmProviders, llmModels } from "drizzle-pkg/lib/schema/llm";
|
|
import { eq, and } from "drizzle-orm";
|
|
|
|
export default defineWrappedResponseHandler(async (event) => {
|
|
const user = await requireUser(event);
|
|
|
|
const providers = await dbGlobal
|
|
.select({
|
|
id: llmProviders.id,
|
|
name: llmProviders.name,
|
|
parseMode: llmProviders.parseMode,
|
|
status: llmProviders.status,
|
|
})
|
|
.from(llmProviders)
|
|
.where(and(eq(llmProviders.userId, user.id), eq(llmProviders.status, "active")));
|
|
|
|
const result = [];
|
|
|
|
for (const provider of providers) {
|
|
const models = await dbGlobal
|
|
.select({
|
|
id: llmModels.id,
|
|
name: llmModels.name,
|
|
modelId: llmModels.modelId,
|
|
type: llmModels.type,
|
|
maxTokens: llmModels.maxTokens,
|
|
})
|
|
.from(llmModels)
|
|
.where(and(eq(llmModels.providerId, provider.id), eq(llmModels.enabled, 1)));
|
|
|
|
if (models.length > 0) {
|
|
result.push({
|
|
...provider,
|
|
models,
|
|
});
|
|
}
|
|
}
|
|
|
|
return R.success(result);
|
|
});
|
|
|