assistant-engine/open-functions-core
Open Functions Core provides foundational PHP/Laravel abstractions for defining, registering, and executing Open Functions. It includes schemas, registries, and tool-calling primitives so applications can expose callable tools to AI assistants and agent workflows consistently across PHP frameworks.
Architecture fit. assistant-engine/open-functions-core is a framework-agnostic PHP library positioned as the domain layer for LLM function/tool calling: it defines function schemas, standardizes message handling, and formats responses back to the model. Architecturally it is a sensible seam between our application services and the provider API — it fills the "tool calling" gap without owning transport. The "core" naming implies it is one half of a pair and expects adapter packages (e.g., provider-specific drivers) to be functional; we should evaluate it as a family, not a single dependency. Risk of overlap with existing provider SDKs (OpenAI PHP SDK, etc.) is real — we must decide whether this replaces or wraps them, not run both.
Integration feasibility. Composer-installable, PSR-4 namespaced, low ceremony for a Laravel codebase that is already PHP 8.1+. The honest effort is not composer require — it is installing the right adapter, wiring a driver, and writing a thin anti-corruption layer so package types do not leak into domain code. Feasible in a 1–2 day spike.
Technical risk — high. Zero stars, zero score, zero dependents is the headline: no evidence of production use, no ecosystem validation, no community-reported failure modes. LLM tool-calling is a fast-moving target (schema drift, streaming partial tool calls, parallel calls), and a small/unknown maintainer surface is an abandonment risk. Pre-1.0 packages commonly ship BC breaks. The library also encodes the author's own "Open Functions" convention, which providers' native function calling can supersede.
Key questions.
Stack fit. PHP/Laravel is a match. If the library is truly framework-agnostic, wrap it in our own FunctionRegistry/LlmClient interfaces and bind them through the Laravel service container; register function definitions in a config file or service provider and keep controllers thin. If it ships a Laravel service provider, prefer that but keep our interface boundary intact.
Migration path. Greenfield adoption, not a replacement — pilot it on one internal, non-customer-facing feature (e.g., an internal assistant or summarizer). Abstract behind ports from day one so swapping to native SDK calls or another package is a config change, not a rewrite.
Compatibility. Verify PHP constraint, Guzzle/PSR/logging dependency versions against our current lockfile, and Laravel version support. Confirm the adapter versions match the LLM provider APIs we actually call. Watch for conflicts if we already have a provider SDK installed.
Sequencing.
composer require in a sandbox branch; inspect the full dependency tree and license.Maintenance. Assume we may need to fork or vendor it. Pin versions, track upstream releases, and assign a named owner. Pre-1.0 means BC breaks should be expected; budget periodic patch upkeep and a contingency to swap.
Support. Likely community-only (GitHub issues/Discord), no commercial SLA. We need an internal runbook, documented conventions, and an escalation owner before production use.
Scaling. Response/message formatting is stateless and cheap; cost and latency are dominated by the LLM, not this library. The scaling risk is conversation state — if the package accumulates message history, enforce truncation/summarization at our layer or token costs will grow unbounded.
Failure modes. Malformed or ungrounded tool-call JSON from the model; unknown function names; provider schema drift breaking the adapter; partial-stream parse errors; silent fallback to plain text. Mitigate with strict schema validation, an allow-list of callable functions, timeouts/retries, and structured logging of every function invocation.
Ramp-up. Moderate. Engineers must learn both the package's conventions and the underlying function-calling model; docs are unproven. Budget a discovery day, publish internal examples, and maintain a shared catalogue of function definitions so adoption is consistent.
How can I help you explore Laravel packages today?