From 2a99517dc8178374aaf9dd9044d018db594f6920 Mon Sep 17 00:00:00 2001 From: Amr Gharbeia Date: Thu, 9 Apr 2026 16:43:33 -0400 Subject: [PATCH] feat: implement Hybrid Depth+Semantic pruning for Peripheral Vision --- literate/context.org | 56 +++++++++++++++++++++++----------- literate/system-definition.org | 2 +- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/literate/context.org b/literate/context.org index 93425cd..059311c 100644 --- a/literate/context.org +++ b/literate/context.org @@ -102,28 +102,47 @@ Provides execution stats for a specific skill. Transforms the internal Object Store structures back into a human-readable (and LLM-readable) Org-mode string. It supports depth-based indentation and content suppression for peripheral nodes. #+begin_src lisp :tangle ../src/context.lisp -(defun context-render-to-org (obj &key (depth 1) (foveal-id nil)) - "Recursively renders an org-object and its children to an Org string." - (let* ((is-foveal (equal (org-object-id obj) foveal-id)) +(defun context-render-to-org (obj &key (depth 1) (foveal-id nil) (semantic-threshold 0.75) (foveal-vector nil)) + "Recursively renders an org-object and its children to an Org string using a Foveal-Peripheral Hybrid model." + (let* ((id (org-object-id obj)) + (is-foveal (equal id foveal-id)) (title (or (getf (org-object-attributes obj) :TITLE) "Untitled")) - (id (org-object-id obj)) (content (org-object-content obj)) (children (org-object-children obj)) (stars (make-string depth :initial-element #\*)) - (output (format nil "~a ~a~%:PROPERTIES:~%:ID: ~a~%:END:~%" stars title id))) + (obj-vector (org-object-vector obj)) + (similarity (if (and foveal-vector obj-vector (not is-foveal)) + (cosine-similarity foveal-vector obj-vector) + 0.0)) + (is-semantically-relevant (>= similarity semantic-threshold)) + ;; We always render depth 1 and 2 (Projects and main tasks). + ;; We always render the foveal node and its immediate children. + ;; We render deeper nodes ONLY if they are semantically relevant. + (should-render (or (<= depth 2) is-foveal is-semantically-relevant)) + (output "")) - ;; Only include content if this is the foveal focus - (when (and is-foveal content) - (setf output (concatenate 'string output content (string #\Newline)))) - - ;; Recursively render children - (dolist (child-id children) - (let ((child-obj (lookup-object child-id))) - (when child-obj - (setf output (concatenate 'string output - (context-render-to-org child-obj - :depth (1+ depth) - :foveal-id foveal-id)))))) + (when should-render + (setf output (format nil "~a ~a~%:PROPERTIES:~%:ID: ~a~%" stars title id)) + (when is-semantically-relevant + (setf output (concatenate 'string output (format nil ":SEMANTIC_SCORE: ~,2f~%" similarity)))) + (setf output (concatenate 'string output (format nil ":END:~%"))) + + ;; Only include full body content if this is the Foveal focus or highly relevant + (when (and content (or is-foveal is-semantically-relevant)) + (setf output (concatenate 'string output content (string #\Newline)))) + + ;; Recursively render children + (dolist (child-id children) + (let ((child-obj (lookup-object child-id))) + (when child-obj + ;; If the current node is Foveal, its children should be rendered (depth effectively resets) + (let ((next-foveal (if is-foveal child-id foveal-id))) + (setf output (concatenate 'string output + (context-render-to-org child-obj + :depth (1+ depth) + :foveal-id next-foveal + :semantic-threshold semantic-threshold + :foveal-vector foveal-vector)))))))) output)) #+end_src @@ -225,7 +244,8 @@ Verification of the peripheral vision extraction and rendering logic. #+begin_src lisp :tangle ../tests/peripheral-vision-tests.lisp (defpackage :org-agent-peripheral-vision-tests - (:use :cl :fiveam :org-agent)) + (:use :cl :fiveam :org-agent) + (:export #:vision-suite)) (in-package :org-agent-peripheral-vision-tests) (def-suite vision-suite diff --git a/literate/system-definition.org b/literate/system-definition.org index 8aaa6fb..4740e45 100644 --- a/literate/system-definition.org +++ b/literate/system-definition.org @@ -17,8 +17,8 @@ :components ((:file "package") (:file "protocol") (:file "object-store") - (:file "context") (:file "embedding") + (:file "context") (:file "skills") (:file "neuro") (:file "symbolic")