- NEW: org-skill-utils-lisp (consolidated from org-skill-lisp-utils) * 3-phase validation: structural, syntactic, semantic * Sandboxed eval, AST extraction/injection/wrapping * Format, list-definitions utilities - NEW: org-skill-utils-org (consolidated from org-skill-emacs-edit) * Read/update/delete org headlines * Property management, TODO state handling * ID-link and internal link support - DELETE: org-skill-lisp-utils (merged into utils-lisp) - DELETE: org-skill-emacs-edit (merged into utils-org) - RENAME: run-all-tests.lisp -> run-tests.lisp - HARDEN: Skill loader with improved lisp keyword handling - FIX: Package jailing issues with def-cognitive-tool macro conflicts - ADD: Setup wizard (opencortex setup) and doctor (opencortex doctor) - ADD: TUI client with Croatoan for native terminal rendering - REMOVE: Dynamic loading from opencortex.asd (use :force t instead) - CLEANUP: Test file consolidation (removed duplicate test suites) Co-authored-by: Agent <agent@memex>
63 lines
2.4 KiB
Org Mode
63 lines
2.4 KiB
Org Mode
#+TITLE: SKILL: LLM Gateway (org-skill-llm-gateway.org)
|
|
#+AUTHOR: Agent
|
|
#+FILETAGS: :skill:llm:gateway:
|
|
#+PROPERTY: header-args:lisp :tangle org-skill-llm-gateway.lisp
|
|
|
|
* Overview
|
|
The *LLM Gateway* skill provides a unified interface for interacting with multiple Large Language Model providers.
|
|
|
|
* Implementation
|
|
|
|
** Request Execution (execute-llm-request)
|
|
#+begin_src lisp
|
|
(defun execute-llm-request (&key prompt system-prompt (provider :ollama) model)
|
|
"Central dispatcher for LLM requests."
|
|
(let ((backend (gethash provider *probabilistic-backends*)))
|
|
(if backend
|
|
(handler-case
|
|
(funcall backend prompt system-prompt :model model)
|
|
(error (c)
|
|
(list :status :error :message (format nil "~a Failure: ~a" provider c))))
|
|
(list :status :error :message (format nil "Provider ~a not registered" provider)))))
|
|
#+end_src
|
|
|
|
** Skill Registration
|
|
#+begin_src lisp
|
|
(defskill :skill-llm-gateway
|
|
:priority 100
|
|
:trigger (lambda (ctx) (getf ctx :user-input))
|
|
:deterministic (lambda (action ctx) (declare (ignore ctx)) action))
|
|
#+end_src
|
|
|
|
* Test Suite
|
|
#+begin_src lisp :tangle ../tests/llm-gateway-tests.lisp
|
|
(eval-when (:compile-toplevel :load-toplevel :execute)
|
|
(ql:quickload :fiveam :silent t))
|
|
|
|
(defpackage :opencortex-llm-gateway-tests
|
|
(:use :cl :opencortex)
|
|
(:export #:llm-gateway-suite))
|
|
|
|
(in-package :opencortex-llm-gateway-tests)
|
|
|
|
(fiveam:def-suite llm-gateway-suite :description "Tests for the LLM Gateway skill")
|
|
(fiveam:in-suite llm-gateway-suite)
|
|
|
|
(fiveam:test test-llm-gateway-timeout
|
|
"Tier 2 Chaos: Verify that LLM Gateway handles connection failures gracefully."
|
|
(let ((old-host (uiop:getenv "OLLAMA_HOST")))
|
|
(unwind-protect
|
|
(progn
|
|
(setf (uiop:getenv "OLLAMA_HOST") "localhost:1")
|
|
(let ((fn (or (find-symbol "EXECUTE-LLM-REQUEST" :opencortex.skills.org-skill-llm-gateway)
|
|
(find-symbol "EXECUTE-LLM-REQUEST" :opencortex))))
|
|
(if fn
|
|
(let ((result (funcall fn :prompt "hello" :provider :ollama)))
|
|
(fiveam:is (eq (getf result :status) :error))
|
|
(fiveam:is (uiop:string-prefix-p "Ollama Failure" (getf result :message))))
|
|
(fiveam:fail "Could not find EXECUTE-LLM-REQUEST symbol"))))
|
|
(if old-host
|
|
(setf (uiop:getenv "OLLAMA_HOST") old-host)
|
|
(sb-posix:unsetenv "OLLAMA_HOST")))))
|
|
#+end_src
|