| import gradio as gr |
| import os |
| from typing import Dict, List, Union, Any |
| import logging |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
| from llm_parser import llm_parse_tasks |
| from notion_handler import create_tasks_database, push_tasks_to_notion |
|
|
| def organize_goals_into_notion(user_input: str) -> Dict[str, Any]: |
| """ |
| Process a single goal into Notion tasks. |
| Returns a dictionary with success status and detailed response. |
| """ |
| try: |
| logger.info(f"Processing user input: {user_input}") |
| tasks = llm_parse_tasks(user_input) |
| if isinstance(tasks, str): |
| logger.error(f"Failed to parse tasks: {tasks}") |
| return { |
| "success": False, |
| "error": "Failed to parse tasks", |
| "details": tasks |
| } |
| |
| db_id = create_tasks_database() |
| push_tasks_to_notion(tasks, db_id) |
|
|
| task_names = [t.get("task", "Untitled") for t in tasks] |
| logger.info(f"Successfully created {len(task_names)} tasks") |
| return { |
| "success": True, |
| "message": f"✅ {len(task_names)} tasks added to Notion", |
| "tasks": task_names, |
| "database_id": db_id |
| } |
| except Exception as e: |
| logger.error(f"Error processing request: {str(e)}") |
| return { |
| "success": False, |
| "error": str(e), |
| "details": "An error occurred while processing your request" |
| } |
|
|
| |
| demo = gr.Interface( |
| fn=organize_goals_into_notion, |
| inputs=gr.Textbox( |
| lines=4, |
| placeholder="What do you want to get done this week?", |
| label="Your Goals" |
| ), |
| outputs=gr.JSON(label="Results"), |
| title="🧠 NotionTaskSense", |
| description="Turn your goals into structured Notion tasks", |
| examples=[ |
| ["I need to update my resume, apply to 3 jobs, and study for AWS certification"], |
| ["Meet with team about project timeline, prepare presentation for client, and follow up on pending emails"], |
| ], |
| theme=gr.themes.Soft() |
| ) |
|
|
| |
| organize_goals_into_notion.mcp_type = "function" |
| organize_goals_into_notion.mcp_description = "Organize goals into structured Notion tasks. Input should be a natural language description of tasks or goals." |
| organize_goals_into_notion.mcp_input_type = "string" |
| organize_goals_into_notion.mcp_output_type = "json" |
| organize_goals_into_notion.mcp_name = "organize_goals_into_notion" |
|
|
| if __name__ == "__main__": |
| demo.queue().launch( |
| server_name="0.0.0.0", |
| server_port=7860, |
| share=False |
| ) |
|
|
|
|
|
|
|
|