@@ -144,25 +144,28 @@ def attach_cost(
144144) -> None :
145145 """Compute cost for the given stage(s) and attach to `eval_run.cost`, never raising.
146146
147- Caller is responsible for persisting `eval_run` afterwards. When only the
148- embedding stage is provided, a previously-computed response entry on
149- `eval_run.cost` is preserved .
147+ Caller is responsible for persisting `eval_run` afterwards. Either stage's
148+ previously-computed entry on `eval_run.cost` is preserved when that stage's
149+ inputs are not supplied, so partial updates never clobber prior data .
150150 """
151151 try :
152+ existing_cost = eval_run .cost or {}
153+
152154 if response_model is not None and response_results is not None :
153155 response_entry = _build_response_cost_entry (
154156 session = session , model = response_model , results = response_results
155157 )
156158 else :
157- response_entry = ( eval_run . cost or {}) .get ("response" )
159+ response_entry = existing_cost .get ("response" )
158160
159- embedding_entry : dict [str , Any ] | None = None
160161 if embedding_model is not None and embedding_raw_results is not None :
161162 embedding_entry = _build_embedding_cost_entry (
162163 session = session ,
163164 model = embedding_model ,
164165 raw_results = embedding_raw_results ,
165166 )
167+ else :
168+ embedding_entry = existing_cost .get ("embedding" )
166169
167170 eval_run .cost = _build_cost_dict (
168171 response_entry = response_entry ,
0 commit comments