langchainrb 0.6.17 → 0.6.19
Sign up to get free protection for your applications and to get access to all the features.
- 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
|