ticuna 0.2.4 → 0.2.6

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: 6f8432d211478403205701bfc2d400682b39822afcc6770f8ef47d72b4b9f629
4
- data.tar.gz: da612d12ad040786645a2d2c6adbdf6fa3b7174c6ace9ce161d4664d392ac040
3
+ metadata.gz: 559816faa31497288f44f3c2174199ad15af23dceb2c7e373b2f9b7446c87725
4
+ data.tar.gz: 8758245018266453979599a0428b94bcbaaba288c6455c113f40c7e39abb97dd
5
5
  SHA512:
6
- metadata.gz: 63c00a6456386c6dfce93c685ae6b830aac6d1831b08adb1b9d369cef4bd96c351bb5d920ed8e83fa70b6008b487316bc52d48dd3d3d45eb80075b54b0b4516b
7
- data.tar.gz: 72dc55c412e243792e70d9cc7de5802dc6f62af134219858c5a7907902c6b337d0d3268109e3ebba76e5ca8ac0203efb204eab75265b6dd4d61ca28e248c7890
6
+ metadata.gz: 76171e5dc940d98159fb8b94119facf7cc9b23f08f30a37cda59ad57483e91915a261e694c50f2135eb17fa20955e05092358a98382e763ed762de1c610ee827
7
+ data.tar.gz: ec1bf63e151eec143d2d1a8ded518cef4ca7b9a64654612f54eeaf3d7695b99e9ca83b7485e9d239c587c19930b8259a65f1c9c1a245fb6ade3e4426fc5be175
data/CHANGELOG.md CHANGED
@@ -25,3 +25,10 @@
25
25
 
26
26
  ## [0.2.4] - 2025-10-13
27
27
  - Fix errors with model name
28
+
29
+ ## [0.2.5] - 2025-10-13
30
+ - Better messages
31
+ - Add `errors?` method
32
+
33
+ ## [0.2.6] - 2025-10-22
34
+ - Add `context` method
data/lib/ticuna/llm.rb CHANGED
@@ -18,6 +18,7 @@ module Ticuna
18
18
  def initialize_llm(provider_client)
19
19
  @provider = provider_client
20
20
  @tools = []
21
+ @contexts = []
21
22
  end
22
23
 
23
24
  def tool(klass)
@@ -25,13 +26,21 @@ module Ticuna
25
26
  self
26
27
  end
27
28
 
29
+ def context(value = nil, &block)
30
+ value = block.call if block
31
+ @contexts << value if value
32
+ self
33
+ end
34
+
28
35
  def ask(message, stream: false, model: :gpt_4_1, output_format: :text, &block)
29
- tool_contexts = @tools.map(&:context).compact.join("\n\n")
36
+ tool_contexts = @tools.map(&:context).compact
37
+ direct_contexts = @contexts.compact
38
+ combined_contexts = (tool_contexts + direct_contexts).reject { |ctx| ctx.to_s.strip.empty? }
30
39
 
31
- system_message = if tool_contexts.empty?
40
+ system_message = if combined_contexts.empty?
32
41
  nil
33
42
  else
34
- { role: "developer", content: tool_contexts }
43
+ { role: "developer", content: combined_contexts.join("\n\n") }
35
44
  end
36
45
 
37
46
  messages = if system_message
@@ -40,7 +49,7 @@ module Ticuna
40
49
  [{ role: "user", content: message }]
41
50
  end
42
51
 
43
- model_string = resolve_model(model)
52
+ model_string = detect_llm_model(model)
44
53
 
45
54
  Ticuna::Response.new(
46
55
  @provider.ask_with_messages(messages, stream: stream, model: model_string, output_format: output_format, &block)
@@ -49,15 +58,11 @@ module Ticuna
49
58
 
50
59
  private
51
60
 
52
- def resolve_model(model)
61
+ def detect_llm_model(model)
53
62
  return model if model.is_a?(String)
54
63
  return Ticuna::Providers::MODELS[model] if Ticuna::Providers::MODELS.key?(model)
55
64
 
56
- available_models = Ticuna::Providers::MODELS.flat_map do |provider, models|
57
- models.keys.map { |m| ":#{m} (#{provider})" }
58
- end.join(", ")
59
-
60
- raise "Model ':#{model}' not found. Available models: #{available_models}"
65
+ raise "\n\n\tLLM Model ':#{model}' not found.\n\tAvailable models: #{Ticuna::Providers::MODELS.keys.join(", ")}\n"
61
66
  end
62
67
 
63
68
  class << self
@@ -4,10 +4,10 @@ require "json"
4
4
 
5
5
  module Ticuna
6
6
  class Response
7
- attr_reader :data
7
+ attr_reader :data, :errors, :parsed
8
8
 
9
9
  def initialize(raw)
10
- parsed =
10
+ @parsed =
11
11
  case raw
12
12
  when String
13
13
  begin
@@ -21,7 +21,8 @@ module Ticuna
21
21
  raise ArgumentError, "Ticuna::Response only accepts Hash or String, received: #{raw.class}"
22
22
  end
23
23
 
24
- @data = deep_symbolize_keys(parsed)
24
+ @data = deep_symbolize_keys(@parsed)
25
+ @errors = deep_symbolize_keys(@parsed["error"] || [])
25
26
  end
26
27
 
27
28
  def [](key)
@@ -36,9 +37,14 @@ module Ticuna
36
37
  @data.inspect
37
38
  end
38
39
 
40
+ def errors?
41
+ !errors.empty?
42
+ end
43
+
39
44
  def method_missing(name, *args, &block)
40
45
  value = @data[name]
41
46
  return wrap(value) if @data.key?(name)
47
+
42
48
  super
43
49
  end
44
50
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ticuna
4
- VERSION = "0.2.4"
4
+ VERSION = "0.2.6"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ticuna
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chirana
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-10-13 00:00:00.000000000 Z
11
+ date: 2025-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday