I’ve set up a custom tool to use Perplexity Deep Research (which can take a few minutes), which I think is causing this error. Are there any work arounds besides making a custom plugin to extend Discourse AI’s http timeout?
Backtrace
Message (3 copies reported)
Job exception: Net::ReadTimeout
Backtrace
net-protocol-0.2.2/lib/net/protocol.rb:229:in `rbuf_fill'
net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
net-http-0.6.0/lib/net/http/response.rb:158:in `read_status_line'
net-http-0.6.0/lib/net/http/response.rb:147:in `read_new'
net-http-0.6.0/lib/net/http.rb:2420:in `block in transport_request'
net-http-0.6.0/lib/net/http.rb:2411:in `catch'
net-http-0.6.0/lib/net/http.rb:2411:in `transport_request'
net-http-0.6.0/lib/net/http.rb:2384:in `request'
rack-mini-profiler-4.0.0/lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
rack-mini-profiler-4.0.0/lib/mini_profiler/profiling_methods.rb:51:in `step'
rack-mini-profiler-4.0.0/lib/patches/net_patches.rb:18:in `request_with_mini_profiler'
/var/www/discourse/plugins/discourse-ai/lib/personas/tools/tool.rb:222:in `block in send_http_request'
net-http-0.6.0/lib/net/http.rb:1632:in `start'
net-http-0.6.0/lib/net/http.rb:1070:in `start'
/var/www/discourse/plugins/discourse-ai/lib/personas/tools/tool.rb:221:in `send_http_request'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:740:in `block (3 levels) in attach_http'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:772:in `in_attached_function'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:734:in `block (2 levels) in attach_http'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:171:in `eval'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:171:in `eval_with_timeout'
/var/www/discourse/plugins/discourse-ai/lib/personas/tool_runner.rb:187:in `invoke'
/var/www/discourse/plugins/discourse-ai/lib/personas/tools/custom.rb:70:in `invoke'
/var/www/discourse/plugins/discourse-ai/lib/personas/bot.rb:267:in `invoke_tool'
/var/www/discourse/plugins/discourse-ai/lib/personas/bot.rb:227:in `process_tool'
/var/www/discourse/plugins/discourse-ai/lib/personas/bot.rb:126:in `block in reply'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:187:in `block (3 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:230:in `block (5 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:230:in `each'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:230:in `block (4 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:221:in `each'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:221:in `block (3 levels) in perform_completion!'
net-protocol-0.2.2/lib/net/protocol.rb:535:in `call_block'
net-protocol-0.2.2/lib/net/protocol.rb:526:in `<<'
net-protocol-0.2.2/lib/net/protocol.rb:168:in `read'
net-http-0.6.0/lib/net/http/response.rb:631:in `read_chunked'
net-http-0.6.0/lib/net/http/response.rb:595:in `block in read_body_0'
net-http-0.6.0/lib/net/http/response.rb:588:in `inflater'
net-http-0.6.0/lib/net/http/response.rb:593:in `read_body_0'
net-http-0.6.0/lib/net/http/response.rb:363:in `read_body'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:216:in `block (2 levels) in perform_completion!'
net-http-0.6.0/lib/net/http.rb:2433:in `block in transport_request'
net-http-0.6.0/lib/net/http/response.rb:320:in `reading_body'
net-http-0.6.0/lib/net/http.rb:2430:in `transport_request'
net-http-0.6.0/lib/net/http.rb:2384:in `request'
rack-mini-profiler-4.0.0/lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
rack-mini-profiler-4.0.0/lib/mini_profiler/profiling_methods.rb:51:in `step'
rack-mini-profiler-4.0.0/lib/patches/net_patches.rb:18:in `request_with_mini_profiler'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:158:in `block in perform_completion!'
net-http-0.6.0/lib/net/http.rb:1632:in `start'
net-http-0.6.0/lib/net/http.rb:1070:in `start'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:129:in `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:374:in `generate'
/var/www/discourse/plugins/discourse-ai/lib/personas/bot.rb:90:in `reply'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:494:in `reply_to'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_reply.rb:18:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/discourse_event.rb:6:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:131:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'