log_event for structured JSON and artifacts for files such as test logs or reports.
Write events and finish uploads before completing the trajectory. A distinct event needs a
distinct event_id; reuse an ID only when retrying the same write, because an existing ID
is deduplicated rather than updated. Read events with client.trajectories.list_events(tid).
An artifact upload can contain at most 16 MiB. Compress larger text reports or split them
into files. With an active trajectory ID tid, upload a compressed report:
complete_upload attaches the file to the trajectory. Later, call
client.artifacts.retrieve(artifact.artifact_id) and download its download_url.
Report an upload failure separately from the task’s execution result and computed reward.