Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .env-example

This file was deleted.

122 changes: 82 additions & 40 deletions services/aiService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}`);
}

}