<?php
require_once __DIR__ . '/vendor/autoload.php';
use ChuckyCloud\Sdk\Client\ChuckyClient;
use ChuckyCloud\Sdk\Types\ClientOptions;
use ChuckyCloud\Sdk\Types\SessionOptions;
use ChuckyCloud\Sdk\Types\Model;
use ChuckyCloud\Sdk\Types\BudgetWindow;
use ChuckyCloud\Sdk\Types\AssistantMessage;
use ChuckyCloud\Sdk\Types\ResultMessage;
use ChuckyCloud\Sdk\Utils\CreateBudgetOptions;
use ChuckyCloud\Sdk\Utils\CreateTokenOptions;
use function ChuckyCloud\Sdk\Utils\createBudget;
use function ChuckyCloud\Sdk\Utils\createToken;
// Create token
$token = createToken(new CreateTokenOptions(
userId: 'user-123',
projectId: getenv('CHUCKY_PROJECT_ID'),
secret: getenv('CHUCKY_HMAC_SECRET'),
budget: createBudget(new CreateBudgetOptions(
aiDollars: 1.0,
window: BudgetWindow::HOUR,
)),
));
// Create client
$client = new ChuckyClient(new ClientOptions(
token: $token,
debug: true,
));
// Create session
$session = $client->createSession(new SessionOptions(
model: Model::CLAUDE_SONNET,
maxTurns: 5,
));
// Connect and send message
$session->connect()->then(function () use ($session, $client) {
$session->send('Hello, Claude!')->then(function () use ($session, $client) {
$receiveNext = function () use (&$receiveNext, $session, $client) {
$session->receive()->then(function ($msg) use (&$receiveNext, $session, $client) {
if ($msg instanceof AssistantMessage) {
echo $msg->getText() . "\n";
}
if ($msg instanceof ResultMessage) {
echo "Cost: \${$msg->totalCostUsd}\n";
$session->close();
$client->stop();
return;
}
$receiveNext();
});
};
$receiveNext();
});
});
// Run event loop
$client->run();