#+TITLE: SKILL: Embedding Generator (Universal Literate Note) #+ID: skill-embedding-generator #+STARTUP: content #+FILETAGS: :embeddings:neural:psf: * Overview The *Embedding Generator* provides vector representations of text for semantic search and neural memory. * Phase A: Demand (PRD) :PROPERTIES: :STATUS: FROZEN :END: ** 1. Purpose Generate embeddings for text strings. ** 2. User Needs - *Provider Choice:* Support for local (Ollama) or remote (Gemini, OpenAI) providers. - *Batching:* Efficiency through batching text (future-proof). * Phase B: Blueprint (PROTOCOL) :PROPERTIES: :STATUS: SIGNED :END: ** 1. Architectural Intent Unified interface for neural embeddings. ** 2. Semantic Interfaces #+begin_src lisp (defun get-embedding (text &key provider) "Acquire vector embedding for TEXT.") #+end_src * Phase D: Build (Implementation) #+begin_src lisp :tangle ../projects/org-skill-embedding-generator/src/embedding-generator.lisp (defun get-embedding (text &key (provider :ollama)) "Retrieves the embedding vector for TEXT using specified PROVIDER." (kernel-log "NEURO [Embedding] - Generating via ~a..." provider) (case provider (:ollama (get-embedding-ollama text)) (:gemini (get-embedding-gemini text)) (t (error "Unsupported embedding provider: ~a" provider)))) (defun get-embedding-ollama (text) (let* ((url "http://localhost:11434/api/embeddings") (payload (cl-json:encode-json-to-string `(("model" . "mxbai-embed-large") ("prompt" . ,text)))) (response (dex:post url :content payload :headers '(("Content-Type" . "application/json"))))) (cdr (assoc :embedding (cl-json:decode-json-from-string response))))) (defun get-embedding-gemini (text) (let* ((api-key (getf (org-agent:get-credentials :gemini) :api-key)) (url (format nil "https://generativelanguage.googleapis.com/v1beta/models/embedding-001:embedContent?key=~a" api-key)) (payload (cl-json:encode-json-to-string `(("content" . (("parts" . ((("text" . ,text)))))))))) (let ((response (dex:post url :content payload :headers '(("Content-Type" . "application/json"))))) (cdr (assoc :values (cdr (assoc :embedding (cl-json:decode-json-from-string response)))))))) #+end_src * Registration #+begin_src lisp (defskill :skill-embedding-generator :priority 50 :trigger (lambda (context) nil) :neuro (lambda (context) nil) :symbolic (lambda (action context) action)) #+end_src