@@ -104,6 +104,95 @@ export class MongoDBBasedResultStorage implements AccuracyResultStorage {
104104 ) ;
105105 }
106106
107+ async saveModelResponseForPromptAtomic ( {
108+ commitSHA,
109+ runId,
110+ prompt,
111+ expectedToolCalls,
112+ modelResponse,
113+ } : {
114+ commitSHA : string ;
115+ runId : string ;
116+ prompt : string ;
117+ expectedToolCalls : ExpectedToolCall [ ] ;
118+ modelResponse : ModelResponse ;
119+ } ) : Promise < void > {
120+ const savedModelResponse : ModelResponse = { ...modelResponse } ;
121+ for ( const field of OMITTED_MODEL_RESPONSE_FIELDS ) {
122+ delete savedModelResponse [ field ] ;
123+ }
124+
125+ await this . resultCollection . updateOne (
126+ { commitSHA, runId } ,
127+ [
128+ {
129+ $set : {
130+ runStatus : {
131+ $ifNull : [ "$runStatus" , AccuracyRunStatus . InProgress ] ,
132+ } ,
133+ createdOn : {
134+ $ifNull : [ "$createdOn" , Date . now ( ) ] ,
135+ } ,
136+ commitSHA : commitSHA ,
137+ runId : runId ,
138+ promptResults : {
139+ $let : {
140+ vars : {
141+ existingPrompts : { $ifNull : [ "$promptResults" , [ ] ] } ,
142+ promptExists : {
143+ $in : [
144+ prompt ,
145+ {
146+ $ifNull : [
147+ { $map : { input : "$promptResults" , as : "pr" , in : "$$pr.prompt" } } ,
148+ [ ] ,
149+ ] ,
150+ } ,
151+ ] ,
152+ } ,
153+ } ,
154+ in : {
155+ $map : {
156+ input : {
157+ $cond : {
158+ if : "$$promptExists" ,
159+ then : "$$existingPrompts" ,
160+ else : {
161+ $concatArrays : [
162+ "$$existingPrompts" ,
163+ [ { prompt, expectedToolCalls, modelResponses : [ ] } ] ,
164+ ] ,
165+ } ,
166+ } ,
167+ } ,
168+ as : "promptResult" ,
169+ in : {
170+ $cond : {
171+ if : { $eq : [ "$$promptResult.prompt" , prompt ] } ,
172+ then : {
173+ prompt : "$$promptResult.prompt" ,
174+ expectedToolCalls : "$$promptResult.expectedToolCalls" ,
175+ modelResponses : {
176+ $concatArrays : [
177+ "$$promptResult.modelResponses" ,
178+ [ savedModelResponse ] ,
179+ ] ,
180+ } ,
181+ } ,
182+ else : "$$promptResult" ,
183+ } ,
184+ } ,
185+ } ,
186+ } ,
187+ } ,
188+ } ,
189+ } ,
190+ } ,
191+ ] ,
192+ { upsert : true }
193+ ) ;
194+ }
195+
107196 async close ( ) : Promise < void > {
108197 await this . client . close ( ) ;
109198 }
0 commit comments