| 468 | } |
| 469 | |
| 470 | func Save(sess *session.Session, filename string) (string, error) { |
| 471 | baseName := cmp.Or(filename, sess.ID) |
| 472 | |
| 473 | evalFile := filepath.Join("evals", baseName+".json") |
| 474 | for number := 1; ; number++ { |
| 475 | if _, err := os.Stat(evalFile); err != nil { |
| 476 | break |
| 477 | } |
| 478 | |
| 479 | evalFile = filepath.Join("evals", fmt.Sprintf("%s_%d.json", baseName, number)) |
| 480 | } |
| 481 | |
| 482 | // Ensure session has empty eval criteria for easier discovery |
| 483 | if sess.Evals == nil { |
| 484 | sess.Evals = &session.EvalCriteria{Relevance: []string{}} |
| 485 | } |
| 486 | |
| 487 | return saveJSON(sess, evalFile) |
| 488 | } |
| 489 | |
| 490 | func saveJSON(value any, outputPath string) (string, error) { |
| 491 | data, err := json.MarshalIndent(value, "", " ") |