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,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module PredictiveProcessing
8
+ module Helpers
9
+ class PredictiveProcessor
10
+ include Constants
11
+
12
+ attr_reader :models
13
+
14
+ def initialize
15
+ @models = {}
16
+ end
17
+
18
+ def add_model(domain:)
19
+ return { added: false, reason: :limit_reached } if @models.size >= MAX_MODELS
20
+ return { added: false, reason: :already_exists } if @models.key?(domain)
21
+
22
+ model = GenerativeModel.new(domain: domain)
23
+ @models[domain] = model
24
+ { added: true, domain: domain, model_id: model.id }
25
+ end
26
+
27
+ def predict(domain:, context: {})
28
+ model = find_or_create(domain)
29
+ model.predict(context: context)
30
+ end
31
+
32
+ def observe(domain:, actual:, predicted:)
33
+ model = @models[domain]
34
+ return { observed: false, reason: :domain_not_found } unless model
35
+
36
+ error = model.observe(actual: actual, predicted: predicted)
37
+ mode = inference_mode(domain)
38
+
39
+ model.update_model(error: error) if %i[perceptual hybrid].include?(mode)
40
+
41
+ {
42
+ observed: true,
43
+ domain: domain,
44
+ prediction_error: error,
45
+ inference_mode: mode,
46
+ free_energy: model.free_energy,
47
+ state: model.state
48
+ }
49
+ end
50
+
51
+ def inference_mode(domain)
52
+ model = @models[domain]
53
+ return :perceptual unless model
54
+
55
+ fe = model.free_energy
56
+ determine_mode(fe, model.precision)
57
+ end
58
+
59
+ def free_energy_for(domain)
60
+ model = @models[domain]
61
+ model&.free_energy
62
+ end
63
+
64
+ def global_free_energy
65
+ return 0.0 if @models.empty?
66
+
67
+ total = @models.values.sum(&:free_energy)
68
+ total / @models.size
69
+ end
70
+
71
+ def precision_weight(domain)
72
+ model = @models[domain]
73
+ model ? model.precision : DEFAULT_PRECISION
74
+ end
75
+
76
+ def models_needing_update
77
+ @models.select { |_d, m| m.surprised? }.transform_values(&:to_h)
78
+ end
79
+
80
+ def stable_models
81
+ @models.select { |_d, m| m.stable? }.transform_values(&:to_h)
82
+ end
83
+
84
+ def active_inference_candidates
85
+ @models.select { |_d, m| m.free_energy > ACTIVE_INFERENCE_THRESHOLD }
86
+ .keys
87
+ end
88
+
89
+ def tick
90
+ @models.each_value(&:decay)
91
+ end
92
+
93
+ def to_h
94
+ {
95
+ model_count: @models.size,
96
+ global_free_energy: global_free_energy,
97
+ models_needing_update: models_needing_update.size,
98
+ stable_model_count: stable_models.size,
99
+ active_inference_domains: active_inference_candidates.size,
100
+ models: @models.transform_values(&:to_h)
101
+ }
102
+ end
103
+
104
+ private
105
+
106
+ def find_or_create(domain)
107
+ @models[domain] ||= begin
108
+ model = GenerativeModel.new(domain: domain)
109
+ @models[domain] = model if @models.size < MAX_MODELS
110
+ model
111
+ end
112
+ end
113
+
114
+ def determine_mode(free_energy, precision)
115
+ if free_energy > FREE_ENERGY_THRESHOLD && precision >= ACTIVE_INFERENCE_THRESHOLD
116
+ :hybrid
117
+ elsif free_energy > ACTIVE_INFERENCE_THRESHOLD
118
+ :active
119
+ else
120
+ :perceptual
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module PredictiveProcessing
8
+ module Runners
9
+ module PredictiveProcessing
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def add_generative_model(domain:, **)
14
+ return { added: false, reason: :missing_domain } if domain.nil? || domain.to_s.strip.empty?
15
+
16
+ result = default_processor.add_model(domain: domain.to_sym)
17
+ Legion::Logging.debug "[predictive_processing] add_model domain=#{domain} added=#{result[:added]}"
18
+ result
19
+ end
20
+
21
+ def predict_from_model(domain:, context: {}, **)
22
+ return { predicted: false, reason: :missing_domain } if domain.nil?
23
+
24
+ prediction = default_processor.predict(domain: domain.to_sym, context: context)
25
+ Legion::Logging.debug "[predictive_processing] predict domain=#{domain} " \
26
+ "expected=#{prediction[:expected_value]&.round(3)}"
27
+ { predicted: true, domain: domain, prediction: prediction }
28
+ end
29
+
30
+ def observe_outcome(domain:, actual:, predicted:, **)
31
+ return { observed: false, reason: :missing_domain } if domain.nil?
32
+
33
+ result = default_processor.observe(
34
+ domain: domain.to_sym,
35
+ actual: actual,
36
+ predicted: predicted
37
+ )
38
+ log_observe(domain, result)
39
+ result
40
+ end
41
+
42
+ def inference_mode(domain:, **)
43
+ return { mode: nil, reason: :missing_domain } if domain.nil?
44
+
45
+ mode = default_processor.inference_mode(domain.to_sym)
46
+ Legion::Logging.debug "[predictive_processing] inference_mode domain=#{domain} mode=#{mode}"
47
+ { domain: domain, mode: mode }
48
+ end
49
+
50
+ def free_energy(domain: nil, **)
51
+ if domain
52
+ fe = default_processor.free_energy_for(domain.to_sym)
53
+ return { domain: domain, free_energy: nil, reason: :domain_not_found } if fe.nil?
54
+
55
+ { domain: domain, free_energy: fe }
56
+ else
57
+ { global_free_energy: default_processor.global_free_energy }
58
+ end
59
+ end
60
+
61
+ def models_needing_update(**)
62
+ needing = default_processor.models_needing_update
63
+ Legion::Logging.debug "[predictive_processing] models_needing_update count=#{needing.size}"
64
+ { count: needing.size, models: needing }
65
+ end
66
+
67
+ def active_inference_candidates(**)
68
+ candidates = default_processor.active_inference_candidates
69
+ Legion::Logging.debug "[predictive_processing] active_inference_candidates count=#{candidates.size}"
70
+ { count: candidates.size, domains: candidates }
71
+ end
72
+
73
+ def update_predictive_processing(**)
74
+ default_processor.tick
75
+ Legion::Logging.debug '[predictive_processing] tick: precision decayed on all models'
76
+ { ticked: true, model_count: default_processor.models.size }
77
+ end
78
+
79
+ def predictive_processing_stats(**)
80
+ stats = default_processor.to_h
81
+ Legion::Logging.debug "[predictive_processing] stats global_fe=#{stats[:global_free_energy]&.round(3)}"
82
+ { success: true, stats: stats }
83
+ end
84
+
85
+ private
86
+
87
+ def default_processor
88
+ @default_processor ||= Helpers::PredictiveProcessor.new
89
+ end
90
+
91
+ def log_observe(domain, result)
92
+ return unless result[:observed]
93
+
94
+ Legion::Logging.debug "[predictive_processing] observe domain=#{domain} " \
95
+ "error=#{result[:prediction_error]&.round(3)} " \
96
+ "mode=#{result[:inference_mode]}"
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ 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 PredictiveProcessing
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 'legion/extensions/agentic/inference/predictive_processing/version'
4
+ require 'legion/extensions/agentic/inference/predictive_processing/helpers/constants'
5
+ require 'legion/extensions/agentic/inference/predictive_processing/helpers/generative_model'
6
+ require 'legion/extensions/agentic/inference/predictive_processing/helpers/predictive_processor'
7
+ require 'legion/extensions/agentic/inference/predictive_processing/runners/predictive_processing'
8
+ require 'legion/extensions/agentic/inference/predictive_processing/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Inference
14
+ module PredictiveProcessing
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/constants'
4
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/belief'
5
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/reality_engine'
6
+ require 'legion/extensions/agentic/inference/reality_testing/runners/reality_testing'
7
+
8
+ module Legion
9
+ module Extensions
10
+ module Agentic
11
+ module Inference
12
+ module RealityTesting
13
+ class Client
14
+ include Runners::RealityTesting
15
+
16
+ def initialize(**)
17
+ @reality_engine = Helpers::RealityEngine.new
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :reality_engine
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module RealityTesting
8
+ module Helpers
9
+ class Belief
10
+ include Constants
11
+
12
+ attr_reader :id, :claim, :domain, :confidence, :evidence_count,
13
+ :confirming_count, :disconfirming_count, :created_at, :last_tested_at
14
+
15
+ def initialize(id:, claim:, domain: :general, confidence: Constants::DEFAULT_CONFIDENCE)
16
+ @id = id
17
+ @claim = claim
18
+ @domain = domain
19
+ @confidence = confidence.clamp(0.0, 1.0)
20
+ @evidence_count = 0
21
+ @confirming_count = 0
22
+ @disconfirming_count = 0
23
+ @created_at = Time.now.utc
24
+ @last_tested_at = nil
25
+ end
26
+
27
+ def test_with_evidence!(evidence_type:, weight: 0.1)
28
+ raise ArgumentError, "unknown evidence_type: #{evidence_type}" unless Constants::EVIDENCE_TYPES.include?(evidence_type)
29
+
30
+ @evidence_count += 1
31
+ @last_tested_at = Time.now.utc
32
+
33
+ case evidence_type
34
+ when :confirming
35
+ @confirming_count += 1
36
+ @confidence = (@confidence + (Constants::CONFIDENCE_BOOST * weight * 10)).clamp(0.0, 1.0)
37
+ when :disconfirming
38
+ @disconfirming_count += 1
39
+ @confidence = (@confidence - (Constants::CONFIDENCE_PENALTY * weight * 10)).clamp(0.0, 1.0)
40
+ when :neutral
41
+ # no confidence change
42
+ when :ambiguous
43
+ delta = @confidence - 0.5
44
+ @confidence = (@confidence - (delta * 0.1)).clamp(0.0, 1.0)
45
+ end
46
+
47
+ self
48
+ end
49
+
50
+ def confidence_label
51
+ Constants::CONFIDENCE_LABELS.find { |entry| entry[:range].cover?(@confidence) }&.fetch(:label) || :rejected
52
+ end
53
+
54
+ def validity
55
+ total = @confirming_count + @disconfirming_count
56
+ return 0.5 if total.zero?
57
+
58
+ @confirming_count.to_f / total
59
+ end
60
+
61
+ def validity_label
62
+ v = validity
63
+ Constants::VALIDITY_LABELS.find { |entry| entry[:range].cover?(v) }&.fetch(:label) || :refuted
64
+ end
65
+
66
+ def needs_testing?
67
+ @confidence.between?(0.3, 0.7)
68
+ end
69
+
70
+ def decay!
71
+ @confidence = (@confidence - Constants::CONFIDENCE_DECAY).clamp(0.0, 1.0)
72
+ self
73
+ end
74
+
75
+ def to_h
76
+ {
77
+ id: @id,
78
+ claim: @claim,
79
+ domain: @domain,
80
+ confidence: @confidence,
81
+ confidence_label: confidence_label,
82
+ evidence_count: @evidence_count,
83
+ confirming_count: @confirming_count,
84
+ disconfirming_count: @disconfirming_count,
85
+ validity: validity.round(3),
86
+ validity_label: validity_label,
87
+ needs_testing: needs_testing?,
88
+ created_at: @created_at,
89
+ last_tested_at: @last_tested_at
90
+ }
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module RealityTesting
8
+ module Helpers
9
+ module Constants
10
+ MAX_BELIEFS = 300
11
+ MAX_EVIDENCE = 500
12
+
13
+ DEFAULT_CONFIDENCE = 0.5
14
+ CONFIDENCE_BOOST = 0.1
15
+ CONFIDENCE_PENALTY = 0.15
16
+ CONFIDENCE_DECAY = 0.02
17
+
18
+ CONFIDENCE_LABELS = [
19
+ { range: (0.85..1.0), label: :certain },
20
+ { range: (0.65...0.85), label: :confident },
21
+ { range: (0.35...0.65), label: :tentative },
22
+ { range: (0.15...0.35), label: :doubtful },
23
+ { range: (0.0...0.15), label: :rejected }
24
+ ].freeze
25
+
26
+ EVIDENCE_TYPES = %i[confirming disconfirming neutral ambiguous].freeze
27
+
28
+ VALIDITY_LABELS = [
29
+ { range: (0.75..1.0), label: :validated },
30
+ { range: (0.55...0.75), label: :supported },
31
+ { range: (0.35...0.55), label: :uncertain },
32
+ { range: (0.15...0.35), label: :questionable },
33
+ { range: (0.0...0.15), label: :refuted }
34
+ ].freeze
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module RealityTesting
8
+ module Helpers
9
+ class RealityEngine
10
+ def initialize
11
+ @beliefs = {}
12
+ @next_id = 1
13
+ end
14
+
15
+ def create_belief(claim:, domain: :general, confidence: Constants::DEFAULT_CONFIDENCE)
16
+ return { created: false, reason: :at_capacity } if @beliefs.size >= Constants::MAX_BELIEFS
17
+
18
+ id = "belief_#{@next_id}"
19
+ @next_id += 1
20
+ belief = Belief.new(id: id, claim: claim, domain: domain, confidence: confidence)
21
+ @beliefs[id] = belief
22
+ Legion::Logging.debug "[reality_testing] create_belief id=#{id} domain=#{domain} confidence=#{confidence.round(2)}"
23
+ { created: true, belief: belief.to_h }
24
+ end
25
+
26
+ def test_belief(belief_id:, evidence_type:, weight: 0.1)
27
+ belief = @beliefs[belief_id]
28
+ return { tested: false, reason: :not_found } unless belief
29
+
30
+ belief.test_with_evidence!(evidence_type: evidence_type, weight: weight)
31
+ Legion::Logging.debug "[reality_testing] test_belief id=#{belief_id} evidence=#{evidence_type} confidence=#{belief.confidence.round(2)}"
32
+ { tested: true, belief: belief.to_h }
33
+ end
34
+
35
+ def beliefs_needing_testing
36
+ @beliefs.values.select(&:needs_testing?)
37
+ end
38
+
39
+ def strongest_beliefs(limit: 10)
40
+ @beliefs.values
41
+ .sort_by { |b| -b.confidence }
42
+ .first(limit)
43
+ end
44
+
45
+ def weakest_beliefs(limit: 10)
46
+ @beliefs.values
47
+ .sort_by(&:confidence)
48
+ .first(limit)
49
+ end
50
+
51
+ def beliefs_by_domain(domain:)
52
+ @beliefs.values.select { |b| b.domain == domain }
53
+ end
54
+
55
+ def overall_reality_coherence
56
+ return 0.0 if @beliefs.empty?
57
+
58
+ total = @beliefs.values.sum(&:validity)
59
+ total / @beliefs.size
60
+ end
61
+
62
+ def decay_all
63
+ @beliefs.each_value(&:decay!)
64
+ @beliefs.size
65
+ end
66
+
67
+ def prune_rejected
68
+ before = @beliefs.size
69
+ @beliefs.delete_if { |_id, b| b.confidence < 0.1 }
70
+ pruned = before - @beliefs.size
71
+ Legion::Logging.debug "[reality_testing] prune_rejected pruned=#{pruned} remaining=#{@beliefs.size}"
72
+ pruned
73
+ end
74
+
75
+ def reality_report
76
+ domains = @beliefs.values.group_by(&:domain)
77
+ {
78
+ total_beliefs: @beliefs.size,
79
+ coherence: overall_reality_coherence.round(3),
80
+ needing_testing: beliefs_needing_testing.size,
81
+ domains: domains.transform_values(&:size),
82
+ strongest_claim: @beliefs.values.max_by(&:confidence)&.claim,
83
+ weakest_claim: @beliefs.values.min_by(&:confidence)&.claim
84
+ }
85
+ end
86
+
87
+ def to_h
88
+ {
89
+ belief_count: @beliefs.size,
90
+ coherence: overall_reality_coherence.round(3),
91
+ beliefs: @beliefs.values.map(&:to_h)
92
+ }
93
+ end
94
+
95
+ def size
96
+ @beliefs.size
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Inference
7
+ module RealityTesting
8
+ module Runners
9
+ module RealityTesting
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def create_belief(claim:, domain: :general, confidence: nil, **)
14
+ conf = confidence || Helpers::Constants::DEFAULT_CONFIDENCE
15
+ result = reality_engine.create_belief(claim: claim, domain: domain, confidence: conf)
16
+ Legion::Logging.info "[reality_testing] create_belief claim=#{claim[0, 60]} domain=#{domain}"
17
+ result
18
+ end
19
+
20
+ def test_belief(belief_id:, evidence_type:, weight: 0.1, **)
21
+ etype = evidence_type.to_sym
22
+ reality_engine.test_belief(belief_id: belief_id, evidence_type: etype, weight: weight)
23
+ end
24
+
25
+ def get_belief(belief_id:, **)
26
+ engine = reality_engine
27
+ belief = engine.instance_variable_get(:@beliefs)[belief_id]
28
+ return { found: false, belief_id: belief_id } unless belief
29
+
30
+ { found: true, belief: belief.to_h }
31
+ end
32
+
33
+ def beliefs_needing_testing(**)
34
+ beliefs = reality_engine.beliefs_needing_testing
35
+ Legion::Logging.debug "[reality_testing] needs_testing count=#{beliefs.size}"
36
+ { count: beliefs.size, beliefs: beliefs.map(&:to_h) }
37
+ end
38
+
39
+ def strongest_beliefs(limit: 10, **)
40
+ beliefs = reality_engine.strongest_beliefs(limit: limit)
41
+ { count: beliefs.size, beliefs: beliefs.map(&:to_h) }
42
+ end
43
+
44
+ def weakest_beliefs(limit: 10, **)
45
+ beliefs = reality_engine.weakest_beliefs(limit: limit)
46
+ { count: beliefs.size, beliefs: beliefs.map(&:to_h) }
47
+ end
48
+
49
+ def beliefs_by_domain(domain:, **)
50
+ beliefs = reality_engine.beliefs_by_domain(domain: domain.to_sym)
51
+ { domain: domain, count: beliefs.size, beliefs: beliefs.map(&:to_h) }
52
+ end
53
+
54
+ def overall_coherence(**)
55
+ coherence = reality_engine.overall_reality_coherence
56
+ Legion::Logging.debug "[reality_testing] coherence=#{coherence.round(3)}"
57
+ { coherence: coherence.round(3) }
58
+ end
59
+
60
+ def decay_beliefs(**)
61
+ count = reality_engine.decay_all
62
+ Legion::Logging.debug "[reality_testing] decay_all count=#{count}"
63
+ { decayed: count }
64
+ end
65
+
66
+ def prune_rejected_beliefs(**)
67
+ pruned = reality_engine.prune_rejected
68
+ { pruned: pruned }
69
+ end
70
+
71
+ def reality_report(**)
72
+ reality_engine.reality_report
73
+ end
74
+
75
+ def reality_status(**)
76
+ {
77
+ total_beliefs: reality_engine.size,
78
+ coherence: reality_engine.overall_reality_coherence.round(3),
79
+ needing_testing: reality_engine.beliefs_needing_testing.size
80
+ }
81
+ end
82
+
83
+ private
84
+
85
+ def reality_engine
86
+ @reality_engine ||= Helpers::RealityEngine.new
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ 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 RealityTesting
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 'legion/extensions/agentic/inference/reality_testing/version'
4
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/constants'
5
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/belief'
6
+ require 'legion/extensions/agentic/inference/reality_testing/helpers/reality_engine'
7
+ require 'legion/extensions/agentic/inference/reality_testing/runners/reality_testing'
8
+ require 'legion/extensions/agentic/inference/reality_testing/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Inference
14
+ module RealityTesting
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end