Backup #1369
| ID | 1369 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Infrastructure/AI/AIConfig.php |
| Version | 9 |
| Typ |
modified |
| Größe | 4.8 KB |
| Hash | 2e15e31a6c8042a4377a1c35c024fc8ca809077526f53fd9baac05cf7bb2780d |
| Datum | 2025-12-25 16:56:15 |
| Geändert von | claude-code-hook |
| Grund | Claude Code Pre-Hook Backup vor Edit-Operation |
| Datei existiert |
Ja
|
Dateiinhalt
<?php
declare(strict_types=1);
namespace Infrastructure\AI;
// @responsibility: Zentralisierte Konfiguration und Factory für AI-Services
use Infrastructure\Config\CredentialService;
use RuntimeException;
final readonly class AIConfig
{
/**
* Konstruiert eine neue AIConfig-Instanz.
*
* @param string $ollamaHost Ollama API Host-URL
* @param string $qdrantHost Qdrant API Host-URL
* @param string $anthropicApiKey Anthropic API Key
* @param string $embeddingModel Embedding-Modell für Ollama
* @param string $claudeModel Claude-Modell für Anthropic
* @param string $defaultCollection Standard-Collection für Qdrant
*/
public function __construct(
public string $ollamaHost,
public string $qdrantHost,
public string $anthropicApiKey,
public string $embeddingModel,
public string $claudeModel,
public string $defaultCollection
) {
}
/**
* Erstellt AIConfig aus Credentials-Datei mit Default-Werten.
*
* Lädt den Anthropic API Key aus der credentials.md Datei und
* verwendet Default-Werte für alle anderen Konfigurationsparameter.
*
* @param string|null $credentialsPath Pfad zur credentials.md Datei (optional, verwendet Environment-Variable oder Default)
*
* @return self Konfigurierte AIConfig-Instanz
*
* @throws RuntimeException Wenn Credentials-Datei nicht existiert
* @throws RuntimeException Wenn Credentials-Datei nicht gelesen werden kann
* @throws RuntimeException Wenn Anthropic API Key nicht gefunden wird
*
* @example
* $config = AIConfig::fromCredentialsFile();
* $chatService = $config->createChatService();
*/
public static function fromCredentialsFile(?string $credentialsPath = null): self
{
$anthropicApiKey = self::loadAnthropicApiKey($credentialsPath);
return new self(
ollamaHost: CredentialService::getOllamaHost(),
qdrantHost: CredentialService::getQdrantHost(),
anthropicApiKey: $anthropicApiKey,
embeddingModel: 'mxbai-embed-large',
claudeModel: 'claude-opus-4-5-20251101',
defaultCollection: 'documents'
);
}
/**
* Erstellt einen konfigurierten ChatService.
*
* Erzeugt alle benötigten Dependencies (OllamaService, QdrantService, ClaudeService)
* und liefert einen vollständig konfigurierten ChatService zurück.
*
* @return ChatService Konfigurierter ChatService
*
* @example
* $config = AIConfig::fromCredentialsFile();
* $chatService = $config->createChatService();
* $result = $chatService->chat('Was ist systemisches Coaching?');
*/
public function createChatService(): ChatService
{
return new ChatService(
$this->createOllamaService(),
$this->createQdrantService(),
$this->createClaudeService(),
new ScoringService()
);
}
/**
* Erstellt einen konfigurierten OllamaService.
*
* @return OllamaService Konfigurierter OllamaService
*
* @example
* $config = AIConfig::fromCredentialsFile();
* $ollama = $config->createOllamaService();
* $embedding = $ollama->getEmbedding('Hello World');
*/
public function createOllamaService(): OllamaService
{
return new OllamaService($this->ollamaHost);
}
/**
* Erstellt einen konfigurierten QdrantService.
*
* @return QdrantService Konfigurierter QdrantService
*
* @example
* $config = AIConfig::fromCredentialsFile();
* $qdrant = $config->createQdrantService();
* $results = $qdrant->search($vector, 'documents');
*/
public function createQdrantService(): QdrantService
{
return new QdrantService($this->qdrantHost);
}
/**
* Erstellt einen konfigurierten ClaudeService.
*
* @return ClaudeService Konfigurierter ClaudeService
*
* @example
* $config = AIConfig::fromCredentialsFile();
* $claude = $config->createClaudeService();
* $result = $claude->ask('Explain quantum computing');
*/
public function createClaudeService(): ClaudeService
{
return new ClaudeService($this->anthropicApiKey);
}
/**
* Lädt den Anthropic API Key aus der Credentials-Datei.
*
* @param string|null $credentialsPath Pfad zur credentials.md Datei (unused, kept for BC)
*
* @return string Der gefundene API Key
*
* @throws RuntimeException Wenn API Key nicht gefunden wird
*/
private static function loadAnthropicApiKey(?string $credentialsPath): string
{
$apiKey = CredentialService::getAnthropicApiKey();
if ($apiKey === '') {
throw new RuntimeException('Anthropic API key not found in credentials file');
}
return $apiKey;
}
}
Vollständig herunterladen
Aktionen
Andere Versionen dieser Datei
| ID |
Version |
Typ |
Größe |
Datum |
| 1388 |
13 |
modified |
4.8 KB |
2025-12-25 16:57 |
| 1379 |
12 |
modified |
4.9 KB |
2025-12-25 16:56 |
| 1373 |
11 |
modified |
4.8 KB |
2025-12-25 16:56 |
| 1371 |
10 |
modified |
4.9 KB |
2025-12-25 16:56 |
| 1369 |
9 |
modified |
4.8 KB |
2025-12-25 16:56 |
| 1368 |
8 |
modified |
4.9 KB |
2025-12-25 16:55 |
| 1367 |
7 |
modified |
4.9 KB |
2025-12-25 16:55 |
| 1022 |
6 |
modified |
4.9 KB |
2025-12-24 16:22 |
| 759 |
5 |
modified |
5.2 KB |
2025-12-23 08:00 |
| 757 |
4 |
modified |
5.3 KB |
2025-12-23 08:00 |
| 370 |
3 |
modified |
5.3 KB |
2025-12-22 08:24 |
| 369 |
2 |
modified |
5.2 KB |
2025-12-22 08:24 |
| 44 |
1 |
modified |
5.9 KB |
2025-12-20 17:24 |
← Zurück zur Übersicht