Backup #1371

ID1371
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Infrastructure/AI/AIConfig.php
Version10
Typ modified
Größe4.9 KB
Hash4f69110e0cff4a11fee3fba18dbae16bd03f72f69e28553ade0696976948af52
Datum2025-12-25 16:56:31
Geändert vonclaude-code-hook
GrundClaude 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(new CredentialService());
    }

    /**
     * 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

Herunterladen

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