mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-02-13 16:35:44 +01:00
- Fix syntax errors in skills markdown files (.github/skills, .opencode/skills) - Change typescript to tsx for code blocks with JSX - Replace ellipsis (...) in array examples with valid syntax - Separate CSS from TypeScript into distinct code blocks - Convert JavaScript object examples to valid JSON in docs - Fix enum definitions with proper comma separation
158 lines
4.6 KiB
TypeScript
158 lines
4.6 KiB
TypeScript
// seed.ts - Create initial company and AI models
|
|
// Note: Users are created via Neon Auth signup, this just creates the placeholder
|
|
import { PrismaClient } from "@prisma/client";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
try {
|
|
console.log("Starting database seeding...");
|
|
|
|
// Create the Jumbo company
|
|
const company = await prisma.company.create({
|
|
data: {
|
|
name: "Jumbo Bas Bobbeldijk",
|
|
csvUrl: "https://proto.notso.ai/jumbo/chats",
|
|
csvUsername: "jumboadmin",
|
|
csvPassword: "jumboadmin",
|
|
},
|
|
});
|
|
console.log(`Created company: ${company.name}`);
|
|
|
|
// Create admin user placeholder (they'll complete signup via Neon Auth)
|
|
const adminUser = await prisma.user.create({
|
|
data: {
|
|
email: "max.kowalski.contact@gmail.com",
|
|
name: "Max Kowalski",
|
|
role: "ADMIN",
|
|
companyId: company.id,
|
|
},
|
|
});
|
|
console.log(`Created admin user placeholder: ${adminUser.email}`);
|
|
|
|
// Create platform super admin placeholder
|
|
const platformAdmin = await prisma.user.create({
|
|
data: {
|
|
email: "admin@notso.ai",
|
|
name: "Platform Admin",
|
|
role: "PLATFORM_SUPER_ADMIN",
|
|
companyId: null, // Platform users have no company
|
|
},
|
|
});
|
|
console.log(`Created platform admin placeholder: ${platformAdmin.email}`);
|
|
|
|
// Create AI Models
|
|
const aiModels = [
|
|
{
|
|
name: "gpt-4o",
|
|
provider: "openai",
|
|
maxTokens: 128000,
|
|
isActive: true,
|
|
},
|
|
{
|
|
name: "gpt-4o-2024-08-06",
|
|
provider: "openai",
|
|
maxTokens: 128000,
|
|
isActive: true,
|
|
},
|
|
{
|
|
name: "gpt-4-turbo",
|
|
provider: "openai",
|
|
maxTokens: 128000,
|
|
isActive: true,
|
|
},
|
|
{
|
|
name: "gpt-4o-mini",
|
|
provider: "openai",
|
|
maxTokens: 128000,
|
|
isActive: true,
|
|
},
|
|
];
|
|
|
|
const createdModels: { id: string; name: string }[] = [];
|
|
for (const modelData of aiModels) {
|
|
const model = await prisma.aIModel.create({
|
|
data: modelData,
|
|
});
|
|
createdModels.push(model);
|
|
console.log(`Created AI model: ${model.name}`);
|
|
}
|
|
|
|
// Create current pricing for AI models (as of December 2024)
|
|
const currentTime = new Date();
|
|
const pricingData = [
|
|
{
|
|
modelName: "gpt-4o",
|
|
promptTokenCost: 0.0000025, // $2.50 per 1M tokens
|
|
completionTokenCost: 0.00001, // $10.00 per 1M tokens
|
|
},
|
|
{
|
|
modelName: "gpt-4o-2024-08-06",
|
|
promptTokenCost: 0.0000025, // $2.50 per 1M tokens
|
|
completionTokenCost: 0.00001, // $10.00 per 1M tokens
|
|
},
|
|
{
|
|
modelName: "gpt-4-turbo",
|
|
promptTokenCost: 0.00001, // $10.00 per 1M tokens
|
|
completionTokenCost: 0.00003, // $30.00 per 1M tokens
|
|
},
|
|
{
|
|
modelName: "gpt-4o-mini",
|
|
promptTokenCost: 0.00000015, // $0.15 per 1M tokens
|
|
completionTokenCost: 0.0000006, // $0.60 per 1M tokens
|
|
},
|
|
];
|
|
|
|
for (const pricing of pricingData) {
|
|
const model = createdModels.find((m) => m.name === pricing.modelName);
|
|
if (model) {
|
|
await prisma.aIModelPricing.create({
|
|
data: {
|
|
aiModelId: model.id,
|
|
promptTokenCost: pricing.promptTokenCost,
|
|
completionTokenCost: pricing.completionTokenCost,
|
|
effectiveFrom: currentTime,
|
|
effectiveUntil: null,
|
|
},
|
|
});
|
|
console.log(`Created pricing for: ${model.name}`);
|
|
}
|
|
}
|
|
|
|
// Assign default AI model to company (gpt-4o)
|
|
const defaultModel = createdModels.find((m) => m.name === "gpt-4o");
|
|
if (defaultModel) {
|
|
await prisma.companyAIModel.create({
|
|
data: {
|
|
companyId: company.id,
|
|
aiModelId: defaultModel.id,
|
|
isDefault: true,
|
|
},
|
|
});
|
|
console.log(`Set default AI model for company: ${defaultModel.name}`);
|
|
}
|
|
|
|
console.log("\nDatabase seeding completed successfully!");
|
|
console.log("\nSummary:");
|
|
console.log(`Company: ${company.name}`);
|
|
console.log(
|
|
`Admin user: ${adminUser.email} (needs to sign up via /auth/sign-up)`
|
|
);
|
|
console.log(
|
|
`Platform admin: ${platformAdmin.email} (needs to sign up via /auth/sign-up)`
|
|
);
|
|
console.log(
|
|
`AI Models: ${createdModels.length} models created with current pricing`
|
|
);
|
|
console.log(`Default model: ${defaultModel?.name}`);
|
|
console.log("\nReady to start importing CSV data!");
|
|
} catch (error) {
|
|
console.error("Error seeding database:", error);
|
|
process.exit(1);
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
main();
|