@@ -104,6 +104,95 @@ export class MongoDBBasedResultStorage implements AccuracyResultStorage {
104
104
) ;
105
105
}
106
106
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
+
107
196
async close ( ) : Promise < void > {
108
197
await this . client . close ( ) ;
109
198
}
0 commit comments