patterns-ai-core / langchainrb

Build LLM-powered applications in Ruby

Home Page:https://rubydoc.info/gems/langchainrb

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bundler inline is broken because of dependency loader

ipepe opened this issue · comments

When I try to use langchain in inline bundler it breaks:

require 'bundler/inline'

gemfile(true) do
  source 'https://rubygems.org'

  ruby '3.1.4'

  gem 'langchainrb', '~> 0.9.4'
  gem 'pdf-reader', '~> 1.4'
  gem 'pg'
  gem 'pgvector'
  gem 'faraday'
  gem 'sequel'
end

require 'langchain'
require 'forwardable'

llm = Langchain::LLM::Ollama.new(
  url: OLLAMA_URL,
  default_options: {
    completion_model_name: 'llama2',
    embeddings_model_name: 'llama2'
  }
)

I managed to get it temporarily fixed with:

Langchain::DependencyHelper.class_eval do # fix for bundler/inline
  def depends_on(gem_name, req: true)
    require gem_name
  end
end

But the initial error message looks like this:

/Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/bundler-2.5.6/lib/bundler/shared_helpers.rb:21:in `default_gemfile': Could not locate Gemfile (Bundler::GemfileNotFound)
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/bundler-2.5.6/lib/bundler/shared_helpers.rb:26:in `default_lockfile'
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/bundler-2.5.6/lib/bundler.rb:461:in `default_lockfile'
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/bundler-2.5.6/lib/bundler.rb:205:in `definition'
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/bundler-2.5.6/lib/bundler.rb:191:in `load'
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/langchainrb-0.9.4/lib/langchain/dependency_helper.rb:23:in `depends_on'
        from /Users/pptasinski/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/langchainrb-0.9.4/lib/langchain/llm/ollama.rb:37:in `initialize'
        from app.rb:55:in `new'
        from app.rb:55:in `<main>'

@ipepe Do you have any good ideas for a fix here?

Not really. Maybe it would be possible to detect that bundler/inline is loaded and depends_on shouldn't use that part of bundler that depends on Gemfile?