Discourse AI error (Gemini 1.5)

AI-generated summary

A user reports an error in the Discourse AI plugin related to the Gemini 1.5 API, specifically an undefined method 'dig' for nil:NilClass error occurring in the extract_completion_from method Truest. The full backtrace points to a failure in processing an API response, likely due to a nil value being passed to the dig method. Falco asks for more details, and the user provides the full backtrace Truest. Another user, Falco, suggests checking the API key and server connectivity, which the original user confirms is not the issue Truest. The discussion is ultimately closed as stale by sam, noting that 2.5 flash and pro are well supported.

undefined method `dig’ for nil:NilClass" Error with Discourse AI Plugin

I’m encountering the following error while using the Discourse AI plugin:

Error Message:

Job exception: undefined method `dig' for nil:NilClass

Location:

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/gemini.rb:107:in extract_completion_from’`

Context:

This error seems to occur when the code attempts to use the dig method on a nil value, likely while processing an API response within the extract_completion_from method.

1 Like

Can you share the full backtrace please?

1 Like

Job exception: undefined method `dig' for nil:NilClass


Backtrace

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/gemini.rb:107:in `extract_completion_from'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:224:in `block (4 levels) in perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:216:in `each'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:216:in `block (3 levels) in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:535:in `call_block'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:526:in `<<'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:168:in `read'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:631:in `read_chunked'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:595:in `block in read_body_0'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:588:in `inflater'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:593:in `read_body_0'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:363:in `read_body'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:184:in `block (2 levels) in perform_completion!'
/usr/local/lib/ruby/3.2.0/net/http.rb:2353:in `block in transport_request'
/usr/local/lib/ruby/3.2.0/net/http/response.rb:320:in `reading_body'
/usr/local/lib/ruby/3.2.0/net/http.rb:2352:in `transport_request'
/usr/local/lib/ruby/3.2.0/net/http.rb:2306:in `request'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:50:in `step'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:18:in `request_with_mini_profiler'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:122:in `block in perform_completion!'
/usr/local/lib/ruby/3.2.0/net/http.rb:1570:in `start'
/usr/local/lib/ruby/3.2.0/net/http.rb:1029:in `start'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:105:in `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:216:in `generate'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/bot.rb:72:in `reply'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:324:in `reply_to_chat_message'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_chat_reply.rb:21:in `execute'
/var/www/discourse/app/jobs/base.rb:305:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:292:in `block in perform'
/var/www/discourse/app/jobs/base.rb:288:in `each'
/var/www/discourse/app/jobs/base.rb:288:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

Gemini 1.5 is working fine for us here, are you sure your API key is working and that your server can reach the Gemini API ?

1 Like

Yes, I’ve actually been using it without any issues.

If it works properly without having to do a separate Google OAuth authentication for the API key, I’m confident I’ve configured everything correctly.

Sorry closing this as stale, 2.5 flash and pro are very well supported these days.