langchainrb 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 735fb9932ea28c3d6f3938b964e4edd5d030ed4c12c46a9f35293d35469cf952
4
- data.tar.gz: 66a8030ea90c19c1950c4136c48677b6490df948dc2693562eca7b8a370dc3ae
3
+ metadata.gz: a5a782dd2282ab5dd4aed3f1d0e421a4f9b227fa4c5450ed27f2f98a86af74f4
4
+ data.tar.gz: b47bb5d6789d7abb81f56ee1beb0b52323184f578475aec3e92fcc19b4a1314a
5
5
  SHA512:
6
- metadata.gz: 426ae91fc1c2d297b84758f6fe87d62a6dbaf4614776ab7d247c994ce849a979d1752d1241963f7fd3b8d71a68dc6f576660daabcacf19159b63acdda65fa7d9
7
- data.tar.gz: 4acd1a02be734cccc431499c0e1659694004f8ee30b27b99d51b580373c4a410e87f8bf96edfeec38e67f1066d34441ccbb4ce6e4b6597623f606876e3fcb16f
6
+ metadata.gz: 4e918b49b2b04a0e7009db732a5b24ab080a0d8d6b4c3be4084aa3a1492ddd6c1627d467b8bff4b34e1e5160b71622a75772ef92658dce2589b9542b8b0a8137
7
+ data.tar.gz: 3b465f1a05e614d64d416582aeaf7d998bf51422705331b220e08b00774d4beed4dcbc4e2a71b81bad87cddfe8c8f4c8db421d650e7161f16b26a1259922f71c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.4] - 2023-05-16
4
+ - LLMs
5
+ - Introducing support for HuggingFace
6
+
3
7
  ## [0.3.3] - 2023-05-16
4
8
  - Dependencies are now optionally loaded and required at runtime
5
9
  - Start using `standardrb` for linting
data/Gemfile.lock CHANGED
@@ -1,15 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- langchainrb (0.3.3)
5
- eqn (~> 1.6.5)
6
- google_search_results (~> 2.0.0)
7
- milvus (~> 0.9.0)
8
- pinecone (~> 0.1.6)
9
- qdrant-ruby (~> 0.9.0)
10
- ruby-openai (~> 4.0.0)
11
- weaviate-ruby (~> 0.8.0)
12
- wikipedia-client (~> 1.17.0)
4
+ langchainrb (0.3.4)
13
5
 
14
6
  GEM
15
7
  remote: https://rubygems.org/
@@ -125,6 +117,8 @@ GEM
125
117
  httparty (0.21.0)
126
118
  mini_mime (>= 1.0.0)
127
119
  multi_xml (>= 0.5.2)
120
+ hugging-face (0.3.2)
121
+ faraday (~> 1.0)
128
122
  i18n (1.13.0)
129
123
  concurrent-ruby (~> 1.0)
130
124
  ice_nine (0.11.2)
@@ -253,11 +247,20 @@ PLATFORMS
253
247
  DEPENDENCIES
254
248
  cohere-ruby (~> 0.9.3)
255
249
  dotenv-rails (~> 2.7.6)
250
+ eqn (~> 1.6.5)
251
+ google_search_results (~> 2.0.0)
252
+ hugging-face (~> 0.3.2)
256
253
  langchainrb!
254
+ milvus (~> 0.9.0)
255
+ pinecone (~> 0.1.6)
257
256
  pry-byebug (~> 3.10.0)
257
+ qdrant-ruby (~> 0.9.0)
258
258
  rake (~> 13.0)
259
259
  rspec (~> 3.0)
260
+ ruby-openai (~> 4.0.0)
260
261
  standardrb
262
+ weaviate-ruby (~> 0.8.0)
263
+ wikipedia-client (~> 1.17.0)
261
264
 
262
265
  BUNDLED WITH
263
266
  2.4.0
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  🦜️🔗 LangChain.rb
2
- ---
2
+ ---
3
3
  ⚡ Building applications with LLMs through composability ⚡
4
4
 
5
5
  👨‍💻👩‍💻 CURRENTLY SEEKING PEOPLE TO FORM THE CORE GROUP OF MAINTAINERS WITH
@@ -39,6 +39,8 @@ require "langchain"
39
39
 
40
40
  Choose the LLM provider you'll be using (OpenAI or Cohere) and retrieve the API key.
41
41
 
42
+ Add `gem "weaviate-ruby", "~> 0.8.0"` to your Gemfile.
43
+
42
44
  Pick the vector search database you'll be using and instantiate the client:
43
45
  ```ruby
44
46
  client = Vectorsearch::Weaviate.new(
@@ -49,9 +51,9 @@ client = Vectorsearch::Weaviate.new(
49
51
  )
50
52
 
51
53
  # You can instantiate any other supported vector search database:
52
- client = Vectorsearch::Milvus.new(...)
53
- client = Vectorsearch::Qdrant.new(...)
54
- client = Vectorsearch::Pinecone.new(...)
54
+ client = Vectorsearch::Milvus.new(...) # `gem "milvus", "~> 0.9.0"`
55
+ client = Vectorsearch::Qdrant.new(...) # `gem"qdrant-ruby", "~> 0.9.0"`
56
+ client = Vectorsearch::Pinecone.new(...) # `gem "pinecone", "~> 0.1.6"`
55
57
  ```
56
58
 
57
59
  ```ruby
@@ -92,6 +94,8 @@ client.ask(
92
94
 
93
95
  ### Using Standalone LLMs 🗣️
94
96
 
97
+ Add `gem "ruby-openai", "~> 4.0.0"` to your Gemfile.
98
+
95
99
  #### OpenAI
96
100
  ```ruby
97
101
  openai = LLM::OpenAI.new(api_key: ENV["OPENAI_API_KEY"])
@@ -116,6 +120,9 @@ cohere.embed(text: "foo bar")
116
120
  cohere.complete(prompt: "What is the meaning of life?")
117
121
  ```
118
122
 
123
+ #### HuggingFace
124
+ Add `gem "hugging-face", "~> 0.3.2"` to your Gemfile.
125
+
119
126
  ### Using Prompts 📋
120
127
 
121
128
  #### Prompt Templates
@@ -206,6 +213,8 @@ Agents are semi-autonomous bots that can respond to user questions and use avail
206
213
 
207
214
  #### Chain-of-Thought Agent
208
215
 
216
+ Add `gem "openai-ruby"`, `gem "eqn"`, and `gem "google_search_results"` to your Gemfile
217
+
209
218
  ```ruby
210
219
  agent = Agent::ChainOfThoughtAgent.new(llm: :openai, llm_api_key: ENV["OPENAI_API_KEY"], tools: ['search', 'calculator'])
211
220
 
@@ -237,7 +246,7 @@ LangChain.rb uses standard logging mechanisms and defaults to `:debug` level. Mo
237
246
  To show all log messages:
238
247
 
239
248
  ```ruby
240
- Lanchgain.logger.level = :info
249
+ Langchain.logger.level = :info
241
250
  ```
242
251
 
243
252
  ## Development
@@ -1,5 +1,8 @@
1
1
  require "langchain"
2
2
 
3
+ # gem install pinecone
4
+ # or add `gem "pinecone"` to your Gemfile
5
+
3
6
  # Instantiate the Qdrant client
4
7
  pinecone = Vectorsearch::Pinecone.new(
5
8
  environment: ENV["PINECONE_ENVIRONMENT"],
@@ -1,5 +1,8 @@
1
1
  require "langchain"
2
2
 
3
+ # gem install qdrant-ruby
4
+ # or add `gem "qdrant-ruby"` to your Gemfile
5
+
3
6
  # Instantiate the Qdrant client
4
7
  qdrant = Vectorsearch::Qdrant.new(
5
8
  url: ENV["QDRANT_URL"],
@@ -1,5 +1,8 @@
1
1
  require "langchain"
2
2
 
3
+ # gem install weaviate-ruby
4
+ # or add `gem "weaviate-ruby"` to your Gemfile
5
+
3
6
  # Instantiate the Weaviate client
4
7
  weaviate = Vectorsearch::Weaviate.new(
5
8
  url: ENV["WEAVIATE_URL"],
@@ -49,7 +49,6 @@ module Agent
49
49
  max_tokens: 500
50
50
  )
51
51
 
52
- binding.pry
53
52
  # Append the response to the prompt
54
53
  prompt += response
55
54
 
data/lib/langchain.rb CHANGED
@@ -20,6 +20,7 @@ end
20
20
  module LLM
21
21
  autoload :Base, "llm/base"
22
22
  autoload :Cohere, "llm/cohere"
23
+ autoload :HuggingFace, "llm/hugging_face"
23
24
  autoload :OpenAI, "llm/openai"
24
25
  end
25
26
 
@@ -34,7 +35,6 @@ end
34
35
  module Tool
35
36
  autoload :Base, "tool/base"
36
37
  autoload :Calculator, "tool/calculator"
37
- autoload :News, "tool/news"
38
38
  autoload :SerpApi, "tool/serp_api"
39
39
  autoload :Wikipedia, "tool/wikipedia"
40
40
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LLM
4
+ class HuggingFace < Base
5
+ # The gem does not currently accept other models:
6
+ # https://github.com/alchaplinsky/hugging-face/blob/main/lib/hugging_face/inference_api.rb#L32-L34
7
+ DEFAULTS = {
8
+ embeddings_model_name: "sentence-transformers/all-MiniLM-L6-v2"
9
+ }.freeze
10
+
11
+ #
12
+ # Intialize the HuggingFace LLM
13
+ # @param api_key [String] The API key to use
14
+ #
15
+ def initialize(api_key:)
16
+ depends_on "hugging-face"
17
+ require "hugging_face"
18
+
19
+ @client = ::HuggingFace::InferenceApi.new(api_token: api_key)
20
+ end
21
+
22
+ # Generate an embedding for a given text
23
+ # @param text [String] The text to embed
24
+ # @return [Array] The embedding
25
+ def embed(text:)
26
+ response = client.embedding(
27
+ input: text,
28
+ model: DEFAULTS[:embeddings_model_name]
29
+ )
30
+ end
31
+ end
32
+ end
data/lib/llm/openai.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "openai"
4
-
5
3
  module LLM
6
4
  class OpenAI < Base
7
5
  DEFAULTS = {
@@ -12,6 +10,9 @@ module LLM
12
10
  }.freeze
13
11
 
14
12
  def initialize(api_key:)
13
+ depends_on "ruby-openai"
14
+ require "openai"
15
+
15
16
  # TODO: Add support to pass `organization_id:`
16
17
  @client = ::OpenAI::Client.new(access_token: api_key)
17
18
  end
data/lib/logging.rb CHANGED
@@ -4,7 +4,7 @@ require "logger"
4
4
 
5
5
  module Langchain
6
6
  def self.logger
7
- @@logger ||= Logger.new(STDOUT, level: :warn, formatter: -> (severity, datetime, progname, msg) { "[LangChain.rb] #{msg}\n" })
7
+ @@logger ||= Logger.new($stdout, level: :warn, formatter: ->(severity, datetime, progname, msg) { "[LangChain.rb] #{msg}\n" })
8
8
  end
9
9
 
10
10
  def self.logger=(instance)
data/lib/prompt/base.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "strscan"
4
+ require "json"
4
5
 
5
6
  module Prompt
6
7
  class Base
data/lib/tool/base.rb CHANGED
@@ -20,11 +20,18 @@ module Tool
20
20
  const_set(:DESCRIPTION, value.tr("\n", " ").strip)
21
21
  end
22
22
 
23
- # Executes the tool and returns the answer
23
+ # Instantiates and executes the tool and returns the answer
24
24
  # @param input [String] input to the tool
25
25
  # @return [String] answer
26
26
  def self.execute(input:)
27
- raise NotImplementedError, "Your tool must implement the `self.execute(input:)` method that returns a string"
27
+ new.execute(input: input)
28
+ end
29
+
30
+ # Executes the tool and returns the answer
31
+ # @param input [String] input to the tool
32
+ # @return [String] answer
33
+ def execute(input:)
34
+ raise NotImplementedError, "Your tool must implement the `#execute(input:)` method that returns a string"
28
35
  end
29
36
 
30
37
  #
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "eqn"
4
-
5
3
  module Tool
6
4
  class Calculator < Base
7
5
  description <<~DESC
@@ -10,11 +8,16 @@ module Tool
10
8
  The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.
11
9
  DESC
12
10
 
11
+ def initialize
12
+ depends_on "eqn"
13
+ require "eqn"
14
+ end
15
+
13
16
  # Evaluates a pure math expression or if equation contains non-math characters (e.g.: "12F in Celsius") then
14
17
  # it uses the google search calculator to evaluate the expression
15
18
  # @param input [String] math expression
16
19
  # @return [String] Answer
17
- def self.execute(input:)
20
+ def execute(input:)
18
21
  Eqn::Calculator.calc(input)
19
22
  rescue Eqn::ParseError, Eqn::NoVariableValueError
20
23
  # Sometimes the input is not a pure math expression, e.g: "12F in Celsius"
data/lib/tool/serp_api.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "google_search_results"
4
-
5
3
  module Tool
6
4
  class SerpApi < Base
7
5
  # Wrapper around SerpAPI
@@ -16,12 +14,25 @@ module Tool
16
14
  Input should be a search query.
17
15
  DESC
18
16
 
17
+ def initialize
18
+ depends_on "google_search_results"
19
+ require "google_search_results"
20
+ end
21
+
22
+ # Executes Google Search and returns hash_results JSON
23
+ # @param input [String] search query
24
+ # @return [Hash] hash_results JSON
25
+
26
+ def self.execute_search(input:)
27
+ new.execute_search(input: input)
28
+ end
29
+
19
30
  # Executes Google Search and returns hash_results JSON
20
31
  # @param input [String] search query
21
32
  # @return [String] Answer
22
33
  # TODO: Glance at all of the fields that langchain Python looks through: https://github.com/hwchase17/langchain/blob/v0.0.166/langchain/utilities/serpapi.py#L128-L156
23
34
  # We may need to do the same thing here.
24
- def self.execute(input:)
35
+ def execute(input:)
25
36
  hash_results = execute_search(input: input)
26
37
 
27
38
  hash_results.dig(:answer_box, :answer) ||
@@ -29,10 +40,7 @@ module Tool
29
40
  hash_results.dig(:organic_results, 0, :snippet)
30
41
  end
31
42
 
32
- # Executes Google Search and returns hash_results JSON
33
- # @param input [String] search query
34
- # @return [Hash] hash_results JSON
35
- def self.execute_search(input:)
43
+ def execute_search(input:)
36
44
  GoogleSearch.new(
37
45
  q: input,
38
46
  serp_api_key: ENV["SERPAPI_API_KEY"]
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "wikipedia"
4
-
5
3
  module Tool
6
4
  class Wikipedia < Base
7
5
  # Tool that adds the capability to search using the Wikipedia API
@@ -15,10 +13,15 @@ module Tool
15
13
  Input should be a search query.
16
14
  DESC
17
15
 
16
+ def initialize
17
+ depends_on "wikipedia-client"
18
+ require "wikipedia"
19
+ end
20
+
18
21
  # Executes Wikipedia API search and returns the answer
19
22
  # @param input [String] search query
20
23
  # @return [String] Answer
21
- def self.execute(input:)
24
+ def execute(input:)
22
25
  page = ::Wikipedia.find(input)
23
26
  # It would be nice to figure out a way to provide page.content but the LLM token limit is an issue
24
27
  page.summary
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "forwardable"
4
+
3
5
  module Vectorsearch
4
6
  class Base
5
7
  extend Forwardable
@@ -1,24 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "milvus"
4
-
5
3
  module Vectorsearch
6
4
  class Milvus < Base
7
- def initialize(
8
- url:,
9
- index_name:, llm:, llm_api_key:, api_key: nil
10
- )
11
- @client = ::Milvus::Client.new(
12
- url: url
13
- )
5
+ def initialize(url:, index_name:, llm:, llm_api_key:, api_key: nil)
6
+ depends_on "milvus"
7
+ require "milvus"
8
+
9
+ @client = ::Milvus::Client.new(url: url)
14
10
  @index_name = index_name
15
11
 
16
12
  super(llm: llm, llm_api_key: llm_api_key)
17
13
  end
18
14
 
19
- def add_texts(
20
- texts:
21
- )
15
+ def add_texts(texts:)
22
16
  client.entities.insert(
23
17
  collection_name: index_name,
24
18
  num_rows: texts.count,
@@ -74,10 +68,7 @@ module Vectorsearch
74
68
  )
75
69
  end
76
70
 
77
- def similarity_search(
78
- query:,
79
- k: 4
80
- )
71
+ def similarity_search(query:, k: 4)
81
72
  embedding = generate_embedding(text: query)
82
73
 
83
74
  similarity_search_by_vector(
@@ -86,10 +77,7 @@ module Vectorsearch
86
77
  )
87
78
  end
88
79
 
89
- def similarity_search_by_vector(
90
- embedding:,
91
- k: 4
92
- )
80
+ def similarity_search_by_vector(embedding:, k: 4)
93
81
  client.search(
94
82
  collection_name: index_name,
95
83
  top_k: k.to_s,
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "pinecone"
4
-
5
3
  module Vectorsearch
6
4
  class Pinecone < Base
7
5
  # Initialize the Pinecone client
@@ -10,13 +8,10 @@ module Vectorsearch
10
8
  # @param index_name [String] The name of the index to use
11
9
  # @param llm [Symbol] The LLM to use
12
10
  # @param llm_api_key [String] The API key for the LLM
13
- def initialize(
14
- environment:,
15
- api_key:,
16
- index_name:,
17
- llm:,
18
- llm_api_key:
19
- )
11
+ def initialize(environment:, api_key:, index_name:, llm:, llm_api_key:)
12
+ depends_on "pinecone"
13
+ require "pinecone"
14
+
20
15
  ::Pinecone.configure do |config|
21
16
  config.api_key = api_key
22
17
  config.environment = environment
@@ -31,9 +26,7 @@ module Vectorsearch
31
26
  # Add a list of texts to the index
32
27
  # @param texts [Array] The list of texts to add
33
28
  # @return [Hash] The response from the server
34
- def add_texts(
35
- texts:
36
- )
29
+ def add_texts(texts:)
37
30
  vectors = texts.map do |text|
38
31
  {
39
32
  # TODO: Allows passing in your own IDs
@@ -78,10 +71,7 @@ module Vectorsearch
78
71
  # @param embedding [Array] The embedding to search for
79
72
  # @param k [Integer] The number of results to return
80
73
  # @return [Array] The list of results
81
- def similarity_search_by_vector(
82
- embedding:,
83
- k: 4
84
- )
74
+ def similarity_search_by_vector(embedding:, k: 4)
85
75
  index = client.index(index_name)
86
76
 
87
77
  response = index.query(
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "qdrant"
4
-
5
3
  module Vectorsearch
6
4
  class Qdrant < Base
7
5
  # Initialize the Qdrant client
@@ -10,13 +8,10 @@ module Vectorsearch
10
8
  # @param index_name [String] The name of the index to use
11
9
  # @param llm [Symbol] The LLM to use
12
10
  # @param llm_api_key [String] The API key for the LLM
13
- def initialize(
14
- url:,
15
- api_key:,
16
- index_name:,
17
- llm:,
18
- llm_api_key:
19
- )
11
+ def initialize(url:, api_key:, index_name:, llm:, llm_api_key:)
12
+ depends_on "qdrant-ruby"
13
+ require "qdrant"
14
+
20
15
  @client = ::Qdrant::Client.new(
21
16
  url: url,
22
17
  api_key: api_key
@@ -29,9 +24,7 @@ module Vectorsearch
29
24
  # Add a list of texts to the index
30
25
  # @param texts [Array] The list of texts to add
31
26
  # @return [Hash] The response from the server
32
- def add_texts(
33
- texts:
34
- )
27
+ def add_texts(texts:)
35
28
  batch = {ids: [], vectors: [], payloads: []}
36
29
 
37
30
  texts.each do |text|
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "weaviate"
4
-
5
3
  module Vectorsearch
6
4
  class Weaviate < Base
7
5
  # Initialize the Weaviate adapter
@@ -10,13 +8,10 @@ module Vectorsearch
10
8
  # @param index_name [String] The name of the index to use
11
9
  # @param llm [Symbol] The LLM to use
12
10
  # @param llm_api_key [String] The API key for the LLM
13
- def initialize(
14
- url:,
15
- api_key:,
16
- index_name:,
17
- llm:,
18
- llm_api_key:
19
- )
11
+ def initialize(url:, api_key:, index_name:, llm:, llm_api_key:)
12
+ depends_on "weaviate-ruby"
13
+ require "weaviate"
14
+
20
15
  @client = ::Weaviate::Client.new(
21
16
  url: url,
22
17
  api_key: api_key,
@@ -31,9 +26,7 @@ module Vectorsearch
31
26
  # Add a list of texts to the index
32
27
  # @param texts [Array] The list of texts to add
33
28
  # @return [Hash] The response from the server
34
- def add_texts(
35
- texts:
36
- )
29
+ def add_texts(texts:)
37
30
  objects = texts.map do |text|
38
31
  {
39
32
  class: index_name,
@@ -69,10 +62,7 @@ module Vectorsearch
69
62
  # @param query [String] The query to search for
70
63
  # @param k [Integer|String] The number of results to return
71
64
  # @return [Hash] The search results
72
- def similarity_search(
73
- query:,
74
- k: 4
75
- )
65
+ def similarity_search(query:, k: 4)
76
66
  near_text = "{ concepts: [\"#{query}\"] }"
77
67
 
78
68
  client.query.get(
@@ -87,10 +77,7 @@ module Vectorsearch
87
77
  # @param embedding [Array] The vector to search for
88
78
  # @param k [Integer|String] The number of results to return
89
79
  # @return [Hash] The search results
90
- def similarity_search_by_vector(
91
- embedding:,
92
- k: 4
93
- )
80
+ def similarity_search_by_vector(embedding:, k: 4)
94
81
  near_vector = "{ vector: #{embedding} }"
95
82
 
96
83
  client.query.get(
@@ -104,9 +91,7 @@ module Vectorsearch
104
91
  # Ask a question and return the answer
105
92
  # @param question [String] The question to ask
106
93
  # @return [Hash] The answer
107
- def ask(
108
- question:
109
- )
94
+ def ask(question:)
110
95
  # Weaviate currently supports the `ask:` parameter only for the OpenAI LLM (with `qna-openai` module enabled).
111
96
  # The Cohere support is on the way: https://github.com/weaviate/weaviate/pull/2600
112
97
  if llm == :openai
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Langchain
4
- VERSION = "0.3.3"
4
+ VERSION = "0.3.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: langchainrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Bondarev
@@ -11,47 +11,47 @@ cert_chain: []
11
11
  date: 2023-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: cohere-ruby
14
+ name: dotenv-rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.3
19
+ version: 2.7.6
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.3
26
+ version: 2.7.6
27
27
  - !ruby/object:Gem::Dependency
28
- name: dotenv-rails
28
+ name: pry-byebug
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.7.6
33
+ version: 3.10.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.7.6
40
+ version: 3.10.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: pry-byebug
42
+ name: cohere-ruby
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.10.0
47
+ version: 0.9.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.10.0
54
+ version: 0.9.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: eqn
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.6.5
62
- type: :runtime
62
+ type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
@@ -67,47 +67,61 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.6.5
69
69
  - !ruby/object:Gem::Dependency
70
- name: milvus
70
+ name: google_search_results
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.9.0
76
- type: :runtime
75
+ version: 2.0.0
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.9.0
82
+ version: 2.0.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: pinecone
84
+ name: hugging-face
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.1.6
90
- type: :runtime
89
+ version: 0.3.2
90
+ type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.1.6
96
+ version: 0.3.2
97
97
  - !ruby/object:Gem::Dependency
98
- name: ruby-openai
98
+ name: milvus
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 4.0.0
104
- type: :runtime
103
+ version: 0.9.0
104
+ type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 4.0.0
110
+ version: 0.9.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: pinecone
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.1.6
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.1.6
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: qdrant-ruby
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +129,7 @@ dependencies:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
131
  version: 0.9.0
118
- type: :runtime
132
+ type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
@@ -123,19 +137,19 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: 0.9.0
125
139
  - !ruby/object:Gem::Dependency
126
- name: google_search_results
140
+ name: ruby-openai
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: 2.0.0
132
- type: :runtime
145
+ version: 4.0.0
146
+ type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: 2.0.0
152
+ version: 4.0.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: weaviate-ruby
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -143,7 +157,7 @@ dependencies:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
159
  version: 0.8.0
146
- type: :runtime
160
+ type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
@@ -157,7 +171,7 @@ dependencies:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
173
  version: 1.17.0
160
- type: :runtime
174
+ type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
@@ -191,6 +205,7 @@ files:
191
205
  - lib/langchain.rb
192
206
  - lib/llm/base.rb
193
207
  - lib/llm/cohere.rb
208
+ - lib/llm/hugging_face.rb
194
209
  - lib/llm/openai.rb
195
210
  - lib/logging.rb
196
211
  - lib/prompt/base.rb