intelli_agent 0.2.2 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a70f9043e7c97455596b720e803c7ae02274c8bf8e63eff090cf813327e256d7
4
- data.tar.gz: b0e4e27b5ea461dbf87e8b7fa551b85de2258f3ffcb56c8fb98ba32d74d6a3a7
3
+ metadata.gz: e97b3065bf46da0d6d7759a41fe0b43ca0b6eac98e21aa8df9823efa88e54643
4
+ data.tar.gz: ff04e8c8df7ff838bc332f99d517085b9e571dcb77e299b922ef3ef7605542e0
5
5
  SHA512:
6
- metadata.gz: 8792b7a3c0fddbbf7969f9d45a3f1a171613ad4f6f5331f88c0e43aa0adbd2c58ea4c7ad563dcd6eff6e5d00f4a4fda33cfaf8568efaacaff7fe242970c8464b
7
- data.tar.gz: 7e60f9ddb4c80bfdd642330f1e066e641023f206f72302d9cc07cc27c4e70e4d353030d24600831dae1f97ec7edfd913ba6e37c5e53360c122492d658a4228e0
6
+ metadata.gz: 754a73693f3d8a13295e63c4fa512bec9cae6fbeceaed5848c3fc9ea95ed008b87307f1d24bb136be91541fe641ad047b8393dcd41f3b3a86b76747fc882a6c0
7
+ data.tar.gz: 565000945b207b0680f30ab78b4ab9ffa624836e6ec8545f9a3825841e73e3d29c22769549a7f83c2c1e1b6b415449bb102147c48168cdb6dd46ea3bc861970b
@@ -4,25 +4,13 @@ module IntelliAgent::OpenAI
4
4
  MAX_TOKENS = ENV.fetch('OPENAI_MAX_TOKENS', 16_383).to_i
5
5
 
6
6
  module ResponseExtender
7
- def content
8
- dig('choices', 0, 'message', 'content')
9
- end
10
-
11
- def message
12
- dig('choices', 0, 'message')
13
- end
7
+ def message = dig('choices', 0, 'message')
14
8
 
15
- def content?
16
- !content.nil?
17
- end
9
+ def content = dig('choices', 0, 'message', 'content')
10
+ def content? = !content.nil?
18
11
 
19
- def tool_calls
20
- dig('choices', 0, 'message', 'tool_calls')
21
- end
22
-
23
- def tool_calls?
24
- !tool_calls.nil?
25
- end
12
+ def tool_calls = dig('choices', 0, 'message', 'tool_calls')
13
+ def tool_calls? = !tool_calls.nil?
26
14
 
27
15
  def functions
28
16
  return if tool_calls.nil?
@@ -39,14 +27,13 @@ module IntelliAgent::OpenAI
39
27
  functions_list
40
28
  end
41
29
 
42
- def functions?
43
- !functions.nil?
44
- end
30
+ def functions? = !functions.nil?
45
31
  end
46
32
 
47
- def self.embed(input, model: 'text-embedding-3-large')
33
+ def self.embeddings(input, model: 'text-embedding-3-large')
48
34
  response = OpenAI::Client.new.embeddings(parameters: { input:, model: })
49
- response.dig('data', 0, 'embedding')
35
+ def response.embedding = dig('data', 0, 'embedding')
36
+ response
50
37
  end
51
38
 
52
39
  def self.vision(prompt:, image_url:, model: :advanced, response_format: nil, max_tokens: MAX_TOKENS)
@@ -59,7 +46,9 @@ module IntelliAgent::OpenAI
59
46
 
60
47
  response = OpenAI::Client.new.chat(parameters:)
61
48
 
62
- response.dig('choices', 0, 'message', 'content').strip
49
+ def response.content = dig('choices', 0, 'message', 'content').strip
50
+
51
+ response
63
52
  end
64
53
 
65
54
  def self.single_prompt(prompt:, model: :basic, response_format: nil, max_tokens: MAX_TOKENS, tools: nil, function_run_context: self)
@@ -124,4 +113,4 @@ module IntelliAgent::OpenAI
124
113
  end
125
114
  end
126
115
  end
127
- end
116
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intelli_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gedean Dias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2027-09-21 00:00:00.000000000 Z
11
+ date: 2027-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-openai
@@ -63,7 +63,6 @@ files:
63
63
  - lib/intelli_agent/agent.rb.disabled
64
64
  - lib/intelli_agent/agent_test.rb_
65
65
  - lib/intelli_agent/anthropic.rb
66
- - lib/intelli_agent/openai.bkp.rb
67
66
  - lib/intelli_agent/openai.rb
68
67
  homepage: https://github.com/gedean/intelli_agent
69
68
  licenses:
@@ -1,145 +0,0 @@
1
- module IntelliAgent::OpenAI
2
- BASIC_MODEL = ENV.fetch('OPENAI_BASIC_MODEL', 'gpt-4o-mini')
3
- ADVANCED_MODEL = ENV.fetch('OPENAI_ADVANCED_MODEL', 'gpt-4o-2024-08-06')
4
- MAX_TOKENS = ENV.fetch('OPENAI_MAX_TOKENS', 16_383).to_i
5
-
6
- module ResponseExtender
7
- def content
8
- dig('choices', 0, 'message', 'content')
9
- end
10
-
11
- def message
12
- dig('choices', 0, 'message')
13
- end
14
-
15
- def content?
16
- !content.nil?
17
- end
18
-
19
- def tool_calls
20
- dig('choices', 0, 'message', 'tool_calls')
21
- end
22
-
23
- def tool_calls?
24
- !tool_calls.nil?
25
- end
26
-
27
- def functions
28
- return if tool_calls.nil?
29
-
30
- functions = tool_calls.filter { |tool| tool['type'].eql? 'function' }
31
- return if functions.empty?
32
-
33
- functions_list = []
34
- functions.map.with_index do |function, function_index|
35
- function_def = tool_calls.dig(function_index, 'function')
36
- functions_list << { id: function['id'], name: function_def['name'], arguments: Oj.load(function_def['arguments'], symbol_keys: true) }
37
- end
38
-
39
- functions_list
40
- end
41
-
42
- def functions?
43
- !functions.nil?
44
- end
45
- end
46
-
47
- def self.embed(input, model: 'text-embedding-3-large')
48
- response = OpenAI::Client.new.embeddings(parameters: { input:, model: })
49
- response.dig('data', 0, 'embedding')
50
- end
51
-
52
- def self.vision(prompt:, image_url:, model: :advanced, response_format: nil, max_tokens: MAX_TOKENS)
53
- model = select_model(model)
54
- messages = [{ type: :text, text: prompt },
55
- { type: :image_url, image_url: { url: image_url } }]
56
-
57
- parameters = { model: model, messages: [{ role: :user, content: messages }], max_tokens: }
58
- parameters[:response_format] = { type: 'json_object' } if response_format.eql?(:json)
59
-
60
- response = OpenAI::Client.new.chat(parameters:)
61
-
62
- response.dig('choices', 0, 'message', 'content').strip
63
- end
64
-
65
-
66
-
67
- def self.single_prompt(prompt:, model: :basic, response_format: nil, max_tokens: MAX_TOKENS, tools: nil, function_run_context: self)
68
- model = select_model(model)
69
-
70
- parameters = { model:, messages: [{ role: 'user', content: prompt }], max_tokens: }
71
- parameters[:response_format] = { type: 'json_object' } if response_format.eql?(:json)
72
- parameters[:tools] = tools if tools
73
- banana(parameters:)
74
- end
75
-
76
- def self.single_chat(system:, user:, model: :basic, response_format: nil, max_tokens: MAX_TOKENS, tools: nil, function_run_context: self)
77
- model = select_model(model)
78
- parameters = { model:,
79
- messages: [
80
- { role: 'system', content: system },
81
- { role: 'user', content: user }
82
- ], max_tokens: }
83
-
84
- parameters[:response_format] = { type: 'json_object' } if response_format.eql?(:json)
85
- parameters[:tools] = tools if tools
86
-
87
- banana(parameters:)
88
- end
89
-
90
- def self.chat(messages:, model: :basic, response_format: nil, max_tokens: MAX_TOKENS, tools: nil, function_run_context: self)
91
- model = select_model(model)
92
-
93
- messages = parse_messages(messages)
94
-
95
- parameters = { model:, messages:, max_tokens: }
96
- parameters[:response_format] = { type: 'json_object' } if response_format.eql?(:json)
97
- parameters[:tools] = tools if tools
98
-
99
- response = OpenAI::Client.new.chat(parameters:)
100
- response.extend(ResponseExtender)
101
-
102
- if response.functions?
103
- parameters[:messages] << response.message
104
-
105
- response.functions.each do |function|
106
- parameters[:messages] << {
107
- tool_call_id: function[:id],
108
- role: :tool,
109
- name: function[:name],
110
- content: parameters[:function_run_context].send(function[:name], **function[:arguments])
111
- }
112
- end
113
-
114
- response = OpenAI::Client.new.chat(parameters:)
115
- response.extend(ResponseExtender)
116
- end
117
-
118
- response
119
- end
120
-
121
- def self.models = OpenAI::Client.new.models.list
122
-
123
- def self.select_model(model)
124
- case model
125
- when :basic
126
- BASIC_MODEL
127
- when :advanced
128
- ADVANCED_MODEL
129
- else
130
- model
131
- end
132
- end
133
-
134
- def self.parse_messages(messages)
135
- case messages
136
- in [{ role: String, content: String }, *]
137
- messages
138
- else
139
- messages.map do |msg|
140
- role, content = msg.first
141
- { role: role.to_s, content: content }
142
- end
143
- end
144
- end
145
- end