Programming the Versal using a PDI is alot more staightforward than Zynq Ultrascale as all the binaries are placed in the PDI
import xsdb
session = xsdb.start_debug_session()
session.connect(url="TCP:morel18:3121")
# Download PDI to Versal Device
versal = session.targets("--set", filter="name =~ *Versal*")
versal.device_program("project_1.pdi")