{"id":298023,"date":"2026-04-22T15:34:03","date_gmt":"2026-04-22T15:34:03","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-assistant-manager\/"},"modified":"2026-04-28T11:20:41","modified_gmt":"2026-04-28T11:20:41","slug":"acrossai-model-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/acrossai-model-manager\/","author":23437612,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.0.7","stable_tag":"0.0.7","tested":"7.0","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"AcrossAI Model Manager","header_author":"okpoojagupta","header_description":"A WordPress plugin to manage AcrossAI Model Manager for users, allowing them to select and save their preferred AI models for various tasks.","assets_banners_color":"0f1827","last_updated":"2026-04-28 11:20:41","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/github.com\/AcrossWP\/acrossai-model-manager","header_plugin_uri":"https:\/\/github.com\/AcrossWP\/acrossai-model-manager","header_author_uri":"http:\/\/github.com\/okpoojagupta\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":208,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.0.1":{"tag":"0.0.1","author":"okpoojagupta","date":"2026-04-22 15:30:12"},"0.0.2":{"tag":"0.0.2","author":"okpoojagupta","date":"2026-04-22 19:35:28"},"0.0.3":{"tag":"0.0.3","author":"okpoojagupta","date":"2026-04-22 23:45:44"},"0.0.5":{"tag":"0.0.5","author":"okpoojagupta","date":"2026-04-27 18:48:06"},"0.0.6":{"tag":"0.0.6","author":"okpoojagupta","date":"2026-04-28 09:19:16"},"0.0.7":{"tag":"0.0.7","author":"okpoojagupta","date":"2026-04-28 11:20:41"}},"upgrade_notice":{"0.0.5":"<p>Creates a new database table (<code>{prefix}acai_ai_logs<\/code>) on activation. Deactivate and reactivate the plugin after updating, or the upgrade will run automatically on your next admin page load.<\/p>","0.0.2":"<p>No database changes \u2014 update to reflect the correct WordPress 7.0 requirement.<\/p>","0.0.1":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3512978,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3512978,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpeg":{"filename":"banner-1544x500.jpeg","revision":3512978,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpeg":{"filename":"banner-772x250.jpeg","revision":3512978,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.0.1","0.0.2","0.0.3","0.0.5","0.0.6","0.0.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3517156,"resolution":"1","location":"assets","locale":"","width":1530,"height":1004},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3517156,"resolution":"2","location":"assets","locale":"","width":1530,"height":1004},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3517156,"resolution":"3","location":"assets","locale":"","width":3264,"height":1004}},"screenshots":{"1":"The Model Manager settings page showing dropdowns for each capability type.","2":"Settings to control the WP AI client Timeout Request","3":"Screenshots to show all the of WP AI Client"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,261257,261255,261256,226518],"plugin_category":[],"plugin_contributors":[260837],"plugin_business_model":[],"class_list":["post-298023","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-ai-logging","plugin_tags-ai-models","plugin_tags-model-manager","plugin_tags-wordpress-ai","plugin_contributors-okpoojagupta","plugin_committers-okpoojagupta"],"banners":{"banner":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/banner-772x250.jpeg?rev=3512978","banner_2x":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/banner-1544x500.jpeg?rev=3512978","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/icon-128x128.png?rev=3512978","icon_2x":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/icon-256x256.png?rev=3512978","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/screenshot-1.png?rev=3517156","caption":"The Model Manager settings page showing dropdowns for each capability type."},{"src":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/screenshot-2.png?rev=3517156","caption":"Settings to control the WP AI client Timeout Request"},{"src":"https:\/\/ps.w.org\/acrossai-model-manager\/assets\/screenshot-3.png?rev=3517156","caption":"Screenshots to show all the of WP AI Client"}],"raw_content":"<!--section=description-->\n<p>AcrossAI Model Manager gives site administrators full control over three aspects of the WordPress 7.0 AI client: which model is used per capability, how long requests are allowed to run, and a complete audit log of every AI generation call made on the site.<\/p>\n\n<p><strong>Model Preferences<\/strong><\/p>\n\n<p>By default, WordPress picks the first available model from your configured AI connectors. This plugin adds a settings page under <strong>Settings &gt; AcrossAI Model Manager<\/strong> where you can pin a specific model per capability \u2014 and that model will always be prioritised.<\/p>\n\n<ul>\n<li><strong>Text Generation<\/strong> \u2014 preferred model for all text-generation tasks<\/li>\n<li><strong>Image Generation<\/strong> \u2014 preferred model for image-generation tasks<\/li>\n<li><strong>Vision \/ Multimodal<\/strong> \u2014 preferred model for vision and multimodal tasks<\/li>\n<\/ul>\n\n<p><strong>HTTP Request Timeout<\/strong><\/p>\n\n<p>Set a site-wide timeout (in seconds) for all <code>wp_ai_client_prompt()<\/code> calls. Works directly with the WordPress 7.0 built-in AI client \u2014 no additional plugins required.<\/p>\n\n<p><strong>AI Request Logging<\/strong><\/p>\n\n<p>Every successful AI generation call is automatically logged to a dedicated database table. The <strong>Settings &gt; AI Logs<\/strong> admin page provides a sortable, paginated view of all requests with:<\/p>\n\n<ul>\n<li>Provider, model, and capability for each call<\/li>\n<li>Full prompt text and response text (expandable detail view)<\/li>\n<li>Token usage (prompt, completion, total) and request duration<\/li>\n<li><strong>Source tracking<\/strong> \u2014 which plugin, theme, mu-plugin, or WordPress core file triggered the request, including the file path and line number<\/li>\n<li>Configurable log retention (auto-delete logs older than N days via WP-Cron)<\/li>\n<\/ul>\n\n<p>Settings are stored as a single serialised option and exposed to the WordPress REST API, so the settings page saves without a full page reload using a React-powered interface.<\/p>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li>WordPress 7.0 or higher.<\/li>\n<li>The <a href=\"https:\/\/wordpress.org\/plugins\/ai\/\">AI plugin<\/a> must be installed and activated for <strong>Model Preferences<\/strong> to work. Without it, the Model Preferences dropdowns are disabled and no models will appear. The HTTP Request Timeout and AI Logging features work with WordPress 7.0 core directly.<\/li>\n<li>At least one AI connector (e.g. Llama.cpp, Hugging Face, OpenAI via the AI Connectors screen) must be configured for Model Preferences to work.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>acrossai-model-manager<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install through the WordPress Plugins screen directly.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; AcrossAI Model Manager<\/strong>.<\/li>\n<li>Choose your preferred model for each capability type from the dropdowns. Only models from configured and connected providers appear.<\/li>\n<li>Click <strong>Save Changes<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20any%20other%20plugins%20for%20this%20to%20work%3F\"><h3>Do I need any other plugins for this to work?<\/h3><\/dt>\n<dd><p>It depends on what you want to use.<\/p>\n\n<ul>\n<li><strong>Model Preferences (choosing a preferred model per capability):<\/strong> Yes \u2014 the <a href=\"https:\/\/wordpress.org\/plugins\/ai\/\">AI plugin<\/a> must be installed and activated, and at least one AI provider must be configured via the Connectors screen (<strong>Settings &gt; Connectors<\/strong>). If the AI plugin is not active, the Model Preferences dropdowns are automatically disabled on the settings page.<\/li>\n<li><strong>HTTP Request Timeout:<\/strong> No additional plugin required. The timeout setting works with the WordPress 7.0 built-in AI client directly and takes effect for all AI calls on your site.<\/li>\n<\/ul><\/dd>\n<dt id=\"does%20this%20work%20with%20the%20wordpress%207.0%20built-in%20wp%20ai%20client%3F\"><h3>Does this work with the WordPress 7.0 built-in WP AI Client?<\/h3><\/dt>\n<dd><p>Not fully yet. The WordPress AI client (introduced in WordPress 7.0) does not currently expose a filter that allows plugins to override the model being used. Model Preferences therefore requires the separate <a href=\"https:\/\/wordpress.org\/plugins\/ai\/\">AI plugin<\/a> which provides the <code>wpai_preferred_*_models<\/code> filter hooks this plugin relies on.<\/p>\n\n<p>The <strong>HTTP Request Timeout<\/strong> setting does work directly with the WP AI Client via the <code>wp_ai_client_default_request_timeout<\/code> filter.<\/p>\n\n<p>Full WP AI Client support for Model Preferences is planned for a future release once WordPress core adds the necessary hooks.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20my%20preferred%20provider%20loses%20its%20api%20key%20or%20connection%3F\"><h3>What happens if my preferred provider loses its API key or connection?<\/h3><\/dt>\n<dd><p>The plugin checks whether the provider is currently connected before applying the preference. If the provider is disconnected, WordPress falls back to its default model selection \u2014 your preference is preserved in the database and will take effect again once the provider is reconnected.<\/p><\/dd>\n<dt id=\"where%20is%20the%20preference%20stored%3F\"><h3>Where is the preference stored?<\/h3><\/dt>\n<dd><p>Preferences are stored in the WordPress options table under the key <code>acai_model_manager_preferences<\/code> as a JSON object with one entry per capability type (e.g. <code>{\"text_generation\":\"openai::gpt-4o\"}<\/code>).<\/p><\/dd>\n<dt id=\"can%20i%20set%20different%20models%20for%20different%20capability%20types%3F\"><h3>Can I set different models for different capability types?<\/h3><\/dt>\n<dd><p>Yes. Text generation, image generation, and vision can each have their own preferred model independently.<\/p><\/dd>\n<dt id=\"will%20this%20work%20with%20custom%20or%20third-party%20ai%20providers%3F\"><h3>Will this work with custom or third-party AI providers?<\/h3><\/dt>\n<dd><p>Any provider registered with the <a href=\"https:\/\/wordpress.org\/plugins\/ai\/\">AI plugin<\/a> that exposes its models through the standard metadata API will appear automatically in the dropdowns \u2014 no additional configuration is needed in this plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.0.7<\/h4>\n\n<ul>\n<li>Fix admin hook name from <code>settings_page_<\/code> to <code>toplevel_page_<\/code> \u2014 resolves missing styles\/scripts on the Model Manager settings page (top-level Options menu pages use <code>toplevel_page_<\/code> as the hook prefix, not <code>settings_page_<\/code>).<\/li>\n<\/ul>\n\n<h4>0.0.6<\/h4>\n\n<ul>\n<li>Log failed AI requests (invalid key, network error, timeout) \u2014 uses PHP shutdown function to drain any stack entries not popped by <code>wp_ai_client_after_generate_result<\/code>; failed rows stored with <code>finish_reason = 'error'<\/code> and full elapsed duration.<\/li>\n<li>Capture error messages for failed requests via <code>http_api_debug<\/code> \u2014 supports OpenAI, Hugging Face, and generic JSON error bodies; error detail shown in log list (tooltip on red badge) and detail view.<\/li>\n<li>Replace <code>WPAI_PLUGIN_FILE<\/code> check with <code>has_ai_credentials()<\/code> \u2014 Model Preferences now enables for any configured provider (llama.cpp, OpenAI, etc.), not just when the AI plugin is loaded.<\/li>\n<li>Simplify JS Model Preferences gate \u2014 removed <code>aiPluginActive<\/code> flag; section enable\/disable is now driven solely by <code>hasAnyProvider<\/code> (presence of models in the PHP payload).<\/li>\n<\/ul>\n\n<h4>0.0.5<\/h4>\n\n<ul>\n<li>Added AI request logging system \u2014 every successful AI generation call is now logged to a custom database table (<code>{prefix}acai_ai_logs<\/code>).<\/li>\n<li>Logs capture: provider, model, capability, prompt text, response text, token usage (prompt\/completion\/total\/thought), duration (ms), finish reason, and the WordPress user who triggered the request.<\/li>\n<li>Added <strong>source\/caller tracking<\/strong> \u2014 each log entry records where the AI request originated: plugin slug, theme slug, mu-plugin filename, or WordPress core, along with the relative file path and line number.<\/li>\n<li>Added <strong>Settings &gt; AI Logs<\/strong> admin page with a sortable, paginated log table (date, capability, provider, model, source, tokens, duration). Includes bulk delete and a detail view showing full prompt and response text.<\/li>\n<li>Added <strong>Log Retention<\/strong> setting (days) to the Request Settings card \u2014 logs older than the configured number of days are automatically deleted daily via WP-Cron. Default: 30 days.<\/li>\n<li>Log table is created on plugin activation via <code>dbDelta()<\/code> and dropped cleanly on plugin uninstall.<\/li>\n<li>Reduced AGENTS.md size by 40% \u2014 split into focused reference docs under <code>docs\/<\/code> (hooks, classes, JS frontend, decisions).<\/li>\n<\/ul>\n\n<h4>0.0.4<\/h4>\n\n<ul>\n<li>Add Feature to track WP AI Client<\/li>\n<li>Add Screenshots<\/li>\n<li>Add Video<\/li>\n<\/ul>\n\n<h4>0.0.3<\/h4>\n\n<ul>\n<li>Added compatibility badges to settings card headers indicating which AI integration each section supports (WP AI Client, AI Plugin, coming soon).<\/li>\n<li>Model Preferences section is now disabled when the AI plugin is inactive \u2014 shows a warning notice with a direct link to the Connectors screen.<\/li>\n<li>Model Preferences section is also disabled when the AI plugin is active but no AI providers are configured \u2014 shows a distinct notice prompting the user to configure a provider via the Connectors screen.<\/li>\n<li>Added FAQ entry clarifying WP AI Client support status: HTTP Request Timeout works with WP AI Client today; Model Preferences requires the AI plugin and will gain WP AI Client support in a future release.<\/li>\n<li>Updated requirements section to clarify that the AI plugin is needed only for Model Preferences; the HTTP Request Timeout works with WordPress 7.0 core directly.<\/li>\n<\/ul>\n\n<h4>0.0.2<\/h4>\n\n<ul>\n<li>Updated requirements: now explicitly requires WordPress 7.0+ (built-in AI client) instead of the separate WordPress AI plugin.<\/li>\n<li>Clarified that at least one AI connector must be configured for models to appear.<\/li>\n<\/ul>\n\n<h4>0.0.1<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Settings page with React UI under Settings &gt; AcrossAI Model Manager.<\/li>\n<li>Per-capability model preference for text generation, image generation, and vision.<\/li>\n<li>Integrates with the WordPress AI plugin preference filter hooks.<\/li>\n<li>REST API support for seamless save without page reload.<\/li>\n<\/ul>","raw_excerpt":"Pin your preferred AI model per capability, control the HTTP request timeout, and log every AI generation call \u2014 all from one settings page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298023","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=298023"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/okpoojagupta"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298023"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298023"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298023"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298023"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298023"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}