intelligence 0.5.0 → 0.7.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.
- checksums.yaml +4 -4
- data/README.md +555 -0
- data/intelligence.gemspec +1 -1
- data/lib/intelligence/adapter/base.rb +23 -3
- data/lib/intelligence/adapter/class_methods.rb +15 -0
- data/lib/intelligence/adapter/{construction_methods.rb → module_methods.rb} +8 -4
- data/lib/intelligence/adapter.rb +2 -2
- data/lib/intelligence/adapters/anthropic/adapter.rb +21 -30
- data/lib/intelligence/adapters/anthropic/chat_request_methods.rb +189 -0
- data/lib/intelligence/adapters/anthropic/{chat_methods.rb → chat_response_methods.rb} +8 -124
- data/lib/intelligence/adapters/cerebras.rb +17 -17
- data/lib/intelligence/adapters/generic/adapter.rb +1 -12
- data/lib/intelligence/adapters/generic/chat_methods.rb +42 -11
- data/lib/intelligence/adapters/generic.rb +1 -1
- data/lib/intelligence/adapters/google/adapter.rb +33 -35
- data/lib/intelligence/adapters/google/chat_request_methods.rb +233 -0
- data/lib/intelligence/adapters/google/{chat_methods.rb → chat_response_methods.rb} +52 -162
- data/lib/intelligence/adapters/groq.rb +46 -28
- data/lib/intelligence/adapters/hyperbolic.rb +13 -13
- data/lib/intelligence/adapters/legacy/adapter.rb +0 -2
- data/lib/intelligence/adapters/legacy/chat_methods.rb +22 -6
- data/lib/intelligence/adapters/mistral.rb +57 -0
- data/lib/intelligence/adapters/open_ai/adapter.rb +38 -45
- data/lib/intelligence/adapters/open_ai/chat_request_methods.rb +186 -0
- data/lib/intelligence/adapters/open_ai/{chat_methods.rb → chat_response_methods.rb} +60 -131
- data/lib/intelligence/adapters/open_ai.rb +1 -1
- data/lib/intelligence/adapters/open_router.rb +62 -0
- data/lib/intelligence/adapters/samba_nova.rb +13 -13
- data/lib/intelligence/adapters/together_ai.rb +21 -19
- data/lib/intelligence/chat_request.rb +57 -7
- data/lib/intelligence/chat_result.rb +4 -0
- data/lib/intelligence/chat_result_choice.rb +4 -2
- data/lib/intelligence/conversation.rb +38 -9
- data/lib/intelligence/message.rb +103 -20
- data/lib/intelligence/message_content/base.rb +3 -0
- data/lib/intelligence/message_content/binary.rb +6 -0
- data/lib/intelligence/message_content/file.rb +35 -0
- data/lib/intelligence/message_content/text.rb +5 -0
- data/lib/intelligence/message_content/tool_call.rb +12 -1
- data/lib/intelligence/message_content/tool_result.rb +15 -3
- data/lib/intelligence/message_content.rb +12 -3
- data/lib/intelligence/tool.rb +139 -0
- data/lib/intelligence/version.rb +1 -1
- data/lib/intelligence.rb +6 -4
- metadata +18 -9
@@ -0,0 +1,139 @@
|
|
1
|
+
module Intelligence
|
2
|
+
##
|
3
|
+
# The +Tool+ class instance encpasulates a definition of a tool that may be executed by a
|
4
|
+
# model. The properies of a tool include a unique name, a comprehensive description of what
|
5
|
+
# the tool does and a set of properies that describe the arguments the tool accepts, each
|
6
|
+
# with its own type and validation rules.
|
7
|
+
#
|
8
|
+
# A +Tool+ instance does not implement the tool, only the defintion of the tool, which is
|
9
|
+
# presented to the model to allow it to make a tool call.
|
10
|
+
#
|
11
|
+
# == Configuration
|
12
|
+
#
|
13
|
+
# A tool MUST include the +name+ and +description+ and may include any number of
|
14
|
+
# +arguments+ as well as a +required+ attribute with a list of the required arguments.
|
15
|
+
# Each argument must include a +name+ and may include +description+, +type+, a list of
|
16
|
+
# acceptable values through +enum+ and a +minimum+ and +maximum+ for numerical
|
17
|
+
# arguments.
|
18
|
+
#
|
19
|
+
# === Tool Attributes
|
20
|
+
#
|
21
|
+
# - +name+: A +String+ representing the unique name of the tool. *required*
|
22
|
+
# - +description+: A +String+ describing it's purpose and functionality. *required*
|
23
|
+
#
|
24
|
+
# === Argument Attributes
|
25
|
+
#
|
26
|
+
# An argument is defined through the +argument+ block. The block MUST include the +name+,
|
27
|
+
# while all other attributes, including the +description+ and +type+ are all optional.
|
28
|
+
#
|
29
|
+
# - +type+:
|
30
|
+
# A +String+ indicating the data type of the property. Accepted values include +string+,
|
31
|
+
# +number+, +integer+, +array+, +boolean+, +object+.
|
32
|
+
# - +name+: A +String+ representing the name of the property. *required*
|
33
|
+
# - +description+: A +String+ that describes the property and its purpose. *required*
|
34
|
+
# - +minimum+: An +Integer+ or +Float+ specifying the minimum value for numerical properties.
|
35
|
+
# - +maximum+: An +Integer+ or +Float+ specifying the maximum value for numerical properties.
|
36
|
+
# - +enum+:
|
37
|
+
# An +Array+ of acceptable values for the property. Note that ( as per the JSON schema
|
38
|
+
# specification ) an enum could be composed of mixed types but this is discouraged.
|
39
|
+
# - +required:
|
40
|
+
# A boolean ( +TrueClass+, +FalseClass+ ) that specifying if the argument is required.
|
41
|
+
#
|
42
|
+
# === Examples
|
43
|
+
#
|
44
|
+
# weather_tool = Tool.build! do
|
45
|
+
# name :get_weather_by_locality
|
46
|
+
# description \
|
47
|
+
# "The get_weather_by_locality tool will return the current weather in a given locality " \
|
48
|
+
# "( city, state or province, and country )."
|
49
|
+
# argument name: 'city', type: 'string', required: true do
|
50
|
+
# description "The city or town for which the current weather should be returned."
|
51
|
+
# end
|
52
|
+
# argument name: 'state', type: 'string' do
|
53
|
+
# description \
|
54
|
+
# "The state or province for which the current weather should be returned. If this is " \
|
55
|
+
# "not provided the largest or most prominent city with the given name, in the given " \
|
56
|
+
# "country, will be assumed."
|
57
|
+
# end
|
58
|
+
# argument name: 'country', type: 'string', required: true do
|
59
|
+
# description "The city or town for which the current weather should be returned."
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# web_browser_tool = Tool.build!
|
64
|
+
# name :get_web_page
|
65
|
+
# description "The get_web_page tool will return the content of a web page, given a page url."
|
66
|
+
# argument name: :url, type: 'string', required: true do
|
67
|
+
# description \
|
68
|
+
# "The url of the page including the scheme.\n"
|
69
|
+
# "Examples:\n"
|
70
|
+
# " https://example.com\n"
|
71
|
+
# " https://www.iana.org/help/example-domains\n"
|
72
|
+
# end
|
73
|
+
# argument name: :format do
|
74
|
+
# description \
|
75
|
+
# "The format of the returned content. By default you will receive 'markdown'. You " \
|
76
|
+
# "should specify 'html' only if it is specifically required to fullfill the user " \
|
77
|
+
# "request."
|
78
|
+
# enum [ 'html', 'markdown' ]
|
79
|
+
# end
|
80
|
+
# argument name: :content do
|
81
|
+
# description \
|
82
|
+
# "The content of the page to be returned. By default you will receive only the 'main' " \
|
83
|
+
# "content, excluding header, footer, menu, advertising and other miscelanous elements. " \
|
84
|
+
# "You should request 'full' only if absolutely neccessry to fullfill the user request. " \
|
85
|
+
# enum [ 'main', 'full' ]
|
86
|
+
# end
|
87
|
+
# argument name: :include_tags do
|
88
|
+
# description "If content is set to html some tags will."
|
89
|
+
# end
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
class Tool
|
93
|
+
include DynamicSchema::Definable
|
94
|
+
include DynamicSchema::Buildable
|
95
|
+
|
96
|
+
ARGUMENT_TYPES = [ 'string', 'number', 'integer', 'array', 'boolean', 'object' ]
|
97
|
+
|
98
|
+
ARGUMENT_SCHEMA = proc do
|
99
|
+
type String, in: ARGUMENT_TYPES
|
100
|
+
name String, required: true
|
101
|
+
description String, required: true
|
102
|
+
required [ TrueClass, FalseClass ]
|
103
|
+
# note that an enum does not require a type as it implicitly restricts the argument
|
104
|
+
# to specific values
|
105
|
+
enum array: true
|
106
|
+
# for arguments of type number and integer
|
107
|
+
minimum [ Integer, Float ]
|
108
|
+
maximum [ Integer, Float ]
|
109
|
+
# for arguments of type array
|
110
|
+
maximum_items Integer, as: :maxItems
|
111
|
+
minimum_items Integer, as: :minItems
|
112
|
+
unique_items [ TrueClass, FalseClass ]
|
113
|
+
items do
|
114
|
+
type in: ARGUMENT_TYPES
|
115
|
+
property array: true, as: :properties, &ARGUMENT_SCHEMA
|
116
|
+
end
|
117
|
+
# for arguments of type object
|
118
|
+
property array: true, as: :properties, &ARGUMENT_SCHEMA
|
119
|
+
end
|
120
|
+
|
121
|
+
schema do
|
122
|
+
name String, required: true
|
123
|
+
description String, required: true
|
124
|
+
argument array: true, as: :properties do
|
125
|
+
self.instance_eval( &ARGUMENT_SCHEMA )
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def initialize( attributes = nil )
|
130
|
+
@properies = attributes
|
131
|
+
end
|
132
|
+
|
133
|
+
def to_h
|
134
|
+
@properies.to_h
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
data/lib/intelligence/version.rb
CHANGED
data/lib/intelligence.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'json'
|
2
|
+
require 'base64'
|
2
3
|
|
3
4
|
require 'faraday'
|
4
|
-
require '
|
5
|
+
require 'dynamic_schema'
|
5
6
|
require 'mime-types'
|
6
7
|
|
7
8
|
require 'intelligence/version'
|
@@ -11,14 +12,15 @@ require 'intelligence/adapter_error'
|
|
11
12
|
require 'intelligence/unsupported_content_error'
|
12
13
|
|
13
14
|
require 'intelligence/error_result'
|
15
|
+
require 'intelligence/chat_error_result'
|
14
16
|
|
15
|
-
require 'intelligence/
|
16
|
-
require 'intelligence/message'
|
17
|
+
require 'intelligence/tool'
|
17
18
|
require 'intelligence/message_content'
|
19
|
+
require 'intelligence/message'
|
20
|
+
require 'intelligence/conversation'
|
18
21
|
require 'intelligence/adapter'
|
19
22
|
require 'intelligence/chat_request'
|
20
23
|
require 'intelligence/chat_result'
|
21
24
|
require 'intelligence/chat_result_choice'
|
22
25
|
require 'intelligence/chat_metrics'
|
23
|
-
require 'intelligence/chat_error_result'
|
24
26
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: intelligence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kristoph Cichocki-Romanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: dynamicschema
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.0.
|
33
|
+
version: 1.0.0.beta03
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.0.0.
|
40
|
+
version: 1.0.0.beta03
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mime-types
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,29 +108,36 @@ extensions: []
|
|
108
108
|
extra_rdoc_files: []
|
109
109
|
files:
|
110
110
|
- LICENSE
|
111
|
+
- README.md
|
111
112
|
- intelligence.gemspec
|
112
113
|
- lib/intelligence.rb
|
113
114
|
- lib/intelligence/adapter.rb
|
114
115
|
- lib/intelligence/adapter/base.rb
|
115
|
-
- lib/intelligence/adapter/
|
116
|
+
- lib/intelligence/adapter/class_methods.rb
|
117
|
+
- lib/intelligence/adapter/module_methods.rb
|
116
118
|
- lib/intelligence/adapter_error.rb
|
117
119
|
- lib/intelligence/adapters/anthropic.rb
|
118
120
|
- lib/intelligence/adapters/anthropic/adapter.rb
|
119
|
-
- lib/intelligence/adapters/anthropic/
|
121
|
+
- lib/intelligence/adapters/anthropic/chat_request_methods.rb
|
122
|
+
- lib/intelligence/adapters/anthropic/chat_response_methods.rb
|
120
123
|
- lib/intelligence/adapters/cerebras.rb
|
121
124
|
- lib/intelligence/adapters/generic.rb
|
122
125
|
- lib/intelligence/adapters/generic/adapter.rb
|
123
126
|
- lib/intelligence/adapters/generic/chat_methods.rb
|
124
127
|
- lib/intelligence/adapters/google.rb
|
125
128
|
- lib/intelligence/adapters/google/adapter.rb
|
126
|
-
- lib/intelligence/adapters/google/
|
129
|
+
- lib/intelligence/adapters/google/chat_request_methods.rb
|
130
|
+
- lib/intelligence/adapters/google/chat_response_methods.rb
|
127
131
|
- lib/intelligence/adapters/groq.rb
|
128
132
|
- lib/intelligence/adapters/hyperbolic.rb
|
129
133
|
- lib/intelligence/adapters/legacy/adapter.rb
|
130
134
|
- lib/intelligence/adapters/legacy/chat_methods.rb
|
135
|
+
- lib/intelligence/adapters/mistral.rb
|
131
136
|
- lib/intelligence/adapters/open_ai.rb
|
132
137
|
- lib/intelligence/adapters/open_ai/adapter.rb
|
133
|
-
- lib/intelligence/adapters/open_ai/
|
138
|
+
- lib/intelligence/adapters/open_ai/chat_request_methods.rb
|
139
|
+
- lib/intelligence/adapters/open_ai/chat_response_methods.rb
|
140
|
+
- lib/intelligence/adapters/open_router.rb
|
134
141
|
- lib/intelligence/adapters/samba_nova.rb
|
135
142
|
- lib/intelligence/adapters/together_ai.rb
|
136
143
|
- lib/intelligence/chat_error_result.rb
|
@@ -146,9 +153,11 @@ files:
|
|
146
153
|
- lib/intelligence/message_content.rb
|
147
154
|
- lib/intelligence/message_content/base.rb
|
148
155
|
- lib/intelligence/message_content/binary.rb
|
156
|
+
- lib/intelligence/message_content/file.rb
|
149
157
|
- lib/intelligence/message_content/text.rb
|
150
158
|
- lib/intelligence/message_content/tool_call.rb
|
151
159
|
- lib/intelligence/message_content/tool_result.rb
|
160
|
+
- lib/intelligence/tool.rb
|
152
161
|
- lib/intelligence/unsupported_content_error.rb
|
153
162
|
- lib/intelligence/version.rb
|
154
163
|
homepage: https://github.com/EndlessInternational/intelligence
|