AI reasoning mode error

Version:

Discourse v2026.7.2 — Commits · discourse/discourse · GitHub — Ember v6.10.1

Error details:

DiscourseAi::Completions::Endpoints::OpenAi: status: 400 - body: {"error":{"code":400,"upstream_code":"invalid_request_error","message":"The `reasoning_content` in the thinking mode must be passed bac
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:218:in 'block in ActiveSupport::BroadcastLogger#dispatch' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:217:in 'Array#map' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:217:in 'ActiveSupport::BroadcastLogger#dispatch' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:129:in 'ActiveSupport::BroadcastLogger#error' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:685:in 'Kernel#public_send' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:685:in 'DiscourseAi::Completions::Endpoints::Base#failed_response_retry_status_and_delay' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:330:in 'block (3 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
net-http-0.9.1/lib/net/http.rb:2461:in 'block in Net::HTTP#transport_request' 
net-http-0.9.1/lib/net/http/response.rb:321:in 'Net::HTTPResponse#reading_body' 
net-http-0.9.1/lib/net/http.rb:2458:in 'Net::HTTP#transport_request' 
net-http-0.9.1/lib/net/http.rb:2410:in 'Net::HTTP#request' 
rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:19:in 'block in Net::HTTP#request_with_mini_profiler' 
rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:51:in 'Rack::MiniProfiler::ProfilingMethods#step' 
rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:18:in 'Net::HTTP#request_with_mini_profiler' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:325:in 'block (2 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
net-http-0.9.1/lib/net/http.rb:1630:in 'Net::HTTP#start' 
net-http-0.9.1/lib/net/http.rb:1064:in 'Net::HTTP.start' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:306:in 'block in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
<internal:kernel>:168:in 'Kernel#loop'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:282:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:191:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:50:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:218:in 'DiscourseAi::Completions::Endpoints::Base#replay_non_streaming_as_streaming!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:172:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:50:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:245:in 'DiscourseAi::Completions::Llm#generate' 
/var/www/discourse/plugins/discourse-ai/lib/agents/bot.rb:176:in 'DiscourseAi::Agents::Bot#reply' 
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:378:in 'DiscourseAi::AiBot::Playground#reply_to_chat_message' 
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_chat_reply.rb:20:in 'Jobs::CreateAiChatReply#execute' 
/var/www/discourse/app/jobs/base.rb:313:in 'block (2 levels) in Jobs::Base#perform' 
rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in 'RailsMultisite::ConnectionManagement.with_connection'
/var/www/discourse/app/jobs/base.rb:300:in 'block in Jobs::Base#perform' 
/var/www/discourse/app/jobs/base.rb:297:in 'Array#each' 
/var/www/discourse/app/jobs/base.rb:297:in 'Jobs::Base#perform' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:220:in 'Sidekiq::Processor#execute_job' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:185:in 'block (4 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:180:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/suppress_user_email_errors.rb:6:in 'Sidekiq::SuppressUserEmailErrors#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/discourse_event.rb:6:in 'Sidekiq::DiscourseEvent#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/pausable.rb:131:in 'Sidekiq::Pausable#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/job/interrupt_handler.rb:9:in 'Sidekiq::Job::InterruptHandler#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:26:in 'Sidekiq::Metrics::ExecutionTracker#track' 
sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:134:in 'Sidekiq::Metrics::Middleware#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:173:in 'Sidekiq::Middleware::Chain#invoke' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:184:in 'block (3 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:145:in 'block (6 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_retry.rb:118:in 'Sidekiq::JobRetry#local' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:144:in 'block (5 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/config.rb:39:in 'block in <class:Config>' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:139:in 'block (4 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:281:in 'Sidekiq::Processor#stats' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:134:in 'block (3 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_logger.rb:15:in 'Sidekiq::JobLogger#call' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:133:in 'block (2 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_retry.rb:85:in 'Sidekiq::JobRetry#global' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:132:in 'block in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_logger.rb:40:in 'Sidekiq::JobLogger#prepare' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:131:in 'Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:183:in 'block (2 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'Thread.handle_interrupt' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'block in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Thread.handle_interrupt' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:86:in 'Sidekiq::Processor#process_one' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:76:in 'Sidekiq::Processor#run' 
sidekiq-7.3.10/lib/sidekiq/component.rb:10:in 'Sidekiq::Component#watchdog' 
sidekiq-7.3.10/lib/sidekiq/component.rb:19:in 'block in Sidekiq::Component#safe_thread' 

AI Configuration:

I have tried the following:

Attempt 1:
Enabled the option to disable streaming completion (converting streaming requests to non-streaming requests), but the test run resulted in an error:

Streaming request failed: The model returned an empty response.

Attempt 2:
Disabled the option to disable streaming completion (converting streaming requests to non-streaming requests).

At the same time, I selected “none” for Reasoning (only applicable to reasoning models) (optional).

The test run worked normally, but this caused me to lose the reasoning functionality, which is not what I want.

Question: Is the issue that the AI plugin is not handling the test run logic correctly, or is it that the response format from the large model platform I’m integrating with is mismatched? If more information is needed, I am happy to provide it to help identify the specific issue.

Is the DiscourseAi::Completions::Endpoints::OpenAi: ... error message cut off?

I just searched that error message on Bing and it seems to be a DeepSeek provider-specific issue

https://blog.csdn.net/weixin_38106322/article/details/161165043

Have you tested another provider (e.g. OpenRouter)?