- How do I install filament-ai-actions in a Laravel app?
- Install it with Composer using composer require muazzambuilds/filament-ai-actions, register the plugin in your Filament panel provider, and publish the config file. You also need an OpenAI API key available to the application, ideally through your secret manager rather than a committed env file. A Laravel team can realistically reach a first working action on a staging resource in about half a day.
- Which Filament and Laravel versions does this package support?
- This release targets Filament v5 and ships table, form and page actions. The published material does not include a full support matrix for Laravel and PHP versions, so check the constraints in the repository composer.json before upgrading. Because the value sits almost entirely in Filament action wiring, plan for a fork-and-maintain fallback if a future Filament major version strands the package.
- Where do I configure the OpenAI API key?
- Publish the package config, then supply your OpenAI key through your normal secret management and environment variables rather than hardcoding it. Configuration is largely per action, so model, prompt and limits are set where each action is registered. Treat every action as an outbound call to a third-party API when you review what the key can access.
- Can I change the model, temperature or max tokens per action?
- Yes. Each action exposes model, systemPrompt, temperature and maxTokens, which is enough to keep deterministic work such as Classify at low temperature while leaving creative Rewrite prompts looser. One caveat: maxTokens caps generated output only, not the input record content, so long text fields can still cost more and take longer than expected.
- How do I stop AI results from being written straight into the record?
- Call saveResult(false) on the action to prevent an immediate write, then use applyResultUsing to control what happens with the returned result. This changes the action from fire-and-write to propose-then-apply, which is what you want wherever a record has downstream consumers or an editorial approval step. Confirm whether your apply callback receives the raw model output or only the parsed result, and whether it runs inside a transaction.
- Can I limit which languages the Translate action offers?
- The Translate action provides an ISO 639-1 dropdown of 183 languages and defaults to all of them, so pass an explicit list through the languages method. Restricting it to the locales your product actually supports avoids the classic mistake of shipping 183 languages to a product that handles four. Coverage is not fluency, though, so glossary and tone enforcement still depend on your systemPrompt overrides per locale.
- Do these actions run asynchronously or can I queue them?
- By default the actions are synchronous Livewire interactions, so a long record or a provider latency spike shows up as a user-facing hang. Queue, batch, timeout and retry behaviour are not documented in the current release, so confirm them with the maintainer before building bulk workflows. For anything beyond single-record use, treat async support as a prerequisite rather than a nice-to-have.
- What happens when Classify returns an invalid label?
- Classify parses structured output and rejects labels outside the allowed set, which is the correct hardening for classification work. What is not clear from the documentation is how that rejection surfaces to the operator: a toast, a silent no-op, or a thrown exception. Test this path on staging before exposing the action to non-technical users, and check that failures are logged somewhere observable.
- Can I use these actions on forms as well as table rows?
- Actions can be attached to resources, tables, forms and pages, so the same Summarize or Rewrite action can serve both an edit form and a table row. Be careful with row actions on large tables, since a 50-row bulk trigger is 50 API calls with no input-side token cap. Start with a single-record action on a staging resource before enabling anything table-wide.
- Is my data sent to a third party, and what about PII?
- Every action sends the relevant record content to the hosted OpenAI API, so fields containing customer PII, unpublished pricing or contract text become a legal review item, not just a technical one. The current release does not document a self-hosted or provider-agnostic path, request redaction, or retention controls. Until the maintainer states otherwise, assume content leaves your infrastructure and only expose fields you would be comfortable pasting into a third-party chat.