Welcome to the Agentic AI Scheduling Assistant Hackathon! This challenge invites developers, AI enthusiasts, and innovators to build an intelligent scheduling system that leverages Agentic AI - a next-generation approach where AI acts autonomously to achieve complex goals.
Your mission: Create an AI assistant that eliminates the back-and-forth of meeting coordination by autonomously scheduling, rescheduling, and optimizing calendars.
Traditional scheduling tools rely on rule-based automation or human input. Your solution should go further by:
- Reasoning like a human assistant (e.g., prioritizing attendees, resolving conflicts).
- Acting independently (e.g., sending follow-ups, adjusting for time zones).
- Learning from user preferences (e.g., preferred times, recurring meetings).
✅ Autonomous Coordination: The AI initiates scheduling without human micromanagement.
✅ Dynamic Adaptability: Handles last-minute changes or conflicting priorities.
✅ Natural Language Interaction: Users may converse with the AI (e.g., “Schedule a meeting on Tuesday”).
✅ Calendar Integration: Syncs with Google Calendar
✅ Autonomy: Minimal human intervention needed.
✅ Accuracy: Few scheduling errors or conflicts.
✅ User Experience: Intuitive and time-saving.
- Tools/APIs Needed: LLM ( vLLM server running on MI300 GPU).
- Calendar APIs (Google Calendar).
- Framework – May use License free tools & packages
- Development Environment: Python
To Create MI300 Instance, follow the steps in : AMD Developer Cloud Setup Readme
- Select
GPU Droplets - Click on
Create GPU Droplets - Select
AMD MI300X - In Snapshots, select
Ubuntu_AMD_Hackathon_AI_Scheduling_Assistant - Create & Add SSH Keys
- Create GPU Droplet
- Open Web Console
- Copy Paste URL in Chrome & Paste the Jupyter Token
The Notebook demonstrates how to programmatically retrieve and process Google Calendar events for a given user and date range.
- Authentication: Load user credentials from a token file.
- API Call: Fetch events between specified start/end dates using the Google Calendar API.
- Data Processing: Extract event details (start/end times, attendees) and structure them into a clean format.
- Output: Return a list of events with attendee counts and time slots.
Follow the notebook for example usage : Calendar_Event_Extraction
vLLM is an open-source library designed to deliver high throughput and low latency for large language model (LLM) inference. It optimizes text generation workloads by efficiently batching requests and making full use of GPU resources, empowering developers to manage complex tasks like code generation and large-scale conversational AI.
Open a new tab in this Jypyter server, click on the terminal icon to open a new terminal, then copy the following command to launch the vLLM server:
HIP_VISIBLE_DEVICES=0 vllm serve /home/user/Models/deepseek-ai/deepseek-llm-7b-chat \
--gpu-memory-utilization 0.9 \
--swap-space 16 \
--disable-log-requests \
--dtype float16 \
--max-model-len 2048 \
--tensor-parallel-size 1 \
--host 0.0.0.0 \
--port 3000 \
--num-scheduler-steps 10 \
--max-num-seqs 128 \
--max-num-batched-tokens 2048 \
--max-model-len 2048 \
--distributed-executor-backend "mp"For setting up vLLM server with DeepSeek Model & usage, please follow : vLLM_Inference_Servering_DeepSeek
Open a new tab in this Jypyter server, click on the terminal icon to open a new terminal, then copy the following command to launch the vLLM server:
HIP_VISIBLE_DEVICES=0 vllm serve /home/user/Models/meta-llama/Meta-Llama-3.1-8B-Instruct \
--gpu-memory-utilization 0.3 \
--swap-space 16 \
--disable-log-requests \
--dtype float16 \
--max-model-len 2048 \
--tensor-parallel-size 1 \
--host 0.0.0.0 \
--port 4000 \
--num-scheduler-steps 10 \
--max-num-seqs 128 \
--max-num-batched-tokens 2048 \
--max-model-len 2048 \
--distributed-executor-backend "mp"For setting up vLLM server with LLama Model & usage, please follow : vLLM_Inference_Servering_LLaMA
Open a new tab in this Jypyter server, click on the terminal icon to open a new terminal, then copy the following command to launch the vLLM server:
HIP_VISIBLE_DEVICES=0 vllm serve /home/user/Models/deepseek-ai/deepseek-llm-7b-chat \
--gpu-memory-utilization 0.9 \
--swap-space 16 \
--disable-log-requests \
--dtype float16 \
--max-model-len 2048 \
--tensor-parallel-size 1 \
--host 0.0.0.0 \
--port 3000 \
--num-scheduler-steps 10 \
--max-num-seqs 128 \
--max-num-batched-tokens 2048 \
--max-model-len 2048 \
--distributed-executor-backend "mp"class AI_AGENT:
def __init__(self, client, MODEL_PATH):
self.base_url = BASE_URL
self.model_path = MODEL_PATH
def parse_email(self, email_text):
response = client.chat.completions.create(
model=self.model_path,
temperature=0.0,
messages=[{
"role": "user",
"content": f"""
Yor are an Agent that helps in scheduling meetings.
Your job is to extracts Email ID's and Meeting Duration.
You should return :
1. List of email id's of participants (comma-separated).
2. Meeting duration in minutes.
3. Time constraints (e.g., 'next week').
If the List of email id's of participants are just names, then append @amd.com at the end and return.
Return as json with 'participants', 'time_constraints' & 'meeting_duration'.
Stricty follow the instructions. Strictly return dict with participents email id's, time constraints & meeting duration in minutes only.
Don not add any other instrctions or information.
Email: {email_text}
"""
}]
)
return json.loads(response.choices[0].message.content)
Follow the Notebook for setting-up an example AI Agent : Sample_AI_Agent
The Notebook demonstrates how to create a simple AI Agent that uses vLLM & OpenAI API to communicate with LLM Model.
This project provides a complete FastAPI web application that implements the AI Scheduling Assistant with the exact schema matching the JSON samples. The API provides endpoints that support the full workflow from input processing to final output generation.
The FastAPI application exposes the following main endpoints:
- POST
/api/meetings/schedule- Main endpoint for scheduling meetings (new JSON schema) - POST
/api/meetings/schedule-legacy- Legacy endpoint for backward compatibility - GET
/api/health- Health check endpoint - GET
/api/calendar/availability- Calendar availability endpoint
The API defines the following Pydantic models that exactly match the JSON sample formats:
Matches 1_Input_Request.json format:
{
"Request_id": "string (UUID)",
"Datetime": "string (DD-MM-YYYYTHH:MM:SS format)",
"Location": "string (optional)",
"From": "string (email)",
"Attendees": [{"email": "string"}],
"Subject": "string",
"EmailContent": "string"
}Matches 2_Processed_Input.json format:
{
"Request_id": "string (UUID)",
"Datetime": "string (DD-MM-YYYYTHH:MM:SS)",
"Location": "string (optional)",
"From": "string (email)",
"Attendees": [{"email": "string"}],
"Subject": "string",
"EmailContent": "string",
"Start": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"End": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"Duration_mins": "string"
}Matches 3_Output_Event.json format:
{
"Request_id": "string (UUID)",
"Datetime": "string (DD-MM-YYYYTHH:MM:SS)",
"Location": "string (optional)",
"From": "string (email)",
"Attendees": [
{
"email": "string",
"events": [
{
"StartTime": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"EndTime": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"NumAttendees": "integer",
"Attendees": ["string"],
"Summary": "string"
}
]
}
],
"Subject": "string",
"EmailContent": "string",
"EventStart": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"EventEnd": "string (YYYY-MM-DDTHH:MM:SS+05:30)",
"Duration_mins": "string",
"MetaData": {
"processing_timestamp": "string",
"communication_details": {
"request_source": "string",
"processing_method": "string",
"model_used": "string",
"calendar_integration": "string",
"scheduling_confidence": "number",
"conflicts_detected": "integer"
},
"workflow_stages": {
"input_received": "boolean",
"input_processed": "boolean",
"calendar_checked": "boolean",
"slots_generated": "boolean",
"output_created": "boolean"
}
}
}The API returns a comprehensive response that includes:
{
"success": "boolean",
"proposal_id": "string (optional)",
"suggested_slots": "array (optional)",
"reasoning": "string (optional)",
"agent_message": "string (optional)",
"processed_input": "ProcessedMeetingInput object",
"output_event": "MeetingOutputEvent object"
}To start the FastAPI server:
uvicorn app.main:app --host 0.0.0.0 --port 5000The server will be available at:
- API:
http://localhost:5000 - Swagger UI:
http://localhost:5000/docs - ReDoc:
http://localhost:5000/redoc
All functionality from the original README has been preserved:
- ✅ Autonomous Coordination: AI initiates scheduling without human micromanagement
- ✅ Dynamic Adaptability: Handles last-minute changes and conflicting priorities
- ✅ Natural Language Interaction: Processes natural language requests from EmailContent
- ✅ Calendar Integration: Syncs with Google Calendar (when configured)
- ✅ vLLM Integration: Uses DeepSeek AI models for intelligent processing
- ✅ Backward Compatibility: Supports legacy API format alongside new schema
The API includes comprehensive validation:
- Date format validation for
Datetimefield (DD-MM-YYYYTHH:MM:SS) - ISO datetime with timezone validation for processed times (+05:30)
- Email format validation for attendee emails
- Required field validation for all mandatory fields
The input to your code will be in JSON format in the below structure.
{
"Request_id": "6118b54f-907b-4451-8d48-dd13d76033a5",
"Datetime": "09-07-2025T12:34:55",
"Location": "IIT Mumbai",
"From": "userone.amd@gmail.com",
"Attendees": [
{
"email": "usertwo.amd@gmail.com"
},
{
"email": "userthree.amd@gmail.com"
}
],
"Subject": "Agentic AI Project Status Update",
"EmailContent": "Hi team, let's meet on Thursday for 30 minutes to discuss the status of Agentic AI Project."
}
Your AI Agent takes the Input JSON & process it to output another JSON in the below format.
{
"Request_id": "6118b54f-907b-4451-8d48-dd13d76033a5",
"Datetime": "09-07-2025T12:34:55",
"Location": "IIT Mumbai",
"From": "userone.amd@gmail.com",
"Attendees": [
{
"email": "usertwo.amd@gmail.com"
},
{
"email": "userthree.amd@gmail.com"
}
],
"Subject": "Agentic AI Project Status Update",
"EmailContent": "Hi team, let's meet on Thursday for 30 minutes to discuss the status of Agentic AI Project.",
"Start": "2025-07-17T00:00:00+05:30",
"End": "2025-07-17T23:59:59+05:30",
"Duration_mins": "30"
}
Your Final Output JSON should follow below structure.
{
"Request_id": "6118b54f-907b-4451-8d48-dd13d76033a5",
"Datetime": "09-07-2025T12:34:55",
"Location": "IIT Mumbai",
"From": "userone.amd@gmail.com",
"Attendees": [
{
"email": "userone.amd@gmail.com",
"events": [
{
"StartTime": "2025-07-17T10:30:00+05:30",
"EndTime": "2025-07-17T11:00:00+05:30",
"NumAttendees": 3,
"Attendees": [
"userone.amd@gmail.com",
"usertwo.amd@gmail.com",
"userthree.amd@gmail.com"
],
"Summary": "Agentic AI Project Status Update"
}
]
},
{
"email": "usertwo.amd@gmail.com",
"events": [
{
"StartTime": "2025-07-17T10:00:00+05:30",
"EndTime": "2025-07-17T10:30:00+05:30",
"NumAttendees": 3,
"Attendees": [
"userone.amd@gmail.com",
"usertwo.amd@gmail.com",
"userthree.amd@gmail.com"
],
"Summary": "Team Meet"
},
{
"StartTime": "2025-07-17T10:30:00+05:30",
"EndTime": "2025-07-17T11:00:00+05:30",
"NumAttendees": 3,
"Attendees": [
"userone.amd@gmail.com",
"usertwo.amd@gmail.com",
"userthree.amd@gmail.com"
],
"Summary": "Agentic AI Project Status Update"
}
]
},
{
"email": "userthree.amd@gmail.com",
"events": [
{
"StartTime": "2025-07-17T10:00:00+05:30",
"EndTime": "2025-07-17T10:30:00+05:30",
"NumAttendees": 3,
"Attendees": [
"userone.amd@gmail.com",
"usertwo.amd@gmail.com",
"userthree.amd@gmail.com"
],
"Summary": "Team Meet"
},
{
"StartTime": "2025-07-17T13:00:00+05:30",
"EndTime": "2025-07-17T14:00:00+05:30",
"NumAttendees": 1,
"Attendees": [
"SELF"
],
"Summary": "Lunch with Customers"
},
{
"StartTime": "2025-07-17T10:30:00+05:30",
"EndTime": "2025-07-17T11:00:00+05:30",
"NumAttendees": 3,
"Attendees": [
"userone.amd@gmail.com",
"usertwo.amd@gmail.com",
"userthree.amd@gmail.com"
],
"Summary": "Agentic AI Project Status Update"
}
]
}
],
"Subject": "Agentic AI Project Status Update",
"EmailContent": "Hi team, let's meet on Thursday for 30 minutes to discuss the status of Agentic AI Project.",
"EventStart": "2025-07-17T10:30:00+05:30",
"EventEnd": "2025-07-17T11:00:00+05:30",
"Duration_mins": "30"
}
Please follow : Submission Notebook
- processed
- output
- Correctness of Output – Accuracy and precision of the results
- Roundtrip Latency – Speed and efficiency of processing and response
- Maintenance of GitHub Repository – Code organization, documentation, and commit hygiene
- Creativeness in Approach – Innovation, originality, and problem-solving uniqueness
- Scoring Based on Performance – Combined assessment of correctness, latency, repo quality, and creativity
- Ranking Methodology – Comparative evaluation to determine the best-performing solution
