41 lines
1.1 KiB
PHP
41 lines
1.1 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Ingest;
|
||
|
||
use App\Index\IndexMetaManager;
|
||
use App\Knowledge\ChunkManager;
|
||
use App\Vector\VectorIndexBuilder;
|
||
|
||
final readonly class VectorRebuildService
|
||
{
|
||
public function __construct(
|
||
private VectorIndexBuilder $vectorBuilder,
|
||
private IndexMetaManager $metaManager,
|
||
private ChunkManager $chunkManager,
|
||
) {}
|
||
|
||
/**
|
||
* Führt einen vollständigen, deterministischen FAISS-Rebuild aus.
|
||
*
|
||
* Ablauf:
|
||
* 1. Rebuild des Vector Index aus index.ndjson
|
||
* 2. Chunk-Zählung via ChunkManager
|
||
* 3. Runtime-Stats atomar aktualisieren
|
||
*/
|
||
public function rebuild(?string $logPath = null): void
|
||
{
|
||
// ✅ Stelle sicher, dass index_meta.json existiert
|
||
$this->metaManager->ensureExists();
|
||
|
||
// 1️⃣ Vector Index neu bauen
|
||
$this->vectorBuilder->rebuildFromNdjson($logPath);
|
||
|
||
// 2️⃣ Chunk Count streaming-safe zählen
|
||
$chunkCount = $this->chunkManager->countAllChunks();
|
||
|
||
// 3️⃣ Runtime-Stats aktualisieren (atomar)
|
||
$this->metaManager->updateRuntimeStats($chunkCount);
|
||
}
|
||
} |