{"id":314722,"date":"2026-06-02T01:35:47","date_gmt":"2026-06-02T01:35:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-provider-for-osaurus\/"},"modified":"2026-06-02T01:35:11","modified_gmt":"2026-06-02T01:35:11","slug":"ai-provider-for-osaurus","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ai-provider-for-osaurus\/","author":11628580,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.2","stable_tag":"0.4.2","tested":"7.0","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"AI Provider for Osaurus","header_author":"Andrei Lupu","header_description":"Registers Osaurus (local Apple Silicon LLM runtime) as a provider for the WordPress AI Client.","assets_banners_color":"28263b","last_updated":"2026-06-02 01:35:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/andreilupu\/ai-provider-for-osaurus","header_author_uri":"https:\/\/github.com\/andreilupu","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.2":{"tag":"0.4.2","author":"euthelup","date":"2026-06-02 01:35:11"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3557365,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3557365,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3557365,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3557365,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3557365,"resolution":"1","location":"assets","locale":"","width":1210,"height":873},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3557365,"resolution":"2","location":"assets","locale":"","width":1392,"height":1054},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3557365,"resolution":"3","location":"assets","locale":"","width":1387,"height":1085}},"screenshots":{"1":"The Osaurus connector on the Connectors admin screen: server URL field, live reachability status with round-trip latency, bare-metal \/ Docker presets, and a default-model picker populated from the Osaurus server.","2":"Using AI in the block editor \u2014 the paragraph toolbar offers Shorten, Expand, and Rephrase, all routed to the local Osaurus server.","3":"An AI-generated suggested replacement shown in the editor, produced locally by Osaurus."}},"plugin_section":[],"plugin_tags":[2353,25308,226124,258461,265389],"plugin_category":[],"plugin_contributors":[78507],"plugin_business_model":[],"class_list":["post-314722","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-connector","plugin_tags-llm","plugin_tags-local-ai","plugin_tags-osaurus","plugin_contributors-euthelup","plugin_committers-euthelup"],"banners":{"banner":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/banner-772x250.png?rev=3557365","banner_2x":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/banner-1544x500.png?rev=3557365","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/icon-128x128.png?rev=3557365","icon_2x":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/icon-256x256.png?rev=3557365","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/screenshot-1.png?rev=3557365","caption":"The Osaurus connector on the Connectors admin screen: server URL field, live reachability status with round-trip latency, bare-metal \/ Docker presets, and a default-model picker populated from the Osaurus server."},{"src":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/screenshot-2.png?rev=3557365","caption":"Using AI in the block editor \u2014 the paragraph toolbar offers Shorten, Expand, and Rephrase, all routed to the local Osaurus server."},{"src":"https:\/\/ps.w.org\/ai-provider-for-osaurus\/assets\/screenshot-3.png?rev=3557365","caption":"An AI-generated suggested replacement shown in the editor, produced locally by Osaurus."}],"raw_content":"<!--section=description-->\n<p>AI Provider for Osaurus wires the <a href=\"https:\/\/osaurus.ai\">Osaurus<\/a> local LLM runtime into the WordPress AI Client that ships with WordPress 7.0.<\/p>\n\n<p>After activation, any plugin that calls <code>wp_ai_client_prompt()<\/code> (Gutenberg AI features, official provider plugins, third-party code) can route prompts to Osaurus running on the same machine. Prompts never leave the local network.<\/p>\n\n<h4>Why use it<\/h4>\n\n<ul>\n<li><strong>Privacy first<\/strong> &mdash; prompts stay on your machine, no third-party API receives the data.<\/li>\n<li><strong>Zero cost<\/strong> &mdash; no API keys, no metered requests.<\/li>\n<li><strong>Fast<\/strong> &mdash; MLX-backed inference on Apple Silicon.<\/li>\n<li><strong>OpenAI-compatible wire format<\/strong> &mdash; streaming, tool calls, JSON output, and chat history work out of the box.<\/li>\n<\/ul>\n\n<h4>Capabilities<\/h4>\n\n<ul>\n<li>Text generation<\/li>\n<li>Chat history<\/li>\n<li>Function \/ tool calls<\/li>\n<li>Structured JSON output<\/li>\n<li>Streaming<\/li>\n<\/ul>\n\n<p>Image generation, embeddings, and text-to-speech are not supported because Osaurus does not currently expose those endpoints. Pair this plugin with an image-capable provider such as the official AI Provider for OpenAI when you need images.<\/p>\n\n<h4>How it works<\/h4>\n\n<p>The plugin registers a provider with <code>AiClient::defaultRegistry()<\/code> and points it at the Osaurus HTTP server. Because Osaurus speaks the OpenAI Chat Completions wire format, the implementation extends the SDK's OpenAI-compatible base classes &mdash; so capabilities like streaming and tool calling flow through automatically.<\/p>\n\n<h4>Configuration<\/h4>\n\n<p>The plugin resolves the Osaurus base URL in this order (first match wins):<\/p>\n\n<ol>\n<li><code>OSAURUS_BASE_URL<\/code> PHP constant defined in <code>wp-config.php<\/code>.<\/li>\n<li><code>osaurus_ai_connector_base_url<\/code> option, settable from <strong>Settings &rarr; Connectors<\/strong> in wp-admin.<\/li>\n<li>Default: <code>http:\/\/127.0.0.1:1337\/v1<\/code> (works out of the box for bare-metal WordPress on the same Mac as Osaurus; Docker setups must override).<\/li>\n<\/ol>\n\n<h4>Pick the right URL for your setup<\/h4>\n\n<p>WordPress can run in many places &mdash; the right base URL depends on how it reaches your Mac, where Osaurus is listening.<\/p>\n\n<ul>\n<li><strong>Bare-metal WordPress on the same Mac<\/strong> (MAMP, Laravel Valet, Local, WordPress Studio, native PHP):\n  http:\/\/127.0.0.1:1337\/v1 <em>(this is the default &mdash; no configuration needed)<\/em><\/li>\n<li><strong>Docker-based WordPress on the same Mac<\/strong> (DDEV, Lando, Docker Desktop):\n  http:\/\/host.docker.internal:1337\/v1<\/li>\n<li><strong>WordPress on a different machine on your LAN, Osaurus on your Mac:<\/strong>\n  http:\/\/:1337\/v1 &mdash; make sure Osaurus is bound to a non-loopback interface and your firewall allows port 1337.<\/li>\n<li><strong>Remote Osaurus you operate<\/strong> (e.g. a Mac mini on Tailscale, a colocated server):\n  http:\/\/:1337\/v1 or <code>https:\/\/...<\/code> if you front it with TLS.<\/li>\n<\/ul>\n\n<p>The fastest way to confirm a URL works from the WordPress host: run <code>curl &lt;base-url&gt;\/models<\/code> from the same shell environment WordPress runs in. A JSON list back means the connector will work.<\/p>\n\n<p>Osaurus project home: <a href=\"https:\/\/osaurus.ai\">osaurus.ai<\/a>\nOsaurus documentation: <a href=\"https:\/\/docs.osaurus.ai\">docs.osaurus.ai<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to an Osaurus HTTP server &mdash; a local LLM runtime that you install and run yourself on the same machine as WordPress (or on a host you operate). The plugin is useless without it: every text-generation request from the WordPress AI Client is routed to this server.<\/p>\n\n<p><strong>Service: Osaurus (self-hosted, local LLM runtime)<\/strong><\/p>\n\n<p>Osaurus is an open-source Apple Silicon LLM runtime that exposes an OpenAI-compatible HTTP API. It is installed and operated by the same person running WordPress &mdash; there is no third-party service operator. This plugin forwards prompts to it so WordPress can perform text generation, chat, tool calls, and structured JSON output without sending data to any cloud provider.<\/p>\n\n<p>Project homepage and download (<code>osaurus.ai<\/code>): https:\/\/osaurus.ai\nProject documentation (<code>docs.osaurus.ai<\/code>): https:\/\/docs.osaurus.ai<\/p>\n\n<p>These URLs are referenced in the plugin's admin UI as documentation\/download links only; the plugin does <strong>not<\/strong> make HTTP requests to <code>osaurus.ai<\/code> or <code>docs.osaurus.ai<\/code>.<\/p>\n\n<p><strong>Hosts the plugin actually contacts at runtime<\/strong><\/p>\n\n<p>The plugin sends HTTP requests only to the host and port resolved (in order) from:<\/p>\n\n<ol>\n<li>The <code>OSAURUS_BASE_URL<\/code> PHP constant (if defined in <code>wp-config.php<\/code>).<\/li>\n<li>The <code>osaurus_ai_connector_base_url<\/code> WordPress option (set from <strong>Settings &rarr; Connectors<\/strong>).<\/li>\n<li>The built-in default <code>http:\/\/127.0.0.1:1337\/v1<\/code>.<\/li>\n<\/ol>\n\n<p>Two host targets are referenced by name in the plugin code as quick-pick presets and as the default:<\/p>\n\n<ul>\n<li><code>127.0.0.1:1337<\/code> &mdash; loopback on the same machine as WordPress (default). Used by bare-metal installs (Studio, MAMP, Valet, Local, native PHP).<\/li>\n<li><code>host.docker.internal:1337<\/code> &mdash; Docker's hostname for the host machine. Used by Docker-based WordPress (DDEV, Lando, Docker Desktop). Resolved by Docker, not by a public DNS server.<\/li>\n<\/ul>\n\n<p>If the user configures a different URL, the plugin only contacts that URL. The plugin never contacts any third-party endpoint operated by the plugin author, the Osaurus project, or any other party.<\/p>\n\n<p><strong>What data is sent and when<\/strong><\/p>\n\n<ul>\n<li>When any plugin (including WordPress core) calls <code>wp_ai_client_prompt()<\/code> and routes through Osaurus, the plugin sends a <code>POST<\/code> to <code>{base_url}\/chat\/completions<\/code> with: the prompt text, the conversation history you supplied, the model ID, sampling parameters (temperature, top_p, max tokens, etc.), and any tool \/ function declarations or JSON schemas you supplied.<\/li>\n<li>When an admin opens <strong>Settings &rarr; Connectors<\/strong>, the plugin sends a <code>GET {base_url}\/models<\/code> to populate the model picker and a <code>GET {base_root}\/health<\/code> to display a connection status indicator. Both run only for users with <code>manage_options<\/code> and are triggered by user actions in wp-admin.<\/li>\n<li>No telemetry, analytics, or background requests are sent.<\/li>\n<\/ul>\n\n<p><strong>Terms of service and privacy policy<\/strong><\/p>\n\n<p>Osaurus is open-source software you self-host. There is no third-party service operator collecting your data. See the project pages linked above for the project's terms and source. If you point the plugin at a remote Osaurus server operated by someone else (for example, a Mac mini you reach over Tailscale), the operator of that server is the data recipient and is governed by whatever terms you have with them.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and start <a href=\"https:\/\/osaurus.ai\">Osaurus<\/a> on your Mac (Apple Silicon required).<\/li>\n<li>Confirm Osaurus is reachable, e.g. <code>curl http:\/\/127.0.0.1:1337\/v1\/models<\/code>.<\/li>\n<li>Install this plugin from the WordPress.org plugin directory, or upload the plugin folder to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>AI Provider for Osaurus<\/strong> on the <strong>Plugins<\/strong> screen.<\/li>\n<li>Visit <strong>Settings &rarr; Connectors<\/strong>. The Osaurus row should report as connected once a model list is available.<\/li>\n<\/ol>\n\n<p>If WordPress and Osaurus run on the same host, no further configuration is required &mdash; the default <code>http:\/\/127.0.0.1:1337\/v1<\/code> works as-is. If you run WordPress inside Docker (DDEV, Lando, Docker Desktop), switch the URL to <code>http:\/\/host.docker.internal:1337\/v1<\/code> from <strong>Settings &rarr; Connectors<\/strong> or set <code>OSAURUS_BASE_URL<\/code> in your environment config.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>No. Osaurus is a local server and does not require credentials. The plugin registers a placeholder authentication so the Connectors screen treats the row as configured.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20send%20data%20to%20osaurus.ai%20or%20any%20third%20party%3F\"><h3>Does this plugin send data to Osaurus.ai or any third party?<\/h3><\/dt>\n<dd><p>No. All requests go to the Osaurus URL you configure &mdash; by default a process on your own machine. See the <strong>External services<\/strong> section above.<\/p><\/dd>\n<dt id=\"i%27m%20not%20on%20apple%20silicon.%20will%20this%20work%3F\"><h3>I'm not on Apple Silicon. Will this work?<\/h3><\/dt>\n<dd><p>Osaurus itself currently targets Apple Silicon. The connector plugin will load on any system but cannot reach Osaurus if Osaurus is not running.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20the%20osaurus%20url%3F\"><h3>How do I change the Osaurus URL?<\/h3><\/dt>\n<dd><p>Either define <code>OSAURUS_BASE_URL<\/code> in <code>wp-config.php<\/code>, or change the URL from <strong>Settings &rarr; Connectors<\/strong> in wp-admin.<\/p><\/dd>\n<dt id=\"what%20about%20image%20generation%2C%20embeddings%2C%20or%20tts%3F\"><h3>What about image generation, embeddings, or TTS?<\/h3><\/dt>\n<dd><p>Not supported. Osaurus only exposes text \/ chat completions today. For images, install an image-capable provider plugin alongside this one.<\/p><\/dd>\n<dt id=\"i%20get%20an%20%60http_request_failed%60%20error.\"><h3>I get an `http_request_failed` error.<\/h3><\/dt>\n<dd><p>Confirm Osaurus is running and reachable from the host running WordPress. If you run WordPress inside Docker, change the URL to <code>http:\/\/host.docker.internal:1337\/v1<\/code> &mdash; the default <code>127.0.0.1<\/code> only works for bare-metal WordPress.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Initial release: registers Osaurus as a WordPress AI Client provider with text generation, chat history, tool calls, structured JSON output, and streaming. Custom Connectors UI with URL input, bare-metal \/ Docker presets, live connection status, and a default-model picker.<\/li>\n<\/ul>","raw_excerpt":"Registers Osaurus, a local Apple Silicon LLM runtime, as a provider for the WordPress AI Client.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/314722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=314722"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/euthelup"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=314722"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=314722"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=314722"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=314722"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=314722"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=314722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}