Salta ai contenuti
getnextpdf.com

Pro edizione

Accelerator — Riferimento approfondito

Questa pagina è il riferimento approfondito per la superficie di accelerazione pubblica di NextPDF\Pro\Accelerator. Copre la factory del provider, l’optimizer batch accelerato, il wrapper del differ e i servizi CPU basati su sidecar per l’embedding e la ricerca vettoriale. Indica parametri, valori predefiniti, modalità di errore e semantica di fallback. Consultare prima la pagina della funzionalità Accelerator per indicazioni sul flusso di lavoro.

Questa funzionalità è distribuita in NextPDF Pro (nextpdf/pro) e si attiva con un envelope di licenza di livello Pro. Un deployment privo di tale entitlement non carica le classi della funzionalità. Confronta le edizioni e ottieni una licenza.

Accelerator non ha un flag di licenza per singola funzionalità. Il codice è distribuito con l’edizione Pro; il percorso dell’optimizer accelerato è selezionato a runtime da una sonda di raggiungibilità del sidecar. Il servizio di embedding e l’indice vettoriale non hanno alcun fallback PHP e falliscono fail-closed quando il sidecar è irraggiungibile.

Terminal window
composer require nextpdf/pro:^3

Il metapacchetto nextpdf/premium installa il codice nextpdf/pro; questo modulo risiede nel namespace NextPDF\Pro\Accelerator.

SimboloParametriComportamento predefinitoRestituisceSolleva o fallisce conNote
ProAcceleratorProvider::__constructSpectrumClient $clientVincola il provider a un client di sidecar di CoreProAcceleratorProviderNulla dichiaratoIl chiamante costruisce e fornisce il client
ProAcceleratorProvider::isAvailablenessunoSonda la raggiungibilità del sidecar tramite il clientboolNulla dichiaratoSolo raggiungibilità; gli endpoint sono sondati a ogni chiamata
ProAcceleratorProvider::embeddingnessunoRestituisce il servizio di embedding memoizzatoEmbeddingServiceInterfaceNulla dichiaratoUna istanza di CpuEmbeddingService per provider
ProAcceleratorProvider::vectorIndexstring $collectionId = 'default'Restituisce un handle di indice nuovo vincolato alla collezioneVectorIndexInterfaceNulla dichiaratoNon memoizzato; un handle per chiamata
ProAcceleratorProvider::optimizernessunoRestituisce l’optimizer accelerato memoizzatoAcceleratedOptimizerNulla dichiaratoCostruito con il client del provider
ProAcceleratorProvider::differnessunoRestituisce il wrapper del differ memoizzatoAcceleratedDifferNulla dichiaratoCostruito con il client del provider
AcceleratedOptimizer::__construct?SpectrumClient $spectrum = null, OptimizationLevel $level = OptimizationLevel::Balanced, ?LoggerInterface $logger = nullAvvolge il PdfOptimizer PHP al livello indicatoAcceleratedOptimizerNulla dichiaratoUn client null seleziona il percorso PHP; un logger null seleziona NullLogger
AcceleratedOptimizer::optimizeBatcharray<string, string> $documentsAnalizza ciascun documento; trasferisce il lavoro sulle immagini al sidecar quando raggiungibileBatchResultInterfaceSpectrumApiException SPEC-SEC-001 (HTTP 413) per un batch oltre il limite; marcatori di errore per singolo elemento nel risultato di fallbackGli errori di trasporto dopo l’ammissione degradano al percorso PHP
AcceleratedDiffer::__construct?SpectrumClient $spectrum = nullConserva il client opzionale per compatibilità futuraAcceleratedDifferNulla dichiaratoIl client non è utilizzato in questa release
AcceleratedDiffer::comparestring $sourcePdf, string $targetPdfConfronta due documenti interamente in PHPDiffResultCome il PdfDiffer di ProIn questa release non viene emessa alcuna richiesta al sidecar
AcceleratedDiffer::isSpectrumWirednessunoRiporta se è stato iniettato un client di sidecarboolNulla dichiaratoSolo stato di cablaggio; non emette alcuna richiesta
CpuEmbeddingService::embedstring $textDelega a batchEmbed e restituisce l’elemento zerolist<float>Come batchEmbedVettore a 384 dimensioni
CpuEmbeddingService::batchEmbedarray $textsEsegue l’embedding del batch sul sidecarlist<list<float>>InvalidArgumentException per un batch vuoto; SpectrumNotAvailableException quando irraggiungibile; SpectrumApiException per una risposta fallita, malformata o con conteggio non coincidenteNon restituisce mai risultati parziali
CpuEmbeddingService::getDimensionnessunoRestituisce 384intNulla dichiaratoCostante
CpuEmbeddingService::getModelNamenessunoRestituisce all-MiniLM-L6-v2stringNulla dichiaratoCostante
CpuVectorIndex::__constructSpectrumClient $client, string $collectionId = 'default'Vincola l’handle a una sola collezioneCpuVectorIndexNulla dichiaratoUn handle per identificatore di collezione
CpuVectorIndex::buildarray $vectors, array $idsCostruisce l’indice della collezione sul sidecarvoidInvalidArgumentException per una lunghezza non coincidente; SpectrumNotAvailableException quando irraggiungibileUn input vuoto restituisce senza contattare il sidecar
CpuVectorIndex::searcharray $queryVector, int $topK = 10Ricerca dei vicini più prossimi ordinatalist<VectorSearchResult>SpectrumNotAvailableException quando irraggiungibile; SpectrumApiException per un envelope di errore in banda; JsonException per un corpo malformatoRank per ciascun hit nei metadati del risultato
CpuVectorIndex::deletearray $idsRifiuta semprevoid (dichiarato)Sempre: SpectrumApiException SPEC-INDEX-004 (HTTP 501)HNSW non ha cancellazione per singolo vettore; ricostruire invece
CpuVectorIndex::countnessunoLegge il totale della collezione tramite una sonda dimensionataintSpectrumNotAvailableException quando irraggiungibile; SpectrumApiException per un errore o una risposta di conteggio malformataRestituisce 0 solo per un indice confermato vuoto
CpuVectorIndex::INDEX_DIMENSIONCostante pubblica 384intCorrisponde alla dimensione dell’embedding
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 è il punto di ingresso. embedding(), optimizer() e differ() memoizzano le proprie istanze. vectorIndex($collectionId) restituisce un handle nuovo a ogni chiamata, vincolato all’identificatore di collezione fornito. isAvailable() sonda la raggiungibilità del sidecar tramite il SpectrumClient di Core iniettato.

optimizeBatch restituisce un risultato batch indicizzato per gli identificatori di documento del chiamante. Quando il sidecar è raggiungibile, il payload aggregato viene validato rispetto al budget del client prima di qualsiasi buffering o upload. Un batch oltre il limite fallisce fail-closed con SpectrumApiException SPEC-SEC-001 (HTTP 413); non degrada mai al percorso PHP. Un batch ammesso viene inviato al sidecar per il lavoro parallelo sulle immagini.

Un errore di trasporto, di autenticazione o di parsing della risposta dopo l’ammissione degrada all’optimizer PHP, che analizza ciascun documento in sequenza. La degradazione è osservabile due volte: i metadati del risultato riportano il motore php_fallback con hardware di riepilogo cpu, e un avviso PSR-3 viene emesso sotto il nome di evento spectrum.optimize.fallback. L’avviso riporta solo la classe dell’eccezione e il conteggio dei documenti; nessun byte di documento viene registrato. Nel risultato di fallback, un errore di analisi per singolo documento produce un elemento con stato di errore e codice SPEC-PARSE-001; gli altri documenti del batch vengono comunque completati.

Il livello di ottimizzazione predefinito è Balanced. I campi del risultato per singolo elemento sono original_bytes, optimized_bytes, objects_removed, images_before, images_after, savings_percent e processing_time_ms.

compare viene eseguito interamente in PHP tramite il PdfDiffer di Pro: parsing della struttura, estrazione del testo e algoritmo di diff. In questa release non viene emessa alcuna richiesta al sidecar. Il contratto del differ accetta solo stringhe PDF grezze, quindi un risultato di parsing del sidecar non può essere consumato; il trasferimento aggiungerebbe costo senza alcun beneficio. Un client iniettato viene conservato per una futura funzionalità di parse-offload. isSpectrumWired() espone lo stato di cablaggio senza emettere una richiesta.

embed delega a batchEmbed([$text]) e restituisce l’elemento zero. batchEmbed([]) solleva InvalidArgumentException prima di contattare il sidecar. Un sidecar irraggiungibile solleva SpectrumNotAvailableException. La semantica del batch è tutto-o-niente: un errore per singolo elemento, un vettore mancante o malformato, o un conteggio non coincidente sollevano SpectrumApiException (gli errori di forma del protocollo riportano SPEC-IO-001) anziché restituire vettori parziali. Un componente non numerico all’interno di un vettore restituito viene forzato a 0.0. getDimension restituisce 384; getModelName restituisce all-MiniLM-L6-v2. Il sidecar scarica e carica il modello ONNX in modalità lazy alla prima richiesta.

Ogni handle è vincolato a un identificatore di collezione; ogni collezione corrisponde a un indice HNSW in memoria separato nel sidecar. build richiede liste di vettori e identificatori di uguale lunghezza e in caso contrario solleva InvalidArgumentException; un input vuoto restituisce senza una chiamata al sidecar. search restituisce hit ordinati con un rank a base uno nei metadati di ciascun risultato. Un envelope di errore in banda solleva SpectrumApiException; un envelope privo di codice viene mappato a SPEC-INDEX-003. delete rifiuta sempre con SpectrumApiException SPEC-INDEX-004 (HTTP 501, non ripetibile) perché HNSW non supporta la cancellazione per singolo vettore; ricostruire invece l’indice.

count è fail-closed e non ambiguo. Un sidecar irraggiungibile solleva SpectrumNotAvailableException; gli errori di trasporto e del sidecar si propagano inalterati. In una risposta altrimenti riuscita, un corpo non JSON solleva SPEC-INDEX-005, un metadata.total_vectors mancante solleva SPEC-INDEX-006, e un totale non intero o negativo solleva SPEC-INDEX-007. count restituisce 0 solo per un indice confermato vuoto. La sonda di dimensione invia un vettore nullo di esattamente INDEX_DIMENSION (384) dimensioni con un top_k di 0, così un sidecar che valida la dimensione lo accetta.

  • La memoria del sidecar è volatile: un riavvio cancella tutte le collezioni HNSW. Trattare la costruzione dell’indice come idempotente e rieseguirla dopo un riavvio.
  • La disponibilità mista all’interno di un singolo processo è supportata: l’optimizer degrada per chiamata; i servizi di embedding e vettoriale falliscono fail-closed per chiamata.
  • Un batch dell’optimizer oltre il limite fallisce fail-closed prima di qualsiasi upload; non ripiega sul percorso PHP.
  • Il fallback dell’optimizer non fallisce mai in silenzio: verificare il marcatore di motore nei metadati del risultato e monitorare l’evento di avviso.
  • count non riporta mai un sidecar irraggiungibile o un errore di protocollo come 0; questi sollevano eccezioni tipizzate.
  • Un hit di ricerca privo del proprio identificatore o punteggio assume come predefiniti una stringa vuota e 0.0 anziché far fallire il batch.
  • Un top_k di 0 è usato internamente solo per la sonda di conteggio; passare un topK positivo per ricerche reali.
  • La prima richiesta di embedding paga il costo una tantum di download e caricamento del modello; dimensionare tale timeout separatamente.
  • La gerarchia delle eccezioni del sidecar e le famiglie di codici di errore sono catalogate nel riferimento agli errori di Accelerator.
  • Questo modulo non esegue alcuna operazione crittografica e non definisce alcun comportamento specifico per FIPS. La postura in modalità FIPS è governata dai moduli di firma e compliance, non qui.

Accelerator delega il lavoro che incide sul formato ai moduli Optimizer e Diff e non asserisce alcuna conformità di formato indipendente. La conformità per il lavoro delegato è documentata nelle pagine di riferimento di Optimizer e Diff. Questa pagina non dichiara alcun identificatore di clausola esterno; ogni affermazione è fondata sul codice sorgente del prodotto. NextPDF non avanza alcuna dichiarazione di certificazione.

  • Il codice sorgente del modulo riporta @since 2.1.0; questo riferimento documenta la superficie come distribuita in nextpdf/pro 3.1.0.
  • Tutte le classi sono final e usano l’iniezione tramite costruttore; costruire nuove istanze anziché mutare.
  • SpectrumClient, VectorSearchResult, BatchResultInterface e i contratti EmbeddingServiceInterface e VectorIndexInterface provengono da NextPDF Core; il chiamante costruisce e fornisce il client di sidecar.
  • OptimizationLevel, PdfOptimizer e PdfDiffer provengono dai moduli Optimizer e Diff di Pro; la loro semantica è documentata in quelle pagine di riferimento.
  • Il servizio di embedding e l’indice vettoriale condividono la dimensione 384. Costruire i vettori dell’indice alla stessa dimensione degli embedding che li interrogano.
  • I dettagli di meccanismo interni restano nella documentazione interna del repository sorgente e sono fuori ambito per questo manuale.

Questa pagina documenta solo il comportamento osservabile esternamente e la superficie API pubblica supportata. I percorsi di namespace interni, le classi di supporto, le tabelle dei meccanismi, i nomi dei file dei runbook e i prefissi dei ticket sono fuori ambito.