Abbiamo esteso il modello dei Cap URN: i cap generici possono ora esprimere in modo più preciso cosa succede al tipo di file a runtime.
È a questo che serve il nuovo quarto asse.
Perché i cap generici contano
Alcune trasformazioni sono concrete fin dall’inizio: da PDF a testo, da audio a trascrizione, da immagine a descrizione. Sono facili da descrivere. L’input è noto, l’output è noto e il planner può instradarle direttamente.
Ma alcuni strumenti sono più generali di così. Non esistono per convertire un tipo di media in un altro. Operano sulla struttura preservando il tipo concreto di file di qualunque cosa ricevano a runtime.
È questo che intendiamo per cap generico.
La forma più semplice è questa:
media: -> media:
Dice che lo strumento accetta media e produce media. Ma per un cap generico questa informazione non basta ancora. C’è una distinzione importante tra:
- «l’output è l’output generico dichiarato»
- «l’output preserva il tipo concreto di file dell’input a runtime»
Sono semantiche diverse, e contano per il routing.
Il caso che ci ha spinti: decimate
Prendiamo un’operazione su sequenze come decimate.
Il suo compito non è convertire PDF in qualcos’altro, o JPEG in qualcos’altro. Il suo compito è prendere una sequenza e ridurla secondo una certa regola, preservando il tipo reale degli elementi. Se gli dai una lista di PDF, di immagini o di file audio, l’output dovrebbe restare rispettivamente PDF, immagini o file audio.
Dal punto di vista dell’utente sembra ovvio. Ma il vecchio modello a tre assi non ci permetteva di esprimere questa distinzione in modo abbastanza esplicito. Il planner vedeva un input generico e un output generico, ma non poteva rappresentare in modo pulito il fatto che l’output a runtime eredita comunque l’identità concreta del media dall’input a runtime.
Il risultato pratico è che casi come decimate ora vengono modellati direttamente, invece di essere forzati in una forma più adatta alle conversioni fisse.
Il nuovo asse: effect
Prima di questo cambiamento, un cap descriveva ciò che accetta (i), ciò che dichiara in output (o) e i tag non direzionali che descrivono l’operazione (y):
(i, o, y)
Ora un cap è:
(i, o, y, e)
dove e è il nuovo asse effect. Descrive come l’output a runtime si relaziona all’input a runtime. I valori importanti sono:
| Valore | Significato |
|---|---|
effect=declared |
L’output è esattamente quello dichiarato dal cap. È il valore predefinito quando l’effetto è omesso. |
effect=none |
Il cap preserva l’identità del media a runtime. |
effect=patch |
Il cap trasforma l’identità del media a runtime in modo strutturato. |
Per cap generici come decimate, il caso chiave è effect=none. Se un cap dice:
media: -> media:
e dice anche:
effect=none
allora un input a runtime media:document;ext=pdf produce un output a runtime media:document;ext=pdf.
La stessa logica vale per PNG, WAV, JSON e per qualunque altro tipo che il cap possa legittimamente trattare.
Cosa sblocca
Il guadagno immediato non è una teoria più elegante. È un routing migliore per una classe reale e importante di trasformazioni.
MachineFabric può ora rappresentare strumenti generici rispetto al tipo di input, strutturalmente significativi e conservativi rispetto all’identità del file a runtime. Questo migliora la qualità dei suggerimenti per casi come decimate e per qualsiasi cap futuro che operi sui file in modo generico senza convertirli in una famiglia di media diversa.
In altre parole:
- le conversioni concrete continuano a funzionare come prima
- gli strumenti generici che preservano il tipo a runtime sono ora trattati a pieno titolo
- il planner non ha più bisogno di un trattamento speciale per capire cosa significano questi strumenti
Chiarisce anche l’identità
Questo cambiamento risolve anche una vecchia ambiguità intorno all’identità.
Prima, la forma generica più ampia:
cap:in=media:;out=media:
sembrava poter essere l’identità, ma non diceva esplicitamente che l’identità del media a runtime veniva preservata.
Con il nuovo modello, l’identità diventa esplicita:
cap:effect=none
È un modo più pulito e più onesto di dire cosa significhi identità in un sistema che deve ragionare sulla preservazione del tipo a runtime.
Il punto più ampio
L’obiettivo di MachineFabric non è solo concatenare un catalogo fisso di conversioni concrete di file.
L’obiettivo è permettere agli utenti di nominare una destinazione e lasciare che il sistema trovi il percorso giusto, anche quando il percorso giusto passa attraverso strumenti generici invece che strettamente specifici per formato.
Aggiungere il quarto asse rende tutto questo possibile in modo più rigoroso.
Dà ai Cap URN generici un posto preciso nel modello e migliora casi reali lato utente come decimate, aiutando il planner a capire cosa quei cap facciano davvero.