|
|
|
from openai import OpenAI |
|
import json |
|
import os |
|
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.Textbox(lines=10, label="Student Description"), |
|
outputs=gr.JSON(label="Extracted Student Information"), |
|
title="Student Information Extractor", |
|
description="Enter a student's description to extract structured information." |
|
) |
|
|
|
iface.launch() |
|
|