legion-gaia 0.9.55 → 0.9.56
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/CHANGELOG.md +6 -0
- data/lib/legion/gaia/offline_handler.rb +1 -5
- data/lib/legion/gaia/phase_wiring.rb +1 -1
- data/lib/legion/gaia/version.rb +1 -1
- data/lib/legion/gaia.rb +43 -10
- 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: adef7a7efb85417b7c5dca3f0918816897d66ad1b31c4b2db0f3d7eabfc01292
|
|
4
|
+
data.tar.gz: a06ed381354edf16234c55c41c9d378fc7146ed45775a8cd2bbeb9d9080a1bf0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a0d096fc5d3ebd918074d517346b6d1a208909056a3b9c9b12048496f5255a3babb00ceb0b661b8bb389d1d13a17236dc1373dea64bd486297cfcaa08c528e45
|
|
7
|
+
data.tar.gz: 4e66482277f45c9ff1676c956b8f11cba50d88200a24ad04ec08b55ece4fd6b2e694aea4894e1ca0caca5cf24193662279c1e8e9a03c6cf941068445e955f884
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.56] - 2026-05-15
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- Preserve GAIA defaults while overlaying loaded `:gaia` settings so partial config hashes do not erase required keys like `heartbeat_interval` or `router`.
|
|
7
|
+
- Record partner interaction traces with scalar affect fields and separate structured valence context, preventing `String`/`Hash` values from crashing trace storage during ingest.
|
|
8
|
+
|
|
3
9
|
## [0.9.55] - 2026-05-11
|
|
4
10
|
|
|
5
11
|
### Fixed
|
|
@@ -79,11 +79,7 @@ module Legion
|
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def offline_threshold
|
|
82
|
-
|
|
83
|
-
Legion::Settings.dig(:gaia, :offline_threshold) || 60
|
|
84
|
-
else
|
|
85
|
-
60
|
|
86
|
-
end
|
|
82
|
+
Legion::Settings.dig(:gaia, :offline_threshold) || 60
|
|
87
83
|
rescue StandardError => e
|
|
88
84
|
handle_exception(e, level: :debug, operation: 'gaia.offline_handler.offline_threshold')
|
|
89
85
|
60
|
|
@@ -285,7 +285,7 @@ module Legion
|
|
|
285
285
|
end
|
|
286
286
|
|
|
287
287
|
def knowledge_setting(key, default)
|
|
288
|
-
return default
|
|
288
|
+
return default if Legion::Settings[:gaia].nil?
|
|
289
289
|
|
|
290
290
|
Legion::Settings[:gaia].dig(:knowledge, key) || default
|
|
291
291
|
rescue StandardError => e
|
data/lib/legion/gaia/version.rb
CHANGED
data/lib/legion/gaia.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'legion/json'
|
|
4
|
+
require 'legion/logging'
|
|
5
|
+
require 'legion/settings'
|
|
3
6
|
require 'legion/gaia/version'
|
|
4
7
|
require 'legion/gaia/tick_history'
|
|
5
8
|
require 'legion/gaia/workflow'
|
|
@@ -133,11 +136,11 @@ module Legion
|
|
|
133
136
|
end
|
|
134
137
|
|
|
135
138
|
def settings
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
defaults = Legion::Gaia::Settings.default
|
|
140
|
+
loaded = Legion::Settings[:gaia]
|
|
141
|
+
return defaults unless loaded.is_a?(Hash)
|
|
142
|
+
|
|
143
|
+
merge_settings_hashes(defaults, loaded)
|
|
141
144
|
end
|
|
142
145
|
|
|
143
146
|
def heartbeat(**)
|
|
@@ -539,6 +542,7 @@ module Legion
|
|
|
539
542
|
def record_interaction_trace(observation)
|
|
540
543
|
return unless defined?(Legion::Extensions::Agentic::Memory::Trace::Runners::Traces)
|
|
541
544
|
|
|
545
|
+
emotional_context = interaction_trace_emotional_context
|
|
542
546
|
runner = Object.new
|
|
543
547
|
runner.extend(Legion::Extensions::Agentic::Memory::Trace::Runners::Traces)
|
|
544
548
|
trace_result = runner.store_trace(
|
|
@@ -548,11 +552,13 @@ module Legion
|
|
|
548
552
|
channel: observation[:channel],
|
|
549
553
|
direct_address: observation[:direct_address],
|
|
550
554
|
bond_role: observation[:bond_role]
|
|
551
|
-
}
|
|
555
|
+
}.tap do |payload|
|
|
556
|
+
payload[:emotional_context] = emotional_context if emotional_context
|
|
557
|
+
end,
|
|
552
558
|
domain_tags: ['partner_interaction', observation[:channel].to_s],
|
|
553
559
|
origin: :direct_experience,
|
|
554
|
-
emotional_valence:
|
|
555
|
-
emotional_intensity:
|
|
560
|
+
emotional_valence: interaction_trace_emotional_valence(emotional_context),
|
|
561
|
+
emotional_intensity: interaction_trace_emotional_intensity(emotional_context),
|
|
556
562
|
confidence: 0.8
|
|
557
563
|
)
|
|
558
564
|
log.info("[gaia] memory+ episodic trace=#{trace_result[:trace_id].to_s[0, 8]} " \
|
|
@@ -604,6 +610,33 @@ module Legion
|
|
|
604
610
|
(Time.now.utc - @last_response_at).to_f
|
|
605
611
|
end
|
|
606
612
|
|
|
613
|
+
def interaction_trace_emotional_context
|
|
614
|
+
context = @last_valences&.first
|
|
615
|
+
context.is_a?(Hash) ? context.dup : nil
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
def interaction_trace_emotional_valence(emotional_context)
|
|
619
|
+
raw = emotional_context || @last_valences&.first
|
|
620
|
+
return raw.to_f.clamp(-1.0, 1.0) if raw.is_a?(Numeric)
|
|
621
|
+
|
|
622
|
+
numeric = Float(raw)
|
|
623
|
+
numeric.clamp(-1.0, 1.0)
|
|
624
|
+
rescue ArgumentError, TypeError
|
|
625
|
+
0.0
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
def interaction_trace_emotional_intensity(emotional_context)
|
|
629
|
+
compute_arousal(emotional_context) || 0.5
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
def merge_settings_hashes(base, override)
|
|
633
|
+
return override unless base.is_a?(Hash) && override.is_a?(Hash)
|
|
634
|
+
|
|
635
|
+
base.merge(override) do |_key, base_value, override_value|
|
|
636
|
+
merge_settings_hashes(base_value, override_value)
|
|
637
|
+
end
|
|
638
|
+
end
|
|
639
|
+
|
|
607
640
|
def check_partner_absence(observations, phase_handlers)
|
|
608
641
|
has_partner = observations.any? { |o| o[:bond_role] == :partner }
|
|
609
642
|
|
|
@@ -742,8 +775,8 @@ module Legion
|
|
|
742
775
|
store = apollo_local_store
|
|
743
776
|
return unless store
|
|
744
777
|
|
|
745
|
-
TrackerPersistence.hydrate_all(store: store)
|
|
746
|
-
BondRegistry.hydrate_from_apollo(store: store)
|
|
778
|
+
TrackerPersistence.hydrate_all(store: store)
|
|
779
|
+
BondRegistry.hydrate_from_apollo(store: store)
|
|
747
780
|
log.info('Legion::Gaia hydrated trackers and bond registry from Apollo Local')
|
|
748
781
|
rescue StandardError => e
|
|
749
782
|
handle_exception(e, level: :warn, operation: 'gaia.hydrate_from_apollo_local')
|