lex-agentic-inference 0.1.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.
Files changed (328) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +12 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +21 -0
  5. data/README.md +13 -0
  6. data/lex-agentic-inference.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/inference/abductive/client.rb +25 -0
  8. data/lib/legion/extensions/agentic/inference/abductive/helpers/abduction_engine.rb +164 -0
  9. data/lib/legion/extensions/agentic/inference/abductive/helpers/constants.rb +39 -0
  10. data/lib/legion/extensions/agentic/inference/abductive/helpers/hypothesis.rb +106 -0
  11. data/lib/legion/extensions/agentic/inference/abductive/helpers/observation.rb +39 -0
  12. data/lib/legion/extensions/agentic/inference/abductive/runners/abductive_reasoning.rb +129 -0
  13. data/lib/legion/extensions/agentic/inference/abductive/version.rb +13 -0
  14. data/lib/legion/extensions/agentic/inference/abductive.rb +20 -0
  15. data/lib/legion/extensions/agentic/inference/affordance/actors/scan.rb +31 -0
  16. data/lib/legion/extensions/agentic/inference/affordance/client.rb +28 -0
  17. data/lib/legion/extensions/agentic/inference/affordance/helpers/affordance_field.rb +123 -0
  18. data/lib/legion/extensions/agentic/inference/affordance/helpers/affordance_item.rb +75 -0
  19. data/lib/legion/extensions/agentic/inference/affordance/helpers/constants.rb +42 -0
  20. data/lib/legion/extensions/agentic/inference/affordance/runners/affordance.rb +90 -0
  21. data/lib/legion/extensions/agentic/inference/affordance/version.rb +13 -0
  22. data/lib/legion/extensions/agentic/inference/affordance.rb +19 -0
  23. data/lib/legion/extensions/agentic/inference/analogical/client.rb +28 -0
  24. data/lib/legion/extensions/agentic/inference/analogical/helpers/analogy_engine.rb +209 -0
  25. data/lib/legion/extensions/agentic/inference/analogical/helpers/constants.rb +38 -0
  26. data/lib/legion/extensions/agentic/inference/analogical/helpers/structure_map.rb +113 -0
  27. data/lib/legion/extensions/agentic/inference/analogical/runners/analogical_reasoning.rb +106 -0
  28. data/lib/legion/extensions/agentic/inference/analogical/version.rb +13 -0
  29. data/lib/legion/extensions/agentic/inference/analogical.rb +19 -0
  30. data/lib/legion/extensions/agentic/inference/argument_mapping/client.rb +19 -0
  31. data/lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument.rb +102 -0
  32. data/lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb +131 -0
  33. data/lib/legion/extensions/agentic/inference/argument_mapping/helpers/constants.rb +44 -0
  34. data/lib/legion/extensions/agentic/inference/argument_mapping/runners/argument_mapping.rb +78 -0
  35. data/lib/legion/extensions/agentic/inference/argument_mapping/version.rb +13 -0
  36. data/lib/legion/extensions/agentic/inference/argument_mapping.rb +19 -0
  37. data/lib/legion/extensions/agentic/inference/bayesian/client.rb +28 -0
  38. data/lib/legion/extensions/agentic/inference/bayesian/helpers/belief.rb +96 -0
  39. data/lib/legion/extensions/agentic/inference/bayesian/helpers/belief_network.rb +147 -0
  40. data/lib/legion/extensions/agentic/inference/bayesian/helpers/constants.rb +36 -0
  41. data/lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb +125 -0
  42. data/lib/legion/extensions/agentic/inference/bayesian/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/inference/bayesian.rb +19 -0
  44. data/lib/legion/extensions/agentic/inference/belief_revision/client.rb +19 -0
  45. data/lib/legion/extensions/agentic/inference/belief_revision/helpers/belief.rb +155 -0
  46. data/lib/legion/extensions/agentic/inference/belief_revision/helpers/belief_network.rb +193 -0
  47. data/lib/legion/extensions/agentic/inference/belief_revision/helpers/constants.rb +54 -0
  48. data/lib/legion/extensions/agentic/inference/belief_revision/helpers/evidence.rb +49 -0
  49. data/lib/legion/extensions/agentic/inference/belief_revision/runners/belief_revision.rb +89 -0
  50. data/lib/legion/extensions/agentic/inference/belief_revision/version.rb +13 -0
  51. data/lib/legion/extensions/agentic/inference/belief_revision.rb +21 -0
  52. data/lib/legion/extensions/agentic/inference/causal_attribution/client.rb +27 -0
  53. data/lib/legion/extensions/agentic/inference/causal_attribution/helpers/attribution.rb +92 -0
  54. data/lib/legion/extensions/agentic/inference/causal_attribution/helpers/attribution_engine.rb +159 -0
  55. data/lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb +111 -0
  56. data/lib/legion/extensions/agentic/inference/causal_attribution/version.rb +13 -0
  57. data/lib/legion/extensions/agentic/inference/causal_attribution.rb +18 -0
  58. data/lib/legion/extensions/agentic/inference/causal_reasoning/client.rb +24 -0
  59. data/lib/legion/extensions/agentic/inference/causal_reasoning/helpers/causal_edge.rb +101 -0
  60. data/lib/legion/extensions/agentic/inference/causal_reasoning/helpers/causal_graph.rb +184 -0
  61. data/lib/legion/extensions/agentic/inference/causal_reasoning/helpers/constants.rb +40 -0
  62. data/lib/legion/extensions/agentic/inference/causal_reasoning/runners/causal_reasoning.rb +111 -0
  63. data/lib/legion/extensions/agentic/inference/causal_reasoning/version.rb +13 -0
  64. data/lib/legion/extensions/agentic/inference/causal_reasoning.rb +19 -0
  65. data/lib/legion/extensions/agentic/inference/coherence/client.rb +28 -0
  66. data/lib/legion/extensions/agentic/inference/coherence/helpers/coherence_engine.rb +170 -0
  67. data/lib/legion/extensions/agentic/inference/coherence/helpers/constants.rb +35 -0
  68. data/lib/legion/extensions/agentic/inference/coherence/helpers/proposition.rb +100 -0
  69. data/lib/legion/extensions/agentic/inference/coherence/runners/cognitive_coherence.rb +123 -0
  70. data/lib/legion/extensions/agentic/inference/coherence/version.rb +13 -0
  71. data/lib/legion/extensions/agentic/inference/coherence.rb +19 -0
  72. data/lib/legion/extensions/agentic/inference/counterfactual/client.rb +19 -0
  73. data/lib/legion/extensions/agentic/inference/counterfactual/helpers/constants.rb +40 -0
  74. data/lib/legion/extensions/agentic/inference/counterfactual/helpers/counterfactual_engine.rb +157 -0
  75. data/lib/legion/extensions/agentic/inference/counterfactual/helpers/scenario.rb +98 -0
  76. data/lib/legion/extensions/agentic/inference/counterfactual/runners/counterfactual.rb +106 -0
  77. data/lib/legion/extensions/agentic/inference/counterfactual/version.rb +13 -0
  78. data/lib/legion/extensions/agentic/inference/counterfactual.rb +19 -0
  79. data/lib/legion/extensions/agentic/inference/debugging/client.rb +30 -0
  80. data/lib/legion/extensions/agentic/inference/debugging/helpers/causal_trace.rb +51 -0
  81. data/lib/legion/extensions/agentic/inference/debugging/helpers/constants.rb +58 -0
  82. data/lib/legion/extensions/agentic/inference/debugging/helpers/correction.rb +56 -0
  83. data/lib/legion/extensions/agentic/inference/debugging/helpers/debugging_engine.rb +156 -0
  84. data/lib/legion/extensions/agentic/inference/debugging/helpers/reasoning_error.rb +97 -0
  85. data/lib/legion/extensions/agentic/inference/debugging/runners/cognitive_debugging.rb +178 -0
  86. data/lib/legion/extensions/agentic/inference/debugging/version.rb +13 -0
  87. data/lib/legion/extensions/agentic/inference/debugging.rb +21 -0
  88. data/lib/legion/extensions/agentic/inference/enactive_cognition/client.rb +27 -0
  89. data/lib/legion/extensions/agentic/inference/enactive_cognition/helpers/enaction_engine.rb +120 -0
  90. data/lib/legion/extensions/agentic/inference/enactive_cognition/helpers/sensorimotor_loop.rb +122 -0
  91. data/lib/legion/extensions/agentic/inference/enactive_cognition/runners/enactive_cognition.rb +124 -0
  92. data/lib/legion/extensions/agentic/inference/enactive_cognition/version.rb +13 -0
  93. data/lib/legion/extensions/agentic/inference/enactive_cognition.rb +18 -0
  94. data/lib/legion/extensions/agentic/inference/expectation_violation/helpers/client.rb +17 -0
  95. data/lib/legion/extensions/agentic/inference/expectation_violation/helpers/constants.rb +47 -0
  96. data/lib/legion/extensions/agentic/inference/expectation_violation/helpers/expectation.rb +82 -0
  97. data/lib/legion/extensions/agentic/inference/expectation_violation/helpers/violation_engine.rb +126 -0
  98. data/lib/legion/extensions/agentic/inference/expectation_violation/runners/expectation_violation.rb +76 -0
  99. data/lib/legion/extensions/agentic/inference/expectation_violation/version.rb +13 -0
  100. data/lib/legion/extensions/agentic/inference/expectation_violation.rb +19 -0
  101. data/lib/legion/extensions/agentic/inference/free_energy/client.rb +19 -0
  102. data/lib/legion/extensions/agentic/inference/free_energy/helpers/belief.rb +127 -0
  103. data/lib/legion/extensions/agentic/inference/free_energy/helpers/constants.rb +58 -0
  104. data/lib/legion/extensions/agentic/inference/free_energy/helpers/free_energy_engine.rb +156 -0
  105. data/lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb +97 -0
  106. data/lib/legion/extensions/agentic/inference/free_energy/version.rb +13 -0
  107. data/lib/legion/extensions/agentic/inference/free_energy.rb +19 -0
  108. data/lib/legion/extensions/agentic/inference/gravity/client.rb +29 -0
  109. data/lib/legion/extensions/agentic/inference/gravity/helpers/attractor.rb +77 -0
  110. data/lib/legion/extensions/agentic/inference/gravity/helpers/constants.rb +76 -0
  111. data/lib/legion/extensions/agentic/inference/gravity/helpers/gravity_engine.rb +164 -0
  112. data/lib/legion/extensions/agentic/inference/gravity/helpers/orbiting_thought.rb +64 -0
  113. data/lib/legion/extensions/agentic/inference/gravity/runners/gravity.rb +132 -0
  114. data/lib/legion/extensions/agentic/inference/gravity/version.rb +13 -0
  115. data/lib/legion/extensions/agentic/inference/gravity.rb +20 -0
  116. data/lib/legion/extensions/agentic/inference/horizon/actors/adjust.rb +45 -0
  117. data/lib/legion/extensions/agentic/inference/horizon/client.rb +28 -0
  118. data/lib/legion/extensions/agentic/inference/horizon/helpers/constants.rb +43 -0
  119. data/lib/legion/extensions/agentic/inference/horizon/helpers/horizon_engine.rb +110 -0
  120. data/lib/legion/extensions/agentic/inference/horizon/helpers/projection.rb +59 -0
  121. data/lib/legion/extensions/agentic/inference/horizon/runners/cognitive_horizon.rb +107 -0
  122. data/lib/legion/extensions/agentic/inference/horizon/version.rb +13 -0
  123. data/lib/legion/extensions/agentic/inference/horizon.rb +19 -0
  124. data/lib/legion/extensions/agentic/inference/hypothesis_testing/client.rb +28 -0
  125. data/lib/legion/extensions/agentic/inference/hypothesis_testing/helpers/constants.rb +37 -0
  126. data/lib/legion/extensions/agentic/inference/hypothesis_testing/helpers/hypothesis.rb +83 -0
  127. data/lib/legion/extensions/agentic/inference/hypothesis_testing/helpers/hypothesis_engine.rb +97 -0
  128. data/lib/legion/extensions/agentic/inference/hypothesis_testing/runners/hypothesis_testing.rb +115 -0
  129. data/lib/legion/extensions/agentic/inference/hypothesis_testing/version.rb +13 -0
  130. data/lib/legion/extensions/agentic/inference/hypothesis_testing.rb +19 -0
  131. data/lib/legion/extensions/agentic/inference/intuition/client.rb +19 -0
  132. data/lib/legion/extensions/agentic/inference/intuition/helpers/constants.rb +60 -0
  133. data/lib/legion/extensions/agentic/inference/intuition/helpers/heuristic.rb +66 -0
  134. data/lib/legion/extensions/agentic/inference/intuition/helpers/intuition_engine.rb +157 -0
  135. data/lib/legion/extensions/agentic/inference/intuition/helpers/pattern.rb +105 -0
  136. data/lib/legion/extensions/agentic/inference/intuition/runners/intuition.rb +87 -0
  137. data/lib/legion/extensions/agentic/inference/intuition/version.rb +13 -0
  138. data/lib/legion/extensions/agentic/inference/intuition.rb +20 -0
  139. data/lib/legion/extensions/agentic/inference/magnet/client.rb +29 -0
  140. data/lib/legion/extensions/agentic/inference/magnet/helpers/constants.rb +57 -0
  141. data/lib/legion/extensions/agentic/inference/magnet/helpers/field.rb +105 -0
  142. data/lib/legion/extensions/agentic/inference/magnet/helpers/magnet_engine.rb +179 -0
  143. data/lib/legion/extensions/agentic/inference/magnet/helpers/pole.rb +80 -0
  144. data/lib/legion/extensions/agentic/inference/magnet/runners/cognitive_magnet.rb +124 -0
  145. data/lib/legion/extensions/agentic/inference/magnet/version.rb +13 -0
  146. data/lib/legion/extensions/agentic/inference/magnet.rb +21 -0
  147. data/lib/legion/extensions/agentic/inference/momentum/helpers/client.rb +17 -0
  148. data/lib/legion/extensions/agentic/inference/momentum/helpers/constants.rb +65 -0
  149. data/lib/legion/extensions/agentic/inference/momentum/helpers/idea.rb +112 -0
  150. data/lib/legion/extensions/agentic/inference/momentum/helpers/momentum_engine.rb +127 -0
  151. data/lib/legion/extensions/agentic/inference/momentum/runners/cognitive_momentum.rb +101 -0
  152. data/lib/legion/extensions/agentic/inference/momentum/version.rb +13 -0
  153. data/lib/legion/extensions/agentic/inference/momentum.rb +19 -0
  154. data/lib/legion/extensions/agentic/inference/perceptual_inference/client.rb +28 -0
  155. data/lib/legion/extensions/agentic/inference/perceptual_inference/helpers/constants.rb +34 -0
  156. data/lib/legion/extensions/agentic/inference/perceptual_inference/helpers/perceptual_field.rb +154 -0
  157. data/lib/legion/extensions/agentic/inference/perceptual_inference/helpers/perceptual_hypothesis.rb +100 -0
  158. data/lib/legion/extensions/agentic/inference/perceptual_inference/runners/perceptual_inference.rb +120 -0
  159. data/lib/legion/extensions/agentic/inference/perceptual_inference/version.rb +13 -0
  160. data/lib/legion/extensions/agentic/inference/perceptual_inference.rb +19 -0
  161. data/lib/legion/extensions/agentic/inference/prediction/actors/expire_predictions.rb +45 -0
  162. data/lib/legion/extensions/agentic/inference/prediction/client.rb +27 -0
  163. data/lib/legion/extensions/agentic/inference/prediction/helpers/modes.rb +28 -0
  164. data/lib/legion/extensions/agentic/inference/prediction/helpers/prediction_store.rb +66 -0
  165. data/lib/legion/extensions/agentic/inference/prediction/runners/prediction.rb +146 -0
  166. data/lib/legion/extensions/agentic/inference/prediction/version.rb +13 -0
  167. data/lib/legion/extensions/agentic/inference/prediction.rb +18 -0
  168. data/lib/legion/extensions/agentic/inference/predictive_coding/actors/decay.rb +45 -0
  169. data/lib/legion/extensions/agentic/inference/predictive_coding/client.rb +28 -0
  170. data/lib/legion/extensions/agentic/inference/predictive_coding/helpers/constants.rb +46 -0
  171. data/lib/legion/extensions/agentic/inference/predictive_coding/helpers/generative_model.rb +187 -0
  172. data/lib/legion/extensions/agentic/inference/predictive_coding/helpers/prediction_error.rb +59 -0
  173. data/lib/legion/extensions/agentic/inference/predictive_coding/runners/predictive_coding.rb +171 -0
  174. data/lib/legion/extensions/agentic/inference/predictive_coding/version.rb +13 -0
  175. data/lib/legion/extensions/agentic/inference/predictive_coding.rb +20 -0
  176. data/lib/legion/extensions/agentic/inference/predictive_processing/client.rb +28 -0
  177. data/lib/legion/extensions/agentic/inference/predictive_processing/helpers/constants.rb +35 -0
  178. data/lib/legion/extensions/agentic/inference/predictive_processing/helpers/generative_model.rb +142 -0
  179. data/lib/legion/extensions/agentic/inference/predictive_processing/helpers/predictive_processor.rb +129 -0
  180. data/lib/legion/extensions/agentic/inference/predictive_processing/runners/predictive_processing.rb +104 -0
  181. data/lib/legion/extensions/agentic/inference/predictive_processing/version.rb +13 -0
  182. data/lib/legion/extensions/agentic/inference/predictive_processing.rb +19 -0
  183. data/lib/legion/extensions/agentic/inference/reality_testing/client.rb +28 -0
  184. data/lib/legion/extensions/agentic/inference/reality_testing/helpers/belief.rb +98 -0
  185. data/lib/legion/extensions/agentic/inference/reality_testing/helpers/constants.rb +41 -0
  186. data/lib/legion/extensions/agentic/inference/reality_testing/helpers/reality_engine.rb +104 -0
  187. data/lib/legion/extensions/agentic/inference/reality_testing/runners/reality_testing.rb +94 -0
  188. data/lib/legion/extensions/agentic/inference/reality_testing/version.rb +13 -0
  189. data/lib/legion/extensions/agentic/inference/reality_testing.rb +19 -0
  190. data/lib/legion/extensions/agentic/inference/schema/client.rb +26 -0
  191. data/lib/legion/extensions/agentic/inference/schema/helpers/causal_relation.rb +70 -0
  192. data/lib/legion/extensions/agentic/inference/schema/helpers/constants.rb +50 -0
  193. data/lib/legion/extensions/agentic/inference/schema/helpers/world_model.rb +173 -0
  194. data/lib/legion/extensions/agentic/inference/schema/runners/schema.rb +101 -0
  195. data/lib/legion/extensions/agentic/inference/schema/version.rb +13 -0
  196. data/lib/legion/extensions/agentic/inference/schema.rb +19 -0
  197. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/client.rb +28 -0
  198. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/constants.rb +42 -0
  199. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/decision.rb +66 -0
  200. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/tolerance_engine.rb +139 -0
  201. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/runners/uncertainty_tolerance.rb +129 -0
  202. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance/version.rb +13 -0
  203. data/lib/legion/extensions/agentic/inference/uncertainty_tolerance.rb +19 -0
  204. data/lib/legion/extensions/agentic/inference/version.rb +11 -0
  205. data/lib/legion/extensions/agentic/inference.rb +44 -0
  206. data/spec/legion/extensions/agentic/inference/abductive/client_spec.rb +25 -0
  207. data/spec/legion/extensions/agentic/inference/abductive/runners/abductive_reasoning_spec.rb +349 -0
  208. data/spec/legion/extensions/agentic/inference/affordance/client_spec.rb +26 -0
  209. data/spec/legion/extensions/agentic/inference/affordance/helpers/affordance_field_spec.rb +131 -0
  210. data/spec/legion/extensions/agentic/inference/affordance/helpers/affordance_item_spec.rb +107 -0
  211. data/spec/legion/extensions/agentic/inference/affordance/runners/affordance_spec.rb +78 -0
  212. data/spec/legion/extensions/agentic/inference/analogical/client_spec.rb +31 -0
  213. data/spec/legion/extensions/agentic/inference/analogical/helpers/analogy_engine_spec.rb +276 -0
  214. data/spec/legion/extensions/agentic/inference/analogical/helpers/structure_map_spec.rb +255 -0
  215. data/spec/legion/extensions/agentic/inference/analogical/runners/analogical_reasoning_spec.rb +213 -0
  216. data/spec/legion/extensions/agentic/inference/argument_mapping/client_spec.rb +18 -0
  217. data/spec/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine_spec.rb +218 -0
  218. data/spec/legion/extensions/agentic/inference/argument_mapping/helpers/argument_spec.rb +231 -0
  219. data/spec/legion/extensions/agentic/inference/argument_mapping/runners/argument_mapping_spec.rb +171 -0
  220. data/spec/legion/extensions/agentic/inference/bayesian/client_spec.rb +20 -0
  221. data/spec/legion/extensions/agentic/inference/bayesian/helpers/belief_network_spec.rb +178 -0
  222. data/spec/legion/extensions/agentic/inference/bayesian/helpers/belief_spec.rb +137 -0
  223. data/spec/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief_spec.rb +176 -0
  224. data/spec/legion/extensions/agentic/inference/belief_revision/client_spec.rb +31 -0
  225. data/spec/legion/extensions/agentic/inference/belief_revision/helpers/belief_network_spec.rb +176 -0
  226. data/spec/legion/extensions/agentic/inference/belief_revision/helpers/belief_spec.rb +153 -0
  227. data/spec/legion/extensions/agentic/inference/belief_revision/helpers/evidence_spec.rb +51 -0
  228. data/spec/legion/extensions/agentic/inference/belief_revision/runners/belief_revision_spec.rb +106 -0
  229. data/spec/legion/extensions/agentic/inference/causal_attribution/client_spec.rb +24 -0
  230. data/spec/legion/extensions/agentic/inference/causal_attribution/helpers/attribution_engine_spec.rb +181 -0
  231. data/spec/legion/extensions/agentic/inference/causal_attribution/helpers/attribution_spec.rb +108 -0
  232. data/spec/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution_spec.rb +142 -0
  233. data/spec/legion/extensions/agentic/inference/causal_reasoning/client_spec.rb +35 -0
  234. data/spec/legion/extensions/agentic/inference/causal_reasoning/helpers/causal_edge_spec.rb +158 -0
  235. data/spec/legion/extensions/agentic/inference/causal_reasoning/helpers/causal_graph_spec.rb +259 -0
  236. data/spec/legion/extensions/agentic/inference/causal_reasoning/runners/causal_reasoning_spec.rb +161 -0
  237. data/spec/legion/extensions/agentic/inference/coherence/client_spec.rb +17 -0
  238. data/spec/legion/extensions/agentic/inference/coherence/runners/cognitive_coherence_spec.rb +267 -0
  239. data/spec/legion/extensions/agentic/inference/counterfactual/client_spec.rb +48 -0
  240. data/spec/legion/extensions/agentic/inference/counterfactual/helpers/constants_spec.rb +55 -0
  241. data/spec/legion/extensions/agentic/inference/counterfactual/helpers/counterfactual_engine_spec.rb +234 -0
  242. data/spec/legion/extensions/agentic/inference/counterfactual/helpers/scenario_spec.rb +193 -0
  243. data/spec/legion/extensions/agentic/inference/counterfactual/runners/counterfactual_spec.rb +179 -0
  244. data/spec/legion/extensions/agentic/inference/debugging/client_spec.rb +46 -0
  245. data/spec/legion/extensions/agentic/inference/debugging/helpers/causal_trace_spec.rb +84 -0
  246. data/spec/legion/extensions/agentic/inference/debugging/helpers/constants_spec.rb +97 -0
  247. data/spec/legion/extensions/agentic/inference/debugging/helpers/correction_spec.rb +98 -0
  248. data/spec/legion/extensions/agentic/inference/debugging/helpers/debugging_engine_spec.rb +290 -0
  249. data/spec/legion/extensions/agentic/inference/debugging/helpers/reasoning_error_spec.rb +164 -0
  250. data/spec/legion/extensions/agentic/inference/debugging/runners/cognitive_debugging_spec.rb +301 -0
  251. data/spec/legion/extensions/agentic/inference/enactive_cognition/client_spec.rb +19 -0
  252. data/spec/legion/extensions/agentic/inference/enactive_cognition/helpers/enaction_engine_spec.rb +181 -0
  253. data/spec/legion/extensions/agentic/inference/enactive_cognition/helpers/sensorimotor_loop_spec.rb +184 -0
  254. data/spec/legion/extensions/agentic/inference/enactive_cognition/runners/enactive_cognition_spec.rb +214 -0
  255. data/spec/legion/extensions/agentic/inference/expectation_violation/expectation_violation_spec.rb +11 -0
  256. data/spec/legion/extensions/agentic/inference/expectation_violation/helpers/expectation_spec.rb +102 -0
  257. data/spec/legion/extensions/agentic/inference/expectation_violation/helpers/violation_engine_spec.rb +121 -0
  258. data/spec/legion/extensions/agentic/inference/expectation_violation/runners/expectation_violation_spec.rb +59 -0
  259. data/spec/legion/extensions/agentic/inference/free_energy/client_spec.rb +46 -0
  260. data/spec/legion/extensions/agentic/inference/free_energy/helpers/belief_spec.rb +183 -0
  261. data/spec/legion/extensions/agentic/inference/free_energy/helpers/free_energy_engine_spec.rb +211 -0
  262. data/spec/legion/extensions/agentic/inference/free_energy/runners/free_energy_spec.rb +118 -0
  263. data/spec/legion/extensions/agentic/inference/gravity/client_spec.rb +24 -0
  264. data/spec/legion/extensions/agentic/inference/gravity/helpers/attractor_spec.rb +143 -0
  265. data/spec/legion/extensions/agentic/inference/gravity/helpers/constants_spec.rb +107 -0
  266. data/spec/legion/extensions/agentic/inference/gravity/helpers/gravity_engine_spec.rb +193 -0
  267. data/spec/legion/extensions/agentic/inference/gravity/helpers/orbiting_thought_spec.rb +103 -0
  268. data/spec/legion/extensions/agentic/inference/gravity/runners/gravity_spec.rb +159 -0
  269. data/spec/legion/extensions/agentic/inference/horizon/client_spec.rb +58 -0
  270. data/spec/legion/extensions/agentic/inference/horizon/helpers/constants_spec.rb +98 -0
  271. data/spec/legion/extensions/agentic/inference/horizon/helpers/horizon_engine_spec.rb +325 -0
  272. data/spec/legion/extensions/agentic/inference/horizon/helpers/projection_spec.rb +155 -0
  273. data/spec/legion/extensions/agentic/inference/horizon/runners/cognitive_horizon_spec.rb +269 -0
  274. data/spec/legion/extensions/agentic/inference/hypothesis_testing/helpers/constants_spec.rb +38 -0
  275. data/spec/legion/extensions/agentic/inference/hypothesis_testing/helpers/hypothesis_engine_spec.rb +182 -0
  276. data/spec/legion/extensions/agentic/inference/hypothesis_testing/helpers/hypothesis_spec.rb +172 -0
  277. data/spec/legion/extensions/agentic/inference/hypothesis_testing/hypothesis_testing_spec.rb +16 -0
  278. data/spec/legion/extensions/agentic/inference/hypothesis_testing/runners/hypothesis_testing_spec.rb +159 -0
  279. data/spec/legion/extensions/agentic/inference/intuition/client_spec.rb +33 -0
  280. data/spec/legion/extensions/agentic/inference/intuition/helpers/heuristic_spec.rb +82 -0
  281. data/spec/legion/extensions/agentic/inference/intuition/helpers/intuition_engine_spec.rb +163 -0
  282. data/spec/legion/extensions/agentic/inference/intuition/helpers/pattern_spec.rb +160 -0
  283. data/spec/legion/extensions/agentic/inference/intuition/runners/intuition_spec.rb +107 -0
  284. data/spec/legion/extensions/agentic/inference/magnet/client_spec.rb +30 -0
  285. data/spec/legion/extensions/agentic/inference/magnet/helpers/constants_spec.rb +120 -0
  286. data/spec/legion/extensions/agentic/inference/magnet/helpers/field_spec.rb +193 -0
  287. data/spec/legion/extensions/agentic/inference/magnet/helpers/magnet_engine_spec.rb +281 -0
  288. data/spec/legion/extensions/agentic/inference/magnet/helpers/pole_spec.rb +211 -0
  289. data/spec/legion/extensions/agentic/inference/magnet/runners/cognitive_magnet_spec.rb +201 -0
  290. data/spec/legion/extensions/agentic/inference/momentum/cognitive_momentum_spec.rb +11 -0
  291. data/spec/legion/extensions/agentic/inference/momentum/helpers/idea_spec.rb +152 -0
  292. data/spec/legion/extensions/agentic/inference/momentum/helpers/momentum_engine_spec.rb +154 -0
  293. data/spec/legion/extensions/agentic/inference/momentum/runners/cognitive_momentum_spec.rb +97 -0
  294. data/spec/legion/extensions/agentic/inference/perceptual_inference/client_spec.rb +39 -0
  295. data/spec/legion/extensions/agentic/inference/perceptual_inference/helpers/constants_spec.rb +97 -0
  296. data/spec/legion/extensions/agentic/inference/perceptual_inference/helpers/perceptual_field_spec.rb +270 -0
  297. data/spec/legion/extensions/agentic/inference/perceptual_inference/helpers/perceptual_hypothesis_spec.rb +206 -0
  298. data/spec/legion/extensions/agentic/inference/perceptual_inference/runners/perceptual_inference_spec.rb +305 -0
  299. data/spec/legion/extensions/agentic/inference/prediction/actors/expire_predictions_spec.rb +46 -0
  300. data/spec/legion/extensions/agentic/inference/prediction/client_spec.rb +14 -0
  301. data/spec/legion/extensions/agentic/inference/prediction/helpers/modes_spec.rb +118 -0
  302. data/spec/legion/extensions/agentic/inference/prediction/helpers/prediction_store_spec.rb +262 -0
  303. data/spec/legion/extensions/agentic/inference/prediction/runners/prediction_spec.rb +116 -0
  304. data/spec/legion/extensions/agentic/inference/predictive_coding/client_spec.rb +74 -0
  305. data/spec/legion/extensions/agentic/inference/predictive_coding/helpers/generative_model_spec.rb +194 -0
  306. data/spec/legion/extensions/agentic/inference/predictive_coding/helpers/prediction_error_spec.rb +109 -0
  307. data/spec/legion/extensions/agentic/inference/predictive_coding/runners/predictive_coding_spec.rb +210 -0
  308. data/spec/legion/extensions/agentic/inference/predictive_processing/client_spec.rb +82 -0
  309. data/spec/legion/extensions/agentic/inference/predictive_processing/helpers/generative_model_spec.rb +220 -0
  310. data/spec/legion/extensions/agentic/inference/predictive_processing/helpers/predictive_processor_spec.rb +206 -0
  311. data/spec/legion/extensions/agentic/inference/predictive_processing/runners/predictive_processing_spec.rb +213 -0
  312. data/spec/legion/extensions/agentic/inference/reality_testing/client_spec.rb +29 -0
  313. data/spec/legion/extensions/agentic/inference/reality_testing/helpers/belief_spec.rb +197 -0
  314. data/spec/legion/extensions/agentic/inference/reality_testing/helpers/constants_spec.rb +78 -0
  315. data/spec/legion/extensions/agentic/inference/reality_testing/helpers/reality_engine_spec.rb +191 -0
  316. data/spec/legion/extensions/agentic/inference/reality_testing/runners/reality_testing_spec.rb +154 -0
  317. data/spec/legion/extensions/agentic/inference/schema/client_spec.rb +53 -0
  318. data/spec/legion/extensions/agentic/inference/schema/helpers/causal_relation_spec.rb +108 -0
  319. data/spec/legion/extensions/agentic/inference/schema/helpers/constants_spec.rb +54 -0
  320. data/spec/legion/extensions/agentic/inference/schema/helpers/world_model_spec.rb +179 -0
  321. data/spec/legion/extensions/agentic/inference/schema/runners/schema_spec.rb +146 -0
  322. data/spec/legion/extensions/agentic/inference/uncertainty_tolerance/client_spec.rb +18 -0
  323. data/spec/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/constants_spec.rb +62 -0
  324. data/spec/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/decision_spec.rb +125 -0
  325. data/spec/legion/extensions/agentic/inference/uncertainty_tolerance/helpers/tolerance_engine_spec.rb +184 -0
  326. data/spec/legion/extensions/agentic/inference/uncertainty_tolerance/runners/uncertainty_tolerance_spec.rb +157 -0
  327. data/spec/spec_helper.rb +46 -0
  328. metadata +412 -0
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module Counterfactual
8
+ module Helpers
9
+ module Constants
10
+ MAX_SCENARIOS = 200
11
+ MAX_HISTORY = 300
12
+ MAX_ALTERNATIVES = 10
13
+
14
+ PLAUSIBILITY_THRESHOLD = 0.4
15
+ RELEVANCE_THRESHOLD = 0.3
16
+
17
+ DEFAULT_REGRET = 0.0
18
+ REGRET_DECAY = 0.02
19
+ REGRET_CEILING = 1.0
20
+ REGRET_FLOOR = 0.0
21
+
22
+ UPWARD_WEIGHT = 0.7
23
+ DOWNWARD_WEIGHT = 0.3
24
+
25
+ COUNTERFACTUAL_TYPES = %i[upward downward additive subtractive semifactual prefactual].freeze
26
+ MUTATION_TYPES = %i[action inaction antecedent outcome context agent].freeze
27
+
28
+ EMOTIONAL_RESPONSES = {
29
+ upward: :regret,
30
+ downward: :relief,
31
+ semifactual: :acceptance,
32
+ prefactual: :anxiety
33
+ }.freeze
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Inference
9
+ module Counterfactual
10
+ module Helpers
11
+ class CounterfactualEngine
12
+ include Constants
13
+
14
+ attr_reader :scenarios
15
+
16
+ def initialize
17
+ @scenarios = {}
18
+ end
19
+
20
+ def generate(actual_outcome:, counterfactual_outcome:, antecedent:,
21
+ scenario_type:, mutation_type:, domain:, plausibility:,
22
+ regret_magnitude: 0.5)
23
+ prune_if_needed
24
+ scenario = Scenario.new(
25
+ scenario_type: scenario_type,
26
+ mutation_type: mutation_type,
27
+ actual_outcome: actual_outcome,
28
+ counterfactual_outcome: counterfactual_outcome,
29
+ antecedent: antecedent,
30
+ domain: domain,
31
+ plausibility: plausibility,
32
+ regret_magnitude: regret_magnitude
33
+ )
34
+ @scenarios[scenario.id] = scenario
35
+ scenario
36
+ end
37
+
38
+ def generate_alternatives(actual_outcome:, domain:)
39
+ alternatives = []
40
+ mutation_samples = MUTATION_TYPES.first(MAX_ALTERNATIVES)
41
+
42
+ mutation_samples.each_with_index do |mutation, idx|
43
+ type = idx.even? ? :upward : :downward
44
+ plausibility = (0.8 - (idx * 0.1)).clamp(PLAUSIBILITY_THRESHOLD, 1.0)
45
+
46
+ scenario = generate(
47
+ actual_outcome: actual_outcome,
48
+ counterfactual_outcome: "alternative_#{mutation}_#{idx}",
49
+ antecedent: "#{mutation}_variation_#{idx}",
50
+ scenario_type: type,
51
+ mutation_type: mutation,
52
+ domain: domain,
53
+ plausibility: plausibility,
54
+ regret_magnitude: 0.5
55
+ )
56
+ alternatives << scenario
57
+ end
58
+
59
+ alternatives
60
+ end
61
+
62
+ def resolve(scenario_id:, lesson:)
63
+ scenario = @scenarios[scenario_id]
64
+ return nil unless scenario
65
+
66
+ scenario.resolve(lesson: lesson)
67
+ scenario
68
+ end
69
+
70
+ def compute_regret(scenario_id:)
71
+ scenario = @scenarios[scenario_id]
72
+ return 0.0 unless scenario
73
+
74
+ if scenario.upward?
75
+ scenario.regret_magnitude * UPWARD_WEIGHT * scenario.plausibility
76
+ elsif scenario.downward?
77
+ -(scenario.regret_magnitude * DOWNWARD_WEIGHT * scenario.plausibility)
78
+ else
79
+ 0.0
80
+ end
81
+ end
82
+
83
+ def net_regret
84
+ unresolved.sum(0.0) { |s| compute_regret(scenario_id: s.id) }
85
+ end
86
+
87
+ def domain_regret(domain:)
88
+ by_domain(domain: domain).reject(&:resolved).sum(0.0) { |s| compute_regret(scenario_id: s.id) }
89
+ end
90
+
91
+ def lessons_learned
92
+ @scenarios.values.select { |s| s.resolved && s.lesson }
93
+ end
94
+
95
+ def regret_decay
96
+ unresolved.each do |scenario|
97
+ new_magnitude = (scenario.regret_magnitude - REGRET_DECAY).clamp(REGRET_FLOOR, REGRET_CEILING)
98
+ scenario.instance_variable_set(:@regret_magnitude, new_magnitude)
99
+ scenario.instance_variable_set(:@emotional_valence, recompute_valence(scenario))
100
+ end
101
+ end
102
+
103
+ def by_type(type:)
104
+ @scenarios.values.select { |s| s.scenario_type == type }
105
+ end
106
+
107
+ def by_domain(domain:)
108
+ @scenarios.values.select { |s| s.domain == domain }
109
+ end
110
+
111
+ def unresolved
112
+ @scenarios.values.reject(&:resolved)
113
+ end
114
+
115
+ def recent(count:)
116
+ @scenarios.values.sort_by(&:created_at).last(count)
117
+ end
118
+
119
+ def to_h
120
+ {
121
+ total: @scenarios.size,
122
+ unresolved: unresolved.size,
123
+ resolved: lessons_learned.size,
124
+ net_regret: net_regret.round(4),
125
+ by_type: type_summary,
126
+ lessons_count: lessons_learned.size
127
+ }
128
+ end
129
+
130
+ private
131
+
132
+ def prune_if_needed
133
+ return unless @scenarios.size >= MAX_SCENARIOS
134
+
135
+ oldest = @scenarios.values.min_by(&:created_at)
136
+ @scenarios.delete(oldest.id) if oldest
137
+ end
138
+
139
+ def type_summary
140
+ COUNTERFACTUAL_TYPES.to_h { |type| [type, @scenarios.values.count { |s| s.scenario_type == type }] }
141
+ end
142
+
143
+ def recompute_valence(scenario)
144
+ case scenario.scenario_type
145
+ when :upward then -(scenario.regret_magnitude * UPWARD_WEIGHT)
146
+ when :downward then scenario.regret_magnitude * DOWNWARD_WEIGHT
147
+ when :prefactual then -0.2
148
+ else 0.0
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Inference
9
+ module Counterfactual
10
+ module Helpers
11
+ class Scenario
12
+ include Constants
13
+
14
+ attr_reader :id, :scenario_type, :mutation_type,
15
+ :actual_outcome, :counterfactual_outcome,
16
+ :antecedent, :domain, :plausibility,
17
+ :emotional_valence, :regret_magnitude,
18
+ :lesson, :resolved, :created_at, :resolved_at
19
+
20
+ def initialize(scenario_type:, mutation_type:, actual_outcome:,
21
+ counterfactual_outcome:, antecedent:, domain:,
22
+ plausibility:, regret_magnitude: 0.5)
23
+ @id = SecureRandom.uuid
24
+ @scenario_type = scenario_type
25
+ @mutation_type = mutation_type
26
+ @actual_outcome = actual_outcome
27
+ @counterfactual_outcome = counterfactual_outcome
28
+ @antecedent = antecedent
29
+ @domain = domain
30
+ @plausibility = plausibility.to_f.clamp(0.0, 1.0)
31
+ @regret_magnitude = regret_magnitude.to_f.clamp(0.0, 1.0)
32
+ @emotional_valence = compute_emotional_valence
33
+ @lesson = nil
34
+ @resolved = false
35
+ @created_at = Time.now.utc
36
+ @resolved_at = nil
37
+ end
38
+
39
+ def upward?
40
+ @scenario_type == :upward
41
+ end
42
+
43
+ def downward?
44
+ @scenario_type == :downward
45
+ end
46
+
47
+ def prefactual?
48
+ @scenario_type == :prefactual
49
+ end
50
+
51
+ def emotional_response
52
+ EMOTIONAL_RESPONSES.fetch(@scenario_type, :neutral)
53
+ end
54
+
55
+ def resolve(lesson:)
56
+ @lesson = lesson
57
+ @resolved = true
58
+ @resolved_at = Time.now.utc
59
+ self
60
+ end
61
+
62
+ def to_h
63
+ {
64
+ id: @id,
65
+ scenario_type: @scenario_type,
66
+ mutation_type: @mutation_type,
67
+ actual_outcome: @actual_outcome,
68
+ counterfactual_outcome: @counterfactual_outcome,
69
+ antecedent: @antecedent,
70
+ domain: @domain,
71
+ plausibility: @plausibility,
72
+ emotional_valence: @emotional_valence,
73
+ regret_magnitude: @regret_magnitude,
74
+ emotional_response: emotional_response,
75
+ lesson: @lesson,
76
+ resolved: @resolved,
77
+ created_at: @created_at,
78
+ resolved_at: @resolved_at
79
+ }
80
+ end
81
+
82
+ private
83
+
84
+ def compute_emotional_valence
85
+ case @scenario_type
86
+ when :upward then -(@regret_magnitude * UPWARD_WEIGHT)
87
+ when :downward then @regret_magnitude * DOWNWARD_WEIGHT
88
+ when :prefactual then -0.2
89
+ else 0.0
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module Counterfactual
8
+ module Runners
9
+ module Counterfactual
10
+ include Helpers::Constants
11
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
12
+ Legion::Extensions::Helpers.const_defined?(:Lex)
13
+
14
+ def imagine_counterfactual(actual_outcome:, counterfactual_outcome:, antecedent:,
15
+ scenario_type:, mutation_type:, domain:, plausibility:, **)
16
+ unless COUNTERFACTUAL_TYPES.include?(scenario_type)
17
+ return { success: false, error: :invalid_scenario_type,
18
+ valid_types: COUNTERFACTUAL_TYPES }
19
+ end
20
+
21
+ unless MUTATION_TYPES.include?(mutation_type)
22
+ return { success: false, error: :invalid_mutation_type,
23
+ valid_types: MUTATION_TYPES }
24
+ end
25
+
26
+ scenario = engine.generate(
27
+ actual_outcome: actual_outcome,
28
+ counterfactual_outcome: counterfactual_outcome,
29
+ antecedent: antecedent,
30
+ scenario_type: scenario_type,
31
+ mutation_type: mutation_type,
32
+ domain: domain,
33
+ plausibility: plausibility
34
+ )
35
+
36
+ Legion::Logging.debug "[counterfactual] imagined: type=#{scenario_type} " \
37
+ "domain=#{domain} id=#{scenario.id[0..7]}"
38
+
39
+ { success: true, scenario: scenario.to_h }
40
+ end
41
+
42
+ def generate_alternatives(actual_outcome:, domain:, **)
43
+ alternatives = engine.generate_alternatives(actual_outcome: actual_outcome, domain: domain)
44
+ Legion::Logging.debug "[counterfactual] generated #{alternatives.size} alternatives for domain=#{domain}"
45
+ { success: true, alternatives: alternatives.map(&:to_h), count: alternatives.size }
46
+ end
47
+
48
+ def resolve_counterfactual(scenario_id:, lesson:, **)
49
+ scenario = engine.resolve(scenario_id: scenario_id, lesson: lesson)
50
+ if scenario
51
+ Legion::Logging.info "[counterfactual] resolved: id=#{scenario_id[0..7]} lesson=#{lesson[0..40]}"
52
+ { success: true, scenario: scenario.to_h }
53
+ else
54
+ Legion::Logging.debug "[counterfactual] resolve failed: id=#{scenario_id[0..7]} not found"
55
+ { success: false, reason: :not_found }
56
+ end
57
+ end
58
+
59
+ def compute_regret(scenario_id:, **)
60
+ regret = engine.compute_regret(scenario_id: scenario_id)
61
+ Legion::Logging.debug "[counterfactual] regret: id=#{scenario_id[0..7]} value=#{regret.round(4)}"
62
+ { success: true, scenario_id: scenario_id, regret: regret }
63
+ end
64
+
65
+ def net_regret_level(**)
66
+ net = engine.net_regret
67
+ Legion::Logging.debug "[counterfactual] net_regret=#{net.round(4)}"
68
+ { success: true, net_regret: net }
69
+ end
70
+
71
+ def domain_regret(domain:, **)
72
+ regret = engine.domain_regret(domain: domain)
73
+ Legion::Logging.debug "[counterfactual] domain_regret: domain=#{domain} value=#{regret.round(4)}"
74
+ { success: true, domain: domain, regret: regret }
75
+ end
76
+
77
+ def lessons_learned(**)
78
+ lessons = engine.lessons_learned
79
+ Legion::Logging.debug "[counterfactual] lessons_learned: count=#{lessons.size}"
80
+ { success: true, lessons: lessons.map(&:to_h), count: lessons.size }
81
+ end
82
+
83
+ def update_counterfactual(**)
84
+ engine.regret_decay
85
+ Legion::Logging.debug '[counterfactual] regret decay applied'
86
+ { success: true, action: :regret_decay }
87
+ end
88
+
89
+ def counterfactual_stats(**)
90
+ stats = engine.to_h
91
+ Legion::Logging.debug "[counterfactual] stats: total=#{stats[:total]} unresolved=#{stats[:unresolved]}"
92
+ { success: true, stats: stats }
93
+ end
94
+
95
+ private
96
+
97
+ def engine
98
+ @engine ||= Helpers::CounterfactualEngine.new
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module Counterfactual
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'counterfactual/version'
4
+ require_relative 'counterfactual/helpers/constants'
5
+ require_relative 'counterfactual/helpers/scenario'
6
+ require_relative 'counterfactual/helpers/counterfactual_engine'
7
+ require_relative 'counterfactual/runners/counterfactual'
8
+ require_relative 'counterfactual/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Inference
14
+ module Counterfactual
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/inference/debugging/helpers/constants'
4
+ require 'legion/extensions/agentic/inference/debugging/helpers/reasoning_error'
5
+ require 'legion/extensions/agentic/inference/debugging/helpers/causal_trace'
6
+ require 'legion/extensions/agentic/inference/debugging/helpers/correction'
7
+ require 'legion/extensions/agentic/inference/debugging/helpers/debugging_engine'
8
+ require 'legion/extensions/agentic/inference/debugging/runners/cognitive_debugging'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Inference
14
+ module Debugging
15
+ class Client
16
+ include Runners::CognitiveDebugging
17
+
18
+ def initialize(engine: nil, **)
19
+ @engine = engine || Helpers::DebuggingEngine.new
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :engine
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Inference
9
+ module Debugging
10
+ module Helpers
11
+ class CausalTrace
12
+ attr_reader :id, :error_id, :steps, :root_cause, :confidence
13
+
14
+ def initialize(error_id:, root_cause:, confidence:)
15
+ @id = SecureRandom.uuid
16
+ @error_id = error_id
17
+ @root_cause = root_cause
18
+ @confidence = confidence.clamp(0.0, 1.0).round(10)
19
+ @steps = []
20
+ end
21
+
22
+ def add_step!(phase:, description:)
23
+ @steps << {
24
+ phase: phase,
25
+ description: description,
26
+ timestamp: Time.now.utc
27
+ }
28
+ self
29
+ end
30
+
31
+ def depth
32
+ @steps.size
33
+ end
34
+
35
+ def to_h
36
+ {
37
+ id: @id,
38
+ error_id: @error_id,
39
+ steps: @steps.map(&:dup),
40
+ root_cause: @root_cause,
41
+ confidence: @confidence,
42
+ depth: depth
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module Debugging
8
+ module Helpers
9
+ module Constants
10
+ MAX_ERRORS = 300
11
+ MAX_TRACES = 500
12
+ MAX_CORRECTIONS = 200
13
+
14
+ ERROR_TYPES = %i[
15
+ inconsistency
16
+ circular_logic
17
+ ungrounded_claim
18
+ overconfidence
19
+ logical_fallacy
20
+ missing_evidence
21
+ false_analogy
22
+ confirmation_bias
23
+ ].freeze
24
+
25
+ CORRECTION_STRATEGIES = %i[
26
+ retrace
27
+ reframe
28
+ weaken_confidence
29
+ seek_evidence
30
+ decompose
31
+ analogize
32
+ devil_advocate
33
+ ].freeze
34
+
35
+ # Range-based severity labels: 0.0..1.0 -> label
36
+ SEVERITY_LABELS = [
37
+ { range: (0.0...0.2), label: :trivial },
38
+ { range: (0.2...0.4), label: :minor },
39
+ { range: (0.4...0.6), label: :moderate },
40
+ { range: (0.6...0.8), label: :major },
41
+ { range: (0.8..1.0), label: :critical }
42
+ ].freeze
43
+
44
+ STATUS_LABELS = %i[detected traced correcting resolved unresolvable].freeze
45
+
46
+ module_function
47
+
48
+ def severity_label(severity)
49
+ entry = SEVERITY_LABELS.find { |e| e[:range].cover?(severity) }
50
+ entry ? entry[:label] : :critical
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Inference
9
+ module Debugging
10
+ module Helpers
11
+ class Correction
12
+ attr_reader :id, :error_id, :strategy, :description, :applied, :effectiveness
13
+
14
+ def initialize(error_id:, strategy:, description:)
15
+ @id = SecureRandom.uuid
16
+ @error_id = error_id
17
+ @strategy = strategy
18
+ @description = description
19
+ @applied = false
20
+ @effectiveness = nil
21
+ end
22
+
23
+ def apply!
24
+ @applied = true
25
+ self
26
+ end
27
+
28
+ def measure_effectiveness!(score)
29
+ @effectiveness = score.clamp(0.0, 1.0).round(10)
30
+ self
31
+ end
32
+
33
+ def effective?
34
+ return false if @effectiveness.nil?
35
+
36
+ @effectiveness >= 0.6
37
+ end
38
+
39
+ def to_h
40
+ {
41
+ id: @id,
42
+ error_id: @error_id,
43
+ strategy: @strategy,
44
+ description: @description,
45
+ applied: @applied,
46
+ effectiveness: @effectiveness,
47
+ effective: effective?
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end