| | |
| | from openai import OpenAI |
| | import json |
| | from dotenv import load_dotenv |
| |
|
| | load_dotenv() |
| | api_key = os.getenv("OPENAI_API_KEY") |
| | client = OpenAI(api_key=api_key) |
| |
|
| | def extract_student_info(description): |
| | """ |
| | Extracts structured student information from a given description. |
| | """ |
| | |
| | student_info = { |
| | "name": None, |
| | "major": None, |
| | "school": None, |
| | "grades": None, |
| | "club": [] |
| | } |
| |
|
| | |
| | |
| |
|
| | return student_info |
| |
|
| | functions = [ |
| | { |
| | "name": "extract_student_info", |
| | "description": "Extracts structured student information from a given description.", |
| | "parameters": { |
| | "type": "object", |
| | "properties": { |
| | "description": { |
| | "type": "string", |
| | "description": "A detailed description of the student." |
| | } |
| | }, |
| | "required": ["description"] |
| | } |
| | } |
| | ] |
| |
|
| | def query_openai(prompt): |
| | response = client.chat.completions.create( |
| | model='gpt-4o-mini', |
| | messages=[{'role': 'user', 'content': prompt}], |
| | functions=functions, |
| | function_call='auto', |
| | ) |
| |
|
| | message = response['choices'][0]['message'] |
| |
|
| | if message.get('function_call'): |
| | function_name = message['function_call']['name'] |
| | function_args = json.loads(message['function_call']['arguments']) |
| |
|
| | if function_name == 'extract_student_info': |
| | description = function_args.get('description') |
| | function_response = extract_student_info(description) |
| |
|
| | return function_response |
| |
|
| | return message['content'] |
| |
|
| | import gradio as gr |
| |
|
| | def gradio_interface(description): |
| | prompt = f"Please extract the following information from the given text and return it as a JSON object:\n\nname\nmajor\nschool\ngrades\nclub\nThis is the body of text to extract the information from:\n{description}" |
| | result = query_openai(prompt) |
| | return result |
| |
|
| | iface = gr.Interface( |
| | fn=gradio_interface, |
| | inputs=gr.inputs.Textbox(lines=10, label="Student Description"), |
| | outputs=gr.outputs.JSON(label="Extracted Student Information"), |
| | title="Student Information Extractor", |
| | description="Enter a student's description to extract structured information." |
| | ) |
| |
|
| | iface.launch() |
| |
|