legion-llm 0.5.11 → 0.5.13

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: 66044d638a0a53f9694fe2c208092bd62f980e46ffe6c94e11a2e4e1189faff1
4
- data.tar.gz: 2c59beb39f98553ed9727adb0efb36cb1c7327780e27b7c39aa8fc39a8a1998f
3
+ metadata.gz: fa7ba49d17c9d418f172c576bc3d1b2d5174757c489928cecf52a403c43c4544
4
+ data.tar.gz: a1339abda9a424179721b7b7af22e5ec972c5847976876a967547b5080f48c29
5
5
  SHA512:
6
- metadata.gz: 13026e19ff1630411693f56fd4cd1a122fc85b4796aa5c9361c443464a5ef2a46c1bdc07106f1d104d015e75532bc43af70e56eb4e8a094c3afe48c700032bb4
7
- data.tar.gz: 0dbd5234f42d24ae82c893c11ee3446fae3a74146246cbc42417ec129112ea140dc3788231ab6629357a3634ccc72715fb11b8e4c8b4749aa04cd14886c8efa0
6
+ metadata.gz: 3283898e616549b10b78d722210c538e9f30135a5b20eed49fea1f326c300ca9be4cfbb269ab698080eaee9f8f3d0ccee2bf7350474b195b59130cc55ec5cbe6
7
+ data.tar.gz: 76c4137add776f2c40634daf05baaf459d99a865147b6021e24f22c442564cca569ac6ff63d6bc3b7c7bb43aafa01690f02a2ec948e8bbf840ca7a43bc89c34f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Legion LLM Changelog
2
2
 
3
+ ## [0.5.13] - 2026-03-27
4
+
5
+ ### Changed
6
+ - Classification step (step 6) now auto-enables when `Settings.dig(:compliance, :classification_level)` is set, making it opt-out instead of opt-in when compliance profile is active
7
+
8
+ ## [0.5.12] - 2026-03-26
9
+
10
+ ### Added
11
+ - RagContext (step 8): `apollo_available?` now also returns true when `Legion::Apollo.started?`; `apollo_retrieve` calls `Legion::Apollo.retrieve(scope: :all)` to merge global + local results when the core library is available
12
+ - KnowledgeCapture (step 19): after global writeback, also writes response content to `Legion::Apollo::Local` when started — tags with `['llm_response', model]`
13
+ - `local_capture_enabled?` guard — only writes to local store when `Apollo::Local.started?`, no-op otherwise
14
+ - `ingest_to_local` rescues errors and appends to `@warnings` — pipeline never crashes on local ingest failure
15
+
3
16
  ## [0.5.11] - 2026-03-25
4
17
 
5
18
  ### Added
@@ -20,9 +20,9 @@ module Legion
20
20
  ].freeze
21
21
 
22
22
  def step_classification
23
- return unless @request.classification
23
+ return unless @request.classification || compliance_classification_default
24
24
 
25
- classification = @request.classification
25
+ classification = @request.classification || compliance_classification_default
26
26
  declared_level = classification[:level]
27
27
  scan = scan_content_for_sensitive_data
28
28
  effective_level = upgrade_if_needed(declared_level, scan)
@@ -92,6 +92,17 @@ module Legion
92
92
 
93
93
  LEVELS[threshold_idx]
94
94
  end
95
+
96
+ def compliance_classification_default
97
+ return nil unless defined?(Legion::Settings)
98
+
99
+ level = Legion::Settings.dig(:compliance, :classification_level)
100
+ return nil unless level
101
+
102
+ { level: level.to_sym }
103
+ rescue StandardError
104
+ nil
105
+ end
95
106
  end
96
107
  end
97
108
  end
@@ -6,24 +6,51 @@ module Legion
6
6
  module Steps
7
7
  module KnowledgeCapture
8
8
  def step_knowledge_capture
9
- return unless defined?(Legion::Extensions::Apollo::Helpers::Writeback)
10
-
11
9
  response = current_response
10
+
11
+ if defined?(Legion::Extensions::Apollo::Helpers::Writeback)
12
+ Legion::Extensions::Apollo::Helpers::Writeback.evaluate_and_route(
13
+ request: @request,
14
+ response: response,
15
+ enrichments: @enrichments
16
+ )
17
+ @timeline.record(
18
+ category: :knowledge, key: 'knowledge:capture',
19
+ direction: :outbound, detail: 'evaluated writeback to apollo',
20
+ from: 'pipeline', to: 'apollo'
21
+ )
22
+ end
23
+
24
+ ingest_to_local(response: response) if local_capture_enabled?
25
+ rescue StandardError => e
26
+ @warnings << "knowledge_capture error: #{e.message}"
27
+ end
28
+
29
+ private
30
+
31
+ def local_capture_enabled?
32
+ defined?(::Legion::Apollo::Local) && ::Legion::Apollo::Local.started?
33
+ rescue StandardError
34
+ false
35
+ end
36
+
37
+ def ingest_to_local(response:)
12
38
  return unless response
13
39
 
14
- Legion::Extensions::Apollo::Helpers::Writeback.evaluate_and_route(
15
- request: @request,
16
- response: response,
17
- enrichments: @enrichments
18
- )
40
+ content = response.message[:content].to_s
41
+ return if content.empty?
42
+
43
+ model = response.routing[:model].to_s
44
+ tags = ['llm_response', model].reject(&:empty?)
19
45
 
20
- @timeline.record(
21
- category: :knowledge, key: 'knowledge:capture',
22
- direction: :outbound, detail: 'evaluated writeback to apollo',
23
- from: 'pipeline', to: 'apollo'
46
+ ::Legion::Apollo::Local.ingest(
47
+ content: content,
48
+ tags: tags,
49
+ source_channel: 'llm_pipeline',
50
+ confidence: 0.8
24
51
  )
25
52
  rescue StandardError => e
26
- @warnings << "knowledge_capture error: #{e.message}"
53
+ @warnings << "local_knowledge_capture error: #{e.message}"
27
54
  end
28
55
  end
29
56
  end
@@ -107,18 +107,36 @@ module Legion
107
107
  end
108
108
 
109
109
  def apollo_available?
110
- defined?(::Legion::Extensions::Apollo::Runners::Knowledge)
110
+ return true if defined?(::Legion::Extensions::Apollo::Runners::Knowledge)
111
+
112
+ defined?(::Legion::Apollo) && ::Legion::Apollo.started?
113
+ rescue StandardError
114
+ false
111
115
  end
112
116
 
113
117
  def apollo_retrieve(query:, strategy:)
114
118
  full_limit = rag_settings.fetch(:full_limit, 10)
115
119
  compact_limit = rag_settings.fetch(:compact_limit, 5)
116
120
  confidence = rag_settings.fetch(:min_confidence, 0.5)
117
-
118
121
  limit = strategy == :rag_compact ? compact_limit : full_limit
119
- ::Legion::Extensions::Apollo::Runners::Knowledge.retrieve_relevant(
120
- query: query, limit: limit, min_confidence: confidence
121
- )
122
+
123
+ if defined?(::Legion::Extensions::Apollo::Runners::Knowledge)
124
+ ::Legion::Extensions::Apollo::Runners::Knowledge.retrieve_relevant(
125
+ query: query, limit: limit, min_confidence: confidence
126
+ )
127
+ elsif defined?(::Legion::Apollo)
128
+ begin
129
+ if ::Legion::Apollo.started?
130
+ ::Legion::Apollo.retrieve(text: query, limit: limit, scope: :all)
131
+ else
132
+ []
133
+ end
134
+ rescue StandardError
135
+ []
136
+ end
137
+ else
138
+ []
139
+ end
122
140
  end
123
141
 
124
142
  def extract_query
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module LLM
5
- VERSION = '0.5.11'
5
+ VERSION = '0.5.13'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-llm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11
4
+ version: 0.5.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity