langchainrb 0.14.0 → 0.15.1

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -2
  3. data/lib/langchain/assistants/assistant.rb +175 -131
  4. data/lib/langchain/assistants/messages/ollama_message.rb +9 -21
  5. data/lib/langchain/contextual_logger.rb +11 -5
  6. data/lib/langchain/evals/ragas/faithfulness.rb +5 -1
  7. data/lib/langchain/llm/google_gemini.rb +1 -1
  8. data/lib/langchain/llm/ollama.rb +23 -17
  9. data/lib/langchain/llm/openai.rb +1 -1
  10. data/lib/langchain/llm/response/ollama_response.rb +1 -15
  11. data/lib/langchain/llm/unified_parameters.rb +2 -2
  12. data/lib/langchain/tool/calculator.rb +38 -0
  13. data/lib/langchain/tool/{database/database.rb → database.rb} +24 -12
  14. data/lib/langchain/tool/file_system.rb +44 -0
  15. data/lib/langchain/tool/{google_search/google_search.rb → google_search.rb} +17 -23
  16. data/lib/langchain/tool/{news_retriever/news_retriever.rb → news_retriever.rb} +41 -14
  17. data/lib/langchain/tool/ruby_code_interpreter.rb +41 -0
  18. data/lib/langchain/tool/{tavily/tavily.rb → tavily.rb} +24 -10
  19. data/lib/langchain/tool/vectorsearch.rb +40 -0
  20. data/lib/langchain/tool/weather.rb +109 -0
  21. data/lib/langchain/tool/{wikipedia/wikipedia.rb → wikipedia.rb} +17 -13
  22. data/lib/langchain/tool_definition.rb +212 -0
  23. data/lib/langchain/utils/colorizer.rb +19 -0
  24. data/lib/langchain/utils/hash_transformer.rb +9 -17
  25. data/lib/langchain/utils/to_boolean.rb +27 -0
  26. data/lib/langchain/vectorsearch/chroma.rb +2 -2
  27. data/lib/langchain/vectorsearch/elasticsearch.rb +2 -2
  28. data/lib/langchain/vectorsearch/epsilla.rb +3 -3
  29. data/lib/langchain/vectorsearch/milvus.rb +2 -2
  30. data/lib/langchain/vectorsearch/pgvector.rb +2 -2
  31. data/lib/langchain/vectorsearch/pinecone.rb +2 -2
  32. data/lib/langchain/vectorsearch/qdrant.rb +2 -2
  33. data/lib/langchain/vectorsearch/weaviate.rb +4 -4
  34. data/lib/langchain/version.rb +1 -1
  35. data/lib/langchain.rb +1 -2
  36. metadata +18 -54
  37. data/lib/langchain/tool/base.rb +0 -107
  38. data/lib/langchain/tool/calculator/calculator.json +0 -19
  39. data/lib/langchain/tool/calculator/calculator.rb +0 -34
  40. data/lib/langchain/tool/database/database.json +0 -46
  41. data/lib/langchain/tool/file_system/file_system.json +0 -57
  42. data/lib/langchain/tool/file_system/file_system.rb +0 -32
  43. data/lib/langchain/tool/google_search/google_search.json +0 -19
  44. data/lib/langchain/tool/news_retriever/news_retriever.json +0 -122
  45. data/lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.json +0 -19
  46. data/lib/langchain/tool/ruby_code_interpreter/ruby_code_interpreter.rb +0 -37
  47. data/lib/langchain/tool/tavily/tavily.json +0 -54
  48. data/lib/langchain/tool/vectorsearch/vectorsearch.json +0 -24
  49. data/lib/langchain/tool/vectorsearch/vectorsearch.rb +0 -36
  50. data/lib/langchain/tool/weather/weather.json +0 -19
  51. data/lib/langchain/tool/weather/weather.rb +0 -55
  52. data/lib/langchain/tool/wikipedia/wikipedia.json +0 -19
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Langchain::Tool
4
- # = Tools
5
- #
6
- # Tools are used by Agents to perform specific tasks. A 'Tool' is a collection of functions ("methods").
7
- #
8
- # == Available Tools
9
- #
10
- # - {Langchain::Tool::Calculator}: calculate the result of a math expression
11
- # - {Langchain::Tool::Database}: executes SQL queries
12
- # - {Langchain::Tool::FileSystem}: interacts with the file system
13
- # - {Langchain::Tool::GoogleSearch}: search on Google (via SerpAPI)
14
- # - {Langchain::Tool::RubyCodeInterpreter}: runs ruby code
15
- # - {Langchain::Tool::Weather}: gets current weather data
16
- # - {Langchain::Tool::Wikipedia}: search on Wikipedia
17
- #
18
- # == Usage
19
- #
20
- # 1. Pick the tools you'd like to pass to an Agent and install the gems listed under **Gem Requirements**
21
- #
22
- # # For example to use the Calculator, GoogleSearch, and Wikipedia:
23
- # gem install eqn
24
- # gem install google_search_results
25
- # gem install wikipedia-client
26
- #
27
- # 2. Set the environment variables listed under **ENV Requirements**
28
- #
29
- # export SERPAPI_API_KEY=paste-your-serpapi-api-key-here
30
- #
31
- # 3. Pass the tools when Agent is instantiated.
32
- #
33
- # agent = Langchain::Assistant.new(
34
- # llm: Langchain::LLM::OpenAI.new(api_key: "YOUR_API_KEY"), # or other LLM that supports function calling (coming soon)
35
- # thread: Langchain::Thread.new,
36
- # tools: [
37
- # Langchain::Tool::GoogleSearch.new(api_key: "YOUR_API_KEY"),
38
- # Langchain::Tool::Calculator.new,
39
- # Langchain::Tool::Wikipedia.new
40
- # ]
41
- # )
42
- #
43
- # == Adding Tools
44
- #
45
- # 1. Create a new folder in lib/langchain/tool/your_tool_name/
46
- # 2. Inside of this folder create a file with a class YourToolName that inherits from {Langchain::Tool::Base}
47
- # 3. Add `NAME=` and `ANNOTATIONS_PATH=` constants in your Tool class
48
- # 4. Implement various public methods in your tool class
49
- # 5. Create a sidecar .json file in the same directory as your tool file annotating the methods in the Open API format
50
- # 6. Add your tool to the {file:README.md}
51
- class Base
52
- include Langchain::DependencyHelper
53
-
54
- # Returns the NAME constant of the tool
55
- #
56
- # @return [String] tool name
57
- def name
58
- self.class.const_get(:NAME)
59
- end
60
-
61
- def self.logger_options
62
- {
63
- color: :light_blue
64
- }
65
- end
66
-
67
- # Returns the tool as a list of OpenAI formatted functions
68
- #
69
- # @return [Array<Hash>] List of hashes representing the tool as OpenAI formatted functions
70
- def to_openai_tools
71
- method_annotations
72
- end
73
-
74
- # Returns the tool as a list of Anthropic formatted functions
75
- #
76
- # @return [Array<Hash>] List of hashes representing the tool as Anthropic formatted functions
77
- def to_anthropic_tools
78
- method_annotations.map do |annotation|
79
- # Slice out only the content of the "function" key
80
- annotation["function"]
81
- # Rename "parameters" to "input_schema" key
82
- .transform_keys("parameters" => "input_schema")
83
- end
84
- end
85
-
86
- # Returns the tool as a list of Google Gemini formatted functions
87
- #
88
- # @return [Array<Hash>] List of hashes representing the tool as Google Gemini formatted functions
89
- def to_google_gemini_tools
90
- method_annotations.map do |annotation|
91
- # Slice out only the content of the "function" key
92
- annotation["function"]
93
- end
94
- end
95
-
96
- # Return tool's method annotations as JSON
97
- #
98
- # @return [Hash] Tool's method annotations
99
- def method_annotations
100
- JSON.parse(
101
- File.read(
102
- self.class.const_get(:ANNOTATIONS_PATH)
103
- )
104
- )
105
- end
106
- end
107
- end
@@ -1,19 +0,0 @@
1
- [
2
- {
3
- "type": "function",
4
- "function": {
5
- "name": "calculator__execute",
6
- "description": "Evaluates a pure math expression or if equation contains non-math characters (e.g.: \"12F in Celsius\") then it uses the google search calculator to evaluate the expression",
7
- "parameters": {
8
- "type": "object",
9
- "properties": {
10
- "input": {
11
- "type": "string",
12
- "description": "math expression"
13
- }
14
- },
15
- "required": ["input"]
16
- }
17
- }
18
- }
19
- ]
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Langchain::Tool
4
- class Calculator < Base
5
- #
6
- # A calculator tool that falls back to the Google calculator widget
7
- #
8
- # Gem requirements:
9
- # gem "eqn", "~> 1.6.5"
10
- # gem "google_search_results", "~> 2.0.0"
11
- #
12
- # Usage:
13
- # calculator = Langchain::Tool::Calculator.new
14
- #
15
- NAME = "calculator"
16
- ANNOTATIONS_PATH = Langchain.root.join("./langchain/tool/#{NAME}/#{NAME}.json").to_path
17
-
18
- def initialize
19
- depends_on "eqn"
20
- end
21
-
22
- # Evaluates a pure math expression or if equation contains non-math characters (e.g.: "12F in Celsius") then it uses the google search calculator to evaluate the expression
23
- #
24
- # @param input [String] math expression
25
- # @return [String] Answer
26
- def execute(input:)
27
- Langchain.logger.info("Executing \"#{input}\"", for: self.class)
28
-
29
- Eqn::Calculator.calc(input)
30
- rescue Eqn::ParseError, Eqn::NoVariableValueError
31
- "\"#{input}\" is an invalid mathematical expression"
32
- end
33
- end
34
- end
@@ -1,46 +0,0 @@
1
- [
2
- {
3
- "type": "function",
4
- "function": {
5
- "name": "database__describe_tables",
6
- "description": "Database Tool: Returns the schema for a list of tables",
7
- "parameters": {
8
- "type": "object",
9
- "properties": {
10
- "tables": {
11
- "type": "string",
12
- "description": "The tables to describe."
13
- }
14
- },
15
- "required": ["tables"]
16
- }
17
- }
18
- }, {
19
- "type": "function",
20
- "function": {
21
- "name": "database__list_tables",
22
- "description": "Database Tool: Returns a list of tables in the database",
23
- "parameters": {
24
- "type": "object",
25
- "properties": {},
26
- "required": []
27
- }
28
- }
29
- }, {
30
- "type": "function",
31
- "function": {
32
- "name": "database__execute",
33
- "description": "Database Tool: Executes a SQL query and returns the results",
34
- "parameters": {
35
- "type": "object",
36
- "properties": {
37
- "input": {
38
- "type": "string",
39
- "description": "SQL query to be executed"
40
- }
41
- },
42
- "required": ["input"]
43
- }
44
- }
45
- }
46
- ]
@@ -1,57 +0,0 @@
1
- [
2
- {
3
- "type": "function",
4
- "function": {
5
- "name": "file_system__list_directory",
6
- "description": "File System Tool: Lists out the content of a specified directory",
7
- "parameters": {
8
- "type": "object",
9
- "properties": {
10
- "directory_path": {
11
- "type": "string",
12
- "description": "Directory path to list"
13
- }
14
- },
15
- "required": ["directory_path"]
16
- }
17
- }
18
- },
19
- {
20
- "type": "function",
21
- "function": {
22
- "name": "file_system__read_file",
23
- "description": "File System Tool: Reads the contents of a file",
24
- "parameters": {
25
- "type": "object",
26
- "properties": {
27
- "file_path": {
28
- "type": "string",
29
- "description": "Path to the file to read from"
30
- }
31
- },
32
- "required": ["file_path"]
33
- }
34
- }
35
- },
36
- {
37
- "type": "function",
38
- "function": {
39
- "name": "file_system__write_to_file",
40
- "description": "File System Tool: Write content to a file",
41
- "parameters": {
42
- "type": "object",
43
- "properties": {
44
- "file_path": {
45
- "type": "string",
46
- "description": "Path to the file to write"
47
- },
48
- "content": {
49
- "type": "string",
50
- "description": "Content to write to the file"
51
- }
52
- },
53
- "required": ["file_path", "content"]
54
- }
55
- }
56
- }
57
- ]
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Langchain::Tool
4
- class FileSystem < Base
5
- #
6
- # A tool that wraps the Ruby file system classes.
7
- #
8
- # Usage:
9
- # file_system = Langchain::Tool::FileSystem.new
10
- #
11
- NAME = "file_system"
12
- ANNOTATIONS_PATH = Langchain.root.join("./langchain/tool/#{NAME}/#{NAME}.json").to_path
13
-
14
- def list_directory(directory_path:)
15
- Dir.entries(directory_path)
16
- rescue Errno::ENOENT
17
- "No such directory: #{directory_path}"
18
- end
19
-
20
- def read_file(file_path:)
21
- File.read(file_path)
22
- rescue Errno::ENOENT
23
- "No such file: #{file_path}"
24
- end
25
-
26
- def write_to_file(file_path:, content:)
27
- File.write(file_path, content)
28
- rescue Errno::EACCES
29
- "Permission denied: #{file_path}"
30
- end
31
- end
32
- end
@@ -1,19 +0,0 @@
1
- [
2
- {
3
- "type": "function",
4
- "function": {
5
- "name": "google_search-execute",
6
- "description": "Executes Google Search and returns the result",
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
- ]
@@ -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
- ]