6060
6161@dataclass
6262class Completion :
63- inputs : list [types .InputMessage ]
64- outputs : list [types .OutputMessage ]
65- system_instruction : list [types .MessagePart ]
63+ inputs : list [types .InputMessage ] | None
64+ outputs : list [types .OutputMessage ] | None
65+ system_instruction : list [types .MessagePart ] | None
6666
6767
6868@dataclass
@@ -203,17 +203,19 @@ def _do_upload(
203203 def on_completion (
204204 self ,
205205 * ,
206- inputs : list [types .InputMessage ],
207- outputs : list [types .OutputMessage ],
208- system_instruction : list [types .MessagePart ],
206+ inputs : list [types .InputMessage ] | None = None ,
207+ outputs : list [types .OutputMessage ] | None = None ,
208+ system_instruction : list [types .MessagePart ] | None = None ,
209209 span : Span | None = None ,
210210 log_record : LogRecord | None = None ,
211211 ** kwargs : Any ,
212212 ) -> None :
213+ if not any ([inputs , outputs , system_instruction ]):
214+ return
213215 completion = Completion (
214- inputs = inputs ,
215- outputs = outputs ,
216- system_instruction = system_instruction ,
216+ inputs = inputs or None ,
217+ outputs = outputs or None ,
218+ system_instruction = system_instruction or None ,
217219 )
218220 # generate the paths to upload to
219221 ref_names = self ._calculate_ref_path ()
@@ -225,23 +227,36 @@ def to_dict(
225227 ) -> JsonEncodeable :
226228 return [asdict (dc ) for dc in dataclass_list ]
227229
230+ references = [
231+ (ref_name , ref , ref_attr )
232+ for ref_name , ref , ref_attr in [
233+ (
234+ ref_names .inputs_ref ,
235+ completion .inputs ,
236+ GEN_AI_INPUT_MESSAGES_REF ,
237+ ),
238+ (
239+ ref_names .outputs_ref ,
240+ completion .outputs ,
241+ GEN_AI_OUTPUT_MESSAGES_REF ,
242+ ),
243+ (
244+ ref_names .system_instruction_ref ,
245+ completion .system_instruction ,
246+ GEN_AI_SYSTEM_INSTRUCTIONS_REF ,
247+ ),
248+ ]
249+ if ref
250+ ]
228251 self ._submit_all (
229252 {
230- # Use partial to defer as much as possible to the background threads
231- ref_names .inputs_ref : partial (to_dict , completion .inputs ),
232- ref_names .outputs_ref : partial (to_dict , completion .outputs ),
233- ref_names .system_instruction_ref : partial (
234- to_dict , completion .system_instruction
235- ),
236- },
253+ ref_name : partial (to_dict , ref )
254+ for ref_name , ref , _ in references
255+ }
237256 )
238257
239258 # stamp the refs on telemetry
240- references = {
241- GEN_AI_INPUT_MESSAGES_REF : ref_names .inputs_ref ,
242- GEN_AI_OUTPUT_MESSAGES_REF : ref_names .outputs_ref ,
243- GEN_AI_SYSTEM_INSTRUCTIONS_REF : ref_names .system_instruction_ref ,
244- }
259+ references = {ref_attr : name for name , _ , ref_attr in references }
245260 if span :
246261 span .set_attributes (references )
247262 if log_record :
0 commit comments