67 lines
2.4 KiB
Org Mode
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
|