PHP code example of cagri / nexus

1. Go to this page and download the library: Download cagri/nexus library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

cagri / nexus example snippets


use Nexus\Nexus;

$nexus = Nexus::using('openai', 'gpt-4o')
    ->withApiKey(getenv('OPENAI_API_KEY'))
    ->create();

$response = $nexus->chat('Hello!');
echo $response->content;

$nexus = Nexus::using('anthropic', 'claude-sonnet-4-20250514')
    ->withApiKey(getenv('ANTHROPIC_API_KEY'))
    ->create();

$nexus = Nexus::using('ollama', 'llama3')->create(); // local, no key

$nexus = Nexus::using('custom', 'my-model')
    ->withBaseUrl('https://my-api.example.com/v1')
    ->withApiKey('my-key')
    ->create();

$nexus->stream('Tell me a story.')
    ->onText(fn (string $chunk) => print($chunk))
    ->await();

$agent = Nexus::agent()
    ->withProvider($provider)
    ->withTools([new CalculatorTool(), new WeatherTool()])
    ->withMemory(new InMemoryStore())
    ->withMaxIterations(10)
    ->build();

$response = $agent->run('What is 1547 * 382?');

#[AsTool(name: 'weather', description: 'Get current weather')]
class WeatherTool extends AttributeTool
{
    public function handle(
        #[Param(description: 'City name')] string $city,
    ): string {
        return json_encode(['city' => $city, 'temp' => 22]);
    }
}

$person = $nexus->structured('Extract: "Ahmet, 28, Istanbul"', PersonInfo::class);
echo $person->name; // Ahmet

$response = $nexus->template(
    'Translate "{{text}}" to {{language}}.',
    ['text' => 'Hello', 'language' => 'French'],
);

use Nexus\Middleware\{RetryMiddleware, CacheMiddleware};

$nexus = Nexus::using('openai', 'gpt-4o')
    ->withApiKey(getenv('OPENAI_API_KEY'))
    ->create()
    ->withMiddleware(new RetryMiddleware(maxRetries: 3))
    ->withMiddleware(new CacheMiddleware(ttlSeconds: 300));

use Nexus\Memory\{InMemoryStore, FileStore};

$memory = new InMemoryStore(maxMessages: 50);                        // session-scoped
$memory = new FileStore('/tmp/conversation.json', maxMessages: 100); // persistent

src/
├── Nexus.php, NexusBuilder.php
├── Agent/           Agent, AgentBuilder
├── Config/          ProviderConfig
├── Contract/        ProviderInterface, ToolInterface, MemoryInterface, MiddlewareInterface
├── Enum/            Provider, Role, FinishReason
├── Http/            Client (cURL)
├── Memory/          InMemoryStore, FileStore
├── Message/         Message, MessageBag, ToolCall
├── Middleware/       Pipeline, RetryMiddleware, CacheMiddleware
├── Prompt/          Template
├── Provider/        AbstractProvider, OpenAI, Anthropic, Ollama, OpenAICompatible
├── Response/        Response
├── Stream/          StreamResponse
├── Structured/      SchemaMapper
└── Tool/            AttributeTool, Parameter, ToolRegistry, Attribute/{AsTool, Param}