ask-core 0.1.4 → 0.2.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/lib/ask/conversation.rb +12 -2
- data/lib/ask/tool_def.rb +19 -0
- data/lib/ask/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5bdccf7f79627afa2402bf1664f73aeab7129095e09694fdb9acda35dc56ce0c
|
|
4
|
+
data.tar.gz: d2af40aed07e8036b583cfb0b85469c87b85c32a2fdcd5678ccf127fc6dbbdaf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 41689e4eb0b4b41e719d642aa6407cb89c104d53ce8c164b8ebed117fd76655752edd2c0dd011d1534425cb66dd0d1c6e457fa441f858507d8a6f91e5ac065ba
|
|
7
|
+
data.tar.gz: 66b66595e04e62e750c02f899e1c90fc72f1b2b198b855d0c616ae391f22e1b304bd46b4539603484cf7f566facb8d5782cc20c688490402bc345d776d5cdb23
|
data/lib/ask/conversation.rb
CHANGED
|
@@ -83,9 +83,10 @@ module Ask
|
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
tc_args = if tc.respond_to?(:arguments)
|
|
86
|
-
tc.arguments
|
|
86
|
+
tc.arguments.is_a?(String) ? tc.arguments : JSON.generate(tc.arguments)
|
|
87
87
|
elsif tc.is_a?(Hash)
|
|
88
|
-
tc.dig(:function, :arguments) || tc.dig("function", "arguments") || tc[:arguments] || tc["arguments"] || "{}"
|
|
88
|
+
raw = tc.dig(:function, :arguments) || tc.dig("function", "arguments") || tc[:arguments] || tc["arguments"] || "{}"
|
|
89
|
+
raw.is_a?(String) ? raw : JSON.generate(raw)
|
|
89
90
|
else
|
|
90
91
|
"{}"
|
|
91
92
|
end
|
|
@@ -247,6 +248,15 @@ module Ask
|
|
|
247
248
|
# @return [Array<Ask::Message>] tool messages
|
|
248
249
|
def tool_messages = by_role(:tool)
|
|
249
250
|
|
|
251
|
+
# Walk message history to find a matching assistant tool call for a tool result.
|
|
252
|
+
# Returns the assistant message that contains the tool call, or nil.
|
|
253
|
+
def find_matching_tool_call(tool_call_id)
|
|
254
|
+
@messages.reverse.find do |m|
|
|
255
|
+
next unless m.role == :assistant && m.tool_calls.is_a?(Hash)
|
|
256
|
+
m.tool_calls.key?(tool_call_id)
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
250
260
|
# Deep copy of this conversation.
|
|
251
261
|
# @return [Ask::Conversation]
|
|
252
262
|
def dup
|
data/lib/ask/tool_def.rb
CHANGED
|
@@ -30,6 +30,25 @@ module Ask
|
|
|
30
30
|
provider_params: tool.provider_params
|
|
31
31
|
)
|
|
32
32
|
end
|
|
33
|
+
|
|
34
|
+
# Safely create a ToolDef, returning nil instead of raising on invalid input.
|
|
35
|
+
# Calls the optional log block with the error message if creation fails.
|
|
36
|
+
#
|
|
37
|
+
# @yield [message] called with the error message if creation fails
|
|
38
|
+
# @yieldparam message [String] the error description
|
|
39
|
+
# @return [Ask::ToolDef, nil] the created ToolDef or nil on failure
|
|
40
|
+
def safe_create(name:, description: "", parameters: nil, provider_params: {}, &log_block)
|
|
41
|
+
new(name: name, description: description, parameters: parameters, provider_params: provider_params)
|
|
42
|
+
rescue InvalidToolDefinition => e
|
|
43
|
+
msg = e.message
|
|
44
|
+
if log_block
|
|
45
|
+
log_block.call(msg)
|
|
46
|
+
else
|
|
47
|
+
$stderr.puts "[ask-core] ToolDef.safe_create skipped: #{msg}"
|
|
48
|
+
end
|
|
49
|
+
nil
|
|
50
|
+
end
|
|
51
|
+
|
|
33
52
|
end
|
|
34
53
|
|
|
35
54
|
# @return [String] tool name (must match /\\A[a-zA-Z_][a-zA-Z0-9_-]*\\z/)
|
data/lib/ask/version.rb
CHANGED