-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinit_command.dart
More file actions
91 lines (78 loc) · 2.79 KB
/
init_command.dart
File metadata and controls
91 lines (78 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:devals/src/cli_exception.dart';
import 'package:devals/src/dataset/file_templates/init_templates/init_job_template.dart';
import 'package:devals/src/dataset/file_templates/init_templates/init_sample_template.dart';
import 'package:devals/src/dataset/filesystem_utils.dart';
import 'package:howdy/howdy.dart';
import 'package:path/path.dart' as p;
class InitCommand extends Command<int> {
@override
String get name => 'init';
@override
String get description =>
'Initialize a new dataset configuration in the current directory.';
@override
Future<int> run() async {
terminal.scrollClear();
terminal.writeln();
final currentDir = Directory.current.path;
final devalsYaml = File(p.join(currentDir, devalsYamlFilename));
// Check if already initialized.
if (devalsYaml.existsSync()) {
Text.error(
'$devalsYamlFilename already exists in this directory. '
'This project appears to be already initialized.',
);
return 1;
}
final success = await SpinnerTask.send<bool>(
'Initializing in $currentDir',
task: () async {
// Create devals.yaml marker file
try {
devalsYaml.writeAsStringSync(
'# Marks this directory as a project that contains dash evals.\n'
'# Created by `devals init`.\n'
'dataset: ./evals\n',
);
} catch (e) {
throw CliException('Failed to create $devalsYamlFilename: $e');
}
final evalsDir = p.join(currentDir, 'evals');
// Create evals/tasks/get_started/task.yaml
try {
final taskDir = Directory(p.join(evalsDir, 'tasks', 'get_started'));
taskDir.createSync(recursive: true);
final taskPath = p.join(taskDir.path, 'task.yaml');
File(taskPath).writeAsStringSync(initTaskTemplate());
} catch (e) {
throw CliException('Failed to create task: $e');
}
// Create evals/jobs/local_dev.yaml
final jobsDir = p.join(evalsDir, 'jobs');
try {
Directory(jobsDir).createSync(recursive: true);
final jobPath = p.join(jobsDir, 'local_dev.yaml');
File(jobPath).writeAsStringSync(
initJobTemplate(
name: 'local_dev',
models: ['google/gemini-2.0-flash'],
tasks: ['get_started'],
),
);
} catch (e) {
throw CliException('Failed to create job file: $e');
}
return true;
},
);
if (success) {
Text.success('Initialized — dataset at $currentDir/evals');
terminal.writeln();
Text.body('To run your first evaluation:');
Text.body(' devals run local_dev');
}
return success ? 0 : 1;
}
}