Skip to main content

Start Here

Most PHP developers need just one package:
This gives you everything: structured output extraction, validation, retries, and support for all major LLM providers. You’re ready to go.

When You Need More Control

Instructor is built on a modular architecture. If you need to work at a lower level or integrate with specific frameworks, these packages are available separately.

The Stack

Instructor Stack

Package Details

Instructor

The main package. Start here. Structured data extraction powered by LLMs. Define a PHP class with typed properties, pass it to Instructor with some text, get a validated object back.
Why use it:
  • Type-safe outputs (your IDE understands the response)
  • Automatic validation with Symfony Validator
  • Self-correcting retries (LLM gets feedback on errors)
  • Works with any provider through Polyglot
→ Instructor Documentation

Polyglot

Use this when you need direct LLM access without structured extraction. A unified interface for LLM providers. Write code once, run it against any provider. Useful when you’re building chat interfaces, agents, or need raw completions.
Why use it:
  • Same code works with 20+ providers
  • No vendor lock-in
  • Streaming, embeddings, tool calling
  • Test with cheap/fast models, deploy with powerful ones
→ Polyglot Documentation

HTTP Client

Use this when you need low-level HTTP control. The HTTP layer that powers Polyglot. Most developers never touch this directly, but it’s available if you need custom HTTP handling, middleware, or want to build your own LLM integrations.
Why use it:
  • Streaming-first design
  • Middleware pipeline
  • Multiple backends
  • Single-request transport only
→ HTTP Client Documentation

HTTP Pool

Use this when you need concurrent request execution. http-pool handles fan-out workloads. It uses the same request and response objects as http-client, but the execution model is separate and focused on batching.
Why use it:
  • Concurrent request execution
  • Typed request and response collections
  • Separate from single-request transport
→ HTTP Pool Documentation

Laravel Integration

Use this if you’re building with Laravel. Adds Laravel-specific conveniences: service provider, facades, config publishing, and testing fakes.
Why use it:
  • Auto-discovery (just install and use)
  • Laravel-style configuration
  • Testing fakes for unit tests
  • Integrates with Laravel’s logging
→ Laravel Documentation

Symfony Integration

Use this if you’re building with Symfony. Adds a first-party bundle surface for config translation, framework-owned event delivery, telemetry, logging, Messenger handoff, and package-aligned testing seams.
Why use it:
  • one instructor config root instead of scattered Symfony glue
  • package-owned event, delivery, telemetry, and logging wiring
  • AgentCtrl and native-agent seams that work in HTTP, Messenger, and CLI contexts
  • documented testing and migration path
→ Symfony Documentation

Internal Packages

These packages are used internally by Instructor and Polyglot. They’re not meant for direct use, but they’re available if you’re extending the library or curious about the architecture.

Quick Decision Guide


Installation