Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM provider integration (OpenAI, Anthropic, Gemini, Mistral, Groq, XAI, DeepSeek, OpenRouter, Ollama, VoyageAI, ElevenLabs). Activate for any Prism-related development tasks.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add prism-php/prism --skill developing-with-prism --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Developing With Prism?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/prism-php-developing-with-prism)More formats (shields.io, HTML) on the badges page.
---
name: developing-with-prism
description: Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM provider integration (OpenAI, Anthropic, Gemini, Mistral, Groq, XAI, DeepSeek, OpenRouter, Ollama, VoyageAI, ElevenLabs). Activate for any Prism-related development tasks.
---
# Developing with Prism
Prism is a Laravel package for integrating Large Language Models (LLMs) into applications with a fluent, expressive and eloquent API.
## Basic Usage Examples
### Text Generation
```php
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withSystemPrompt('You are an expert mathematician.')
->withPrompt('Explain the Pythagorean theorem.')
->asText();
echo $response->text;
```
### Structured Output
```php
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Schema\ObjectSchema;
use Prism\Prism\Schema\StringSchema;
$schema = new ObjectSchema(
name: 'movie_review',
description: 'A structured movie review',
properties: [
new StringSchema('title', 'The movie title'),
new StringSchema('rating', 'Rating out of 5 stars'),
new StringSchema('summary', 'Brief review summary')
],
requiredFields: ['title', 'rating', 'summary']
);
$response = Prism::structured()
->using(Provider::OpenAI, 'gpt-4o')
->withSchema($schema)
->withPrompt('Review the movie Inception')
->asStructured();
$review = $response->structured;
echo $review['title'];
```
### Streaming (Server-Sent Events)
```php
Route::get('/chat', function () {
return Prism::text()
->using('anthropic', 'claude-3-7-sonnet')
->withPrompt(request('message'))
->asEventStreamResponse();
});
```
### Tools / Function Calling
```php
use Prism\Prism\Facades\Prism;
use Prism\Prism\Tool;
$weatherTool = Tool::as('get_weather')
->for('Get current weather for a location')
->withStringParameter('location', 'The city and state')
->using(fn (string $location): string =>
"Weather in {$location}: 72F, sunny"
);
$response = Prism::text()
->using('anthropic', 'claude-3-5-sonnet-latest')
->withTools([$weatherTool])
->withMaxSteps(3)
->withPrompt('What is the weather in San Francisco?')
->asText();
```
### Multi-Modal (Images/Documents)
```php
use Prism\Prism\ValueObjects\Media\Image;
use Prism\Prism\ValueObjects\Media\Document;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withPrompt(
'What objects do you see in this image?',
[Image::fromLocalPath('/path/to/image.jpg')]
)
->asText();
```
## Prism Documentation
**IMPORTANT:** Always search the docs before implementing Prism features.
### How to Search
1. **Read a specific doc file directly:**
```
read vendor/prism-php/prism/docs/core-concepts/text-generation.md
read vendor/prism-php/prism/docs/providers/openai.md
```
2. **Search for a topic across docs:**
```
grep "streaming" vendor/prism-php/prism/docs/
grep "withProviderOptions" vendor/prism-php/prism/docs/providers/
```
3. **Find all doc files:**
```
glob "vendor/prism-php/prism/docs/**/*.md"
```
### Documentation Paths
| Need | Read This File |
|------|----------------|
| Text generation | `docs/core-concepts/text-generation.md` |
| Streaming responses | `docs/core-concepts/streaming-output.md` |
| Tools / function calling | `docs/core-concepts/tools-function-calling.md` |
| Structured JSON output | `docs/core-concepts/structured-output.md` |
| Embeddings | `docs/core-concepts/embeddings.md` |
| Image generation | `docs/core-concepts/image-generation.md` |
| Audio (TTS/STT) | `docs/core-concepts/audio.md` |
| Schema definitions | `docs/core-concepts/schemas.md` |
| Testing | `docs/core-concepts/testing.md` |
| Image input | `docs/input-modalities/images.md` |
| Document input (PDF) | `docs/input-modalities/documents.md` |
| OpenAI options | `docs/providers/openai.md` |
| Anthropic options | `docs/providers/anthropic.md` |
| Other providers | `docs/providers/{provider}.md` |
| Error handling | `docs/advanced/error-handling.md` |
### Source Code Reference
For implementation details:
```
glob "src/**/*.php"
grep "class Tool" src/
```
## Key Patterns
- Use `Prism\Prism\Facades\Prism` facade or `prism()` helper
- Core methods: `Prism::text()`, `Prism::structured()`, `Prism::embeddings()`, `Prism::image()`, `Prism::audio()`
- Chain `->using(Provider::Name, 'model-id')` to specify provider/model
- Finalize with: `->asText()`, `->asStructured()`, `->asStream()`, `->asEventStreamResponse()`, `->asDataStreamResponse()`
## Provider-Specific Options
Use `->withProviderOptions([...])` to pass provider-specific features:
```php
$response = Prism::text()
->using('anthropic', 'claude-3-7-sonnet-latest')
->withPrompt('Your prompt')
->withProviderOptions(['thinking' => ['enabled' => true]]) // Anthropic-specific
->asText();
```
**Always search the provider docs first** to find available options for each provider:
- `docs/providers/openai.md` - strict mode, reasoning, image generation options
- `docs/providers/anthropic.md` - thinking mode, prompt caching, citations
- `docs/providers/gemini.md`, `docs/providers/mistral.md`, etc.
## Common Pitfalls
### Wrong Package Name
**NEVER use the old package:** `echolabsdev/prism` is deprecated.
**ALWAYS use:** `prism-php/prism`
```bash
# Correct
composer require prism-php/prism
# Wrong - do not use
composer require echolabsdev/prism
```
### Wrong Namespace
**ALWAYS use the `Prism\Prism` namespace** for all Prism classes:
```php
// Correct
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Tool;
use Prism\Prism\Schema\ObjectSchema;
// Wrong - these namespaces do not exist
use EchoLabs\Prism\Prism;
use Prism\Facades\Prism;
```
### Decision Workflow
When working with Prism, follow this pattern:
1. Determine what you need:
**Text generation?** → Use `Prism::text()`
**Structured JSON output?** → Use `Prism::structured()`
**Embeddings?** → Use `Prism::embeddings()`
**Image generation?** → Use `Prism::image()`
**Audio (TTS/STT)?** → Use `Prism::audio()`
2. Always read the relevant docs first before implementing.
## Related Packages
- **Prism Relay** - MCP tools integration for Prism. See `references/relay.md`
- **Prism Bedrock** - AWS Bedrock provider: https://github.com/prism-php/bedrock
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!