Generated by Spark: Page is not loading

This commit is contained in:
2026-01-16 03:04:38 +00:00
committed by GitHub
parent 13c8154122
commit 718677d24b
2 changed files with 27 additions and 25 deletions

View File

@@ -1,9 +1,10 @@
// @ts-nocheck
import { PrismaModel, ComponentNode, ThemeConfig, ProjectFile } from '@/types/project'
export class AIService {
static async generateComponent(description: string): Promise<ComponentNode | null> {
try {
const promptText = `You are a React component generator. Generate a component tree structure based on this description: "${description}"
const prompt = window.spark.llmPrompt`You are a React component generator. Generate a component tree structure based on this description: ${description}
Return a valid JSON object with a single property "component" containing the component structure. The component should follow this format:
{
@@ -20,7 +21,7 @@ Return a valid JSON object with a single property "component" containing the com
Make sure to use appropriate Material UI components and props. Keep the structure clean and semantic.`
const response = await window.spark.llm(promptText, 'gpt-4o', true)
const response = await window.spark.llm(prompt, 'gpt-4o', true)
const parsed = JSON.parse(response)
return parsed.component
} catch (error) {
@@ -32,7 +33,7 @@ Make sure to use appropriate Material UI components and props. Keep the structur
static async generatePrismaModel(description: string, existingModels: PrismaModel[]): Promise<PrismaModel | null> {
try {
const existingModelNames = existingModels.map(m => m.name).join(', ')
const promptText = `You are a Prisma schema designer. Create a database model based on this description: "${description}"
const prompt = window.spark.llmPrompt`You are a Prisma schema designer. Create a database model based on this description: ${description}
Existing models in the schema: ${existingModelNames || 'none'}
@@ -65,7 +66,7 @@ Return a valid JSON object with a single property "model" containing the model s
Include an id field with uuid() default. Add createdAt and updatedAt DateTime fields with @default(now()) and @updatedAt. Use appropriate field types and relationships.`
const response = await window.spark.llm(promptText, 'gpt-4o', true)
const response = await window.spark.llm(prompt, 'gpt-4o', true)
const parsed = JSON.parse(response)
return parsed.model
} catch (error) {
@@ -86,15 +87,15 @@ Include an id field with uuid() default. Add createdAt and updatedAt DateTime fi
utility: "Create a utility function with TypeScript types and JSDoc comments."
}
const promptText = `You are a Next.js developer. ${fileTypeInstructions[fileType]}
const prompt = window.spark.llmPrompt`You are a Next.js developer. ${fileTypeInstructions[fileType]}
Description: "${description}"
Description: ${description}
Generate clean, production-ready code following Next.js 14 and Material UI best practices. Include all necessary imports.
Return ONLY the code without any markdown formatting or explanations.`
const code = await window.spark.llm(promptText, 'gpt-4o', false)
const code = await window.spark.llm(prompt, 'gpt-4o', false)
return code.trim()
} catch (error) {
console.error('AI code generation failed:', error)
@@ -104,14 +105,14 @@ Return ONLY the code without any markdown formatting or explanations.`
static async improveCode(code: string, instruction: string): Promise<string | null> {
try {
const promptText = `You are a code improvement assistant. Improve the following code based on this instruction: "${instruction}"
const prompt = window.spark.llmPrompt`You are a code improvement assistant. Improve the following code based on this instruction: ${instruction}
Original code:
${code}
Return ONLY the improved code without any markdown formatting or explanations.`
const improved = await window.spark.llm(promptText, 'gpt-4o', false)
const improved = await window.spark.llm(prompt, 'gpt-4o', false)
return improved.trim()
} catch (error) {
console.error('AI code improvement failed:', error)
@@ -121,7 +122,7 @@ Return ONLY the improved code without any markdown formatting or explanations.`
static async generateThemeFromDescription(description: string): Promise<Partial<ThemeConfig> | null> {
try {
const promptText = `You are a UI/UX designer. Generate a Material UI theme configuration based on this description: "${description}"
const prompt = window.spark.llmPrompt`You are a UI/UX designer. Generate a Material UI theme configuration based on this description: ${description}
Return a valid JSON object with a single property "theme" containing:
{
@@ -144,7 +145,7 @@ Return a valid JSON object with a single property "theme" containing:
Choose colors that match the description and ensure good contrast. Use common font stacks.`
const response = await window.spark.llm(promptText, 'gpt-4o', true)
const response = await window.spark.llm(prompt, 'gpt-4o', true)
const parsed = JSON.parse(response)
return parsed.theme
} catch (error) {
@@ -155,9 +156,10 @@ Choose colors that match the description and ensure good contrast. Use common fo
static async suggestFieldsForModel(modelName: string, existingFields: string[]): Promise<string[] | null> {
try {
const promptText = `You are a database architect. Suggest additional useful fields for a Prisma model named "${modelName}".
const existingFieldsStr = existingFields.join(', ')
const prompt = window.spark.llmPrompt`You are a database architect. Suggest additional useful fields for a Prisma model named ${modelName}.
Existing fields: ${existingFields.join(', ')}
Existing fields: ${existingFieldsStr}
Return a valid JSON object with a single property "fields" containing an array of field name suggestions (strings only):
{
@@ -166,7 +168,7 @@ Return a valid JSON object with a single property "fields" containing an array o
Suggest 3-5 common fields that would be useful for this model type. Use camelCase naming.`
const response = await window.spark.llm(promptText, 'gpt-4o', true)
const response = await window.spark.llm(prompt, 'gpt-4o', true)
const parsed = JSON.parse(response)
return parsed.fields
} catch (error) {
@@ -177,13 +179,13 @@ Suggest 3-5 common fields that would be useful for this model type. Use camelCas
static async explainCode(code: string): Promise<string | null> {
try {
const promptText = `You are a code teacher. Explain what this code does in simple terms:
const prompt = window.spark.llmPrompt`You are a code teacher. Explain what this code does in simple terms:
${code}
Provide a clear, concise explanation suitable for developers learning the codebase.`
const explanation = await window.spark.llm(promptText, 'gpt-4o', false)
const explanation = await window.spark.llm(prompt, 'gpt-4o', false)
return explanation.trim()
} catch (error) {
console.error('AI code explanation failed:', error)
@@ -193,7 +195,7 @@ Provide a clear, concise explanation suitable for developers learning the codeba
static async generateCompleteApp(description: string): Promise<{ files: ProjectFile[], models: PrismaModel[], theme: Partial<ThemeConfig> } | null> {
try {
const promptText = `You are a full-stack application architect. Design a complete Next.js application based on: "${description}"
const prompt = window.spark.llmPrompt`You are a full-stack application architect. Design a complete Next.js application based on: ${description}
Return a valid JSON object with properties "files", "models", and "theme":
{
@@ -238,7 +240,7 @@ Return a valid JSON object with properties "files", "models", and "theme":
Create 2-4 essential files for the app structure. Include appropriate Prisma models. Design a cohesive theme.`
const response = await window.spark.llm(promptText, 'gpt-4o', true)
const response = await window.spark.llm(prompt, 'gpt-4o', true)
const parsed = JSON.parse(response)
return parsed
} catch (error) {

14
src/vite-end.d.ts vendored
View File

@@ -5,9 +5,9 @@ declare const BASE_KV_SERVICE_URL: string
declare global {
interface Window {
spark: {
llmPrompt(strings: TemplateStringsArray, ...values: any[]): string
llm(prompt: string, modelName?: string, jsonMode?: boolean): Promise<string>
user(): Promise<{
llmPrompt: (strings: TemplateStringsArray, ...values: any[]) => string
llm: (prompt: string, modelName?: string, jsonMode?: boolean) => Promise<string>
user: () => Promise<{
avatarUrl: string
email: string
id: string
@@ -15,10 +15,10 @@ declare global {
login: string
}>
kv: {
keys(): Promise<string[]>
get<T>(key: string): Promise<T | undefined>
set<T>(key: string, value: T): Promise<void>
delete(key: string): Promise<void>
keys: () => Promise<string[]>
get: <T>(key: string) => Promise<T | undefined>
set: <T>(key: string, value: T) => Promise<void>
delete: (key: string) => Promise<void>
}
}
}