All Activity
- Past hour
-
@AndZyk OpenRouter is already supported. Here's how you'd configure it in the AgentTools module configuration (as an example): google/gemini-2.0-flash | sk-or-YOUR_KEY | https://openrouter.ai/api/v1 | Gemini via OpenRouter anthropic/claude-sonnet-4-6 | sk-or-YOUR_KEY | https://openrouter.ai/api/v1 | Claude via OpenRouter @HMCB Thanks! 🙂
-
@ryan this is beyond amazing. It’s hard to put into words. Thank you!
- Today
-
@poljpocket @maximus Thank you both for the detailed information. It’s exactly what I was looking for. It makes perfect sense that with PW there’s no need for regular updates. That can be a real advantage for the client, since it allows more time to be spent on improvements and smaller refinements instead. I’ll incorporate similar plans as well.
-
szabesz started following Rapid — EditorJS block editor fieldtype for ProcessWire
-
Rapid — EditorJS block editor fieldtype for ProcessWire
szabesz replied to maximus's topic in Modules/Plugins
Thanks guys for sharing and discussing. A module like this would definitely be most useful with multi-language support. -
Very interesting module, thank you @ryan. 🙂 Would it be possible to support API keys from OpenRouter? We use OpenRouter to switch between many models. Regards, Andreas
-
Peter Knight started following Welcome to the MediaHub sub-forum. Start here...
-
Welcome to the dedicated MediaHub community support and discussion forum. Big thanks to @ryan for setting this up. Really appreciate it! 🙏 This will be the main home for MediaHub support, discussion, feature requests, and general chat. If you have a question, spotted a bug, or simply want to share how you're using it, please post here. I hope that it'll help build up a searchable knowledge base for everyone. Other ways to get support: Private email (for anything sensitive or account-specific) GitHub issues (coming soon - dedicated repo for confirmed bugs and feature requests you'd like tracked) Looking forward to the conversations ahead. And thanks to everyone who's been testing and giving feedback so far.
-
- 4
-
-
prestoav started following ProcessDatabaseBackup - Error on Restore
-
PW 3.0.255 ProcessDatabaseBackups 0.0.6 PHP 8.3.30 On restore I am seeing this error: Passing null to parameter #1 ($num) of type float is deprecated in ***/site/modules/ProcessDatabaseBackups/ProcessDatabaseBackups.module on line 243 The line in question seems to be this one: $this->tdSort($file['numInserts'], number_format($file['numInserts'])), Within: foreach($backupFiles as $id => $file) { $numFiles++; $numTables = $file['numTables']; if($numTables && !count($file['tables'])) $numTables .= " " . $this->_('(all)'); $basename = $file['basename']; $time = $file['time'] ? $file['time'] : $file['mtime']; if($file['description']) $basename .= '*'; $actions = array(); foreach($this->getFileActions($file) as $action) { $actions[] = $this->aTooltip($action['href'], wireIconMarkup($action['icon'], 'fw'), $action['label']); } $checkbox->attr('id', "delete_" . $sanitizer->fieldName($id)); $checkbox->attr('value', $id); $table->row(array( $this->nowrap($basename) => "./info/?id=$id", $this->tdSort(strtotime($time), wireRelativeTimeStr($time, true)), $this->nowrap($numTables), $this->tdSort($file['numInserts'], number_format($file['numInserts'])), $this->tdSort($file['size'], wireBytesStr($file['size'])), $this->nowrap(implode(' ', $actions)), $checkbox->render(), )); } If anyone has an ideas for a fix please do let me know as I use this module a lot!
-
I have it in a Controller file in renderSomething() method called from render(). Function or throw - doesn't matter. I moved this code to init() and even to wireframe.php. The issue is the same. The server returns a 404 code but doesn't redirect and shows an error page. I have tried this on two other sites with Wireframe. And the behaviour is different there. If i put the code in wireframe.php there, it gives me a 500 error. But in controller it works ok and shows the 404 page. Those 2 sites are not multilingual and not so heavily modified... Can you suggest a way I can debug further? I have found the issue. The template of 404 page was changed to a template that caused an infinite loop. Sorry for bothering you @teppo. But natural intellect also needs prompts and you helped me with a one)
- Yesterday
-
[SOLVED] Wire404Exception() in controller does not redirect to 404 page
teppo replied to Ivan Gretsky's topic in Wireframe
Hey @Ivan Gretsky, that does sound like a potential bug, but I haven’t ran into it before and I know that I throw 404 exceptions from controllers time to time. I’ll try to do some testing too, but could you describe the context a bit; in what method / in what circumstances does this happen? Does it make any difference if you use wire404() instead of directly throwing 404? -
gunter started following PW Install problem - what is DB Socket?
-
I haven't used ProcessWire for a few years and wanted to reinstall it now... But the installation page is asking for a DB socket... I've never had to enter something like that before, there's no explanation of what it is, and ChatGPT doesn't know what I should type either... I'm using MySQL on Windows Laragon
-
It's nice to see that there are more alternatives now. Maxon released Autograph for free too recently. Not sure how they are going to monetise though. https://www.maxon.net/en/autograph
-
@ai_slop It is now free for individuals: https://cavalry.studio/en/
-
Late to the thread, but wanted to add a real-world data point. I run a spirits/wine catalog (~12,000 products) and a chocolate e-commerce store on ProcessWire. Both are in production and both have maintenance contracts attached. What I've found: the "update treadmill" problem simply doesn't exist with PW. Core updates are rare and painless. Module updates — same. That frees up retainer hours for things clients actually care about: new filters, catalog improvements, performance work. My maintenance plans now look like this: Backups + uptime monitoring (minimal time, easy to automate) A fixed block of hours for small improvements, content ops, or feature requests Reduced hourly rate for anything beyond that block The key insight for recurring revenue: clients with active e-commerce always have a backlog of small improvements. The retainer becomes a comfortable way for them to drain that backlog without opening a new project each time. For simpler marketing sites, the retainer is lighter but still justified by the "someone is watching this" peace of mind. SEO and analytics reporting also fit naturally into retainers — especially if you're running something like Plausible and can send a monthly digest.
-
The structure you want is actually slightly different from what Option #1 describes, but it's achievable. Option #1 assumes all sites share the same web root — the multi-site switching happens via index.config.php in that single root. Your setup (separate vhost docroots) requires a different approach. The cleanest way to do this with separate docroots: In each domain's docroot (/domaintwo/, /domainthree/, etc.) you only need: A symlink (or include-based) index.php that bootstraps from domainone's /wire A site/ directory with its own config.php, templates, modules The trick is the index.php in each secondary domain. Replace it with something like: <?php // /domaintwo/index.php $rootPath = '/var/www/html/domainone'; chdir($rootPath); require($rootPath . '/index.php'); And in each domain's site/config.php make sure $config->paths->root isn't hardcoded — ProcessWire resolves this dynamically, so it usually just works. You also need to copy (not symlink) .htaccess from domainone to each secondary docroot, since Apache serves it per-vhost. No index.config.php needed since routing is handled by vhosts at the server level — each domain already hits its own docroot. So the final structure: /domainone/wire/ ← shared core /domainone/site/ ← site 1 /domainone/index.php ← original /domainone/.htaccess /domaintwo/site/ ← site 2 (own db, templates, modules) /domaintwo/index.php ← bootstraps from domainone /domaintwo/.htaccess ← copy from domainone Each site/config.php points to its own database. Works cleanly without symlinks to /wire (which can cause issues with __DIR__ resolution in some PW internals).
-
Ahh ok. So 150 million of it is cached and therefore not charged. Makes more sense.
- Last week
-
Had to pull the raw data for each session to answer this, but overall about $30 based on their (Z.AI) API pricing and the current free cache hits. I paid around $120 for one year of their Pro plan in a Black Friday deal. That's even sweeter.
-
What was the cost for that many tokens?
-
AgeWire — Age Verification Module for ProcessWire
maximus replied to maximus's topic in Modules/Plugins
AgeWire has been updated — here's what's new since the original release. Multi-framework support The module now supports four CSS frameworks. You pick whichever one your project already uses: Vanilla CSS — fully self-contained, no dependencies, no CDN required Tailwind CSS — the original experience, 13 themes and 4 animations (unchanged) Bootstrap 5 — renders using native Bootstrap card, btn, form-control and alert classes UIkit 3 — renders using native UIkit card, button and grid components Each framework has an independent CDN toggle. If you already load Bootstrap or UIkit in your templates, just uncheck it and the module won't load anything extra. Security fixes CSRF token is now validated on every verification POST Fixed a bug where ProcessWire would render the full page HTML after the JSON response, causing JSON.parse errors in the browser. The AJAX handler now calls ob_clean() before sending JSON to discard any buffered output Strict date parsing with DateTime::createFromFormat — relative strings like "tomorrow" or "-18 years" are rejected Redirect URL validated to http://, https://, or site-relative paths only Custom CSS field sanitized against </style> injection JS console.log output is now gated behind $config->debug — no noise in production Admin UI The config page is now a two-column layout. General Settings and Framework & Theme are open side by side on first load. The rest (Modal Content, Date Picker, Agreement, Exclusions) are collapsed into logical groups — much less scrolling. PHP 8.2+ The module now requires PHP 8.2 and uses typed return types, match expressions, str_contains, str_starts_with, and unnamed catches throughout. GitHub: https://github.com/mxmsmnv/AgeWire Feedback and PRs welcome as always!- 1 reply
-
- 2
-
-
Btw, in addition to the memory/conversation history feature coming in the next version, we're also adding a sub-agent feature, so that your selected agent can launch other sub-agent instances of itself or other agents you've defined. Like maybe you've got different agents that specialize in one thing or another, or cost less for specific tasks, it can launch the best agent for the job. In this case, you've got a main agent that's in charge, but it can delegate tasks to other agents. Example would be using Claude Opus 4.7 for main agent but it delegates to Haiku or Groq or another for tasks that don't need as much horsepower, though that may be just scratching the surface on what's possible.
-
-
Awesome, thanks a lot!
-
Okay multi-model support is now ready and in the current posted version (v5) of AgentTools: Multi-model support — configure additional AI providers/models beyond the primary; each uses its own API key and endpoint Additional models textarea in module config accepts one model per line in pipe-separated format: model | api-key, model | api-key | endpoint, or model | api-key | endpoint | label; provider is auto-detected from the key prefix (sk-ant-* = Anthropic, all others = OpenAI-compatible); whitespace around pipes is optional; lines beginning with # are ignored Control room collapsible fieldset in the Engineer form with model selector and context options; auto-expands when non-default settings are saved Context selector radio in Control room: All (site maps + API docs), Custom (choose individual items), or None (no extra context, useful for general questions or token-limited providers) There's still about 2-3 hours left on the memory feature, which I don't have today, so that'll be in a day or two. If anyone wants a free AI tool (api key) to use with AgentTools, Groq ("groq" not "grok") seems to do fairly well with ProcessWire: https://console.groq.com/home -- note however that on the "Engineer" screen in AgentTools, you'll want to select "Extra content to include: None" because the free Groq doesn't not accept a lot of data in the submitted prompts. But it can still query your ProcessWire installation for all of that info, so it works just fine.
-
@wbmnfktr Okay we've got support for multiple models now. I'm just working out some details, but should have the AgentTools version updated today with that feature.
-
Rapid — EditorJS block editor fieldtype for ProcessWire
maximus replied to maximus's topic in Modules/Plugins
It looks amazing! So much work has been done and so much more is still to come... And then I'll want to make custom blocks and so on. Keep going, it's so exciting!