From 4a5a15b41f9f7499883507142e37d3ac285fc81d Mon Sep 17 00:00:00 2001 From: farahgarow Date: Sun, 7 Sep 2025 08:39:38 +0300 Subject: [PATCH] Tasks for Week_21 --- .env-example | 2 - services/aiService.js | 122 ++++++++++++++++++++++++++++-------------- 2 files changed, 82 insertions(+), 42 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..f410cd1 100644 --- a/services/aiService.js +++ b/services/aiService.js @@ -71,45 +71,87 @@ export function extractTaskFromAIResponse(responseContent) { * @returns {Object} Parsed and validated task data */ export async function generateTaskWithAI(prompt) { - // TODO: STUDENT TASK - Complete this function to generate tasks using AI - // - // Instructions: - // 1. Check if the OpenAI API key is configured in environment variables - // - Use process.env.OPENAI_API_KEY - // - Throw an error if not configured - // - // 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 - // - // 3. Create a user prompt that includes the user's task description - // - Use the 'prompt' parameter passed to this function - // - // 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 - // - // 5. Extract the response content from the API call - // - Access completion.choices[0]?.message?.content - // - Check if response exists, throw error if not - // - // 6. Use the extractTaskFromAIResponse function to parse and validate the response - // - This function is already implemented for you - // - Pass the responseContent to it - // - // 7. Return the parsed task data - // - // 8. Handle errors appropriately - // - Wrap everything in a try-catch block - // - Throw meaningful error messages - // - + try { + // TODO: STUDENT TASK - Complete this function to generate tasks using AI + // + // Instructions: + // 1. Check if the OpenAI API key is configured in environment variables + // - Use process.env.OPENAI_API_KEY + // - Throw an error if not configured + if (!process.env.OPENAI_API_KEY) { + throw new Error("OpenAI API key is not configured"); + } + // + // 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 = `Create a detailed task management for the following requirements: + Follow these instruction below: + 1. Read the user input carefully and identify the main task. + 2. create a main tasks with subtasks based on user's description. + 3. JSON format output look like this: + { + "task": "Main task description", + "subtasks": [ + { + "id": 1, + "title": "subtask description", + "status": "pending" + } + ] + } + Please generate a main task and clear, actionable subtasks following the required JSON format`; + // + // 3. Create a user prompt that includes the user's task description + // - Use the 'prompt' parameter passed to this function + const { userPrompt} = prompt; - throw new Error( - "TODO: Complete the generateTaskWithAI function - see instructions above" - ); + // + // 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", // Using GPT-3.5 for good balance of quality and speed + messages: [ + { + role: "system", + content: systemPrompt + }, + { + role: "user", + content: userPrompt, + }, + ], + max_tokens: 1000, // Limit response length to avoid excessive costs + temperature: 0.7, // Balance between creativity and consistency + }) + // + // 5. Extract the response content from the API call + // - Access completion.choices[0]?.message?.content + const responseContent = completion.choices[0]?.message?.content + // - Check if response exists, throw error if not + if (!responseContent){ + throw new Error ("OpenAI not response") + } + // + // 6. Use the extractTaskFromAIResponse function to parse and validate the response + // - This function is already implemented for you + // - Pass the responseContent to it + const tasksData = extractTaskFromAIResponse (responseContent) + // + // 7. Return the parsed task data + return tasksData + // + // 8. Handle errors appropriately + // - Wrap everything in a try-catch block + // - Throw meaningful error messages + // + } catch (error) { + throw new Error( `OpenAI not generated tasks: ${error.message}`); + } + }