diff --git a/docs/api/engine.md b/docs/api/engine.md index 2201d9e3..dd7b17ee 100644 --- a/docs/api/engine.md +++ b/docs/api/engine.md @@ -38,23 +38,21 @@ configuration and health checks. show_source: true members_order: source -### VLLMEngine +### OpenAI-Compatible Engines (vLLM, SGLang, llama.cpp, MLX, LM Studio) -::: openjarvis.engine.vllm.VLLMEngine - options: - show_source: true - members_order: source +These engines are thin subclasses of `_OpenAICompatibleEngine`, created +via data-driven registration in `openai_compat_engines.py`. They share +the same implementation and differ only in `engine_id` and default host. -### LlamaCppEngine +| Engine | Registry Key | Default Host | +|--------|-------------|--------------| +| `VLLMEngine` | `vllm` | `http://localhost:8000` | +| `SGLangEngine` | `sglang` | `http://localhost:30000` | +| `LlamaCppEngine` | `llamacpp` | `http://localhost:8080` | +| `MLXEngine` | `mlx` | `http://localhost:8080` | +| `LMStudioEngine` | `lmstudio` | `http://localhost:1234` | -::: openjarvis.engine.llamacpp.LlamaCppEngine - options: - show_source: true - members_order: source - -### SGLangEngine - -::: openjarvis.engine.sglang.SGLangEngine +::: openjarvis.engine._openai_compat._OpenAICompatibleEngine options: show_source: true members_order: source diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 454103ef..fb00d3fa 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -148,9 +148,7 @@ src/openjarvis/ _openai_compat.py Shared base for OpenAI-compatible engines _discovery.py discover_engines(), discover_models(), get_engine() ollama.py Ollama backend (native HTTP API) - vllm.py vLLM backend (OpenAI-compatible) - sglang.py SGLang backend (OpenAI-compatible) - llamacpp.py llama.cpp backend (OpenAI-compatible) + openai_compat_engines.py Data-driven registration (vLLM, SGLang, llama.cpp, MLX, LM Studio) cloud.py Cloud backend (OpenAI, Anthropic, Google SDKs) agents/ Agentic Logic pillar -- pluggable agents diff --git a/docs/development/contributing.md b/docs/development/contributing.md index 107d6673..99b8a01f 100644 --- a/docs/development/contributing.md +++ b/docs/development/contributing.md @@ -193,9 +193,7 @@ src/openjarvis/ _discovery.py # discover_engines, discover_models, get_engine _openai_compat.py # OpenAI-compatible wrapper ollama.py # OllamaEngine - vllm.py # VllmEngine - llamacpp.py # LlamaCppEngine - sglang.py # SGLangEngine + openai_compat_engines.py # Data-driven registration (vLLM, SGLang, llama.cpp, MLX, LM Studio) cloud.py # CloudEngine (OpenAI/Anthropic/Google) agents/ # Agent implementations diff --git a/pyproject.toml b/pyproject.toml index c0459b32..08451dce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,7 @@ channel-bluebubbles = [] channel-whatsapp-baileys = [] channel-line = ["line-bot-sdk>=3.0"] channel-viber = ["viberbot>=1.0"] -channel-messenger = [] +channel-messenger = ["pymessenger>=0.0.7"] channel-reddit = ["praw>=7.0"] channel-mastodon = ["Mastodon.py>=1.8"] channel-xmpp = ["slixmpp>=1.8"] diff --git a/uv.lock b/uv.lock index f755f7a5..f5150c2a 100644 --- a/uv.lock +++ b/uv.lock @@ -3109,6 +3109,9 @@ channel-line = [ channel-mastodon = [ { name = "mastodon-py" }, ] +channel-messenger = [ + { name = "pymessenger" }, +] channel-nostr = [ { name = "pynostr" }, ] @@ -3257,6 +3260,7 @@ requires-dist = [ { name = "playwright", marker = "extra == 'browser'", specifier = ">=1.40" }, { name = "praw", marker = "extra == 'channel-reddit'", specifier = ">=7.0" }, { name = "pydantic", marker = "extra == 'server'", specifier = ">=2.0" }, + { name = "pymessenger", marker = "extra == 'channel-messenger'", specifier = ">=0.0.7" }, { name = "pynostr", marker = "extra == 'channel-nostr'", specifier = ">=0.6" }, { name = "pynvml", specifier = ">=13.0.1" }, { name = "pynvml", marker = "extra == 'energy-all'", specifier = ">=12.0" }, @@ -4394,6 +4398,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl", hash = "sha256:91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f", size = 268877, upload-time = "2026-02-15T20:44:05.464Z" }, ] +[[package]] +name = "pymessenger" +version = "0.0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/c1/5f5d90ace6b58d7abb4c7c15e623c6b73807b72359bb918bd4aa2c4bcc06/pymessenger-0.0.7.0.tar.gz", hash = "sha256:64c7a2989d5c4dcc0975f9264b32e25d4cba05914519159fcf5f027323a3bab7", size = 3573, upload-time = "2016-09-18T02:14:59.812Z" } + [[package]] name = "pynostr" version = "0.7.0" @@ -4869,6 +4884,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + [[package]] name = "respx" version = "0.22.0"