Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Models Dev Laravel Package

symfony/models-dev

Symfony integration for models.dev, giving your app structured metadata on AI models—context windows, pricing, and capabilities—via a simple, cacheable service, so you can query and compare providers without hardcoding model specs.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package name (symfony/models-dev) signals a Symfony-flavored integration for the models.dev catalog — the community-maintained dataset of LLM model metadata (provider, context window, modalities, input/output/cached token pricing). That is a data-access concern, not a framework concern, so the core value should be transportable to Laravel as long as the implementation is not bundle-coupled.
  • Deciding factor: does the package ship a Bundle + DI extension + YAML config tree (Symfony-only), or a plain PHP client with PSR-18/PSR-16 dependencies (framework-agnostic)? Laravel is built on Symfony components, but it does not load Symfony bundles; only extra.laravel.providers is auto-discovered. If the useful logic lives inside DependencyInjection/ and Resources/config/, we would be re-implementing the wiring in a Laravel service provider — acceptable, but it must be scoped as work, not assumed free.
  • Second fit question: is the catalog consumed as a bundled data snapshot (composer-shipped JSON) or via remote fetch? Snapshot = deterministic, air-gap friendly, stale by design; remote = fresh, but adds an external runtime dependency and egress requirements.

Integration feasibility

  • Low-to-moderate. Typical effort is one service provider, one config file, one facade, and a thin domain interface (ModelCatalog) so the package is swappable. Transitive dependencies are the real gate: symfony/framework-bundle, symfony/http-client, or symfony/cache contracts would force adapter work (Laravel has its own cache/HTTP layers; symfony/http-client is not a default Laravel dependency).
  • Config publishing and container binding are standard Laravel work; the risk is in the data contract, not the plumbing.

Technical risk

  • Provenance risk (high). Repository is reported as unknown, 16 stars, and a composite score of ~20/100. We cannot inspect maintainers, commit history, CI, license, or security advisories. A release dated 2026-10-29 is either clock skew, synthetic metadata, or a forward-dated tag — all of which warrant manual verification before it enters composer.json.
  • Bus factor / abandonment (high). 16 stars implies effectively no community. Assume we own this code from day one.
  • Data correctness risk (high, and the one that actually bites). Model metadata drifts weekly: prices change, context windows expand, endpoints deprecate. If we use this for cost estimation or budgeting, stale data becomes a finance-visible defect rather than a UI nit.
  • Supply chain (medium). Unverified maintainer + Composer install scripts + no visible release signing. Would require a dependency review and a pinned, hashed lockfile.

Key questions

  1. Is the runtime path bundle-dependent, or is there a framework-agnostic client we can consume directly?
  2. Does it read a vendored JSON snapshot or call a remote endpoint? What is the refresh cadence and TTL?
  3. What are the transitive require constraints, and do they conflict with our Laravel/PHP matrix?
  4. What is the license, and who is the maintainer of record?
  5. How does it represent pricing units (per-token vs per-1M-token, cached-input vs input vs output) and unknown/absent models?
  6. Does it fail open (return null/empty) or throw on an unrecognized model ID?
  7. Is the release tag 2026-10-29 real and signed, or an artifact of bad metadata?

Integration Approach

Stack fit

  • Target Laravel 10/11/12 on PHP 8.2+, PSR-4 autoloading, standard composer.json. The package must not require symfony/framework-bundle at runtime for us to adopt it; if it does, we vendor the useful classes behind our own interface rather than installing the bundle.
  • Bind it behind a first-party contract — e.g. App\Contracts\ModelCatalog with find(string $modelId): ?ModelInfo — so the vendor package is an implementation detail. This is the single highest-leverage decision in the whole integration: it makes abandonment a one-file swap.

Migration path

  • Greenfield-adjacent: most Laravel apps have model IDs and pricing hardcoded in config or scattered across services. Do not rip those out. Run the package in shadow mode alongside existing config, log divergences for 2–4 weeks, then cut over.
  • For any feature already touching billing or quota logic, migrate read-only first (dashboards, cost previews) and write-path (quota enforcement, invoicing) only after divergence rate is near zero.

Compatibility

  • Confirm PSR-18/PSR-17 rather than a concrete HTTP client; confirm PSR-16 or Laravel cache binding rather than Symfony cache contracts.
  • Check for global state (static registries, getenv reads at autoload) — these break under Octane and in queued workers.
  • Verify config keys don't collide with existing config/ai.php-style files; namespace under config/models-dev.php.

Sequencing

  1. Provenance gate — resolve the repository URL, license, maintainer identity, and the anomalous 2026 release date before anything else. No repo, no adoption.
  2. Spike (1–2 days) — composer require on a throwaway branch; inspect composer why/composer show --tree; read the DI/config surface; decide bundle vs. library.
  3. Adapter — Laravel service provider, published config, ModelCatalog interface, fixture-based tests using a checked-in snapshot.
  4. Shadow mode — parallel reads against existing hardcoded config in a non-production environment; instrument divergences.
  5. Pilot — one read-only, non-billing surface (cost estimator or admin model picker).
  6. Broaden — only after data-freshness SLAs and fallback behavior are proven.
  7. Contingency — if provenance fails, fall back to consuming the models.dev JSON dataset directly with ~50 lines of first-party code; the dataset is the asset, the package is convenience.

Operational Impact

Maintenance

  • Assume we are the maintainers. Pin an exact version, commit the lockfile, and add a composer outdated watch plus a calendar reminder to review upstream quarterly. If upstream goes quiet for two release cycles, fork into app/Support/ModelsDev and drop the dependency.
  • Data staleness is a recurring operational task, not a one-time setup: define an owner, a refresh cadence (weekly is realistic for pricing), and a diff-review step before catalog updates ship.

Support

  • With 16 stars there is no community to escalate to — no Stack Overflow corpus, no issue-response SLA, likely no security policy. Internal runbook and named owner are mandatory. Budget roughly 10–15% of one engineer's time for the first two quarters, tapering after the adapter stabilizes.

Scaling

  • The catalog is small (kilobytes to low megabytes); load once per process or cache in Redis with a long TTL. Never fetch per request.
  • The scaling hazard is not throughput, it is fan-out: if the package performs a remote call at container boot, every Octane worker and every queue worker pays it. Prefer a snapshot artifact refreshed by a scheduled job, with workers reading the cached copy.
  • Prefer stale-while-revalidate semantics: serve last-known-good data indefinitely rather than blocking on refresh.

Failure modes

  • Upstream unavailable → must degrade to cached snapshot, not throw. Verify this explicitly; do not assume.
  • Schema drift in models.dev (renamed fields, new price tiers) → silent nulls that surface as wrong cost numbers. Mitigate with a schema-version assertion and an alert on deserialization mismatches.
  • Unknown model ID → silent zero-cost is the dangerous default. Require explicit unknown handling that fails closed for billing paths and open for display paths.
  • Price changes → historical invoices computed from live data will not reconcile. Snapshot pricing per transaction; never recompute history from the catalog.
  • Air-gapped / restricted egress environments → remote-fetch designs break entirely; snapshot mode is the only viable deployment there.

Ramp-up

  • Low for a mid-level Laravel developer to wire the provider and read a model record (~half a day).
  • Moderate for the semantics that actually matter: input vs. cached-input vs. output pricing, per-token vs. per-million units, context-window vs. max-output distinctions, and which provider namespace a given model ID belongs to. Plan a short internal write-up so cost logic isn't re-derived per feature.
  • Overall verdict: technically plausible, procedurally blocked. The integration is a few days of work; the adoption decision hinges entirely on resolving the unknown repository and the anomalous release metadata. Recommend a time-boxed spike, not a commitment.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route