From d2a28212fbcfc5c0645136a096a945eadbc4dfba Mon Sep 17 00:00:00 2001 From: Hassan1290 Date: Mon, 15 Sep 2025 10:21:35 -0400 Subject: [PATCH] i finished week_21 --- .env-example | 2 - services/aiService.js | 88 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 78 insertions(+), 12 deletions(-) delete mode 100644 .env-example diff --git a/.env-example b/.env-example deleted file mode 100644 index 928533d..0000000 --- a/.env-example +++ /dev/null @@ -1,2 +0,0 @@ -DATABASE_URL=your-database-url -OPENAI_API_KEY=your-openai-api-key \ No newline at end of file diff --git a/services/aiService.js b/services/aiService.js index 043f837..dde7388 100644 --- a/services/aiService.js +++ b/services/aiService.js @@ -77,39 +77,107 @@ export async function generateTaskWithAI(prompt) { // 1. Check if the OpenAI API key is configured in environment variables // - Use process.env.OPENAI_API_KEY // - Throw an error if not configured - // + try { + if (!process.env.OPENAI_API_KEY) { + throw new Error( + "Error: The OPENAI_API_KEY environment variable is not configured. Please set it before running the application." + ); + } + console.log( + "Success: OPENAI_API_KEY is configured. Your application can now proceed." + ); + // 2. Create a system prompt that tells the AI what to do: // - Explain that it's a task management assistant // - Ask it to create a task with subtasks based on the user's description // - Specify the JSON format it should respond with // - Include guidelines for creating good tasks and subtasks + + const systemPrompt = ` + You are a task management assistant. Your job is to help users create tasks with subtasks. + Please follow these guidelines: + - Create a task with a title and description. + - Include subtasks with titles and descriptions. + - Respond in JSON format. + { + "title": "Task Title", + "description": "Task Description", + "subtasks": [ + { + "title": "Subtask 1 Title", + "description": "Subtask 1 Description" + }, + { + "title": "Subtask 2 Title", + "description": "Subtask 2 Description" + } + ] + } + guidelines: +- The task should be short and clear. +- Subtasks must be specific, actionable, and ordered logically. +- Avoid vague terms like "do research" — instead be precise, e.g., "search online for top 5 tools." +`; + // // 3. Create a user prompt that includes the user's task description // - Use the 'prompt' parameter passed to this function + + const userPrompt = `${prompt}` + + // function createUserPrompt(userTask) { + // return `Please create a task list based on the following description: "${userTask}"`; + // } // // 4. Call the OpenAI API using the openai client: // - Use model: "gpt-3.5-turbo" // - Include both system and user messages // - Set temperature to 0.7 for balanced creativity // - Set max_tokens to 1000 + + const completion = await openai.chat.completions.create({ + model: "gpt-3.5-turbo", + messages: [ + {role: "system", content: systemPrompt}, + {role:"user", content: userPrompt} + ], + temperature: 0.7, + max_tokens: 1000, + }); + + // // 5. Extract the response content from the API call // - Access completion.choices[0]?.message?.content // - Check if response exists, throw error if not - // + + const responseContent = completion.choices[0]?.message?.content; + if (!responseContent) { + throw new Error( + "API response content is missing or in an unexpected format." + ); + } + // 6. Use the extractTaskFromAIResponse function to parse and validate the response // - This function is already implemented for you // - Pass the responseContent to it - // + + + const taskList = extractTaskFromAIResponse(responseContent); + + // console.log("Parsed task list:", taskList); // 7. Return the parsed task data + + return taskList; + // // 8. Handle errors appropriately // - Wrap everything in a try-catch block - // - Throw meaningful error messages - // - - - throw new Error( - "TODO: Complete the generateTaskWithAI function - see instructions above" - ); + // - Throw meaningful error messages + // + } catch (error) { + throw new Error( + "TODO: Complete the generateTaskWithAI function - see instructions above" + ); + } }