ask-core 0.1.5 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb30900c345f7b3ba5b07cb6cb515bfa53a1ad45b1253f5522ec86fa7ae8d989
4
- data.tar.gz: d64c934c00f7198a6d9394b25f44c9bb68ff59cd9070e16e1e16de947da4391c
3
+ metadata.gz: 5bdccf7f79627afa2402bf1664f73aeab7129095e09694fdb9acda35dc56ce0c
4
+ data.tar.gz: d2af40aed07e8036b583cfb0b85469c87b85c32a2fdcd5678ccf127fc6dbbdaf
5
5
  SHA512:
6
- metadata.gz: b747f134a8a5590d3fc14d0a97194028d4389dfa0b1147ceb2f899efe2111b5e41b28a0748fdce7d569596f73e1bd6133ffd606d5f6556ab33f5a9247f2b950a
7
- data.tar.gz: d524d3cd765d1cfc6515fdd2a8ad03d465a80e1bed0e888dd2f0c273f390c5db043a12382e4713d557c64c189ecb4e386fb393952148895438157615ba9b83ff
6
+ metadata.gz: 41689e4eb0b4b41e719d642aa6407cb89c104d53ce8c164b8ebed117fd76655752edd2c0dd011d1534425cb66dd0d1c6e457fa441f858507d8a6f91e5ac065ba
7
+ data.tar.gz: 66b66595e04e62e750c02f899e1c90fc72f1b2b198b855d0c616ae391f22e1b304bd46b4539603484cf7f566facb8d5782cc20c688490402bc345d776d5cdb23
@@ -248,6 +248,15 @@ module Ask
248
248
  # @return [Array<Ask::Message>] tool messages
249
249
  def tool_messages = by_role(:tool)
250
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
+
251
260
  # Deep copy of this conversation.
252
261
  # @return [Ask::Conversation]
253
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ask
4
- VERSION = "0.1.5"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto