@@ -21,7 +21,8 @@ import (
2121// metadataJSON represents the minimal structure needed from metadata.json files
2222// Only the ID field is needed to look up existing models
2323type metadataJSON struct {
24- ID string `json:"id"` // Maps to model name for lookup
24+ ID string `json:"id"` // Maps to model name for lookup
25+ OverallAccuracy * float64 `json:"overall_accuracy"` // Overall accuracy score for the model
2526}
2627
2728// parseMetadataJSON parses JSON data into metadataJSON struct, extracting only the ID field
@@ -298,12 +299,12 @@ func processModelDirectory(dirPath string, modelRepo dbmodels.CatalogModelReposi
298299 glog .V (2 ).Infof ("Found existing model %s with ID %d, processing metrics" , metadata .ID , modelID )
299300
300301 // Use batch processing for all artifacts
301- return processModelArtifactsBatch (dirPath , modelID , metadata .ID , metricsArtifactRepo , metricsArtifactTypeID )
302+ return processModelArtifactsBatch (dirPath , modelID , metadata .ID , metadata . OverallAccuracy , metricsArtifactRepo , metricsArtifactTypeID )
302303}
303304
304305// processModelArtifactsBatch processes all metric artifacts for a model in batch
305306// This reduces DB overhead by parsing, checking, and inserting in optimized phases
306- func processModelArtifactsBatch (dirPath string , modelID int32 , modelName string , metricsArtifactRepo dbmodels.CatalogMetricsArtifactRepository , metricsArtifactTypeID int32 ) (int , error ) {
307+ func processModelArtifactsBatch (dirPath string , modelID int32 , modelName string , overallAccuracy * float64 , metricsArtifactRepo dbmodels.CatalogMetricsArtifactRepository , metricsArtifactTypeID int32 ) (int , error ) {
307308 // Parse all metrics files
308309 var evaluationRecords []evaluationRecord
309310 var performanceRecords []performanceRecord
@@ -359,7 +360,7 @@ func processModelArtifactsBatch(dirPath string, modelID int32, modelName string,
359360 if len (evaluationRecords ) > 0 {
360361 externalID := fmt .Sprintf ("accuracy-metrics-model-%d" , modelID )
361362 if ! existingArtifactsMap [externalID ] {
362- artifact := createAccuracyMetricsArtifact (evaluationRecords , modelID , metricsArtifactTypeID , nil , nil )
363+ artifact := createAccuracyMetricsArtifact (evaluationRecords , modelID , metricsArtifactTypeID , overallAccuracy , nil , nil )
363364 artifactsToInsert = append (artifactsToInsert , artifact )
364365 } else {
365366 glog .V (2 ).Infof ("Accuracy metrics artifact already exists, skipping" )
@@ -463,7 +464,7 @@ func parsePerformanceFile(filePath string) ([]performanceRecord, error) {
463464}
464465
465466// createAccuracyMetricsArtifact creates a single metrics artifact from all evaluation records
466- func createAccuracyMetricsArtifact (evalRecords []evaluationRecord , modelID int32 , typeID int32 , existingID * int32 , existingCreateTime * int64 ) * dbmodels.CatalogMetricsArtifactImpl {
467+ func createAccuracyMetricsArtifact (evalRecords []evaluationRecord , modelID int32 , typeID int32 , overallAccuracy * float64 , existingID * int32 , existingCreateTime * int64 ) * dbmodels.CatalogMetricsArtifactImpl {
467468 artifactName := fmt .Sprintf ("accuracy-metrics-model-%d" , modelID )
468469 externalID := fmt .Sprintf ("accuracy-metrics-model-%d" , modelID )
469470
@@ -506,6 +507,14 @@ func createAccuracyMetricsArtifact(evalRecords []evaluationRecord, modelID int32
506507 }
507508 }
508509
510+ // Add overall_average custom property from metadata.json overall_accuracy field
511+ if overallAccuracy != nil {
512+ customProperties = append (customProperties , models.Properties {
513+ Name : "overall_average" ,
514+ DoubleValue : overallAccuracy ,
515+ })
516+ }
517+
509518 // Create the metrics artifact with metricsType set to accuracy-metrics
510519 metricsArtifact := & dbmodels.CatalogMetricsArtifactImpl {
511520 ID : existingID , // Use existing ID if updating
0 commit comments