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.

88 changes: 78 additions & 10 deletions services/aiService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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"
);
}
}