I am developing a shopping assistant Chatbot. While using function calling APIs, I get an error. The "auto" does not seem to fetch any function. I use "gpt-4o-mini" model.
I attempted the following code. I expected a smooth flow of the chat process and a final recommendation from the list of laptops available in a .csv file. But I get error which is also posted here.
from openai import OpenAI
import json
client = OpenAI()
# Define functions (tools)
tools = [
{
"type": "function",
"function": {
"name": "initialize_conversation",
"description": "Initialize the conversation for the shopping assistant chatbot.",
"parameters": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": False,
},
},
},
{
"type": "function",
"function": {
"name": "get_chat_completions",
"description": "Fetch chat completions based on the user’s input.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "The user’s input or query to process."
},
"json_format": {
"type": "boolean",
"description": "Flag to determine if the output should be in JSON format."
},
},
"required": ["input"],
"additionalProperties": False,
},
},
},
]
import openai
import json
# Initialize OpenAI client
client = openai.OpenAI()
# Step 1: Initialize conversation (I have used a more detailed function here
def initialize_conversation():
return [{"role": "system", "content": "You are a shopping assistant expert for laptops."}]
# Main function
def dialogue_mgmt_system_v2(tools):
conversation = initialize_conversation() # Start with system message.
print("Welcome to the Shopping Assistant! Type 'exit' to end the chat.\n")
while True:
# Step 3: Get user input
user_input = input("You: ")
if user_input.lower() == "exit":
print("Goodbye! Have a great day!")
break
# Add user input to the conversation
conversation.append({"role": "user", "content": user_input})
try:
**# Step 4: Call OpenAI API with tools**
response = client.chat_completions.create(
model="gpt-4-0613",
messages=conversation,
functions=tools, # Pass the tools here
function_call="auto" # Let the AI decide if a function is needed
)
# Step 5: Check if a function call is needed
if "function_call" in response.choices[0].message:
function_call = response.choices[0].message["function_call"]
function_name = function_call["name"]
function_args = json.loads(function_call["arguments"])
# Step 6: Execute the function
if function_name in globals():
function_output = globals()[function_name](**function_args)
# Add the function output to the conversation
conversation.append({"role": "function", "name": function_name, "content": json.dumps(function_output)})
else:
print(f"Error: Function '{function_name}' not found.")
# Step 7: AI-generated response
else:
assistant_response = response.choices[0].message["content"]
print(f"Assistant: {assistant_response}")
conversation.append({"role": "assistant", "content": assistant_response})
except Exception as e:
print(f"An error occurred: {e}"
)
** When I execute, The Chatbot gives the welcome message but when user input is received, the following error is thrown.**
A glimpse of the execution output and error message.
<Chatbot> Welcome! Type 'exit' to end the chat.
<User> Hi! I would like to buy a new laptop. Can you suggest me one please? <Chatbot> I am executing Step 4: Call OpenAI API with tools .
<Chatbot> I am executing Exception part .
<Chatbot> An error occurred: Error code: 400 - {'error': {'message': "Missing required parameter: 'functions[0].name'.", 'type': 'invalid_request_error', 'param': 'functions[0].name', 'code': 'missing_required_parameter'}}
I am developing a shopping assistant Chatbot. While using function calling APIs, I get an error. The "auto" does not seem to fetch any function. I use "gpt-4o-mini" model.
I attempted the following code. I expected a smooth flow of the chat process and a final recommendation from the list of laptops available in a .csv file. But I get error which is also posted here.
from openai import OpenAI
import json
client = OpenAI()
# Define functions (tools)
tools = [
{
"type": "function",
"function": {
"name": "initialize_conversation",
"description": "Initialize the conversation for the shopping assistant chatbot.",
"parameters": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": False,
},
},
},
{
"type": "function",
"function": {
"name": "get_chat_completions",
"description": "Fetch chat completions based on the user’s input.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "The user’s input or query to process."
},
"json_format": {
"type": "boolean",
"description": "Flag to determine if the output should be in JSON format."
},
},
"required": ["input"],
"additionalProperties": False,
},
},
},
]
import openai
import json
# Initialize OpenAI client
client = openai.OpenAI()
# Step 1: Initialize conversation (I have used a more detailed function here
def initialize_conversation():
return [{"role": "system", "content": "You are a shopping assistant expert for laptops."}]
# Main function
def dialogue_mgmt_system_v2(tools):
conversation = initialize_conversation() # Start with system message.
print("Welcome to the Shopping Assistant! Type 'exit' to end the chat.\n")
while True:
# Step 3: Get user input
user_input = input("You: ")
if user_input.lower() == "exit":
print("Goodbye! Have a great day!")
break
# Add user input to the conversation
conversation.append({"role": "user", "content": user_input})
try:
**# Step 4: Call OpenAI API with tools**
response = client.chat_completions.create(
model="gpt-4-0613",
messages=conversation,
functions=tools, # Pass the tools here
function_call="auto" # Let the AI decide if a function is needed
)
# Step 5: Check if a function call is needed
if "function_call" in response.choices[0].message:
function_call = response.choices[0].message["function_call"]
function_name = function_call["name"]
function_args = json.loads(function_call["arguments"])
# Step 6: Execute the function
if function_name in globals():
function_output = globals()[function_name](**function_args)
# Add the function output to the conversation
conversation.append({"role": "function", "name": function_name, "content": json.dumps(function_output)})
else:
print(f"Error: Function '{function_name}' not found.")
# Step 7: AI-generated response
else:
assistant_response = response.choices[0].message["content"]
print(f"Assistant: {assistant_response}")
conversation.append({"role": "assistant", "content": assistant_response})
except Exception as e:
print(f"An error occurred: {e}"
)
** When I execute, The Chatbot gives the welcome message but when user input is received, the following error is thrown.**
A glimpse of the execution output and error message.
<Chatbot> Welcome! Type 'exit' to end the chat.
<User> Hi! I would like to buy a new laptop. Can you suggest me one please? <Chatbot> I am executing Step 4: Call OpenAI API with tools .
<Chatbot> I am executing Exception part .
<Chatbot> An error occurred: Error code: 400 - {'error': {'message': "Missing required parameter: 'functions[0].name'.", 'type': 'invalid_request_error', 'param': 'functions[0].name', 'code': 'missing_required_parameter'}}
Share Improve this question asked Jan 15 at 11:16 SubathraKishoreSubathraKishore 1 New contributor SubathraKishore is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.1 Answer
Reset to default 0The issue lies in the structure of the tools
parameter. The functions were unnecessarily wrapped in a "function"
key, which the OpenAI API does not recognize. Each function should be defined directly in the tools
list with the following keys:
name
: The function's name (required for the API to identify it).description
: A brief explanation of what the function does.parameters
: A JSON Schema that defines the expected input for the function.
Here’s the corrected structure:
tools = [
{
"name": "initialize_conversation",
"description": "Initialize the conversation for the shopping assistant chatbot.",
"parameters": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": False,
},
},
{
"name": "get_chat_completions",
"description": "Fetch chat completions based on the user’s input.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "The user’s input or query."
},
"json_format": {
"type": "boolean",
"description": "Whether the output should be in JSON format."
},
},
"required": ["input"],
"additionalProperties": False,
},
},
]
Give a look at this: https://platform.openai.com/docs/guides/function-calling