langchainrb 0.6.17 → 0.6.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +18 -3
  4. data/lib/langchain/active_record/hooks.rb +14 -0
  5. data/lib/langchain/agent/react_agent.rb +1 -1
  6. data/lib/langchain/agent/sql_query_agent.rb +2 -2
  7. data/lib/langchain/chunk.rb +16 -0
  8. data/lib/langchain/chunker/base.rb +4 -0
  9. data/lib/langchain/chunker/recursive_text.rb +5 -2
  10. data/lib/langchain/chunker/semantic.rb +4 -1
  11. data/lib/langchain/chunker/sentence.rb +4 -2
  12. data/lib/langchain/chunker/text.rb +5 -2
  13. data/lib/langchain/conversation.rb +1 -1
  14. data/lib/langchain/llm/ai21.rb +4 -3
  15. data/lib/langchain/llm/anthropic.rb +3 -3
  16. data/lib/langchain/llm/cohere.rb +6 -5
  17. data/lib/langchain/llm/google_palm.rb +14 -10
  18. data/lib/langchain/llm/hugging_face.rb +4 -3
  19. data/lib/langchain/llm/llama_cpp.rb +1 -1
  20. data/lib/langchain/llm/ollama.rb +18 -6
  21. data/lib/langchain/llm/openai.rb +7 -6
  22. data/lib/langchain/llm/replicate.rb +6 -10
  23. data/lib/langchain/llm/response/ai21_response.rb +13 -0
  24. data/lib/langchain/llm/response/anthropic_response.rb +29 -0
  25. data/lib/langchain/llm/response/base_response.rb +79 -0
  26. data/lib/langchain/llm/response/cohere_response.rb +21 -0
  27. data/lib/langchain/llm/response/google_palm_response.rb +36 -0
  28. data/lib/langchain/llm/response/hugging_face_response.rb +13 -0
  29. data/lib/langchain/llm/response/ollama_response.rb +26 -0
  30. data/lib/langchain/llm/response/openai_response.rb +51 -0
  31. data/lib/langchain/llm/response/replicate_response.rb +28 -0
  32. data/lib/langchain/vectorsearch/base.rb +4 -7
  33. data/lib/langchain/vectorsearch/chroma.rb +13 -12
  34. data/lib/langchain/vectorsearch/elasticsearch.rb +147 -0
  35. data/lib/langchain/vectorsearch/hnswlib.rb +5 -5
  36. data/lib/langchain/vectorsearch/milvus.rb +5 -4
  37. data/lib/langchain/vectorsearch/pgvector.rb +12 -6
  38. data/lib/langchain/vectorsearch/pinecone.rb +14 -13
  39. data/lib/langchain/vectorsearch/qdrant.rb +9 -8
  40. data/lib/langchain/vectorsearch/weaviate.rb +9 -8
  41. data/lib/langchain/version.rb +1 -1
  42. data/lib/langchain.rb +5 -0
  43. metadata +27 -2
@@ -5,10 +5,11 @@ module Langchain::Vectorsearch
5
5
  #
6
6
  # Wrapper around Pinecone API.
7
7
  #
8
- # Gem requirements: gem "pinecone", "~> 0.1.6"
8
+ # Gem requirements:
9
+ # gem "pinecone", "~> 0.1.6"
9
10
  #
10
11
  # Usage:
11
- # pinecone = Langchain::Vectorsearch::Pinecone.new(environment:, api_key:, index_name:, llm:, llm_api_key:)
12
+ # pinecone = Langchain::Vectorsearch::Pinecone.new(environment:, api_key:, index_name:, llm:, llm_api_key:)
12
13
  #
13
14
 
14
15
  # Initialize the Pinecone client
@@ -31,7 +32,7 @@ module Langchain::Vectorsearch
31
32
  end
32
33
 
33
34
  # Find records by ids
34
- # @param ids [Array] The ids to find
35
+ # @param ids [Array<Integer>] The ids to find
35
36
  # @param namespace String The namespace to search through
36
37
  # @return [Hash] The response from the server
37
38
  def find(ids: [], namespace: "")
@@ -44,8 +45,8 @@ module Langchain::Vectorsearch
44
45
  end
45
46
 
46
47
  # Add a list of texts to the index
47
- # @param texts [Array] The list of texts to add
48
- # @param ids [Array] The list of IDs to add
48
+ # @param texts [Array<String>] The list of texts to add
49
+ # @param ids [Array<Integer>] The list of IDs to add
49
50
  # @param namespace [String] The namespace to add the texts to
50
51
  # @param metadata [Hash] The metadata to use for the texts
51
52
  # @return [Hash] The response from the server
@@ -54,7 +55,7 @@ module Langchain::Vectorsearch
54
55
  {
55
56
  id: ids[i] ? ids[i].to_s : SecureRandom.uuid,
56
57
  metadata: metadata || {content: text},
57
- values: llm.embed(text: text)
58
+ values: llm.embed(text: text).embedding
58
59
  }
59
60
  end
60
61
 
@@ -70,7 +71,7 @@ module Langchain::Vectorsearch
70
71
  .flatten
71
72
  .map do |path|
72
73
  data = Langchain::Loader.new(path)&.load&.chunks
73
- data.map { |chunk| chunk[:text] }
74
+ data.map { |chunk| chunk.text }
74
75
  end
75
76
 
76
77
  texts.flatten!
@@ -79,8 +80,8 @@ module Langchain::Vectorsearch
79
80
  end
80
81
 
81
82
  # Update a list of texts in the index
82
- # @param texts [Array] The list of texts to update
83
- # @param ids [Array] The list of IDs to update
83
+ # @param texts [Array<String>] The list of texts to update
84
+ # @param ids [Array<Integer>] The list of IDs to update
84
85
  # @param namespace [String] The namespace to update the texts in
85
86
  # @param metadata [Hash] The metadata to use for the texts
86
87
  # @return [Array] The response from the server
@@ -90,7 +91,7 @@ module Langchain::Vectorsearch
90
91
  index.update(
91
92
  namespace: namespace,
92
93
  id: ids[i].to_s,
93
- values: llm.embed(text: text),
94
+ values: llm.embed(text: text).embedding,
94
95
  set_metadata: metadata
95
96
  )
96
97
  end
@@ -102,7 +103,7 @@ module Langchain::Vectorsearch
102
103
  client.create_index(
103
104
  metric: DEFAULT_METRIC,
104
105
  name: index_name,
105
- dimension: default_dimension
106
+ dimension: llm.default_dimension
106
107
  )
107
108
  end
108
109
 
@@ -130,7 +131,7 @@ module Langchain::Vectorsearch
130
131
  namespace: "",
131
132
  filter: nil
132
133
  )
133
- embedding = llm.embed(text: query)
134
+ embedding = llm.embed(text: query).embedding
134
135
 
135
136
  similarity_search_by_vector(
136
137
  embedding: embedding,
@@ -141,7 +142,7 @@ module Langchain::Vectorsearch
141
142
  end
142
143
 
143
144
  # Search for similar texts by embedding
144
- # @param embedding [Array] The embedding to search for
145
+ # @param embedding [Array<Float>] The embedding to search for
145
146
  # @param k [Integer] The number of results to return
146
147
  # @param namespace [String] The namespace to search in
147
148
  # @param filter [String] The filter to use
@@ -5,10 +5,11 @@ module Langchain::Vectorsearch
5
5
  #
6
6
  # Wrapper around Qdrant
7
7
  #
8
- # Gem requirements: gem "qdrant-ruby", "~> 0.9.3"
8
+ # Gem requirements:
9
+ # gem "qdrant-ruby", "~> 0.9.3"
9
10
  #
10
11
  # Usage:
11
- # qdrant = Langchain::Vectorsearch::Qdrant.new(url:, api_key:, index_name:, llm:, llm_api_key:)
12
+ # qdrant = Langchain::Vectorsearch::Qdrant.new(url:, api_key:, index_name:, llm:, llm_api_key:)
12
13
  #
13
14
 
14
15
  # Initialize the Qdrant client
@@ -29,7 +30,7 @@ module Langchain::Vectorsearch
29
30
  end
30
31
 
31
32
  # Find records by ids
32
- # @param ids [Array] The ids to find
33
+ # @param ids [Array<Integer>] The ids to find
33
34
  # @return [Hash] The response from the server
34
35
  def find(ids: [])
35
36
  client.points.get_all(
@@ -41,7 +42,7 @@ module Langchain::Vectorsearch
41
42
  end
42
43
 
43
44
  # Add a list of texts to the index
44
- # @param texts [Array] The list of texts to add
45
+ # @param texts [Array<String>] The list of texts to add
45
46
  # @return [Hash] The response from the server
46
47
  def add_texts(texts:, ids: [])
47
48
  batch = {ids: [], vectors: [], payloads: []}
@@ -49,7 +50,7 @@ module Langchain::Vectorsearch
49
50
  Array(texts).each_with_index do |text, i|
50
51
  id = ids[i] || SecureRandom.uuid
51
52
  batch[:ids].push(id)
52
- batch[:vectors].push(llm.embed(text: text))
53
+ batch[:vectors].push(llm.embed(text: text).embedding)
53
54
  batch[:payloads].push({content: text})
54
55
  end
55
56
 
@@ -82,7 +83,7 @@ module Langchain::Vectorsearch
82
83
  collection_name: index_name,
83
84
  vectors: {
84
85
  distance: DEFAULT_METRIC.capitalize,
85
- size: default_dimension
86
+ size: llm.default_dimension
86
87
  }
87
88
  )
88
89
  end
@@ -95,7 +96,7 @@ module Langchain::Vectorsearch
95
96
  query:,
96
97
  k: 4
97
98
  )
98
- embedding = llm.embed(text: query)
99
+ embedding = llm.embed(text: query).embedding
99
100
 
100
101
  similarity_search_by_vector(
101
102
  embedding: embedding,
@@ -104,7 +105,7 @@ module Langchain::Vectorsearch
104
105
  end
105
106
 
106
107
  # Search for similar texts by embedding
107
- # @param embedding [Array] The embedding to search for
108
+ # @param embedding [Array<Float>] The embedding to search for
108
109
  # @param k [Integer] The number of results to return
109
110
  # @return [Hash] The response from the server
110
111
  def similarity_search_by_vector(
@@ -5,10 +5,11 @@ module Langchain::Vectorsearch
5
5
  #
6
6
  # Wrapper around Weaviate
7
7
  #
8
- # Gem requirements: gem "weaviate-ruby", "~> 0.8.3"
8
+ # Gem requirements:
9
+ # gem "weaviate-ruby", "~> 0.8.3"
9
10
  #
10
11
  # Usage:
11
- # weaviate = Langchain::Vectorsearch::Weaviate.new(url:, api_key:, index_name:, llm:, llm_api_key:)
12
+ # weaviate = Langchain::Vectorsearch::Weaviate.new(url:, api_key:, index_name:, llm:, llm_api_key:)
12
13
  #
13
14
 
14
15
  # Initialize the Weaviate adapter
@@ -32,7 +33,7 @@ module Langchain::Vectorsearch
32
33
  end
33
34
 
34
35
  # Add a list of texts to the index
35
- # @param texts [Array] The list of texts to add
36
+ # @param texts [Array<String>] The list of texts to add
36
37
  # @return [Hash] The response from the server
37
38
  def add_texts(texts:, ids: [])
38
39
  client.objects.batch_create(
@@ -41,7 +42,7 @@ module Langchain::Vectorsearch
41
42
  end
42
43
 
43
44
  # Update a list of texts in the index
44
- # @param texts [Array] The list of texts to update
45
+ # @param texts [Array<String>] The list of texts to update
45
46
  # @return [Hash] The response from the server
46
47
  def update_texts(texts:, ids:)
47
48
  uuids = []
@@ -65,7 +66,7 @@ module Langchain::Vectorsearch
65
66
  __id: ids[i].to_s,
66
67
  content: text
67
68
  },
68
- vector: llm.embed(text: text)
69
+ vector: llm.embed(text: text).embedding
69
70
  )
70
71
  end
71
72
  end
@@ -101,13 +102,13 @@ module Langchain::Vectorsearch
101
102
  # @param k [Integer|String] The number of results to return
102
103
  # @return [Hash] The search results
103
104
  def similarity_search(query:, k: 4)
104
- embedding = llm.embed(text: query)
105
+ embedding = llm.embed(text: query).embedding
105
106
 
106
107
  similarity_search_by_vector(embedding: embedding, k: k)
107
108
  end
108
109
 
109
110
  # Return documents similar to the vector
110
- # @param embedding [Array] The vector to search for
111
+ # @param embedding [Array<Float>] The vector to search for
111
112
  # @param k [Integer|String] The number of results to return
112
113
  # @return [Hash] The search results
113
114
  def similarity_search_by_vector(embedding:, k: 4)
@@ -154,7 +155,7 @@ module Langchain::Vectorsearch
154
155
  __id: id.to_s,
155
156
  content: text
156
157
  },
157
- vector: llm.embed(text: text)
158
+ vector: llm.embed(text: text).embedding
158
159
  }
159
160
  end
160
161
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Langchain
4
- VERSION = "0.6.17"
4
+ VERSION = "0.6.19"
5
5
  end
data/lib/langchain.rb CHANGED
@@ -8,6 +8,7 @@ loader = Zeitwerk::Loader.for_gem
8
8
  loader.ignore("#{__dir__}/langchainrb.rb")
9
9
  loader.inflector.inflect(
10
10
  "ai21" => "AI21",
11
+ "ai21_response" => "AI21Response",
11
12
  "ai21_validator" => "AI21Validator",
12
13
  "csv" => "CSV",
13
14
  "html" => "HTML",
@@ -16,10 +17,12 @@ loader.inflector.inflect(
16
17
  "llm" => "LLM",
17
18
  "openai" => "OpenAI",
18
19
  "openai_validator" => "OpenAIValidator",
20
+ "openai_response" => "OpenAIResponse",
19
21
  "pdf" => "PDF",
20
22
  "react_agent" => "ReActAgent",
21
23
  "sql_query_agent" => "SQLQueryAgent"
22
24
  )
25
+ loader.collapse("#{__dir__}/langchain/llm/response")
23
26
  loader.setup
24
27
 
25
28
  # Langchain.rb a is library for building LLM-backed Ruby applications. It is an abstraction layer that sits on top of the emerging AI-related tools that makes it easy for developers to consume and string those services together.
@@ -86,3 +89,5 @@ module Langchain
86
89
  class BaseError < StandardError; end
87
90
  end
88
91
  end
92
+
93
+ require "langchain/railtie" if defined?(Rails)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: langchainrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.17
4
+ version: 0.6.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Bondarev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-10 00:00:00.000000000 Z
11
+ date: 2023-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: baran
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: 0.8.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: elasticsearch
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: 8.2.0
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: 8.2.0
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: eqn
225
239
  requirement: !ruby/object:Gem::Requirement
@@ -532,6 +546,7 @@ files:
532
546
  - lib/langchain/agent/sql_query_agent.rb
533
547
  - lib/langchain/agent/sql_query_agent/sql_query_agent_answer_prompt.yaml
534
548
  - lib/langchain/agent/sql_query_agent/sql_query_agent_sql_prompt.yaml
549
+ - lib/langchain/chunk.rb
535
550
  - lib/langchain/chunker/base.rb
536
551
  - lib/langchain/chunker/prompts/semantic_prompt_template.yml
537
552
  - lib/langchain/chunker/recursive_text.rb
@@ -558,6 +573,15 @@ files:
558
573
  - lib/langchain/llm/openai.rb
559
574
  - lib/langchain/llm/prompts/summarize_template.yaml
560
575
  - lib/langchain/llm/replicate.rb
576
+ - lib/langchain/llm/response/ai21_response.rb
577
+ - lib/langchain/llm/response/anthropic_response.rb
578
+ - lib/langchain/llm/response/base_response.rb
579
+ - lib/langchain/llm/response/cohere_response.rb
580
+ - lib/langchain/llm/response/google_palm_response.rb
581
+ - lib/langchain/llm/response/hugging_face_response.rb
582
+ - lib/langchain/llm/response/ollama_response.rb
583
+ - lib/langchain/llm/response/openai_response.rb
584
+ - lib/langchain/llm/response/replicate_response.rb
561
585
  - lib/langchain/loader.rb
562
586
  - lib/langchain/output_parsers/base.rb
563
587
  - lib/langchain/output_parsers/output_fixing_parser.rb
@@ -593,6 +617,7 @@ files:
593
617
  - lib/langchain/utils/token_length/token_limit_exceeded.rb
594
618
  - lib/langchain/vectorsearch/base.rb
595
619
  - lib/langchain/vectorsearch/chroma.rb
620
+ - lib/langchain/vectorsearch/elasticsearch.rb
596
621
  - lib/langchain/vectorsearch/hnswlib.rb
597
622
  - lib/langchain/vectorsearch/milvus.rb
598
623
  - lib/langchain/vectorsearch/pgvector.rb