langchainrb 0.6.10 → 0.6.11
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/Gemfile.lock +2 -2
- data/README.md +4 -0
- data/examples/open_ai_qdrant_function_calls.rb +0 -4
- data/lib/langchain/llm/anthropic.rb +3 -2
- data/lib/langchain/loader.rb +2 -2
- data/lib/langchain/vectorsearch/milvus.rb +46 -5
- data/lib/langchain/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78d1726db950b4234799cdf34185110411cbc666836225a63ed9d5be6b0a5575
|
4
|
+
data.tar.gz: 0ed5595b0aae9dcaa97ee5cbc653cf3c9cb21f6057f5439ec78711ecb1cf6b46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0313618b12b10943e8825aaabd66306e21b0a24fefe9c4593cb4f28b1a03e099781944057ce9423c98851bad7dea07e2832c4ab37d416cf743b126a26a6a308
|
7
|
+
data.tar.gz: a2910e93f883bee84288e5bd22644f17b30957a6ae9a696b3adc01dc9b32e2f546b49d46c3587856a883cd4dc1f0a677a3970d357b5fe2dfd9216ce894d06120
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
langchainrb (0.6.
|
4
|
+
langchainrb (0.6.11)
|
5
5
|
baran (~> 0.1.6)
|
6
6
|
colorize (~> 0.8.1)
|
7
7
|
json-schema (~> 4.0.0)
|
@@ -226,7 +226,7 @@ GEM
|
|
226
226
|
zeitwerk (~> 2.5)
|
227
227
|
rainbow (3.1.1)
|
228
228
|
rake (13.0.6)
|
229
|
-
rb_sys (0.9.
|
229
|
+
rb_sys (0.9.81)
|
230
230
|
rdiscount (2.2.7)
|
231
231
|
regexp_parser (2.8.0)
|
232
232
|
replicate-ruby (0.2.2)
|
data/README.md
CHANGED
@@ -209,6 +209,10 @@ Add `gem "anthropic", "~> 0.1.0"` to your Gemfile.
|
|
209
209
|
anthropic = Langchain::LLM::Anthropic.new(api_key: ENV["ANTHROPIC_API_KEY"])
|
210
210
|
```
|
211
211
|
|
212
|
+
```ruby
|
213
|
+
anthropic.complete(prompt: "What is the meaning of life?")
|
214
|
+
```
|
215
|
+
|
212
216
|
### Using Prompts 📋
|
213
217
|
|
214
218
|
#### Prompt Templates
|
@@ -13,7 +13,8 @@ module Langchain::LLM
|
|
13
13
|
class Anthropic < Base
|
14
14
|
DEFAULTS = {
|
15
15
|
temperature: 0.0,
|
16
|
-
completion_model_name: "claude-2"
|
16
|
+
completion_model_name: "claude-2",
|
17
|
+
max_tokens_to_sample: 256
|
17
18
|
}.freeze
|
18
19
|
|
19
20
|
# TODO: Implement token length validator for Anthropic
|
@@ -49,7 +50,7 @@ module Langchain::LLM
|
|
49
50
|
private
|
50
51
|
|
51
52
|
def compose_parameters(model, params)
|
52
|
-
default_params = {model: model
|
53
|
+
default_params = {model: model}.merge(@defaults.except(:completion_model_name))
|
53
54
|
|
54
55
|
default_params.merge(params)
|
55
56
|
end
|
data/lib/langchain/loader.rb
CHANGED
@@ -89,9 +89,9 @@ module Langchain
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def load_from_path
|
92
|
-
|
92
|
+
return File.open(@path) if File.exist?(@path)
|
93
93
|
|
94
|
-
File
|
94
|
+
raise FileNotFound, "File #{@path} does not exist"
|
95
95
|
end
|
96
96
|
|
97
97
|
def load_from_directory(&block)
|
@@ -32,7 +32,7 @@ module Langchain::Vectorsearch
|
|
32
32
|
field: Array(texts)
|
33
33
|
}, {
|
34
34
|
field_name: "vectors",
|
35
|
-
type: ::Milvus::DATA_TYPES["
|
35
|
+
type: ::Milvus::DATA_TYPES["float_vector"],
|
36
36
|
field: Array(texts).map { |text| llm.embed(text: text) }
|
37
37
|
}
|
38
38
|
]
|
@@ -47,7 +47,7 @@ module Langchain::Vectorsearch
|
|
47
47
|
client.collections.create(
|
48
48
|
auto_id: true,
|
49
49
|
collection_name: index_name,
|
50
|
-
description: "Default schema created by
|
50
|
+
description: "Default schema created by langchain.rb",
|
51
51
|
fields: [
|
52
52
|
{
|
53
53
|
name: "id",
|
@@ -66,7 +66,7 @@ module Langchain::Vectorsearch
|
|
66
66
|
]
|
67
67
|
}, {
|
68
68
|
name: "vectors",
|
69
|
-
data_type: ::Milvus::DATA_TYPES["
|
69
|
+
data_type: ::Milvus::DATA_TYPES["float_vector"],
|
70
70
|
is_primary_key: false,
|
71
71
|
type_params: [
|
72
72
|
{
|
@@ -79,6 +79,20 @@ module Langchain::Vectorsearch
|
|
79
79
|
)
|
80
80
|
end
|
81
81
|
|
82
|
+
# Create the default index
|
83
|
+
# @return [Boolean] The response from the server
|
84
|
+
def create_default_index
|
85
|
+
client.indices.create(
|
86
|
+
collection_name: "Documents",
|
87
|
+
field_name: "vectors",
|
88
|
+
extra_params: [
|
89
|
+
{key: "metric_type", value: "L2"},
|
90
|
+
{key: "index_type", value: "IVF_FLAT"},
|
91
|
+
{key: "params", value: "{\"nlist\":1024}"}
|
92
|
+
]
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
82
96
|
# Get the default schema
|
83
97
|
# @return [Hash] The response from the server
|
84
98
|
def get_default_schema
|
@@ -91,6 +105,12 @@ module Langchain::Vectorsearch
|
|
91
105
|
client.collections.delete(collection_name: index_name)
|
92
106
|
end
|
93
107
|
|
108
|
+
# Load default schema into memory
|
109
|
+
# @return [Boolean] The response from the server
|
110
|
+
def load_default_schema
|
111
|
+
client.collections.load(collection_name: index_name)
|
112
|
+
end
|
113
|
+
|
94
114
|
def similarity_search(query:, k: 4)
|
95
115
|
embedding = llm.embed(text: query)
|
96
116
|
|
@@ -101,15 +121,36 @@ module Langchain::Vectorsearch
|
|
101
121
|
end
|
102
122
|
|
103
123
|
def similarity_search_by_vector(embedding:, k: 4)
|
124
|
+
load_default_schema
|
125
|
+
|
104
126
|
client.search(
|
105
127
|
collection_name: index_name,
|
128
|
+
output_fields: ["id", "content", "vectors"],
|
106
129
|
top_k: k.to_s,
|
107
130
|
vectors: [embedding],
|
108
131
|
dsl_type: 1,
|
109
132
|
params: "{\"nprobe\": 10}",
|
110
|
-
anns_field: "
|
111
|
-
metric_type: "L2"
|
133
|
+
anns_field: "vectors",
|
134
|
+
metric_type: "L2",
|
135
|
+
vector_type: ::Milvus::DATA_TYPES["float_vector"]
|
112
136
|
)
|
113
137
|
end
|
138
|
+
|
139
|
+
# Ask a question and return the answer
|
140
|
+
# @param question [String] The question to ask
|
141
|
+
# @yield [String] Stream responses back one String at a time
|
142
|
+
# @return [String] The answer to the question
|
143
|
+
def ask(question:, &block)
|
144
|
+
search_results = similarity_search(query: question)
|
145
|
+
|
146
|
+
content_field = search_results.dig("results", "fields_data").select { |field| field.dig("field_name") == "content" }
|
147
|
+
content_data = content_field.first.dig("Field", "Scalars", "Data", "StringData", "data")
|
148
|
+
|
149
|
+
context = content_data.join("\n---\n")
|
150
|
+
|
151
|
+
prompt = generate_prompt(question: question, context: context)
|
152
|
+
|
153
|
+
llm.chat(prompt: prompt, &block)
|
154
|
+
end
|
114
155
|
end
|
115
156
|
end
|
data/lib/langchain/version.rb
CHANGED
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.11
|
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-08-
|
11
|
+
date: 2023-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: baran
|