Ga naar inhoud
getnextpdf.com

Pro editie

Accelerator — Diepe referentie

Deze pagina is de diepe referentie voor het publieke versnellingsoppervlak van NextPDF\Pro\Accelerator. Ze behandelt de provider-factory, de versnelde batch-optimizer, de differ-wrapper en de CPU sidecar-services voor embedding en vector search. Ze benoemt parameters, standaardwaarden, faalmodi en fallback-semantiek. Lees eerst de Accelerator-capaciteitspagina voor workflow-begeleiding.

Deze capaciteit wordt geleverd in NextPDF Pro (nextpdf/pro) en activeert met een Pro-tier license envelope. Een deployment zonder die entitlement laadt de klassen van de capaciteit niet. Vergelijk edities en vraag een licentie aan.

Accelerator heeft geen per-feature licentie-flag. De code wordt met de Pro-editie geleverd; het versnelde optimizer-pad wordt tijdens runtime geselecteerd door een sidecar-bereikbaarheidsprobe. De embedding-service en de vector-index hebben geen PHP-fallback en falen gesloten wanneer de sidecar onbereikbaar is.

Terminal window
composer require nextpdf/pro:^3

Het nextpdf/premium metapackage installeert de nextpdf/pro-code; deze module bevindt zich onder de NextPDF\Pro\Accelerator-namespace.

SymboolParametersStandaardgedragRetourneertWerpt of faalt metOpmerkingen
ProAcceleratorProvider::__constructSpectrumClient $clientBindt de provider aan een Core sidecar-clientProAcceleratorProviderNiets gedeclareerdDe caller construeert en levert de client
ProAcceleratorProvider::isAvailablegeenProbet sidecar-bereikbaarheid via de clientboolNiets gedeclareerdAlleen bereikbaarheid; endpoints worden per aanroep geprobet
ProAcceleratorProvider::embeddinggeenRetourneert de gememoïzeerde embedding-serviceEmbeddingServiceInterfaceNiets gedeclareerdEén CpuEmbeddingService-instance per provider
ProAcceleratorProvider::vectorIndexstring $collectionId = 'default'Retourneert een verse index-handle gebonden aan de collectieVectorIndexInterfaceNiets gedeclareerdNiet gememoïzeerd; één handle per aanroep
ProAcceleratorProvider::optimizergeenRetourneert de gememoïzeerde versnelde optimizerAcceleratedOptimizerNiets gedeclareerdGeconstrueerd met de client van de provider
ProAcceleratorProvider::differgeenRetourneert de gememoïzeerde differ-wrapperAcceleratedDifferNiets gedeclareerdGeconstrueerd met de client van de provider
AcceleratedOptimizer::__construct?SpectrumClient $spectrum = null, OptimizationLevel $level = OptimizationLevel::Balanced, ?LoggerInterface $logger = nullWrapt de PHP-PdfOptimizer op het gegeven niveauAcceleratedOptimizerNiets gedeclareerdEen null-client selecteert het PHP-pad; een null-logger selecteert NullLogger
AcceleratedOptimizer::optimizeBatcharray<string, string> $documentsAnalyseert elk document; verplaatst afbeeldingswerk naar de sidecar wanneer bereikbaarBatchResultInterfaceSpectrumApiException SPEC-SEC-001 (HTTP 413) bij een batch boven de limiet; per-item foutmarkers in het fallback-resultaatTransportfouten na toelating degraderen naar het PHP-pad
AcceleratedDiffer::__construct?SpectrumClient $spectrum = nullBehoudt de optionele client voor voorwaartse compatibiliteitAcceleratedDifferNiets gedeclareerdDe client wordt in deze release niet gebruikt
AcceleratedDiffer::comparestring $sourcePdf, string $targetPdfVergelijkt twee documenten volledig in PHPDiffResultZoals de Pro-PdfDifferIn deze release wordt geen sidecar-verzoek uitgevoerd
AcceleratedDiffer::isSpectrumWiredgeenRapporteert of er een sidecar-client is geïnjecteerdboolNiets gedeclareerdAlleen bedradingsstatus; voert geen verzoek uit
CpuEmbeddingService::embedstring $textDelegeert naar batchEmbed en retourneert element nullist<float>Zoals batchEmbed384-dimensionale vector
CpuEmbeddingService::batchEmbedarray $textsEmbed de batch op de sidecarlist<list<float>>InvalidArgumentException bij een lege batch; SpectrumNotAvailableException bij onbereikbaarheid; SpectrumApiException bij een mislukte, misvormde of in aantal niet-overeenkomende responsRetourneert nooit gedeeltelijke resultaten
CpuEmbeddingService::getDimensiongeenRetourneert 384intNiets gedeclareerdConstante
CpuEmbeddingService::getModelNamegeenRetourneert all-MiniLM-L6-v2stringNiets gedeclareerdConstante
CpuVectorIndex::__constructSpectrumClient $client, string $collectionId = 'default'Bindt de handle aan één collectieCpuVectorIndexNiets gedeclareerdEén handle per collectie-identifier
CpuVectorIndex::buildarray $vectors, array $idsBouwt de collectie-index op de sidecarvoidInvalidArgumentException bij een lengteverschil; SpectrumNotAvailableException bij onbereikbaarheidEen lege invoer retourneert zonder de sidecar te contacteren
CpuVectorIndex::searcharray $queryVector, int $topK = 10Gerangschikte nearest-neighbor-zoekopdrachtlist<VectorSearchResult>SpectrumNotAvailableException bij onbereikbaarheid; SpectrumApiException bij een in-band foutenvelop; JsonException bij een misvormde bodyPer-hit-rang in de resultaatmetadata
CpuVectorIndex::deletearray $idsWijst altijd afvoid (gedeclareerd)Altijd: SpectrumApiException SPEC-INDEX-004 (HTTP 501)HNSW heeft geen per-vector-verwijdering; herbouw in plaats daarvan
CpuVectorIndex::countgeenLeest het collectietotaal via een gedimensioneerde probeintSpectrumNotAvailableException bij onbereikbaarheid; SpectrumApiException bij een fout of een misvormde count-responsRetourneert 0 alleen voor een bevestigd-lege index
CpuVectorIndex::INDEX_DIMENSIONPublieke constante 384intKomt overeen met de embedding-dimensie
final class ProAcceleratorProvider
{
public function __construct(
private readonly SpectrumClient $client,
)
public function isAvailable(): bool
public function embedding(): EmbeddingServiceInterface
public function vectorIndex(string $collectionId = 'default'): VectorIndexInterface
public function optimizer(): AcceleratedOptimizer
public function differ(): AcceleratedDiffer
}
final class AcceleratedOptimizer
{
public function __construct(
private readonly ?SpectrumClient $spectrum = null,
private readonly OptimizationLevel $level = OptimizationLevel::Balanced,
?LoggerInterface $logger = null,
)
public function optimizeBatch(array $documents): BatchResultInterface
}
final class AcceleratedDiffer
{
public function __construct(
private readonly ?SpectrumClient $spectrum = null,
)
public function compare(string $sourcePdf, string $targetPdf): DiffResult
public function isSpectrumWired(): bool
}
final class CpuEmbeddingService implements EmbeddingServiceInterface
{
public function __construct(
private readonly SpectrumClient $client,
)
public function embed(string $text): array
public function batchEmbed(array $texts): array
public function getDimension(): int
public function getModelName(): string
}
final class CpuVectorIndex implements VectorIndexInterface
{
public const int INDEX_DIMENSION = 384;
public function __construct(
private readonly SpectrumClient $client,
private readonly string $collectionId = 'default',
)
public function build(array $vectors, array $ids): void
public function search(array $queryVector, int $topK = 10): array
public function delete(array $ids): void
public function count(): int
}

ProAcceleratorProvider is het entry-point. embedding(), optimizer() en differ() memoizen hun instances. vectorIndex($collectionId) retourneert per aanroep een verse handle, gebonden aan de gegeven collectie-identifier. isAvailable() probet sidecar-bereikbaarheid via de geïnjecteerde Core-SpectrumClient.

optimizeBatch retourneert een batchresultaat met de document-identifiers van de caller als sleutels. Wanneer de sidecar bereikbaar is, wordt de geaggregeerde payload gevalideerd tegen het client-budget vóór enige buffering of upload. Een batch boven de limiet faalt gesloten met SpectrumApiException SPEC-SEC-001 (HTTP 413); het degradeert nooit naar het PHP-pad. Een toegelaten batch wordt naar de sidecar gedispatcht voor parallel afbeeldingswerk.

Een transport-, authenticatie- of respons-parse-fout na toelating degradeert naar de PHP-optimizer, die elk document sequentieel analyseert. De degradatie is tweemaal waarneembaar: de resultaatmetadata rapporteert engine php_fallback met summary-hardware cpu, en er wordt een PSR-3-waarschuwing uitgezonden onder de event-naam spectrum.optimize.fallback. De waarschuwing bevat alleen de exception-klasse en het documentaantal; er worden geen document-bytes gelogd. In het fallback-resultaat levert een per-document-analysefout een item op met foutstatus en code SPEC-PARSE-001; andere documenten in de batch worden nog steeds voltooid.

Het standaard optimalisatieniveau is Balanced. De per-item resultaatvelden zijn original_bytes, optimized_bytes, objects_removed, images_before, images_after, savings_percent en processing_time_ms.

compare draait volledig in PHP via de Pro-PdfDiffer: structuurparsing, tekstextractie en het diff-algoritme. In deze release wordt geen sidecar-verzoek uitgevoerd. Het differ-contract accepteert alleen ruwe PDF-strings, dus een sidecar-parseresultaat kan niet worden geconsumeerd; offloaden zou kosten toevoegen zonder voordeel. Een geïnjecteerde client wordt behouden voor een toekomstige parse-offload-functie. isSpectrumWired() legt de bedradingsstatus bloot zonder een verzoek uit te voeren.

embed delegeert naar batchEmbed([$text]) en retourneert element nul. batchEmbed([]) werpt InvalidArgumentException vóór het contacteren van de sidecar. Een onbereikbare sidecar werpt SpectrumNotAvailableException. De batch-semantiek is alles-of-niets: een per-item-fout, een ontbrekende of misvormde vector, of een aantalverschil werpt SpectrumApiException (protocol-vormfouten dragen SPEC-IO-001) in plaats van gedeeltelijke vectoren te retourneren. Een niet-numerieke component binnen een geretourneerde vector wordt gecoerceerd naar 0.0. getDimension retourneert 384; getModelName retourneert all-MiniLM-L6-v2. De sidecar downloadt en laadt het ONNX-model lui bij het eerste verzoek.

Elke handle bindt één collectie-identifier; elke collectie mapt naar een aparte in-memory HNSW-index in de sidecar. build vereist vector- en identifier-lijsten van gelijke lengte en werpt anders InvalidArgumentException; een lege invoer retourneert zonder een sidecar-aanroep. search retourneert gerangschikte hits met een op-één-gebaseerde rang in de metadata van elk resultaat. Een in-band foutenvelop werpt SpectrumApiException; een envelop zonder code mapt naar SPEC-INDEX-003. delete wijst altijd af met SpectrumApiException SPEC-INDEX-004 (HTTP 501, niet herhaalbaar) omdat HNSW geen per-vector-verwijdering ondersteunt; herbouw in plaats daarvan de index.

count is fail-closed en ondubbelzinnig. Een onbereikbare sidecar werpt SpectrumNotAvailableException; transport- en sidecar-fouten propageren ongewijzigd. Bij een verder succesvolle respons werpt een niet-JSON-body SPEC-INDEX-005, een ontbrekende metadata.total_vectors werpt SPEC-INDEX-006, en een niet-geheel of negatief totaal werpt SPEC-INDEX-007. count retourneert 0 alleen voor een bevestigd-lege index. De grootteprobe stuurt een nulvector van precies INDEX_DIMENSION (384) dimensies met een top_k van 0, zodat een dimensie-valideerende sidecar hem accepteert.

  • Sidecar-geheugen is volatiel: een herstart wist alle HNSW-collecties. Behandel de index-build als idempotent en draai opnieuw na een herstart.
  • Gemengde beschikbaarheid binnen één proces wordt ondersteund: de optimizer degradeert per aanroep; de embedding- en vectorservices falen gesloten per aanroep.
  • Een optimizer-batch boven de limiet faalt gesloten vóór enige upload; het valt niet terug op het PHP-pad.
  • De optimizer-fallback faalt nooit stilzwijgend: controleer de engine-marker in de resultaatmetadata en monitor het waarschuwingsevent.
  • count rapporteert een onbereikbare sidecar of een protocolfout nooit als 0; die werpen getypeerde excepties.
  • Een zoekhit zonder identifier of score valt terug op een lege string en 0.0 in plaats van de batch te laten falen.
  • Een top_k van 0 wordt intern alleen gebruikt voor de count-probe; geef een positieve topK door voor echte zoekopdrachten.
  • Het eerste embedding-verzoek betaalt de eenmalige kosten voor het downloaden en laden van het model; dimensioneer die timeout apart.
  • De sidecar-exceptiehiërarchie en de error-code-families zijn gecatalogiseerd in de Accelerator-foutreferentie.
  • Deze module voert geen cryptografische bewerkingen uit en definieert geen FIPS-specifiek gedrag. De FIPS-moduspositie wordt geregeld door de signing- en compliance-modules, niet hier.

Accelerator delegeert formaatbeïnvloedend werk naar de Optimizer- en Diff-modules en doet geen onafhankelijke formaatconformiteitsbewering. Conformiteit voor het gedelegeerde werk is gedocumenteerd op de referentiepagina’s van Optimizer en Diff. Deze pagina claimt geen externe clausule-identifiers; elke uitspraak is gefundeerd in de productbron. NextPDF doet geen certificeringsbewering.

  • De modulebron draagt @since 2.1.0; deze referentie documenteert het oppervlak zoals geleverd in nextpdf/pro 3.1.0.
  • Alle klassen zijn final en gebruiken constructor-injectie; construeer nieuwe instances in plaats van te muteren.
  • SpectrumClient, VectorSearchResult, BatchResultInterface en de EmbeddingServiceInterface- en VectorIndexInterface-contracten komen uit NextPDF Core; de caller construeert en levert de sidecar-client.
  • OptimizationLevel, PdfOptimizer en PdfDiffer komen uit de Pro Optimizer- en Diff-modules; hun semantiek is gedocumenteerd op die referentiepagina’s.
  • De embedding-service en de vector-index delen de 384-dimensie. Bouw index-vectoren op dezelfde dimensie als de embeddings die ze bevragen.
  • Interne mechanismedetails blijven in de interne documentatie van de bronrepository en vallen buiten de scope van deze handleiding.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-klassen, mechanismetabellen, runbook-bestandsnamen en ticket-prefixen vallen buiten de scope.