Hi all,
I am trying to take a resume (as text string) and make structured data out of it with open ai api.
e.g. I want an array for each work experience so I can use that for further processing.
I am combining a hard coded prompt with the resume text string and try to use function calling get a structured response in json. See code below. However, I am getting a bad request error with the following:
Error code: 400 - {‘error’: {‘message’: “Invalid schema for function ‘extract_values_from_resume’: In context=(‘properties’, ‘opleiding’), array schema missing items”, ‘type’: ‘invalid_request_error’, ‘param’: None, ‘code’: None}}
Here is my code:
from openai import OpenAI
from dotenv import load_dotenv
import os
dotenv_path = '/config/settings/.env'
load_dotenv(dotenv_path)
dotenv_path = '/config/settings/.env'
load_dotenv(dotenv_path)
api_key = os.getenv("OPENAI_API_KEY")
hardcoded_prompt = """
Retrieve specified values from the source text. Indicate the absence of information with '#####'. Handle multiple data occurrences as arrays. Return answer as JSON object. Here is the source text:
"""
def prompt_open_ai(extracted_text):
api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=api_key)
tools = [
{
"type": "function",
"function": {
"name": "extract_values_from_resume",
"description": "Retrieve specified values from the source curriculum vitae and export according to the JSON schema",
"parameters": {
"type": "object",
"properties": {
"voornaam": {
"type": "string",
"description": "voornaam"
},
"achternaam": {
"type": "string",
"description": "achternaam"
},
"woonplaats": {
"type": "string",
"description": "woonplaats"
},
"profielomschrijving": {
"type": "string",
"description": "Stuk tekst waarin de persoon zichzelf beschrijft aan het begin van het cv"
},
"motivatie": {
"type": "string",
"description": "motivatie voor een specifieke baan of opdracht"
},
"opleiding": {
"type": "array",
"patternProperties": {
"een gevolgde opleiding": {
"items": {
"type": "object",
"properties": {
"naam": {
"type": "string",
"description": "naam van gevolgde opleiding"
},
"instituut": {
"type": "string",
"description": "naam van de school waar de opleiding is gevolgd"
},
"startjaar": {
"type": "integer",
"description": "eerste jaar van gevolgde opleiding"
},
"eindjaar": {
"type": "integer",
"description": "laatste jaar van gevolgde opleiding"
}
},
"required": ["naam", "instituut", "startjaar", "eindjaar"]
}
}
}
},
"certificering": {
"type": "array",
"patternProperties": {
"Beschrijving van een behaald certificaat": {
"items": {
"type": "object",
"properties": {
"naam": {
"type": "string",
"description": "naam van certificaat"
},
"instituut": {
"type": "string",
"description": "naam van de instantie waar het certificaat is behaald"
},
"eindjaar": {
"type": "integer",
"description": "jaar waarin certificering is behaald"
}
},
"required": ["naam", "instituut", "eindjaar"]
}
}
}
},
"werkervaring": {
"type": "array",
"patternProperties": {
"Beschrijving van een specifieke werkervaring": {
"items": {
"type": "object",
"properties": {
"startjaar": {
"type": "integer",
"description": "startjaar van werkervaring"
},
"eindjaar": {
"type": ["integer", "string"],
"description": "eindjaar van werkervaring. Zet 'heden' neer als de persoon hier momenteel nog werkzaam is."
},
"functietitel": {
"type": "string",
"description": "functietitel van werkervaring"
},
"bedrijf": {
"type": "string",
"description": "naam van bedrijf of organisatie waar deze werkervaring is opgedaan"
},
"plaats": {
"type": "string",
"description": "locatie van bedrijf of organisatie waar deze werkervaring is opgedaan"
},
"functieomschrijving": {
"type": "string",
"description": "Omschrijving van werkervaring, taken, verantwoordelijkheden, resultaten en overige informatie van deze werkervaring"
}
},
"required": ["startjaar", "eindjaar", "functietitel", "bedrijf", "plaats", "functieomschrijving"]
}
}
}
}
}
}
}
}
]
response = client.chat.completions.create(
model="gpt-4-1106-preview",
tools=tools,
tool_choice={"type": "function", "function": {"name": "extract_values_from_resume"}},
#temperature=2,
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "You are a machine that extracts specific bits of text and exports the exact quotes in JSON format."},
{"role": "user", "content": hardcoded_prompt + extracted_text},
],
)
return response.choices[0].message.content
print(response)
return response
Any help would be appreciated, thanks.