ChatServiceProvider.php
- Pfad:
src/ServiceProvider/ChatServiceProvider.php
- Namespace: ServiceProvider
- Zeilen: 188 | Größe: 8,908 Bytes
- Geändert: 2025-12-30 20:43:54 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 71
- Dependencies: 0 (25%)
- LOC: 81 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Issues 1
| Zeile |
Typ |
Beschreibung |
| - |
coupling |
Klasse hat 37 Dependencies (max: 15) |
Dependencies 38
- implements ServiceProvider\ServiceProviderInterface
- use Domain\Repository\ChatMessageRepositoryInterface
- use Domain\Repository\ChatSessionRepositoryInterface
- use Domain\Repository\ChunkRepositoryInterface
- use Domain\Repository\ContentConfigRepositoryInterface
- use Domain\Repository\PromptsRepositoryInterface
- use Domain\Service\ModelRegistryInterface
- use Framework\Container
- use Infrastructure\AI\AIConfig
- use Infrastructure\AI\ChatService
- use Infrastructure\AI\ClaudeService
- use Infrastructure\AI\ContentQualityValidator
- use Infrastructure\AI\ModelRegistry
- use Infrastructure\AI\OllamaService
- use Infrastructure\AI\QdrantClient
- use Infrastructure\AI\QdrantService
- use Infrastructure\AI\ScoringService
- use Infrastructure\AI\SemanticEnrichmentService
- use Infrastructure\AI\VectorSearchService
- use Infrastructure\Formatting\ChatMessageFormatter
- use Infrastructure\Logging\KiProtokollService
- use Infrastructure\Persistence\ChatMessageRepository
- use Infrastructure\Persistence\ChatSessionRepository
- use Infrastructure\Persistence\ChunkRepository
- use Infrastructure\Persistence\ContentConfigRepository
- use Infrastructure\Persistence\PromptsRepository
- use UseCases\Chat\ChatPromptLoader
- use UseCases\Chat\CreateChatSessionUseCase
- use UseCases\Chat\CreateChatSessionUseCaseInterface
- use UseCases\Chat\DeleteChatSessionUseCase
- use UseCases\Chat\DeleteChatSessionUseCaseInterface
- use UseCases\Chat\GetChatSessionUseCase
- use UseCases\Chat\GetChatSessionUseCaseInterface
- use UseCases\Chat\RagContextBuilder
- use UseCases\Chat\SendChatMessageUseCase
- use UseCases\Chat\StreamingChatMessageUseCase
- use UseCases\Chat\UpdateChatSessionUseCase
- use UseCases\Chat\UpdateChatSessionUseCaseInterface
Klassen 84
-
ChatServiceProvider
class
Zeile 50
-
Container
class
Zeile 55
-
Container
class
Zeile 56
-
Container
class
Zeile 57
-
Container
class
Zeile 58
-
Container
class
Zeile 61
-
set
class
Zeile 61
-
Container
class
Zeile 62
-
set
class
Zeile 62
-
Container
class
Zeile 63
-
set
class
Zeile 63
-
Container
class
Zeile 64
-
set
class
Zeile 64
-
AIConfig
class
Zeile 67
-
Container
class
Zeile 68
-
createOllamaService
class
Zeile 68
-
Container
class
Zeile 69
-
createQdrantService
class
Zeile 69
-
Container
class
Zeile 70
-
createClaudeService
class
Zeile 70
-
ScoringService
class
Zeile 71
-
VectorSearchService
class
Zeile 72
-
QdrantClient
class
Zeile 73
-
Container
class
Zeile 76
-
Container
class
Zeile 77
-
set
class
Zeile 77
-
Container
class
Zeile 80
-
set
class
Zeile 81
-
Container
class
Zeile 85
-
get
class
Zeile 86
-
get
class
Zeile 87
-
get
class
Zeile 88
-
get
class
Zeile 89
-
set
class
Zeile 90
-
Container
class
Zeile 93
-
set
class
Zeile 94
-
Container
class
Zeile 97
-
Container
class
Zeile 104
-
set
class
Zeile 104
-
ChatMessageFormatter
class
Zeile 107
-
Container
class
Zeile 110
-
get
class
Zeile 112
-
get
class
Zeile 113
-
get
class
Zeile 114
-
get
class
Zeile 115
-
get
class
Zeile 116
-
Container
class
Zeile 121
-
set
class
Zeile 121
-
Container
class
Zeile 123
-
get
class
Zeile 125
-
set
class
Zeile 126
-
Container
class
Zeile 130
-
set
class
Zeile 130
-
Container
class
Zeile 132
-
get
class
Zeile 134
-
get
class
Zeile 135
-
get
class
Zeile 136
-
set
class
Zeile 137
-
Container
class
Zeile 141
-
set
class
Zeile 141
-
Container
class
Zeile 143
-
set
class
Zeile 145
-
Container
class
Zeile 149
-
set
class
Zeile 149
-
Container
class
Zeile 152
-
set
class
Zeile 153
-
Container
class
Zeile 156
-
set
class
Zeile 157
-
Container
class
Zeile 161
-
get
class
Zeile 163
-
get
class
Zeile 164
-
get
class
Zeile 165
-
get
class
Zeile 166
-
get
class
Zeile 167
-
get
class
Zeile 168
-
get
class
Zeile 169
-
get
class
Zeile 170
-
get
class
Zeile 171
-
set
class
Zeile 172
-
Container
class
Zeile 177
-
get
class
Zeile 179
-
get
class
Zeile 180
-
get
class
Zeile 181
-
get
class
Zeile 182
Funktionen 1
-
register()
public
Zeile 52
Verwendet von 1
Versionen 20
-
v20
2025-12-30 20:43 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v19
2025-12-30 20:43 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v18
2025-12-29 08:48 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v17
2025-12-29 08:48 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v16
2025-12-29 00:11 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v15
2025-12-29 00:10 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v14
2025-12-29 00:05 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v13
2025-12-29 00:04 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v12
2025-12-28 23:23 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v11
2025-12-27 00:15 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v10
2025-12-27 00:14 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v9
2025-12-26 20:29 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v8
2025-12-26 20:29 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v7
2025-12-26 20:29 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v6
2025-12-25 17:04 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v5
2025-12-25 17:03 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v4
2025-12-25 17:03 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v3
2025-12-25 17:03 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v2
2025-12-25 17:03 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
-
v1
2025-12-25 17:03 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
// @responsibility: Register Chat bounded context services in DI container
namespace ServiceProvider;
use Domain\Repository\ChatMessageRepositoryInterface;
use Domain\Repository\ChatSessionRepositoryInterface;
use Domain\Repository\ChunkRepositoryInterface;
use Domain\Repository\ContentConfigRepositoryInterface;
use Domain\Repository\PromptsRepositoryInterface;
use Domain\Service\ModelRegistryInterface;
use Framework\Container;
use Infrastructure\AI\AIConfig;
use Infrastructure\AI\ChatService;
use Infrastructure\AI\ClaudeService;
use Infrastructure\AI\ContentQualityValidator;
use Infrastructure\AI\ModelRegistry;
use Infrastructure\AI\OllamaService;
use Infrastructure\AI\QdrantClient;
use Infrastructure\AI\QdrantService;
use Infrastructure\AI\ScoringService;
use Infrastructure\AI\SemanticEnrichmentService;
use Infrastructure\AI\VectorSearchService;
use Infrastructure\Formatting\ChatMessageFormatter;
use Infrastructure\Logging\KiProtokollService;
use Infrastructure\Persistence\ChatMessageRepository;
use Infrastructure\Persistence\ChatSessionRepository;
use Infrastructure\Persistence\ChunkRepository;
use Infrastructure\Persistence\ContentConfigRepository;
use Infrastructure\Persistence\PromptsRepository;
use UseCases\Chat\ChatPromptLoader;
use UseCases\Chat\CreateChatSessionUseCase;
use UseCases\Chat\CreateChatSessionUseCaseInterface;
use UseCases\Chat\DeleteChatSessionUseCase;
use UseCases\Chat\DeleteChatSessionUseCaseInterface;
use UseCases\Chat\GetChatSessionUseCase;
use UseCases\Chat\GetChatSessionUseCaseInterface;
use UseCases\Chat\RagContextBuilder;
use UseCases\Chat\SendChatMessageUseCase;
use UseCases\Chat\StreamingChatMessageUseCase;
use UseCases\Chat\UpdateChatSessionUseCase;
use UseCases\Chat\UpdateChatSessionUseCaseInterface;
/**
* ChatServiceProvider registers all chat and AI-related services.
*/
final class ChatServiceProvider implements ServiceProviderInterface
{
public function register(Container $container): void
{
// Repositories
$container->set(ChatSessionRepository::class, fn (Container $c) => new ChatSessionRepository($c->get('pdo.content')));
$container->set(ChatMessageRepository::class, fn (Container $c) => new ChatMessageRepository($c->get('pdo.content')));
$container->set(PromptsRepository::class, fn (Container $c) => new PromptsRepository($c->get('pdo.content')));
$container->set(ContentConfigRepository::class, fn (Container $c) => new ContentConfigRepository($c->get('pdo.content')));
// Interface aliases
$container->set(ChatSessionRepositoryInterface::class, fn (Container $c) => $c->get(ChatSessionRepository::class));
$container->set(ChatMessageRepositoryInterface::class, fn (Container $c) => $c->get(ChatMessageRepository::class));
$container->set(PromptsRepositoryInterface::class, fn (Container $c) => $c->get(PromptsRepository::class));
$container->set(ContentConfigRepositoryInterface::class, fn (Container $c) => $c->get(ContentConfigRepository::class));
// AI Services
$container->set(AIConfig::class, fn () => AIConfig::fromCredentialsFile());
$container->set(OllamaService::class, fn (Container $c) => $c->get(AIConfig::class)->createOllamaService());
$container->set(QdrantService::class, fn (Container $c) => $c->get(AIConfig::class)->createQdrantService());
$container->set(ClaudeService::class, fn (Container $c) => $c->get(AIConfig::class)->createClaudeService());
$container->set(ScoringService::class, fn () => new ScoringService());
$container->set(VectorSearchService::class, fn () => new VectorSearchService());
$container->set(QdrantClient::class, fn () => new QdrantClient());
// Chunk Repository for semantic enrichment
$container->set(ChunkRepository::class, fn (Container $c) => new ChunkRepository($c->get('pdo.content')));
$container->set(ChunkRepositoryInterface::class, fn (Container $c) => $c->get(ChunkRepository::class));
// Semantic Enrichment Service (for Graceful Degradation)
$container->set(SemanticEnrichmentService::class, fn (Container $c) => new SemanticEnrichmentService(
$c->get(ChunkRepositoryInterface::class)
));
// ChatService with Semantic Enrichment (Graceful Degradation)
$container->set(ChatService::class, fn (Container $c) => new ChatService(
$c->get(OllamaService::class),
$c->get(QdrantService::class),
$c->get(ClaudeService::class),
$c->get(ScoringService::class),
$c->get(SemanticEnrichmentService::class)
));
$container->set(ContentQualityValidator::class, function (Container $c) {
return new ContentQualityValidator($c->get(OllamaService::class));
});
$container->set(ModelRegistry::class, function (Container $c) {
$registry = new ModelRegistry($c->get('pdo.dev'));
ModelRegistry::setInstance($registry);
return $registry;
});
$container->set(ModelRegistryInterface::class, fn (Container $c) => $c->get(ModelRegistry::class));
// Formatters
$container->set(ChatMessageFormatter::class, fn () => new ChatMessageFormatter());
// Use Cases
$container->set(UpdateChatSessionUseCase::class, function (Container $c) {
return new UpdateChatSessionUseCase(
$c->get(ChatSessionRepositoryInterface::class),
$c->get(ContentConfigRepositoryInterface::class),
$c->get(\Domain\Repository\CollectionRepositoryInterface::class),
$c->get(\Infrastructure\Validation\CollectionValidator::class),
$c->get(ModelRegistryInterface::class),
$c->get('pdo.dev')
);
});
$container->set(UpdateChatSessionUseCaseInterface::class, fn (Container $c) => $c->get(UpdateChatSessionUseCase::class));
$container->set(CreateChatSessionUseCase::class, function (Container $c) {
return new CreateChatSessionUseCase(
$c->get(ChatSessionRepositoryInterface::class),
$c->get(ModelRegistryInterface::class)
);
});
$container->set(CreateChatSessionUseCaseInterface::class, fn (Container $c) => $c->get(CreateChatSessionUseCase::class));
$container->set(GetChatSessionUseCase::class, function (Container $c) {
return new GetChatSessionUseCase(
$c->get(ChatSessionRepositoryInterface::class),
$c->get(ChatMessageRepositoryInterface::class),
$c->get(ContentConfigRepositoryInterface::class),
$c->get(\Domain\Repository\CollectionRepositoryInterface::class)
);
});
$container->set(GetChatSessionUseCaseInterface::class, fn (Container $c) => $c->get(GetChatSessionUseCase::class));
$container->set(DeleteChatSessionUseCase::class, function (Container $c) {
return new DeleteChatSessionUseCase(
$c->get(ChatSessionRepositoryInterface::class)
);
});
$container->set(DeleteChatSessionUseCaseInterface::class, fn (Container $c) => $c->get(DeleteChatSessionUseCase::class));
// Chat Helper Services
$container->set(ChatPromptLoader::class, fn (Container $c) => new ChatPromptLoader(
$c->get(ContentConfigRepositoryInterface::class)
));
$container->set(RagContextBuilder::class, fn (Container $c) => new RagContextBuilder(
$c->get(\Domain\Service\SearchServiceInterface::class)
));
// Streaming UseCase with extracted helpers
$container->set(StreamingChatMessageUseCase::class, function (Container $c) {
return new StreamingChatMessageUseCase(
$c->get(OllamaService::class),
$c->get(QdrantService::class),
$c->get(ClaudeService::class),
$c->get(ScoringService::class),
$c->get(ChatSessionRepositoryInterface::class),
$c->get(ChatMessageRepositoryInterface::class),
$c->get(ChatPromptLoader::class),
$c->get(ContentQualityValidator::class),
$c->get(RagContextBuilder::class),
$c->get(KiProtokollService::class)
);
});
// Non-streaming UseCase
$container->set(SendChatMessageUseCase::class, function (Container $c) {
return new SendChatMessageUseCase(
$c->get(ChatService::class),
$c->get(ChatSessionRepositoryInterface::class),
$c->get(ChatMessageRepositoryInterface::class),
$c->get(ChatPromptLoader::class),
$c->get(ContentQualityValidator::class)
);
});
}
}