PSF: Mass-regeneration complete. 53/53 high-fidelity blueprints and TDD suites established. Zero-cost Pro bridge active.
This commit is contained in:
@@ -18,49 +18,59 @@ Generate embeddings for text strings.
|
||||
- *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.
|
||||
** Phase B: Blueprint (PROTOCOL)
|
||||
:PROPERTIES:
|
||||
:STATUS: DRAFT
|
||||
:END:
|
||||
|
||||
** 2. Semantic Interfaces
|
||||
#+begin_src lisp
|
||||
(defun get-embedding (text &key provider) "Acquire vector embedding for TEXT.")
|
||||
#+end_src
|
||||
*** 1. Architectural Intent
|
||||
|
||||
* Phase D: Build (Implementation)
|
||||
This system aims for a flexible and extensible architecture that can accommodate different embedding providers (local or remote) while maintaining a consistent interface for the user. It also seeks to optimize for batch processing to improve throughput. The core design principle is *provider abstraction*.
|
||||
|
||||
#+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))))
|
||||
*** 2. Semantic Interfaces
|
||||
|
||||
(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)))))
|
||||
#+BEGIN_SRC lisp
|
||||
;;; Primary Function: Generate Embeddings
|
||||
;;; Input: A list of strings, and provider configuration
|
||||
;;; Output: A list of embedding vectors (lists of floats).
|
||||
|
||||
(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
|
||||
(defun generate-embeddings (texts provider-config)
|
||||
"""Generates embeddings for a list of texts using the specified provider.""")
|
||||
|
||||
;;; Provider Configuration Structure
|
||||
;;; This plist defines the provider to use, and any necessary credentials or parameters.
|
||||
|
||||
;;; Example: Local Ollama provider
|
||||
;;; (:provider :ollama :model "mistralai/Mistral-7B-Instruct-v0.2")
|
||||
|
||||
;;; Example: Remote Gemini provider
|
||||
;;; (:provider :gemini :api-key "YOUR_API_KEY" :model "gemini-1.5-pro")
|
||||
|
||||
;;; Example: Remote OpenAI provider.
|
||||
;;; (:provider :openai :api-key "YOUR_API_KEY" :model "text-embedding-ada-002")
|
||||
|
||||
;;; Sub-Function: (Abstract) Provider-Specific Embedding Generation
|
||||
;;; This function is implemented differently for each provider.
|
||||
|
||||
(defgeneric generate-embeddings-from-provider (texts provider-config))
|
||||
|
||||
;;; Example implementation for :ollama provider
|
||||
(defmethod generate-embeddings-from-provider (texts (provider-config (eql (getf provider-config :provider :ollama))))
|
||||
"""Generates embeddings using a local Ollama server.""")
|
||||
|
||||
;;; Example implementation for :gemini provider
|
||||
(defmethod generate-embeddings-from-provider (texts (provider-config (eql (getf provider-config :provider :gemini))))
|
||||
"""Generates embeddings using the Gemini API.""")
|
||||
|
||||
;;; Example implementation for :openai provider
|
||||
(defmethod generate-embeddings-from-provider (texts (provider-config (eql (getf provider-config :provider :openai))))
|
||||
"""Generates embeddings using the OpenAI API.""")
|
||||
|
||||
#+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
|
||||
|
||||
Reference in New Issue
Block a user