langchainrb 0.6.17 → 0.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +18 -3
- data/lib/langchain/active_record/hooks.rb +14 -0
- data/lib/langchain/agent/react_agent.rb +1 -1
- data/lib/langchain/agent/sql_query_agent.rb +2 -2
- data/lib/langchain/chunk.rb +16 -0
- data/lib/langchain/chunker/base.rb +4 -0
- data/lib/langchain/chunker/recursive_text.rb +5 -2
- data/lib/langchain/chunker/semantic.rb +4 -1
- data/lib/langchain/chunker/sentence.rb +4 -2
- data/lib/langchain/chunker/text.rb +5 -2
- data/lib/langchain/conversation.rb +1 -1
- data/lib/langchain/llm/ai21.rb +4 -3
- data/lib/langchain/llm/anthropic.rb +3 -3
- data/lib/langchain/llm/cohere.rb +6 -5
- data/lib/langchain/llm/google_palm.rb +14 -10
- data/lib/langchain/llm/hugging_face.rb +4 -3
- data/lib/langchain/llm/llama_cpp.rb +1 -1
- data/lib/langchain/llm/ollama.rb +18 -6
- data/lib/langchain/llm/openai.rb +7 -6
- data/lib/langchain/llm/replicate.rb +6 -10
- data/lib/langchain/llm/response/ai21_response.rb +13 -0
- data/lib/langchain/llm/response/anthropic_response.rb +29 -0
- data/lib/langchain/llm/response/base_response.rb +79 -0
- data/lib/langchain/llm/response/cohere_response.rb +21 -0
- data/lib/langchain/llm/response/google_palm_response.rb +36 -0
- data/lib/langchain/llm/response/hugging_face_response.rb +13 -0
- data/lib/langchain/llm/response/ollama_response.rb +26 -0
- data/lib/langchain/llm/response/openai_response.rb +51 -0
- data/lib/langchain/llm/response/replicate_response.rb +28 -0
- data/lib/langchain/vectorsearch/base.rb +4 -7
- data/lib/langchain/vectorsearch/chroma.rb +13 -12
- data/lib/langchain/vectorsearch/elasticsearch.rb +147 -0
- data/lib/langchain/vectorsearch/hnswlib.rb +5 -5
- data/lib/langchain/vectorsearch/milvus.rb +5 -4
- data/lib/langchain/vectorsearch/pgvector.rb +12 -6
- data/lib/langchain/vectorsearch/pinecone.rb +14 -13
- data/lib/langchain/vectorsearch/qdrant.rb +9 -8
- data/lib/langchain/vectorsearch/weaviate.rb +9 -8
- data/lib/langchain/version.rb +1 -1
- data/lib/langchain.rb +5 -0
- metadata +27 -2
@@ -5,10 +5,11 @@ module Langchain::Vectorsearch
|
|
5
5
|
#
|
6
6
|
# Wrapper around Pinecone API.
|
7
7
|
#
|
8
|
-
# Gem requirements:
|
8
|
+
# Gem requirements:
|
9
|
+
# gem "pinecone", "~> 0.1.6"
|
9
10
|
#
|
10
11
|
# Usage:
|
11
|
-
#
|
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
|
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:
|
8
|
+
# Gem requirements:
|
9
|
+
# gem "qdrant-ruby", "~> 0.9.3"
|
9
10
|
#
|
10
11
|
# Usage:
|
11
|
-
#
|
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:
|
8
|
+
# Gem requirements:
|
9
|
+
# gem "weaviate-ruby", "~> 0.8.3"
|
9
10
|
#
|
10
11
|
# Usage:
|
11
|
-
#
|
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
|
data/lib/langchain/version.rb
CHANGED
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.
|
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-
|
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
|