1. Go to this page and download the library: Download neuron-core/a2a 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/ */
neuron-core / a2a example snippets
use NeuronCore\A2A\Server\A2AServer;
use NeuronCore\A2A\Contract\TaskRepositoryInterface;
use NeuronCore\A2A\Contract\MessageHandlerInterface;
use NeuronCore\A2A\Model\AgentCard\AgentCard;
class MyAIAgent extends A2AServer
{
protected function taskRepository(): TaskRepositoryInterface
{
return new MyTaskRepository();
}
protected function messageHandler(): MessageHandlerInterface
{
return new MyMessageHandler();
}
protected function agentCard(): AgentCard
{
return new AgentCard(
protocolVersion: '0.3.0',
name: 'My AI Agent',
description: 'A specialized AI agent for data analysis',
url: 'https://example.com/a2a',
preferredTransport: 'JSONRPC',
version: '1.0.0',
provider: new AgentProvider(
organization: 'My Company',
url: 'https://mycompany.com'
),
skills: [
new AgentSkill(
id: 'analysis',
name: 'Data Analysis',
description: 'Analyze datasets',
tags: ['data', 'analytics'],
examples: ['Analyze sales data'],
inputModes: ['text/plain'],
outputModes: ['text/plain']
)
]
);
}
}
use NeuronCore\A2A\Contract\TaskRepositoryInterface;
use NeuronCore\A2A\Model\Task;
class MyTaskRepository implements TaskRepositoryInterface
{
public function save(Task $task): void
{
// Save to database, Redis, etc.
}
public function find(string $taskId): ?Task
{
// Retrieve from storage
}
public function findAll(array $filters = [], ?int $limit = null, ?int $offset = null): array
{
// Query with filters
}
public function count(array $filters = []): int
{
// Count tasks
}
public function generateTaskId(): string
{
return uniqid('task_', true);
}
public function generateContextId(): string
{
return uniqid('context_', true);
}
}
use NeuronAI\Agent;
use NeuronAI\Chat\Messages\UserMessage;
use NeuronCore\A2A\Contract\MessageHandlerInterface;
use NeuronCore\A2A\Model\Task;
use NeuronCore\A2A\Model\Message;
use NeuronCore\A2A\Model\Part\TextPart;
use NeuronCore\A2A\Model\Artifact;
use NeuronCore\A2A\Model\TaskStatus;
use NeuronCore\A2A\Enum\TaskState;
class MyMessageHandler implements MessageHandlerInterface
{
public function handle(Task $task, array $messages): Task
{
$history = array_merge($task->history ?? [], $messages);
// Extract user message
$userText = $this->extractText($messages[0]);
$aiResponse = Agent::make()
->setProvider(...)
->chat(new UserMessage($userText))
->getContent();
// Create an agent response
$agentMessage = new Message(
role: 'agent',
parts: [new TextPart($aiResponse)]
);
$history[] = $agentMessage;
// Return a completed task
return new Task(
id: $task->id,
contextId: $task->contextId,
status: new TaskStatus(
state: TaskState::COMPLETED,
message: new TextPart('Task completed')
),
history: $history,
);
}
protected function extractText(Message $message): string
{
$text = '';
foreach ($message->parts as $part) {
if ($part instanceof TextPart) {
$text .= $part->text;
}
}
return $text;
}
}
new Message(
role: 'user', // or 'agent'
parts: [
new TextPart('Hello'),
new FilePart($file, 'image/png'),
new DataPart(['key' => 'value'], 'application/json')
]
)
abstract protected function taskRepository(): TaskRepositoryInterface;
abstract protected function messageHandler(): MessageHandlerInterface;
abstract protected function agentCard(): AgentCard;
public function handleRequest(JsonRpcRequest $request): JsonRpcResponse|JsonRpcError;
public function getAgentCard(): array;
interface TaskRepositoryInterface
{
public function save(Task $task): void;
public function find(string $taskId): ?Task;
public function findAll(array $filters = [], ?int $limit = null, ?int $offset = null): array;
public function count(array $filters = []): int;
public function generateTaskId(): string;
public function generateContextId(): string;
}
interface MessageHandlerInterface
{
public function handle(Task $task, array $messages): Task;
}
class EloquentTaskRepository implements TaskRepositoryInterface
{
public function save(Task $task): void
{
TaskModel::updateOrCreate(
['id' => $task->id],
['data' => serialize($task)]
);
}
public function find(string $taskId): ?Task
{
$model = TaskModel::find($taskId);
return $model ? unserialize($model->data) : null;
}
}