@@ -216,38 +216,100 @@ var generateCmd = &cobra.Command{
216
216
},
217
217
}
218
218
219
- func (w * Worker ) runPrecheckScoring (precheckPRAnswers []string , precheckPRQuestions []string , lab string , outputDir string ) error {
220
- if len (precheckPRAnswers ) != len (precheckPRQuestions ) {
221
- errMsg := "PR questions and BAM answers returned a different number of entries, something went wrong."
219
+ func (w * Worker ) runPrecheckScoring (precheckPRAnswers []string , precheckEndpointAnswers [] string , precheckPRQuestions []string , lab string , outputDir string , preCheckScoringModelName string ) error {
220
+ if len (precheckPRAnswers ) != len (precheckEndpointAnswers ) {
221
+ errMsg := "PR questions a Endpoint answers returned a different number of entries, something went wrong."
222
222
w .logger .Error (errMsg )
223
223
return fmt .Errorf (errMsg )
224
224
}
225
- // 3. format new request via CLI
226
- // 4. Send request
227
- // 5. recieve data back
228
- // 6. write output to the same outDir as precheck
229
- // 7. Modify generate functions to include this new special file
225
+
226
+ workDir := "."
227
+ if WorkDir != "" {
228
+ workDir = WorkDir
229
+ }
230
+ chatlogDir := path .Join (workDir , "data" , "chatlogs" )
231
+ combinedYAMLScoringPath := path .Join (outputDir , "combined_chatlog_scoring.yaml" )
232
+
233
+ type QuestionScore struct {
234
+ Question string
235
+ HumanAnswer string
236
+ EndpointAnswer string
237
+ Score string
238
+ }
239
+
240
+ type QuestionScoreReport struct {
241
+ RunTime string
242
+ QuestionScores []QuestionScore
243
+ }
244
+
245
+ yamlData := QuestionScoreReport {}
230
246
for i := 0 ; i < len (precheckPRAnswers ); i ++ {
231
247
err , promptTemplate := generatePrecheckScoringPrompt (precheckPRAnswers [i ], precheckPRQuestions [i ])
232
248
if err != nil {
233
249
w .logger .Errorf ("Failed to generate a prompt for precheck scorring: %v" , err )
234
250
return err
235
251
}
236
- fmt .Print (promptTemplate ) // ignoring errors for now
237
- // SOME REQUEST TO SOME PART OF THE BAM ENDPOINT USING THE TEMPLATE
238
252
253
+ commandStr := fmt .Sprintf ("chat --quick-question %s" , promptTemplate )
254
+ if TlsInsecure {
255
+ commandStr += " --tls-insecure"
256
+ }
257
+ if PreCheckScoringEndpointURL != localEndpoint && preCheckScoringModelName != "unknown" {
258
+ commandStr += fmt .Sprintf (" --endpoint-url %s --model %s" , PreCheckEndpointURL , preCheckScoringModelName )
259
+ }
260
+ cmdArgs := strings .Fields (commandStr )
261
+ cmd := exec .Command (lab , cmdArgs ... )
262
+ // Register the command for reporting/logging
263
+ w .cmdRun = cmd .String ()
264
+ w .logger .Infof ("Running the precheck scoring command: %s" , cmd .String ())
265
+
266
+ cmd .Dir = workDir
267
+ cmd .Env = os .Environ ()
268
+ var out bytes.Buffer
269
+ var errOut bytes.Buffer
270
+ cmd .Stdout = & out
271
+ cmd .Stderr = & errOut
272
+ err = cmd .Run ()
273
+ if err != nil {
274
+ w .logger .Errorf ("Precheck scoring command failed with error: %v; stderr: %s" , err , errOut .String ())
275
+ continue
276
+ }
277
+
278
+ questionScore := QuestionScore {
279
+ Question : precheckPRQuestions [i ],
280
+ HumanAnswer : precheckPRAnswers [i ],
281
+ EndpointAnswer : precheckEndpointAnswers [i ],
282
+ Score : out .String (),
283
+ }
284
+ yamlData .QuestionScores = append (yamlData .QuestionScores , questionScore )
285
+
286
+ }
287
+
288
+ yamlData .RunTime = time .Now ().Format ("2006-01-02T15_04_05" )
289
+
290
+ scoringYaml , err := yaml .Marshal (yamlData )
291
+ if err != nil {
292
+ w .logger .Errorf ("Could not marshal scoring data to YAML: %v" , err )
293
+ return err
239
294
}
295
+
296
+ err = os .WriteFile (path .Join (chatlogDir , combinedYAMLScoringPath ), scoringYaml , 0644 )
297
+ if err != nil {
298
+ w .logger .Errorf ("Could not write chatlog to file: %v" , err )
299
+ return err
300
+ }
301
+
240
302
return nil
241
303
}
242
304
243
305
// runPrecheck runs lab chat against git diffed yaml files
244
- func (w * Worker ) runPrecheck (lab , outputDir , modelName string ) (error , []string , []string ) {
306
+ func (w * Worker ) runPrecheck (lab , outputDir , modelName string ) (error , []string , []string , [] string ) {
245
307
workDir := "."
246
308
if WorkDir != "" {
247
309
workDir = WorkDir
248
310
}
249
311
precheckPRAnswers := []string {}
250
- // precheckEndpointAnswers := []string{}
312
+ precheckEndpointAnswers := []string {}
251
313
precheckPRQuestions := []string {}
252
314
chatlogDir := path .Join (workDir , "data" , "chatlogs" )
253
315
combinedYAMLPath := path .Join (outputDir , "combined_chatlogs.yaml" )
@@ -329,19 +391,19 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
329
391
stdout , err := cmd .StdoutPipe ()
330
392
if err != nil {
331
393
w .logger .Errorf ("Could not get stdout pipe: %v" , err )
332
- return err , []string {}, []string {}
394
+ return err , []string {}, []string {}, [] string {}
333
395
}
334
396
335
397
w .logger .Debug ("Running ilab diff" )
336
398
if err := cmd .Start (); err != nil {
337
399
w .logger .Errorf ("Could not start command(%s %s): %v" , cmd .Path , strings .Join (cmd .Args , " " ), err )
338
- return err , []string {}, []string {}
400
+ return err , []string {}, []string {}, [] string {}
339
401
}
340
402
341
403
output , err := io .ReadAll (stdout )
342
404
if err != nil {
343
405
w .logger .Errorf ("Could not read stdout: %v" , err )
344
- return err , []string {}, []string {}
406
+ return err , []string {}, []string {}, [] string {}
345
407
}
346
408
outputStr := string (output )
347
409
w .logger .Debugf ("Output: %s" , outputStr )
@@ -359,7 +421,7 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
359
421
if yamlFileCount == 0 {
360
422
errMsg := "No modified YAML files detected in the PR for precheck"
361
423
w .logger .Error (errMsg )
362
- return fmt .Errorf (errMsg ), []string {}, []string {}
424
+ return fmt .Errorf (errMsg ), []string {}, []string {}, [] string {}
363
425
}
364
426
365
427
// Proceed with YAML files processing if they exist
@@ -372,14 +434,14 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
372
434
f , err := os .Open (filePath )
373
435
if err != nil {
374
436
w .logger .Errorf ("Could not open taxonomy file: %v" , err )
375
- return err , []string {}, []string {}
437
+ return err , []string {}, []string {}, [] string {}
376
438
}
377
439
defer f .Close ()
378
440
379
441
content , err := io .ReadAll (f )
380
442
if err != nil {
381
443
w .logger .Error (err )
382
- return err , []string {}, []string {}
444
+ return err , []string {}, []string {}, [] string {}
383
445
}
384
446
385
447
var data map [string ]interface {}
@@ -388,7 +450,7 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
388
450
// Odds are, the PR was not yaml-linted since it's invalid YAML failing unmarshalling
389
451
err = fmt .Errorf ("the original taxonomy YAML likely did not pass yaml-linting, here is the unmarshalling error: %v" , err )
390
452
w .logger .Error (err )
391
- return err , []string {}, []string {}
453
+ return err , []string {}, []string {}, [] string {}
392
454
}
393
455
394
456
// Check if "seed_examples" exists and is a list
@@ -397,7 +459,7 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
397
459
if ! ok {
398
460
err = fmt .Errorf ("seed_examples not found or not a list" )
399
461
w .logger .Error (err )
400
- return err , []string {}, []string {}
462
+ return err , []string {}, []string {}, [] string {}
401
463
}
402
464
403
465
for _ , item := range seedExamples {
@@ -457,7 +519,7 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
457
519
"output" : out .String (),
458
520
}
459
521
460
- // precheckEndpointAnswers = append(precheckEndpointAnswers, out.String())
522
+ precheckEndpointAnswers = append (precheckEndpointAnswers , out .String ())
461
523
precheckPRQuestions = append (precheckPRQuestions , originalQuestion )
462
524
463
525
if hasContext {
@@ -492,8 +554,8 @@ func (w *Worker) runPrecheck(lab, outputDir, modelName string) (error, []string,
492
554
time .Sleep (1 * time .Second )
493
555
}
494
556
}
495
- // return nil, precheckPRAnswers, precheckEndpointAnswers
496
- return nil , precheckPRAnswers , precheckPRQuestions
557
+ return nil , precheckPRAnswers , precheckEndpointAnswers , precheckPRQuestions
558
+ // return nil, precheckPRAnswers, precheckPRQuestions
497
559
}
498
560
499
561
// processJob processes a given job, all jobs start here
@@ -615,13 +677,13 @@ func (w *Worker) processJob() {
615
677
case jobPreCheck :
616
678
// @instructlab-bot precheck
617
679
// Runs precheck on a backend node
618
- err , precheckPRAnswers , precheckEndpointAnswers := w .runPrecheck (lab , outputDir , modelName )
680
+ err , precheckPRAnswers , precheckEndpointAnswers , precheckPRQuestions := w .runPrecheck (lab , outputDir , modelName )
619
681
if err != nil {
620
682
sugar .Errorf ("Could not run precheck: %v" , err )
621
683
w .reportJobError (err )
622
684
return
623
685
}
624
- err = w .runPrecheckScoring (precheckPRAnswers , precheckEndpointAnswers , lab , outputDir )
686
+ err = w .runPrecheckScoring (precheckPRAnswers , precheckEndpointAnswers , precheckPRQuestions , lab , outputDir , modelName )
625
687
if err != nil {
626
688
sugar .Errorf ("Could not run scoring on result of precheck: %v" , err )
627
689
w .reportJobError (err )
0 commit comments