Repository navigation
GenAI Chat fails with OpenAI GPT-5.4+/GPT-6 models: "Function tools with reasoning_effort are not supported" #24555
Checklist
Describe the problem you are havingI just discovered the chat function and while trying it out, it fails on every message with "An error occurred while processing your request" when the chat role uses any current OpenAI model (tested gpt-6-sol, gpt-6-luna). The log shows OpenAI rejecting the request with a 400: "Function tools with reasoning_effort are not supported for gpt-6-sol in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'." I checked my issue with the AI bot with documentation and did not find any help there. So here's the issue, OpenAI blocks tools combined with reasoning on /v1/chat/completions for GPT-5.4 and later, and the GPT-6 models reason by default when reasoning_effort is left out. Frigate doesn't send reasoning_effort "none", even when enable_thinking is false, so using chat is unusable with these models. Descriptions work fine since they don't use tools. FIX: send reasoning_effort "none" when enable_thinking is false or use the responses API instead. Steps to reproduce
Version0.18.0-77a66e7 In which browser(s) are you experiencing the issue with?Brave v1.96.61 Frigate config filemqtt:
enabled: true
host: core-mosquitto
port: 1883
user: mqtt
password: *******
detectors:
ov:
type: openvino
device: GPU
model:
path: plus://*******
ffmpeg:
hwaccel_args: preset-vaapi
face_recognition:
enabled: true
model_size: large
genai:
descriptions:
provider: openai
api_key: *******
model: gpt-6.1-luna
roles:
- descriptions
chat:
provider: openai
api_key: *******
model: gpt-6.1-sol
roles:
- chat
audio:
enabled: true
listen:
- bark
- speech
- yell
- scream
- glass_breaking
- fire_alarm
- car_alarm
review:
genai:
enabled: true
alerts:
labels:
- person
- package
detections:
labels:
- person
- car
- dog
- cat
- package
- deer
go2rtc:
streams:
northeast_corner:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_01_sub
play_area:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_02_sub
road:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_03_sub
side_door:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_04_sub
carport:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_05_sub
driveway:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_06_sub
back_door:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_07_sub
front_yard:
- rtsp://frigate:*******@192.168.4.52:554/h264Preview_08_sub
record:
enabled: true
continuous:
days: 0
motion:
days: 0
alerts:
retain:
days: 30
pre_capture: 10
post_capture: 60
detections:
retain:
days: 30
snapshots:
enabled: true
retain:
default: 14
objects:
track:
- person
- car
- package
- dog
- cat
- deer
- ups
- fedex
filters:
person:
# Ignores weak or tiny "person" detections.
# Tune with that event: raise min_area to just above its area, but keep
# it below the size of a person at the far edge of your biggest yard.
min_area: 1000
min_score: 0.6
threshold: 0.75
genai:
enabled: true
prompt: Briefly describe what the {label} is doing in one or two short
sentences. State what is visible; do not speculate about intentions.
cameras:
northeast_corner:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/northeast_corner
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio
detect:
enabled: true
width: 640
height: 360
fps: 5
review:
alerts:
labels: []
play_area:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/play_area
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio
detect:
enabled: true
width: 640
height: 360
fps: 5
review:
alerts:
labels: []
genai:
activity_context_prompt: |
### This camera
The private back yard of the home. Only household members and their guests belong here.
### Who counts as known
A person is known only if Objects in Scene lists them by name, like "<name> (person)". A person with no name is unidentified.
### Level 0 - Normal
- Every person present is known, or is clearly accompanying a known person (a guest).
- No person is actually present: only animals, vehicles, or objects.
- False detection: the frames clearly show the "person" is really an animal, a shadow, or an object. Say that no person is visible.
### Level 1 - Suspicious
- An unidentified person is here during the day (6:00 AM–8:00 PM), whatever they are doing and however briefly.
### Level 2 - Critical
- An unidentified person is here at night (8:00 PM–6:00 AM), whatever they are doing and however briefly.
- Anyone with a weapon: a gun, a knife, or anything used to threaten or attack.
- Anyone holding break-in tools such as crowbars, pry bars, or bolt cutters. Ordinary tools a known person is using for obvious yard or home work don't count.
- Forced entry (prying or breaking a door, window, or lock), physical violence, or deliberate property damage.
### How to decide
Use the "Activity started at" time, not how bright the images are. Check these in order and stop at the first match:
1. Weapon, break-in tool, forced entry, violence, or property damage → Level 2
2. No person actually present, or every person is known or a guest → Level 0
3. Unidentified person at night (8:00 PM–6:00 AM) → Level 2
4. Unidentified person during the day (6:00 AM–8:00 PM) → Level 1
road:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/road
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio
detect:
enabled: true
width: 640
height: 360
fps: 5
objects:
mask:
object_mask_1:
friendly_name: Object Mask 1
enabled: true
coordinates:
0.335,0.187,0.443,0.222,0.773,0.013,0.712,0,0.01,0,0.007,0.405,0.166,0.265
filters:
car:
mask:
object_mask_1:
friendly_name: Object Mask 1 (car)
enabled: true
coordinates: 0.95,0.136,0.804,0.119,0.8,0.149,0.94,0.176
review:
alerts:
labels: []
required_zones:
- yard
detections:
labels:
- person
- car
required_zones: []
genai:
activity_context_prompt: |
### This camera
The front of the home, on a dead-end street. The street and sidewalk are public; the yard, porch, walkway, and driveway are private. Gary's Parking Area (zone_b80d8d24) and Miss Nan's Parking Area (zone_ae721a3c) belong to neighbors.
### Who counts as known
- A person is known only if Objects in Scene lists them by name, like "<name> (person)". A person with no name is unidentified.
- A vehicle listed by name, like "<name> (car)", is a familiar vehicle. Someone who arrives in a familiar vehicle and goes straight to the house counts as known.
### Level 0 - Normal
- Every person present is known, or is clearly accompanying a known person (a guest).
- No person is actually present: only vehicles, animals, or objects.
- False detection: the frames clearly show the "person" is really an animal, a shadow, or an object. Say that no person is visible.
- Any time: activity that stays on the street, the sidewalk, or a neighbor's parking area.
- Any time: a vehicle pulls in and immediately backs out to turn around (this is a dead-end street).
- 6:00 AM–10:00 PM: routine vehicle use, such as arriving, leaving, getting in or out, or loading or unloading.
- 6:00 AM–10:00 PM: deliveries (carrying packages to the door or porch, leaving them, and going), service or maintenance workers with tools, uniforms, or service vehicles, and people walking pets.
### Level 1 - Suspicious
- 10:00 PM–6:00 AM: an unidentified person on the property (yard, porch, walkway, driveway, or near the house or vehicles), whatever they are doing and however briefly.
- Any time: trying door or vehicle handles without going in, looking into windows or vehicles, checking multiple vehicles, taking packages or items that aren't theirs, climbing fences, hiding their face or actions, or lingering on the property with no clear purpose for most of the sequence.
### Level 2 - Critical
- A police car, fire truck, or ambulance, or uniformed police, firefighters, or paramedics, anywhere in view. Only when clearly identifiable by markings, light bars, or uniforms. This overrides every other rule, including turnarounds.
- Anyone with a weapon: a gun, a knife, or anything used to threaten or attack.
- Anyone holding break-in tools such as crowbars, pry bars, or bolt cutters. Ordinary tools a known person or service worker is using for obvious work don't count.
- Forced entry (prying or breaking a door, window, lock, or vehicle), physical violence, or deliberate property damage.
### How to decide
Use the "Activity started at" time, not how bright the images are. Check these in order and stop at the first match:
1. Emergency vehicle or responder, weapon, break-in tool, forced entry, violence, or property damage → Level 2
2. No person actually present, or every person is known or a guest → Level 0
3. Any Level 1 behavior (handles, windows, checking vehicles, taking items, climbing, hiding, lingering) → Level 1
4. Unidentified person on the property at night (10:00 PM–6:00 AM) → Level 1
5. Matches a Level 0 activity → Level 0
6. Anything else → Level 0 if brief with an apparent purpose; otherwise Level 1
zones:
yard:
coordinates: 0.005,0.423,0.997,0.199,0.989,0.983,0.001,0.986
enabled: true
inertia: 3
loitering_time: 0
friendly_name: Yard
roadway:
coordinates: 0,0.251,0.934,0.091,0.995,0.08,0.993,0.203,0.007,0.413
enabled: true
inertia: 3
loitering_time: 0
friendly_name: Roadway
zone_ae721a3c:
coordinates: 0.451,0.227,0.572,0.217,0.563,0.087,0.431,0.077
enabled: true
inertia: 3
loitering_time: 0
friendly_name: Miss Nan's Parking Area
side_door:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/side_door
input_args: preset-rtsp-restream
roles:
- record
- detect
- audio
detect:
enabled: true
width: 640
height: 360
fps: 5
zones:
parking_area:
coordinates: 0.602,0.28,0.845,0.234,0.81,0.003,0.62,0.007
enabled: true
inertia: 3
loitering_time: 0
friendly_name: Parking Area
review:
genai:
activity_context_prompt: |
### This camera
The carport, sidedocker-compose file or Docker CLI commandN/A, running Home Assistant add-on on Home Assistant OSRelevant Frigate log output2026-10-03 21:34:57.506202825 [2026-10-03 16:34:57] frigate.genai.plugins.openai WARNING : OpenAI streaming returned an error: Error code: 400 - {'error': {'message': "Function tools with reasoning_effort are not supported for gpt-5.6-luna in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'.", 'type': 'invalid_request_error', 'param': 'reasoning_effort', 'code': None}}
2026-10-03 21:35:07.438654579 127.0.0.1 - - [03/Oct/2026:16:35:07 -0500] "" 400 0 "-" "-" "-" request_time="0.000" upstream_response_time="-"
2026-10-03 21:35:10.261212346 [2026-10-03 16:35:10] frigate.genai.plugins.openai WARNING : OpenAI streaming returned an error: Error code: 400 - {'error': {'message': "Function tools with reasoning_effort are not supported for gpt-5.6-luna in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'.", 'type': 'invalid_request_error', 'param': 'reasoning_effort', 'code': None}}
2026-10-03 21:35:10.263717960 172.30.32.2 - - [03/Oct/2026:16:35:10 -0500] "POST /api/chat/completion HTTP/1.1" 200 90 "http://192.168.4.10:8123/api/hassio_ingress/zTQDE-GLvzfVbNmJPJVWv_wzIPy8wnNGI5Qw-vtgJBk/chat" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36" "192.168.4.54, 172.30.32.1" request_time="0.189" upstream_response_time="0.186"Relevant go2rtc log outputN/A The error comes from the GenAI chat request to OpenAI.
nothing related appears in the go2rtc logs.Operating systemHome Assistant OS Install methodHome Assistant App Network connectionWired Camera make and modelReolink Screenshots of the Frigate UI's System metrics pages
Any other information that may be helpfulChat works with <= 5.1 model, fails to work with > 5.1 openai models |
Replies: 1 comment 3 replies
|
This is not a bug. Frigate doesn't send |



This is not a bug. Frigate doesn't send
reasoning_effortto OpenAI unless you specify it, and these newer models reason by default. OpenAI doesn't allow reasoning together with tools on the chat completions endpoint. Try adding this to the chat provider withruntime_options: