Skip to content

Commit

Permalink
fix, Linting problems
Browse files Browse the repository at this point in the history
  • Loading branch information
zimmski committed Oct 4, 2024
1 parent 9bdec1b commit a6b24d9
Show file tree
Hide file tree
Showing 33 changed files with 257 additions and 191 deletions.
32 changes: 20 additions & 12 deletions cmd/eval-dev-quality/cmd/evaluate.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,9 @@ func (command *Evaluate) Initialize(args []string) (evaluationContext *evaluate.
if err != nil {
command.logger.Panicf("ERROR: %s", err)
}
configurationFile.Close()
if err := configurationFile.Close(); err != nil {
command.logger.Panicf("ERROR: %s", err)
}

command.Models = configuration.Models.Selected
command.Repositories = configuration.Repositories.Selected
Expand Down Expand Up @@ -360,9 +362,7 @@ func (command *Evaluate) Initialize(args []string) (evaluationContext *evaluate.
sort.Strings(command.Repositories)
}
evaluationContext.RepositoryPaths = command.Repositories
for _, r := range command.Repositories {
evaluationConfiguration.Repositories.Selected = append(evaluationConfiguration.Repositories.Selected, r)
}
evaluationConfiguration.Repositories.Selected = append(evaluationConfiguration.Repositories.Selected, command.Repositories...)
}

// Make the resolved selected languages available in the command.
Expand Down Expand Up @@ -494,7 +494,11 @@ func (command *Evaluate) Execute(args []string) (err error) {
if err != nil {
command.logger.Panicf("ERROR: cannot create configuration file: %s", err)
}
defer configurationFile.Close()
defer func() {
if err := configurationFile.Close(); err != nil {
command.logger.Panicf("ERROR: %s", err)
}
}()
if err := evaluationConfiguration.Write(configurationFile); err != nil {
command.logger.Panicf("ERROR: %s", err)
}
Expand Down Expand Up @@ -773,7 +777,9 @@ func (command *Evaluate) evaluateKubernetes(ctx *evaluate.Context) (err error) {

parallel.Execute(func() {
var tmplData bytes.Buffer
jobTmpl.Execute(&tmplData, data)
if err := jobTmpl.Execute(&tmplData, data); err != nil {
command.logger.Panicf("ERROR: %s", err)
}

commandOutput, err := util.CommandWithResult(context.Background(), command.logger, &util.Command{
Command: kubeCommand,
Expand Down Expand Up @@ -825,18 +831,20 @@ func (command *Evaluate) evaluateKubernetes(ctx *evaluate.Context) (err error) {

// Copy data from volume back to host.
{
storageTmpl, err := template.ParseFiles(filepath.Join("conf", "kube", "storage-access.yml"))
storageTemplate, err := template.ParseFiles(filepath.Join("conf", "kube", "storage-access.yml"))
if err != nil {
return pkgerrors.Wrap(err, "could not create kubernetes storage access template")
return pkgerrors.Wrap(err, "could not create Kubernetes storage access template")
}

data := map[string]string{
"name": "eval-storage-access",
"namespace": command.Namespace,
}

var tmplData bytes.Buffer
storageTmpl.Execute(&tmplData, data)
var storageTemplateData bytes.Buffer
if err := storageTemplate.Execute(&storageTemplateData, data); err != nil {
return pkgerrors.Wrap(err, "could not execute storate template")
}

// Create the storage access pod.
output, err := util.CommandWithResult(context.Background(), command.logger, &util.Command{
Expand All @@ -846,7 +854,7 @@ func (command *Evaluate) evaluateKubernetes(ctx *evaluate.Context) (err error) {
"-f",
"-", // apply STDIN
},
Stdin: tmplData.String(),
Stdin: storageTemplateData.String(),
})
if err != nil {
return pkgerrors.WithMessage(pkgerrors.WithStack(err), output)
Expand All @@ -862,7 +870,7 @@ func (command *Evaluate) evaluateKubernetes(ctx *evaluate.Context) (err error) {
"-l", "app=eval-storage-access",
"-o", "custom-columns=:metadata.name",
},
Stdin: tmplData.String(),
Stdin: storageTemplateData.String(),
})
if err != nil {
return pkgerrors.WithMessage(pkgerrors.WithStack(err), output)
Expand Down
14 changes: 11 additions & 3 deletions cmd/eval-dev-quality/cmd/report.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cmd

import (
"errors"
"os"
"path/filepath"
"time"
Expand Down Expand Up @@ -47,7 +48,11 @@ func (command *Report) Execute(args []string) (err error) {
if evaluationCSVFile, err = os.OpenFile(filepath.Join(command.ResultPath, "evaluation.csv"), os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0755); err != nil {
command.logger.Panicf("ERROR: %s", err)
}
defer evaluationCSVFile.Close()
defer func() {
if e := evaluationCSVFile.Close(); e != nil {
err = errors.Join(err, pkgerrors.WithStack(e))
}
}()

// Collect all evaluation CSV file paths.
allEvaluationPaths := map[string]bool{}
Expand Down Expand Up @@ -86,7 +91,11 @@ func (command *Report) Execute(args []string) (err error) {
if err != nil {
command.logger.Panicf("ERROR: %s", err)
}
defer modelsMetaInformationCSVFile.Close()
defer func() {
if e := modelsMetaInformationCSVFile.Close(); e != nil {
err = errors.Join(err, pkgerrors.WithStack(e))
}
}()

// Fetch all openrouter models since it is the only provider that currently supports querying meta information.
provider := openrouter.NewProvider().(*openrouter.Provider)
Expand Down Expand Up @@ -139,7 +148,6 @@ func collectAllEvaluationLogFiles(evaluationCSVFilePaths []string) (evaluationLo
if err != nil {
continue
}
filepath.Base(evaluationDirectory)
evaluationLogFilePaths = append(evaluationLogFilePaths, filepath.Join(filepath.Base(evaluationDirectory), "evaluation.log"))
}

Expand Down
8 changes: 4 additions & 4 deletions cmd/eval-dev-quality/cmd/report_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ func TestPathsFromGlobPattern(t *testing.T) {
Before: func(workingDirectory string) {
file, err := os.Create(filepath.Join(workingDirectory, "not-an-evaluation.csv"))
require.NoError(t, err)
file.Close()
require.NoError(t, file.Close())
},

EvaluationGlobPattern: "not-an-evaluation.csv",
Expand Down Expand Up @@ -393,7 +393,7 @@ func TestCollectAllEvaluationLogFiles(t *testing.T) {

file, err := os.Create(filepath.Join(workingDirectory, "someModel", "evaluation.csv"))
require.NoError(t, err)
file.Close()
require.NoError(t, file.Close())
},

EvaluationCSVFilePaths: []string{
Expand Down Expand Up @@ -442,9 +442,9 @@ func createEvaluationDirectoryWithLogFiles(t *testing.T, workingDirectory string

file, err := os.Create(filepath.Join(workingDirectory, "evaluation.csv"))
require.NoError(t, err)
file.Close()
require.NoError(t, file.Close())

file, err = os.Create(filepath.Join(workingDirectory, "evaluation.log"))
require.NoError(t, err)
file.Close()
require.NoError(t, file.Close())
}
21 changes: 14 additions & 7 deletions evaluate/evaluate.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/symflower/eval-dev-quality/evaluate/report"
evaluatetask "github.com/symflower/eval-dev-quality/evaluate/task"
"github.com/symflower/eval-dev-quality/language"
evallanguage "github.com/symflower/eval-dev-quality/language"
"github.com/symflower/eval-dev-quality/log"
evalmodel "github.com/symflower/eval-dev-quality/model"
Expand Down Expand Up @@ -79,7 +78,11 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
if err != nil {
ctx.Log.Panicf("ERROR: unable to create evaluation CSV file: %+v", err)
}
defer evaluationCSVFile.Close()
defer func() {
if err := evaluationCSVFile.Close(); err != nil {
ctx.Log.Panicf("ERROR: cannot close CSV file: %s", err)
}
}()
evaluationFile, err := report.NewEvaluationFile(evaluationCSVFile)
if err != nil {
ctx.Log.Panicf("ERROR: %+v", err)
Expand Down Expand Up @@ -131,7 +134,7 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
}

for _, taskIdentifier := range temporaryRepository.SupportedTasks() {
task, err := evaluatetask.TaskForIdentifier(taskIdentifier)
task, err := evaluatetask.ForIdentifier(taskIdentifier)
if err != nil {
logger.Fatal(err)
}
Expand Down Expand Up @@ -172,7 +175,9 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
}
assessments.AddAssessmentPerTask(model, language, repositoryPath, assessment)
// Write the task assessment to the evaluation CSV file.
evaluationFile.WriteEvaluationRecord(model, language, temporaryRepository.Name(), runCount, assessment)
if err := evaluationFile.WriteEvaluationRecord(model, language, temporaryRepository.Name(), runCount, assessment); err != nil {
logger.Panicf("ERROR: cannot write evaluation record: %s", err)
}
}
})
}
Expand All @@ -191,7 +196,7 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
// Create temporary repositories for each language so the repository is copied only once per language.
temporaryRepositories := map[string]*evaluatetask.Repository{}
for _, l := range ctx.Languages {
relativeRepositoryPaths, err := language.RepositoriesForLanguage(l, ctx.TestdataPath)
relativeRepositoryPaths, err := evallanguage.RepositoriesForLanguage(l, ctx.TestdataPath)
if err != nil {
ctx.Log.Panicf("ERROR: %s", err)
}
Expand Down Expand Up @@ -256,7 +261,7 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
continue
}
for _, taskIdentifier := range temporaryRepository.Tasks {
task, err := evaluatetask.TaskForIdentifier(taskIdentifier)
task, err := evaluatetask.ForIdentifier(taskIdentifier)
if err != nil {
logger.Fatal(err)
}
Expand Down Expand Up @@ -291,7 +296,9 @@ func Evaluate(ctx *Context) (assessments *report.AssessmentStore, totalScore uin
}
assessments.AddAssessmentPerTask(model, language, repositoryPath, assessment)
// Write the task assessment to the evaluation CSV file.
evaluationFile.WriteEvaluationRecord(model, language, temporaryRepository.Name(), runCount, assessment)
if err := evaluationFile.WriteEvaluationRecord(model, language, temporaryRepository.Name(), runCount, assessment); err != nil {
logger.Panicf("ERROR: cannot write evaluation record: %s", err)
}
}
})
}
Expand Down
5 changes: 2 additions & 3 deletions evaluate/evaluate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"github.com/symflower/eval-dev-quality/language"
"github.com/symflower/eval-dev-quality/language/golang"
"github.com/symflower/eval-dev-quality/log"
"github.com/symflower/eval-dev-quality/model"
evalmodel "github.com/symflower/eval-dev-quality/model"
"github.com/symflower/eval-dev-quality/model/llm"
modeltesting "github.com/symflower/eval-dev-quality/model/testing"
Expand Down Expand Up @@ -863,7 +862,7 @@ func TestEvaluate(t *testing.T) {
mockedModelID := "testing-provider/testing-model"
mockedModel := modeltesting.NewMockCapabilityWriteTestsNamed(t, mockedModelID)
mockedProviderID := "testing-provider"
mockedProvider := providertesting.NewMockProviderNamedWithModels(t, mockedProviderID, []model.Model{mockedModel})
mockedProvider := providertesting.NewMockProviderNamedWithModels(t, mockedProviderID, []evalmodel.Model{mockedModel})
mockedLoader := providertesting.NewMockLoader(t)
embeddedProvider := &struct {
provider.Provider
Expand Down Expand Up @@ -947,7 +946,7 @@ func TestEvaluate(t *testing.T) {
mockedModelID := "testing-provider/testing-model"
mockedModel := modeltesting.NewMockCapabilityWriteTestsNamed(t, mockedModelID)
mockedProviderID := "testing-provider"
mockedProvider := providertesting.NewMockProviderNamedWithModels(t, mockedProviderID, []model.Model{mockedModel})
mockedProvider := providertesting.NewMockProviderNamedWithModels(t, mockedProviderID, []evalmodel.Model{mockedModel})
mockedLoader := providertesting.NewMockLoader(t)
embeddedProvider := &struct {
provider.Provider
Expand Down
26 changes: 14 additions & 12 deletions evaluate/metrics/testing/assessments.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,40 @@ import (

// Clean deletes all empty and nondeterministic keys from the assessment.
func Clean(assessment metrics.Assessments) metrics.Assessments {
copy := metrics.Assessments{}
maps.Copy(copy, assessment)
c := metrics.Assessments{}
maps.Copy(c, assessment)

delete(copy, metrics.AssessmentKeyProcessingTime)
delete(c, metrics.AssessmentKeyProcessingTime)

for _, key := range metrics.AllAssessmentKeysStrings {
if copy[metrics.AssessmentKey(key)] == 0 {
delete(copy, metrics.AssessmentKey(key))
if c[metrics.AssessmentKey(key)] == 0 {
delete(c, metrics.AssessmentKey(key))
}
}

return copy
return c
}

// CleanSlice deletes all empty and nondeterministic keys from the assessments.
func CleanSlice(assessments []metrics.Assessments) []metrics.Assessments {
copy := make([]metrics.Assessments, len(assessments))
c := make([]metrics.Assessments, len(assessments))

for i, assessment := range assessments {
copy[i] = Clean(assessment)
c[i] = Clean(assessment)
}

return copy
return c
}

// CleanMap deletes all empty and nondeterministic keys from the assessments.
func CleanMap[E comparable](assessments map[E]metrics.Assessments) map[E]metrics.Assessments {
copy := map[E]metrics.Assessments{}
c := map[E]metrics.Assessments{}

for key, assessment := range assessments {
copy[key] = Clean(assessment)
c[key] = Clean(assessment)
}

return copy
return c
}

// AssessmentsWithProcessingTime is an empty assessment collection with positive processing time.
Expand All @@ -61,8 +61,10 @@ type AssessmentTuple struct {
Assessment metrics.Assessments
}

// AssessmentTuples holds a list of all parameters uniquely defining to which run an assessment belongs to.
type AssessmentTuples []*AssessmentTuple

// ToMap converts a list of assessment tuples to a mapping.
func (at AssessmentTuples) ToMap() (lookup map[model.Model]map[language.Language]map[string]map[task.Identifier]metrics.Assessments) {
lookup = map[model.Model]map[language.Language]map[string]map[task.Identifier]metrics.Assessments{}
for _, t := range at {
Expand Down
13 changes: 10 additions & 3 deletions evaluate/report/csv.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package report
import (
"cmp"
"encoding/csv"
"errors"
"io"
"os"
"slices"
Expand Down Expand Up @@ -72,7 +73,7 @@ func (e *EvaluationFile) WriteLines(records [][]string) (err error) {
return nil
}

// evaluationHeader returns the CSV header for the evaluation CSV.
// EvaluationHeader returns the CSV header for the evaluation CSV.
func EvaluationHeader() (header []string) {
return append([]string{"model-id", "language", "repository", "task", "run", "score"}, metrics.AllAssessmentKeysStrings...)
}
Expand All @@ -84,12 +85,18 @@ func RecordsFromEvaluationCSVFiles(evaluationCSVFilePaths []string) (records [][
if err != nil {
return nil, pkgerrors.WithStack(err)
}
defer file.Close()
defer func() {
if e := file.Close(); e != nil {
err = errors.Join(err, pkgerrors.WithStack(e))
}
}()

csv := csv.NewReader(file)

// Ignore the CSV header.
csv.Read()
if _, err := csv.Read(); err != nil {
return nil, pkgerrors.WithStack(err)
}

evaluationRecords, err := csv.ReadAll()
if err != nil {
Expand Down
Loading

0 comments on commit a6b24d9

Please sign in to comment.