php-agentic/Services/AgenticManager.php

114 lines
2.7 KiB
PHP
Raw Normal View History

2026-01-27 00:28:29 +00:00
<?php
declare(strict_types=1);
namespace Core\Mod\Agentic\Services;
2026-01-27 00:28:29 +00:00
use InvalidArgumentException;
class AgenticManager
{
/** @var array<string, AgenticProviderInterface> */
private array $providers = [];
private string $defaultProvider = 'claude';
public function __construct()
{
$this->registerProviders();
}
/**
* Get an AI provider by name.
*/
public function provider(?string $name = null): AgenticProviderInterface
{
$name = $name ?? $this->defaultProvider;
if (! isset($this->providers[$name])) {
throw new InvalidArgumentException("Unknown AI provider: {$name}");
}
return $this->providers[$name];
}
/**
* Get the Claude provider.
*/
public function claude(): ClaudeService
{
return $this->providers['claude'];
}
/**
* Get the Gemini provider.
*/
public function gemini(): GeminiService
{
return $this->providers['gemini'];
}
/**
* Get the OpenAI provider.
*/
public function openai(): OpenAIService
{
return $this->providers['openai'];
}
/**
* Get all available providers.
*
* @return array<string, AgenticProviderInterface>
*/
public function availableProviders(): array
{
return array_filter(
$this->providers,
fn (AgenticProviderInterface $provider) => $provider->isAvailable()
);
}
/**
* Check if a provider is available.
*/
public function isAvailable(string $name): bool
{
return isset($this->providers[$name]) && $this->providers[$name]->isAvailable();
}
/**
* Set the default provider.
*/
public function setDefault(string $name): void
{
if (! isset($this->providers[$name])) {
throw new InvalidArgumentException("Unknown AI provider: {$name}");
}
$this->defaultProvider = $name;
}
/**
* Register all AI providers.
*/
private function registerProviders(): void
{
// Use null coalescing since config() returns null for missing env vars
$this->providers['claude'] = new ClaudeService(
apiKey: config('services.anthropic.api_key') ?? '',
model: config('services.anthropic.model') ?? 'claude-sonnet-4-20250514',
);
$this->providers['gemini'] = new GeminiService(
apiKey: config('services.google.ai_api_key') ?? '',
model: config('services.google.ai_model') ?? 'gemini-2.0-flash',
);
$this->providers['openai'] = new OpenAIService(
apiKey: config('services.openai.api_key') ?? '',
model: config('services.openai.model') ?? 'gpt-4o-mini',
);
}
}