Files
memex/notes/org-skill-embedding-generator.org

67 lines
2.4 KiB
Org Mode

#+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