langchainrb 0.9.2 → 0.9.4
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 +11 -0
- data/README.md +12 -19
- data/lib/langchain/agent/react_agent.rb +2 -0
- data/lib/langchain/agent/sql_query_agent.rb +2 -0
- data/lib/langchain/assistants/assistant.rb +8 -24
- data/lib/langchain/assistants/thread.rb +2 -2
- data/lib/langchain/chunker/markdown.rb +0 -2
- data/lib/langchain/chunker/recursive_text.rb +0 -2
- data/lib/langchain/chunker/semantic.rb +1 -3
- data/lib/langchain/chunker/sentence.rb +0 -2
- data/lib/langchain/chunker/text.rb +0 -2
- data/lib/langchain/contextual_logger.rb +1 -1
- data/lib/langchain/conversation/memory.rb +2 -0
- data/lib/langchain/conversation/message.rb +2 -0
- data/lib/langchain/llm/ollama.rb +40 -3
- data/lib/langchain/llm/openai.rb +16 -4
- data/lib/langchain/llm/prompts/ollama/summarize_template.yaml +9 -0
- data/lib/langchain/output_parsers/base.rb +0 -4
- data/lib/langchain/output_parsers/output_fixing_parser.rb +6 -13
- data/lib/langchain/output_parsers/structured_output_parser.rb +0 -10
- data/lib/langchain/processors/eml.rb +65 -0
- data/lib/langchain/tool/base.rb +17 -32
- data/lib/langchain/tool/calculator/calculator.json +19 -0
- data/lib/langchain/tool/{calculator.rb → calculator/calculator.rb} +8 -5
- data/lib/langchain/tool/database/database.json +46 -0
- data/lib/langchain/tool/database/database.rb +105 -0
- data/lib/langchain/tool/google_search/google_search.json +19 -0
- data/lib/langchain/tool/{google_search.rb → google_search/google_search.rb} +5 -6
- data/lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.json +19 -0
- data/lib/langchain/tool/{ruby_code_interpreter.rb → ruby_code_interpreter/ruby_code_interpreter.rb} +9 -1
- data/lib/langchain/tool/weather/weather.json +19 -0
- data/lib/langchain/tool/{weather.rb → weather/weather.rb} +3 -4
- data/lib/langchain/tool/wikipedia/wikipedia.json +19 -0
- data/lib/langchain/tool/{wikipedia.rb → wikipedia/wikipedia.rb} +10 -1
- data/lib/langchain/vectorsearch/base.rb +1 -1
- data/lib/langchain/version.rb +1 -1
- data/lib/langchain.rb +8 -1
- metadata +80 -16
- data/lib/langchain/tool/database.rb +0 -90
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: langchainrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrei Bondarev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.0.8
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 7.0.8
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: baran
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -30,42 +44,42 @@ dependencies:
|
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
47
|
+
version: 1.1.0
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 1.1.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: tiktoken_ruby
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.0.
|
61
|
+
version: 0.0.7
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0.
|
68
|
+
version: 0.0.7
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: json-schema
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: 4
|
75
|
+
version: '4'
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: 4
|
82
|
+
version: '4'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: zeitwerk
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +192,34 @@ dependencies:
|
|
178
192
|
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
194
|
version: 2.2.7
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: vcr
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: webmock
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
181
223
|
- !ruby/object:Gem::Dependency
|
182
224
|
name: ai21
|
183
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -416,6 +458,20 @@ dependencies:
|
|
416
458
|
- - "~>"
|
417
459
|
- !ruby/object:Gem::Version
|
418
460
|
version: '1.13'
|
461
|
+
- !ruby/object:Gem::Dependency
|
462
|
+
name: mail
|
463
|
+
requirement: !ruby/object:Gem::Requirement
|
464
|
+
requirements:
|
465
|
+
- - "~>"
|
466
|
+
- !ruby/object:Gem::Version
|
467
|
+
version: '2.8'
|
468
|
+
type: :development
|
469
|
+
prerelease: false
|
470
|
+
version_requirements: !ruby/object:Gem::Requirement
|
471
|
+
requirements:
|
472
|
+
- - "~>"
|
473
|
+
- !ruby/object:Gem::Version
|
474
|
+
version: '2.8'
|
419
475
|
- !ruby/object:Gem::Dependency
|
420
476
|
name: open-weather-ruby-client
|
421
477
|
requirement: !ruby/object:Gem::Requirement
|
@@ -612,7 +668,7 @@ dependencies:
|
|
612
668
|
- - ">="
|
613
669
|
- !ruby/object:Gem::Version
|
614
670
|
version: '0'
|
615
|
-
description: Build LLM-backed Ruby applications with Ruby's
|
671
|
+
description: Build LLM-backed Ruby applications with Ruby's Langchain.rb
|
616
672
|
email:
|
617
673
|
- andrei.bondarev13@gmail.com
|
618
674
|
executables: []
|
@@ -670,6 +726,7 @@ files:
|
|
670
726
|
- lib/langchain/llm/llama_cpp.rb
|
671
727
|
- lib/langchain/llm/ollama.rb
|
672
728
|
- lib/langchain/llm/openai.rb
|
729
|
+
- lib/langchain/llm/prompts/ollama/summarize_template.yaml
|
673
730
|
- lib/langchain/llm/prompts/summarize_template.yaml
|
674
731
|
- lib/langchain/llm/replicate.rb
|
675
732
|
- lib/langchain/llm/response/ai21_response.rb
|
@@ -692,6 +749,7 @@ files:
|
|
692
749
|
- lib/langchain/processors/base.rb
|
693
750
|
- lib/langchain/processors/csv.rb
|
694
751
|
- lib/langchain/processors/docx.rb
|
752
|
+
- lib/langchain/processors/eml.rb
|
695
753
|
- lib/langchain/processors/html.rb
|
696
754
|
- lib/langchain/processors/json.rb
|
697
755
|
- lib/langchain/processors/jsonl.rb
|
@@ -705,12 +763,18 @@ files:
|
|
705
763
|
- lib/langchain/prompt/loading.rb
|
706
764
|
- lib/langchain/prompt/prompt_template.rb
|
707
765
|
- lib/langchain/tool/base.rb
|
708
|
-
- lib/langchain/tool/calculator.
|
709
|
-
- lib/langchain/tool/
|
710
|
-
- lib/langchain/tool/
|
711
|
-
- lib/langchain/tool/
|
712
|
-
- lib/langchain/tool/
|
713
|
-
- lib/langchain/tool/
|
766
|
+
- lib/langchain/tool/calculator/calculator.json
|
767
|
+
- lib/langchain/tool/calculator/calculator.rb
|
768
|
+
- lib/langchain/tool/database/database.json
|
769
|
+
- lib/langchain/tool/database/database.rb
|
770
|
+
- lib/langchain/tool/google_search/google_search.json
|
771
|
+
- lib/langchain/tool/google_search/google_search.rb
|
772
|
+
- lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.json
|
773
|
+
- lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.rb
|
774
|
+
- lib/langchain/tool/weather/weather.json
|
775
|
+
- lib/langchain/tool/weather/weather.rb
|
776
|
+
- lib/langchain/tool/wikipedia/wikipedia.json
|
777
|
+
- lib/langchain/tool/wikipedia/wikipedia.rb
|
714
778
|
- lib/langchain/utils/cosine_similarity.rb
|
715
779
|
- lib/langchain/utils/token_length/ai21_validator.rb
|
716
780
|
- lib/langchain/utils/token_length/base_validator.rb
|
@@ -758,5 +822,5 @@ requirements: []
|
|
758
822
|
rubygems_version: 3.4.1
|
759
823
|
signing_key:
|
760
824
|
specification_version: 4
|
761
|
-
summary: Build LLM-backed Ruby applications with Ruby's
|
825
|
+
summary: Build LLM-backed Ruby applications with Ruby's Langchain.rb
|
762
826
|
test_files: []
|
@@ -1,90 +0,0 @@
|
|
1
|
-
module Langchain::Tool
|
2
|
-
class Database < Base
|
3
|
-
#
|
4
|
-
# Connects to a database, executes SQL queries, and outputs DB schema for Agents to use
|
5
|
-
#
|
6
|
-
# Gem requirements: gem "sequel", "~> 5.68.0"
|
7
|
-
#
|
8
|
-
|
9
|
-
NAME = "database"
|
10
|
-
|
11
|
-
description <<~DESC
|
12
|
-
Useful for getting the result of a database query.
|
13
|
-
|
14
|
-
The input to this tool should be valid SQL.
|
15
|
-
DESC
|
16
|
-
|
17
|
-
attr_reader :db, :requested_tables, :excluded_tables
|
18
|
-
|
19
|
-
#
|
20
|
-
# Establish a database connection
|
21
|
-
#
|
22
|
-
# @param connection_string [String] Database connection info, e.g. 'postgres://user:password@localhost:5432/db_name'
|
23
|
-
# @param tables [Array<Symbol>] The tables to use. Will use all if empty.
|
24
|
-
# @param except_tables [Array<Symbol>] The tables to exclude. Will exclude none if empty.
|
25
|
-
|
26
|
-
# @return [Database] Database object
|
27
|
-
#
|
28
|
-
def initialize(connection_string:, tables: [], exclude_tables: [])
|
29
|
-
depends_on "sequel"
|
30
|
-
|
31
|
-
raise StandardError, "connection_string parameter cannot be blank" if connection_string.empty?
|
32
|
-
|
33
|
-
@db = Sequel.connect(connection_string)
|
34
|
-
@requested_tables = tables
|
35
|
-
@excluded_tables = exclude_tables
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
# Returns the database schema
|
40
|
-
#
|
41
|
-
# @return [String] schema
|
42
|
-
#
|
43
|
-
def dump_schema
|
44
|
-
Langchain.logger.info("Dumping schema tables and keys", for: self.class)
|
45
|
-
schema = ""
|
46
|
-
db.tables.each do |table|
|
47
|
-
next if excluded_tables.include?(table)
|
48
|
-
next unless requested_tables.empty? || requested_tables.include?(table)
|
49
|
-
|
50
|
-
primary_key_columns = []
|
51
|
-
primary_key_column_count = db.schema(table).count { |column| column[1][:primary_key] == true }
|
52
|
-
|
53
|
-
schema << "CREATE TABLE #{table}(\n"
|
54
|
-
db.schema(table).each do |column|
|
55
|
-
schema << "#{column[0]} #{column[1][:type]}"
|
56
|
-
if column[1][:primary_key] == true
|
57
|
-
schema << " PRIMARY KEY" if primary_key_column_count == 1
|
58
|
-
else
|
59
|
-
primary_key_columns << column[0]
|
60
|
-
end
|
61
|
-
schema << ",\n" unless column == db.schema(table).last && primary_key_column_count == 1
|
62
|
-
end
|
63
|
-
if primary_key_column_count > 1
|
64
|
-
schema << "PRIMARY KEY (#{primary_key_columns.join(",")})"
|
65
|
-
end
|
66
|
-
db.foreign_key_list(table).each do |fk|
|
67
|
-
schema << ",\n" if fk == db.foreign_key_list(table).first
|
68
|
-
schema << "FOREIGN KEY (#{fk[:columns][0]}) REFERENCES #{fk[:table]}(#{fk[:key][0]})"
|
69
|
-
schema << ",\n" unless fk == db.foreign_key_list(table).last
|
70
|
-
end
|
71
|
-
schema << ");\n"
|
72
|
-
end
|
73
|
-
schema
|
74
|
-
end
|
75
|
-
|
76
|
-
#
|
77
|
-
# Evaluates a sql expression
|
78
|
-
#
|
79
|
-
# @param input [String] sql expression
|
80
|
-
# @return [Array] results
|
81
|
-
#
|
82
|
-
def execute(input:)
|
83
|
-
Langchain.logger.info("Executing \"#{input}\"", for: self.class)
|
84
|
-
|
85
|
-
db[input].to_a
|
86
|
-
rescue Sequel::DatabaseError => e
|
87
|
-
Langchain.logger.error(e.message, for: self.class)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|