papi-ai/laravel
Laravel integration for Papi AI that connects your application to AI services with minimal setup. Includes a service provider, configuration options, and a clean, expressive API for sending prompts and handling AI responses from anywhere in your Laravel app.
What we would actually be buying. papi-ai/laravel is a thin Laravel bridge — publishable config, a service-container binding, an HTTP client wrapper, and centralized error handling — over the papi-core PHP SDK. For a TPM the decisive fact is that no meaningful capability lives in this repository. The AI endpoint logic, the compatibility work, and the version-drift risk all sit in papi-core. The correct framing for any review is therefore "are we adopting papi-core, and is this wrapper worth the extra surface?" The wrapper's honest value is developer ergonomics: config-in-config/, credentials in .env, app() resolution, and Laravel-idiomatic HTTP/error semantics. That is real but small, and it is replaceable in a day by a hand-rolled service class if the ecosystem stalls.
Architecture fit. Good if we are already a Laravel shop using papi-core (or an approved decision to adopt it). Poor if we would be introducing the ecosystem solely to reach this convenience layer — that inverts the cost/benefit entirely. There is no architectural conflict with a standard Laravel app; there is also no stated Laravel or PHP support matrix, which is the first thing to extract from composer.json before any planning. The v0.15.1 release is a constraint-only change: it raises the floor to papi-core >= 0.15.3, which is where the PHP 8.5 fixes live. So this package's only demonstrated function in the available evidence is to act as a PHP 8.5 migration unblocker — not to deliver product capability.
Integration feasibility. Mechanically easy: one Composer line, contingent on root composer.json permitting papi-core >= 0.15.3. There is no baseline, no prior assessment, and no usage in our tree (0 dependents), so this is a greenfield evaluation rather than an upgrade. Feasibility risk is not in the install; it is in transitive resolution and in the absence of documentation for the 0.1.0 → 0.15.0 feature surface.
Technical risk. Moderate and largely unquantified rather than known-bad. Four points:
0.15.1 vs 0.15.3). At 0.x, minor bumps may break. Any dependency-bot rule that floats either package will generate churn; both must be pinned deliberately and co-upgraded.Key questions to close before a decision. What does papi-core actually provide, and what AI endpoints does it reach — hosted PapiAI service, or configurable third-party providers? Do we already depend on papi-core, at what version? Are we on PHP 8.5, or is that 2027 work — because if we are on 8.2/8.3 this release is near a no-op and the urgency collapses? Is there a maintainer commitment or roadmap to 1.0, or is this a personal/stopgap project? What is the supported Laravel and PHP matrix? And critically: who is the vendor behind PapiAI, what is the commercial relationship, and what happens to the API if the upstream service changes terms or pricing?
Stack fit. Standard Laravel + Composer. The wrapper assumes Laravel conventions (publishable config, container binding, Http facade usage) and imposes no visible framework constraint. Nothing in the material contradicts a fit with a modern Laravel app; nothing confirms one either. Resolve the support matrix first — it is a five-minute read of composer.json that eliminates most planning uncertainty.
Build vs. buy, stated plainly. The wrapper is roughly a service provider, a config file, and a thin client. If the team is already on papi-core, take the wrapper — it is cheaper than writing and maintaining the same glue. If the team is not on papi-core, the decision to make is about the core SDK; the wrapper should be evaluated only as an optional add-on, and a "no" on the core should end the conversation rather than being routed around by adopting this package.
Migration path. No prior state, so this is a scoped spike, not a migration. Sequence: (1) read composer.json for the PHP/Laravel matrix and exact papi-core constraint; (2) stand up the package in a throwaway Laravel app or a scratch branch; (3) install and diff composer.lock to see everything the papi-core >= 0.15.3 floor drags forward; (4) exercise one real call end-to-end and confirm error handling behaves predictably; (5) only then propose sequencing into the main application.
Compatibility and PHP 8.5 sequencing. The PHP 8.5 fixes are the headline compatibility signal, but they are delivered by papi-core, and they matter only if PHP 8.5 is on the roadmap. If it is, this package is a prerequisite to the runtime upgrade and must land first, soak, and pass the suite before the runtime moves. If it is not, there is no compatibility driver and the package has to justify itself on developer ergonomics alone — a much weaker case.
Sequencing rules for delivery. Keep the papi-core bump as its own change with its own test pass; do not bundle it with unrelated work, because when something breaks we want one candidate cause. Update this package in a second, immediately following commit. Pin both versions explicitly in composer.json, commit the lockfile, and configure dependency automation to group the two packages into a single PR with a human review gate — never auto-merge either.
Exit strategy / abstraction boundary. Because the ecosystem evidence is thin, adopt behind an internal interface (a small AiClient contract or an application-level gateway) rather than calling the package's surface directly from controllers and jobs. That boundary costs hours now and converts a future "rip out the vendor" decision into a contained swap instead of an application-wide refactor. Given pre-1.0 status and zero dependents, this is the single highest-leverage engineering constraint to impose, and it is a TPM-level requirement, not a stylistic preference.
Maintenance. Two packages to track instead of one, at 0.x cadence, with independent version numbers. Every release note must be read; every bump should be assumed potentially breaking. Budget this as a recurring line item in the platform team's dependency-upkeep work, not a one-time install cost. The cross-package skew is the specific operational trap — a naive "update patch versions" policy will produce incompatible pairs.
Support and vendor risk. Unverified, and this is the largest unknown. There is no stated support policy, no LTS commitment, no responsiveness data, and effectively no community (one star, zero dependents). For a production dependency this must be resolved before commitment: review the issue history and response times, confirm there is a named maintainer or team, and establish what commercial relationship exists with the PapiAI API — including pricing, rate limits, deprecation notice periods, and data-handling terms for whatever content we send. If we are shipping customer data or prompts through this, a data-processing review is mandatory and is not satisfied by anything in the available documentation.
Scaling. No performance or capacity claims are made, and nothing rules out a concern. Two things to verify empirically in the spike: whether the client supports pooling/retry/backoff and timeouts in a Laravel-idiomatic way, and how it behaves under concurrency in queue workers. Note that any real scaling question is dominated by the upstream AI service (latency, quotas, cost per call), not by this wrapper — so the wrapper is unlikely to be the bottleneck, but it can be the place where timeouts and retries are or are not configured.
Failure modes, ranked by likelihood and cost.
papi-core >= 0.15.3 cannot coexist with pinned packages elsewhere. Surfaces at install; cheap to detect, potentially expensive to unwind. Highest probability.composer.lock and review every changed entry, not just the two named packages.Ramp-up. Low. A competent Laravel engineer installs and exercises this in well under a day; add a day if papi-core is new to the codebase and needs to be understood rather than just installed. The real cost is diligence, not difficulty: reading composer.json, diffing the lockfile, reviewing the upstream terms, and building the abstraction boundary. Call it two to three engineer-days for a verified spike including the interface wrapper.
Recommendation to the TPM. Do not treat this as an adoption decision yet. Run a timeboxed spike (two to three days) with three exit gates: the PHP/Laravel matrix and papi-core constraint are documented; a real call succeeds end-to-end behind our own interface; and the vendor/support posture is answered well enough to name an owner. If the trigger is the PHP 8.5 migration, this becomes a scheduled prerequisite and should be sequenced ahead of the runtime change with its own soak period. If the trigger is net-new AI capability, the decision belongs to papi-core and its commercial terms — this wrapper is a convenience, and a package with one star, zero dependents, and no changelog should not be the reason we enter an ecosystem.
How can I help you explore Laravel packages today?