|
import json |
|
import os |
|
|
|
from openai import OpenAI |
|
import datetime |
|
import gradio as gr |
|
|
|
from schedule import create_event |
|
|
|
def get_api_key(): |
|
key = os.getenv('OPENAI_API_KEY') |
|
if not key: |
|
raise ValueError("Need to set the environment variable OPENAI_API_KEY") |
|
return key |
|
|
|
client = OpenAI(api_key=get_api_key()) |
|
|
|
def parse_event(description): |
|
prompt = f"Parse the following event description into structured JSON fields: '{description}'. The fields should include name, description, location, start_datetime, and end_datetime. Put an emoji relevant to the event at the beginning of the name." |
|
|
|
today = datetime.date.today().strftime("%B %d, %Y") |
|
response = client.chat.completions.create( |
|
model="gpt-4o", |
|
response_format={"type": "json_object"}, |
|
messages=[ |
|
{ |
|
"role": "system", |
|
"content": f"You are a helpful assistant designed to output JSON. Today's date is {today}.", |
|
}, |
|
{"role": "user", "content": prompt}, |
|
], |
|
) |
|
structured_response = response.choices[0].message.content.strip() |
|
return json.loads(structured_response) |
|
|
|
|
|
def schedule(parsed): |
|
create_event( |
|
parsed["start_datetime"], |
|
parsed["end_datetime"], |
|
parsed["name"], |
|
parsed["description"], |
|
parsed["location"], |
|
) |
|
return "Event scheduled!" |
|
|
|
|
|
with gr.Blocks() as demo: |
|
description = gr.TextArea(label="description") |
|
parse = gr.Button("parse") |
|
parsed = gr.JSON(label="parsed event") |
|
parse.click(parse_event, description, parsed) |
|
scheduleBtn = gr.Button("schedule") |
|
output = gr.Label(label="output") |
|
scheduleBtn.click(schedule, parsed, output) |
|
|
|
demo.launch() |
|
|