langchainrb 0.14.0 → 0.15.0
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 +8 -0
- data/lib/langchain/assistants/assistant.rb +175 -131
- data/lib/langchain/assistants/messages/ollama_message.rb +9 -21
- data/lib/langchain/contextual_logger.rb +2 -2
- data/lib/langchain/llm/google_gemini.rb +1 -1
- data/lib/langchain/llm/ollama.rb +23 -17
- data/lib/langchain/llm/openai.rb +1 -1
- data/lib/langchain/llm/response/ollama_response.rb +1 -15
- data/lib/langchain/llm/unified_parameters.rb +2 -2
- data/lib/langchain/tool/calculator.rb +38 -0
- data/lib/langchain/tool/{database/database.rb → database.rb} +24 -12
- data/lib/langchain/tool/file_system.rb +44 -0
- data/lib/langchain/tool/{google_search/google_search.rb → google_search.rb} +17 -23
- data/lib/langchain/tool/{news_retriever/news_retriever.rb → news_retriever.rb} +41 -14
- data/lib/langchain/tool/ruby_code_interpreter.rb +41 -0
- data/lib/langchain/tool/{tavily/tavily.rb → tavily.rb} +24 -10
- data/lib/langchain/tool/vectorsearch.rb +40 -0
- data/lib/langchain/tool/{weather/weather.rb → weather.rb} +21 -17
- data/lib/langchain/tool/{wikipedia/wikipedia.rb → wikipedia.rb} +17 -13
- data/lib/langchain/tool_definition.rb +212 -0
- data/lib/langchain/utils/hash_transformer.rb +9 -17
- data/lib/langchain/vectorsearch/chroma.rb +2 -2
- data/lib/langchain/vectorsearch/elasticsearch.rb +2 -2
- data/lib/langchain/vectorsearch/epsilla.rb +3 -3
- data/lib/langchain/vectorsearch/milvus.rb +2 -2
- data/lib/langchain/vectorsearch/pgvector.rb +2 -2
- data/lib/langchain/vectorsearch/pinecone.rb +2 -2
- data/lib/langchain/vectorsearch/qdrant.rb +2 -2
- data/lib/langchain/vectorsearch/weaviate.rb +4 -4
- data/lib/langchain/version.rb +1 -1
- metadata +13 -23
- data/lib/langchain/tool/base.rb +0 -107
- data/lib/langchain/tool/calculator/calculator.json +0 -19
- data/lib/langchain/tool/calculator/calculator.rb +0 -34
- data/lib/langchain/tool/database/database.json +0 -46
- data/lib/langchain/tool/file_system/file_system.json +0 -57
- data/lib/langchain/tool/file_system/file_system.rb +0 -32
- data/lib/langchain/tool/google_search/google_search.json +0 -19
- data/lib/langchain/tool/news_retriever/news_retriever.json +0 -122
- data/lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.json +0 -19
- data/lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.rb +0 -37
- data/lib/langchain/tool/tavily/tavily.json +0 -54
- data/lib/langchain/tool/vectorsearch/vectorsearch.json +0 -24
- data/lib/langchain/tool/vectorsearch/vectorsearch.rb +0 -36
- data/lib/langchain/tool/weather/weather.json +0 -19
- data/lib/langchain/tool/wikipedia/wikipedia.json +0 -19
@@ -1,122 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "news_retriever__get_everything",
|
6
|
-
"description": "News Retriever: Search through millions of articles from over 150,000 large and small news sources and blogs.",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"q": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "Keywords or phrases to search for in the article title and body. Surround phrases with quotes (\") for exact match. Alternatively you can use the AND / OR / NOT keywords, and optionally group these with parenthesis. Must be URL-encoded."
|
13
|
-
},
|
14
|
-
"search_in": {
|
15
|
-
"type": "string",
|
16
|
-
"description": "The fields to restrict your q search to.",
|
17
|
-
"enum": ["title", "description", "content"]
|
18
|
-
},
|
19
|
-
"sources": {
|
20
|
-
"type": "string",
|
21
|
-
"description": "A comma-seperated string of identifiers (maximum 20) for the news sources or blogs you want headlines from. Use the /sources endpoint to locate these programmatically or look at the sources index."
|
22
|
-
},
|
23
|
-
"domains": {
|
24
|
-
"type": "string",
|
25
|
-
"description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com, engadget.com) to restrict the search to."
|
26
|
-
},
|
27
|
-
"exclude_domains": {
|
28
|
-
"type": "string",
|
29
|
-
"description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com, engadget.com) to remove from the results."
|
30
|
-
},
|
31
|
-
"from": {
|
32
|
-
"type": "string",
|
33
|
-
"description": "A date and optional time for the oldest article allowed. This should be in ISO 8601 format."
|
34
|
-
},
|
35
|
-
"to": {
|
36
|
-
"type": "string",
|
37
|
-
"description": "A date and optional time for the newest article allowed. This should be in ISO 8601 format."
|
38
|
-
},
|
39
|
-
"language": {
|
40
|
-
"type": "string",
|
41
|
-
"description": "The 2-letter ISO-639-1 code of the language you want to get headlines for.",
|
42
|
-
"enum": ["ar", "de", "en", "es", "fr", "he", "it", "nl", "no", "pt", "ru", "sv", "ud", "zh"]
|
43
|
-
},
|
44
|
-
"sort_by": {
|
45
|
-
"type": "string",
|
46
|
-
"description": "The order to sort the articles in.",
|
47
|
-
"enum": ["relevancy", "popularity", "publishedAt"]
|
48
|
-
},
|
49
|
-
"page_size": {
|
50
|
-
"type": "integer",
|
51
|
-
"description": "The number of results to return per page (request). 5 is the default, 100 is the maximum."
|
52
|
-
},
|
53
|
-
"page": {
|
54
|
-
"type": "integer",
|
55
|
-
"description": "Use this to page through the results if the total results found is greater than the page size."
|
56
|
-
}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
60
|
-
},
|
61
|
-
{
|
62
|
-
"type": "function",
|
63
|
-
"function": {
|
64
|
-
"name": "news_retriever__get_top_headlines",
|
65
|
-
"description": "News Retriever: Provides live top and breaking headlines for a country, specific category in a country, single source, or multiple sources. You can also search with keywords. Articles are sorted by the earliest date published first.",
|
66
|
-
"parameters": {
|
67
|
-
"type": "object",
|
68
|
-
"properties": {
|
69
|
-
"country": {
|
70
|
-
"type": "string",
|
71
|
-
"description": "The 2-letter ISO 3166-1 code of the country you want to get headlines for.",
|
72
|
-
"enum": ["ae", "ar", "at", "au", "be", "bg", "br", "ca", "ch", "cn", "co", "cu", "cz", "de", "eg", "fr", "gb", "gr", "hk", "hu", "id", "ie", "il", "in", "it", "jp", "kr", "lt", "lv", "ma", "mx", "my", "ng", "nl", "no", "nz", "ph", "pl", "pt", "ro", "rs", "ru", "sa", "se", "sg", "si", "sk", "th", "tr", "tw", "ua", "us", "ve", "za"]
|
73
|
-
},
|
74
|
-
"category": {
|
75
|
-
"type": "string",
|
76
|
-
"description": "The category you want to get headlines for.",
|
77
|
-
"enum": ["business", "entertainment", "general", "health", "science", "sports", "technology"]
|
78
|
-
},
|
79
|
-
"q": {
|
80
|
-
"type": "string",
|
81
|
-
"description": "Keywords or a phrase to search for."
|
82
|
-
},
|
83
|
-
"page_size": {
|
84
|
-
"type": "integer",
|
85
|
-
"description": "The number of results to return per page (request). 5 is the default, 100 is the maximum."
|
86
|
-
},
|
87
|
-
"page": {
|
88
|
-
"type": "integer",
|
89
|
-
"description": "Use this to page through the results if the total results found is greater than the page size."
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}
|
93
|
-
}
|
94
|
-
},
|
95
|
-
{
|
96
|
-
"type": "function",
|
97
|
-
"function": {
|
98
|
-
"name": "news_retriever__get_sources",
|
99
|
-
"description": "News Retriever: This endpoint returns the subset of news publishers that top headlines (/v2/top-headlines) are available from. It's mainly a convenience endpoint that you can use to keep track of the publishers available on the API, and you can pipe it straight through to your users.",
|
100
|
-
"parameters": {
|
101
|
-
"type": "object",
|
102
|
-
"properties": {
|
103
|
-
"country": {
|
104
|
-
"type": "string",
|
105
|
-
"description": "The 2-letter ISO 3166-1 code of the country you want to get headlines for. Default: all countries.",
|
106
|
-
"enum": ["ae", "ar", "at", "au", "be", "bg", "br", "ca", "ch", "cn", "co", "cu", "cz", "de", "eg", "fr", "gb", "gr", "hk", "hu", "id", "ie", "il", "in", "it", "jp", "kr", "lt", "lv", "ma", "mx", "my", "ng", "nl", "no", "nz", "ph", "pl", "pt", "ro", "rs", "ru", "sa", "se", "sg", "si", "sk", "th", "tr", "tw", "ua", "us", "ve", "za"]
|
107
|
-
},
|
108
|
-
"category": {
|
109
|
-
"type": "string",
|
110
|
-
"description": "The category you want to get headlines for. Default: all categories.",
|
111
|
-
"enum": ["business", "entertainment", "general", "health", "science", "sports", "technology"]
|
112
|
-
},
|
113
|
-
"language": {
|
114
|
-
"type": "string",
|
115
|
-
"description": "The 2-letter ISO-639-1 code of the language you want to get headlines for.",
|
116
|
-
"enum": ["ar", "de", "en", "es", "fr", "he", "it", "nl", "no", "pt", "ru", "sv", "ud", "zh"]
|
117
|
-
}
|
118
|
-
}
|
119
|
-
}
|
120
|
-
}
|
121
|
-
}
|
122
|
-
]
|
@@ -1,19 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "ruby_code_interpreter__execute",
|
6
|
-
"description": "Executes Ruby code in a sandboxes environment.",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"input": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "ruby code expression"
|
13
|
-
}
|
14
|
-
},
|
15
|
-
"required": ["input"]
|
16
|
-
}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
]
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Langchain::Tool
|
4
|
-
class RubyCodeInterpreter < Base
|
5
|
-
#
|
6
|
-
# A tool that execute Ruby code in a sandboxed environment.
|
7
|
-
#
|
8
|
-
# Gem requirements:
|
9
|
-
# gem "safe_ruby", "~> 1.0.4"
|
10
|
-
#
|
11
|
-
# Usage:
|
12
|
-
# interpreter = Langchain::Tool::RubyCodeInterpreter.new
|
13
|
-
#
|
14
|
-
NAME = "ruby_code_interpreter"
|
15
|
-
ANNOTATIONS_PATH = Langchain.root.join("./langchain/tool/#{NAME}/#{NAME}.json").to_path
|
16
|
-
|
17
|
-
def initialize(timeout: 30)
|
18
|
-
depends_on "safe_ruby"
|
19
|
-
|
20
|
-
@timeout = timeout
|
21
|
-
end
|
22
|
-
|
23
|
-
# Executes Ruby code in a sandboxes environment.
|
24
|
-
#
|
25
|
-
# @param input [String] ruby code expression
|
26
|
-
# @return [String] Answer
|
27
|
-
def execute(input:)
|
28
|
-
Langchain.logger.info("Executing \"#{input}\"", for: self.class)
|
29
|
-
|
30
|
-
safe_eval(input)
|
31
|
-
end
|
32
|
-
|
33
|
-
def safe_eval(code)
|
34
|
-
SafeRuby.eval(code, timeout: @timeout)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "tavily__search",
|
6
|
-
"description": "Tavily Tool: Robust search API",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"query": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "The search query string"
|
13
|
-
},
|
14
|
-
"search_depth": {
|
15
|
-
"type": "string",
|
16
|
-
"description": "The depth of the search: basic for quick results and advanced for indepth high quality results but longer response time",
|
17
|
-
"enum": ["basic", "advanced"]
|
18
|
-
},
|
19
|
-
"include_images": {
|
20
|
-
"type": "boolean",
|
21
|
-
"description": "Include a list of query related images in the response"
|
22
|
-
},
|
23
|
-
"include_answer": {
|
24
|
-
"type": "boolean",
|
25
|
-
"description": "Include answers in the search results"
|
26
|
-
},
|
27
|
-
"include_raw_content": {
|
28
|
-
"type": "boolean",
|
29
|
-
"description": "Include raw content in the search results"
|
30
|
-
},
|
31
|
-
"max_results": {
|
32
|
-
"type": "integer",
|
33
|
-
"description": "The number of maximum search results to return"
|
34
|
-
},
|
35
|
-
"include_domains": {
|
36
|
-
"type": "array",
|
37
|
-
"items": {
|
38
|
-
"type": "string"
|
39
|
-
},
|
40
|
-
"description": "A list of domains to specifically include in the search results"
|
41
|
-
},
|
42
|
-
"exclude_domains": {
|
43
|
-
"type": "array",
|
44
|
-
"items": {
|
45
|
-
"type": "string"
|
46
|
-
},
|
47
|
-
"description": "A list of domains to specifically exclude from the search results"
|
48
|
-
}
|
49
|
-
},
|
50
|
-
"required": ["query"]
|
51
|
-
}
|
52
|
-
}
|
53
|
-
}
|
54
|
-
]
|
@@ -1,24 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "vectorsearch__similarity_search",
|
6
|
-
"description": "Vectorsearch: Retrieves relevant document for the query",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"query": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "Query to find similar documents for"
|
13
|
-
},
|
14
|
-
"k": {
|
15
|
-
"type": "integer",
|
16
|
-
"description": "Number of similar documents to retrieve",
|
17
|
-
"default": 4
|
18
|
-
}
|
19
|
-
},
|
20
|
-
"required": ["query"]
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
24
|
-
]
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Langchain::Tool
|
4
|
-
class Vectorsearch < Base
|
5
|
-
#
|
6
|
-
# A tool wraps vectorsearch classes
|
7
|
-
#
|
8
|
-
# Usage:
|
9
|
-
# # Initialize the LLM that will be used to generate embeddings
|
10
|
-
# ollama = Langchain::LLM::Ollama.new(url: ENV["OLLAMA_URL"]
|
11
|
-
# chroma = Langchain::Vectorsearch::Chroma.new(url: ENV["CHROMA_URL"], index_name: "my_index", llm: ollama)
|
12
|
-
#
|
13
|
-
# # This tool can now be used by the Assistant
|
14
|
-
# vectorsearch_tool = Langchain::Tool::Vectorsearch.new(vectorsearch: chroma)
|
15
|
-
#
|
16
|
-
NAME = "vectorsearch"
|
17
|
-
ANNOTATIONS_PATH = Langchain.root.join("./langchain/tool/#{NAME}/#{NAME}.json").to_path
|
18
|
-
|
19
|
-
attr_reader :vectorsearch
|
20
|
-
|
21
|
-
# Initializes the Vectorsearch tool
|
22
|
-
#
|
23
|
-
# @param vectorsearch [Langchain::Vectorsearch::Base] Vectorsearch instance to use
|
24
|
-
def initialize(vectorsearch:)
|
25
|
-
@vectorsearch = vectorsearch
|
26
|
-
end
|
27
|
-
|
28
|
-
# Executes the vector search and returns the results
|
29
|
-
#
|
30
|
-
# @param query [String] The query to search for
|
31
|
-
# @param k [Integer] The number of results to return
|
32
|
-
def similarity_search(query:, k: 4)
|
33
|
-
vectorsearch.similarity_search(query:, k: 4)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "weather__execute",
|
6
|
-
"description": "Returns current weather for a city",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"input": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "comma separated city and unit (optional: imperial, metric, or standard)"
|
13
|
-
}
|
14
|
-
},
|
15
|
-
"required": ["input"]
|
16
|
-
}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
]
|
@@ -1,19 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"type": "function",
|
4
|
-
"function": {
|
5
|
-
"name": "wikipedia__execute",
|
6
|
-
"description": "Executes Wikipedia API search and returns the answer",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"input": {
|
11
|
-
"type": "string",
|
12
|
-
"description": "search query"
|
13
|
-
}
|
14
|
-
},
|
15
|
-
"required": ["input"]
|
16
|
-
}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
]
|