500 error in request to gpt-4o-audio-* model

Getting this error in agent with function.

500 The server had an error processing your request. Sorry about that! You can retry your request, or contact us through our help center at help.openai.com if you keep seeing this error

I have another agent with function, but it works fine. Both agents have same structure but first throws error on api call.

If i remove fuction definition - agent works fine. But i cant see the issue. Because function definitions are similar. Different only names of functions

Using gpt-4o-audio-preview-2024-10-01 model

Function definition file:

export const get_contact_info = {
  type: 'function',
  function: {
    name: 'get_contact_info',
    description: 'Get user information',
    parameters: {
      type: 'object',
      properties: {},
    },
  },
} as const;

export const redirect_to_operator = {
  type: 'function',
  function: {
    name: 'redirect_to_operator',
    description: 'Redirect user to operator',
    parameters: {
      type: 'object',
      properties: {},
    },
  },
} as const;

Placing this objects in tools field on model call. But first works fine and second throws error.

Could you provide a snippet of your code so it’s easier to identify where the issue is caused? :hugs:

Oh yeah. Updated the post

From what I’m understanding, you want to use both functions and you’re exporting them as const.

The first function seems to work fine but on the second one you get an error thrown.

Could this be because you are exporting both functions as const; and you need a different name?

Example:

For function1 you would export
as function1;

For function2 you would export
as function2;

Do let me know whether or not this helped. :hugs:

Nope. I tryed place plain objects in tool params array and still same error. If i change model to gpt-4o then its works fine. But i wanna get voice message in base64 along side with text message

Could you show how you’re processing the function calls? Maybe that will give some insight on what the issue could be.

Another thing you can try is removing the first function and just running the second, see if it works.

Good luck! :blush:

Setting up tools in agent (here using only second tool that not works)

    this.tools = {
      [redirect_to_operator.function.name]: {
        ...redirect_to_operator,
        func: () => {
          return 'Dialog moved to operator';
        },
      },
    };

Mapping functions definitions for model request (removing func field with function)

  public mapToolFunctions(): ChatCompletionTool[] {
    const toolDefArray: ChatCompletionTool[] = [];
    Object.values(this._tools).forEach((value) => {
      return toolDefArray.push({ type: value.type, function: value.function });
    });
    return toolDefArray;
  }

Making request to model. Here it fails with second function

    const payloadMessages: ChatCompletionMessageParam[] = [{ role: 'system', content: prompt }, ...messages];

    const result = await this.model.chat.completions.create({
      model: 'gpt-4o-audio-preview-2024-10-01',
      modalities: ['text', 'audio'],
      audio: { voice: 'alloy', format: 'wav' },
      tools: this.mapToolFunctions(),
      messages: payloadMessages,
    });

Usually a 500 error occurs when you are sending a wrong payload.

Could you log the payload you are sending? Maybe we can see an error with the payload and go from there. :blush:

Messages in payload:

[
  {
    role: 'system',
    content: 'Ты система для обработки неклассифицированных вопросов пользователей. Ты можешь: - Приветствовать пользователя. Если сообщение пользователя является приветствием, то поприветствуй его (официально) в ответ и спроси с решением какого вопроса ты можешь помочь; - Отвечать пользователю на базовые разговорные вопросы. Если вопрос или утверждение является провокационным (связан с политикой, вооруженные конфликты, рассовые вопросы и т.п), то попроси его уточнить вопрос. Так же не давай объяснения на термины, которые касаются провакационных тем (политика, войны, рассовые вопросы и т.д.); - Сообщать пользователю о переводе на оператора. Если пользователь уточнаяет вопрос более двух раз непрерывно, то сообщи о том, что не можешь помочь с вопросом и перенаправляешь на оператора.'
  },
  { role: 'user', content: 'Что такое США?' }
]

The JSON provided has single quotes instead of double quotes and a trailing comma. Here is the corrected JSON:

[
  {
    "role": "system",
    "content": "Ты система для обработки неклассифицированных вопросов пользователей. Ты можешь: - Приветствовать пользователя. Если сообщение пользователя является приветствием, то поприветствуй его (официально) в ответ и спроси с решением какого вопроса ты можешь помочь; - Отвечать пользователю на базовые разговорные вопросы. Если вопрос или утверждение является провокационным (связан с политикой, вооруженные конфликты, рассовые вопросы и т.п), то попроси его уточнить вопрос. Так же не давай объяснения на термины, которые касаются провакационных тем (политика, войны, рассовые вопросы и т.д.); - Сообщать пользователю о переводе на оператора. Если пользователь уточнаяет вопрос более двух раз непрерывно, то сообщи о том, что не можешь помочь с вопросом и перенаправляешь на оператора."
  },
  { 
    "role": "user", 
    "content": "Что такое США?" 
  }
]

If this resolved your issue, do let me know and mark this an an answer.

Always check and validate your payloads. :wink:

Good luck! :hugs:

But in working agent i send almost same array of js objects:

[
  {
    role: 'system',
    content: '\n' +
      '    Ты виртуальный ассистент который специализируется на обработке запросов от пользователей посредством поиска информации в базе знаний\n' +
      '\n' +
      '    Перед началом получи информацию о пользователе и его объектах если ее нету в истории сообщений (get_contact_info)\n' +
      '    \n' +
      '    Ты можешь \n' +
      '    - Использовать данные из базы знаний для ответа на вопрос\n' +
      '    - Если данные из базы знаний не подходят или база знаний пуста,то отвечай сообщением "escalate_to_classifier".\n' +
      '    - Если пользователь отвечает, что не удовлетворен ответом на вопрос или ответ не подходит под его вопрос, то отвечай только сообщением: "escalate_to_classifier"\n' +
      '\n' +
      '    База знаний:\n' +
      '    Когда будут начисляться коммунальные платежи?\n' +
      'Скрипт: Начисление коммунальных платежей начинается с момента регистрации права собственности на клиента.\n' +
      '\n' +
      'Обязательно ли должен быть осмотр перед подписанием договора купли-продажи?\n' +
      'Скрипт: Осмотр перед подписанием договора купли-продажи необязателен. Проводится на усмотрение клиента.\n' +
      '\n' +
      '    В конце спроси у пользователя есть ли у него еще вопросы.\n' +
      '    '
  },
  { role: 'user', content: 'Когда начнется начисление коммуналки?' }
]

And it works fine

You’re right!
I still recommend running the payloads you’re sending through a JSON validator just once to completely rule out the possibility of the payload being wrong. (Another plus is that you’ll have payloads that follow a certain standard which improves the quality of your code.)

I will try to figure out a different answer in the meantime and update you with any news if I have any. :hugs:

I am getting this same error in our chat completions based agent.

The server had an error while processing your request. Sorry about that!

Few things about our case:

  • We have a fairly large system prompt
  • stream is set to true
  • The only other message is a user role, ‘hello how are you’, sent as format wav
  • parallel_tool_calls is set to false
  • audio is set to alloy/pcm16
  • modalities is text, audio
  • We have 6 functions defined in our tools array

What I’ve tried while debugging:

  • Our non-multimodal agent works fine, with the same tool definitions, so it isn’t a parsing problem with the tools. Non-multimodal, meaning, prior to the recent updates to chat completions, I hooked up a pipeline that sent the audio to get transcribed, then to the old chat completions, then took the response to TTS, and played back the audio. That pipeline works fine, with all the tool definitions.
  • If I remove three of the tools, the call completes correctly
  • Seeing this, I thought it might be a total content length issue, but if I remove our system prompt, leaving the tool definitions, it still fails (at a smaller content length than when I remove three of the tools). This leads me to believe it isn’t a total content length issue, but rather something specific with the tools.
  • I tried removing various combinations of tools, and it doesn’t seem related to a specific tool, but rather the total size of tool definitions.

Perhaps when used in a multimodal fashion, the total amount of space you can use for tool definitions is smaller? We did run into a few issues during development of the non-multimodal agent when we made the description field in a tool too long, for example. Maybe this error is some variation of that?

just an addition, this happens even if the content sent in the user message is text, not audio.