Polyscope - The agent-first dev environment for Laravel

Bedrock

Bedrock stats

Downloads
3.7K
Stars
12
Open Issues
3
Forks
3

View on GitHub →

A provider for Prism adding support for AWS Bedrock.

Total Downloads Latest Stable Version License

Prism Bedrock

Unlock the power of AWS Bedrock services in your Laravel applications with Prism Bedrock. This package provides a standalone Bedrock provider for the Prism PHP framework.

Installation

composer require prism-php/bedrock

Configuration

Add the following to your Prism configuration (config/prism.php):

'bedrock' => [ // Key should match Bedrock::KEY
'region' => env('AWS_REGION', 'us-east-1'),
 
// Set to true to ignore other auth configuration and use the AWS SDK default credential chain
// read more at https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_default_chain.html
'use_default_credential_provider' => env('AWS_USE_DEFAULT_CREDENTIAL_PROVIDER', false),
 
'api_key' => env('AWS_ACCESS_KEY_ID'), // Ignored with `use_default_credential_provider` === true
'api_secret' => env('AWS_SECRET_ACCESS_KEY'), // Ignored with `use_default_credential_provider` === true
'session_token' => env('AWS_SESSION_TOKEN'), // Only required for temporary credentials. Ignored with `use_default_credential_provider` === true
],

Usage

Text Generation

use Prism\Prism\Prism;
use Prism\Bedrock\Bedrock;
 
$response = Prism::text()
->using(Bedrock::KEY, 'anthropic.claude-3-sonnet-20240229-v1:0')
->withPrompt('Explain quantum computing in simple terms')
->asText();
 
echo $response->text;

Structured Output (JSON)

use Prism\Prism\Prism;
use Prism\Bedrock\Bedrock;
use Prism\Prism\Schema\ObjectSchema;
use Prism\Prism\Schema\StringSchema;
use Prism\Prism\Schema\ArraySchema;
 
$schema = new ObjectSchema(
name: 'languages',
description: 'Top programming languages',
properties: [
new ArraySchema(
'languages',
'List of programming languages',
items: new ObjectSchema(
name: 'language',
description: 'Programming language details',
properties: [
new StringSchema('name', 'The language name'),
new StringSchema('popularity', 'Popularity description'),
]
)
)
]
);
 
$response = Prism::structured()
->using(Bedrock::KEY, 'anthropic.claude-3-sonnet-20240229-v1:0')
->withSchema($schema)
->withPrompt('List the top 3 programming languages')
->asStructured();
 
// Access your structured data
$data = $response->structured;

Embeddings (with Cohere models)

use Prism\Prism\Prism;
use Prism\Bedrock\Bedrock;
 
$response = Prism::embeddings()
->using(Bedrock::KEY, 'cohere.embed-english-v3')
->fromArray(['The sky is blue', 'Water is wet'])
->asEmbeddings();
 
// Access the embeddings
$embeddings = $response->embeddings;

Supported API Schemas

AWS Bedrock supports several API schemas - some LLM vendor specific, some generic.

Prism Bedrock supports three of those API schemas:

  • Converse: AWS's native interface for chat (default)*
  • Anthropic: For Claude models**
  • Cohere: For Cohere embeddings models

Each schema supports different capabilities:

Schema Text Structured Embeddings
Converse
Anthropic
Cohere

* A unified interface for multiple providers. See AWS documentation for a list of supported models.

** The Converse schema does not support Anthropic's native features (e.g. PDF vision analysis). This schema uses Anthropic's native schema and therefore allows use of Anthropic native features. Please note however that Bedrock's Anthropic schema does not yet have feature parity with Anthropic. Notably it does not support documents or citations, and only supports prompt caching for Claude Sonnet 3.7 and Claude Haiku 3.5. To use documents with Anthropic's models, use them via the Converse schema (though note that this not the same as using Anthropic's PDF vision directly).

Auto-resolution of API schemas

Prism Bedrock resolves the most appropriate API schema from the model string. If it is unable to resolve a specific schema (e.g. anthropic for Anthropic), it will default to Converse.

Therefore if you use a model that is not supported by AWS Bedrock Converse, and does not have a specific Prism Bedrock implementation, your request will fail.

If you wish to force Prism Bedrock to use Converse instead of a vendor specific interface, you can do so with withProviderOptions():

use Prism\Prism\Prism;
use Prism\Bedrock\Bedrock;
use Prism\Bedrock\Enums\BedrockSchema;
 
$response = Prism::text()
->using(Bedrock::KEY, 'anthropic.claude-3-sonnet-20240229-v1:0')
->withProviderOptions(['apiSchema' => BedrockSchema::Converse])
->withPrompt('Explain quantum computing in simple terms')
->asText();

Cache-Optimized Prompts

For supported models, you can enable prompt caching to reduce latency and costs:

use Prism\Prism\Prism;
use Prism\Bedrock\Bedrock;
use Prism\Prism\ValueObjects\Messages\UserMessage;
 
$response = Prism::text()
->using(Bedrock::KEY, 'anthropic.claude-3-sonnet-20240229-v1:0')
->withMessages([
(new UserMessage('Message with cache breakpoint'))->withProviderOptions(['cacheType' => 'ephemeral']),
(new UserMessage('Message with another cache breakpoint'))->withProviderOptions(['cacheType' => 'ephemeral']),
new UserMessage('Compare the last two messages.')
])
->asText();

[!TIP] Anthropic currently supports a cacheType of "ephemeral". Converse currently supports a cacheType of "default". It is possible that Anthropic and/or AWS may add additional types in the future.

License

The MIT License (MIT). Please see License File for more information.

Authors

This library is created by TJ Miller with contributions from the Open Source Community.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Prism Php Bedrock Related Articles

Use Amazon Bedrock in Laravel with Prism PHP image

Use Amazon Bedrock in Laravel with Prism PHP

Read article
The Certification of Competence for Laravel logo

The Certification of Competence for Laravel

A community-driven, proctored assessment across 4 levels designed to validate real-world Laravel knowledge, from Junior to mastery-level Artisan. Official Vue.js, Official Nuxt, Angular, React, JS certifications also available.

The Certification of Competence for Laravel
DreamzTech logo

DreamzTech

Hire 6-10+ Yrs. experienced skilled Laravel Developers from DreamzTech. We ensure NDA protected, 100% quality delivery. Contact Us & Discuss Your Need.

DreamzTech
Get expert guidance in a few days with a Laravel code review logo

Get expert guidance in a few days with a Laravel code review

Expert code review! Get clear, practical feedback from two Laravel devs with 10+ years of experience helping teams build better apps.

Get expert guidance in a few days with a Laravel code review
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
Lucky Media logo

Lucky Media

Get Lucky Now - the ideal choice for Laravel Development, with over a decade of experience!

Lucky Media
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm