langfun 0.1.2.dev202412220804__py3-none-any.whl → 0.1.2.dev202412240804__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langfun/core/eval/v2/checkpointing.py +161 -102
- langfun/core/eval/v2/checkpointing_test.py +1 -0
- langfun/core/eval/v2/experiment.py +4 -4
- langfun/core/eval/v2/reporting.py +56 -14
- {langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/METADATA +1 -1
- {langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/RECORD +9 -9
- {langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/LICENSE +0 -0
- {langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/WHEEL +0 -0
- {langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/top_level.txt +0 -0
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
"""Checkpointing evaluation runs."""
|
15
|
+
import abc
|
15
16
|
import threading
|
16
17
|
import traceback
|
17
18
|
|
@@ -28,21 +29,74 @@ Runner = experiment_lib.Runner
|
|
28
29
|
class Checkpointer(experiment_lib.Plugin):
|
29
30
|
"""Base class for checkpointing evaluation examples."""
|
30
31
|
|
31
|
-
def on_experiment_start(
|
32
|
+
def on_experiment_start(
|
33
|
+
self,
|
34
|
+
runner: Runner,
|
35
|
+
experiment: Experiment
|
36
|
+
) -> None:
|
37
|
+
if not experiment.is_leaf:
|
38
|
+
return
|
39
|
+
|
40
|
+
# For refresh runs, we don't want to load the previous state.
|
41
|
+
if not runner.current_run.refresh:
|
42
|
+
if runner.current_run.input_root != runner.current_run.output_root:
|
43
|
+
experiment.info(
|
44
|
+
f'Warm starting from directory: {runner.current_run.input_root}.'
|
45
|
+
)
|
46
|
+
self._load_experiment(runner, experiment)
|
47
|
+
|
32
48
|
if experiment.state.evaluated_examples:
|
49
|
+
loaded_example_ids = list(
|
50
|
+
sorted(experiment.state.evaluated_examples.keys())
|
51
|
+
)
|
52
|
+
example_ids_to_evaluate = (
|
53
|
+
set(runner.current_run.example_ids) if runner.current_run.example_ids
|
54
|
+
else set(range(1, experiment.num_examples + 1))
|
55
|
+
)
|
56
|
+
example_ids_to_evaluate -= set(loaded_example_ids)
|
57
|
+
|
33
58
|
experiment.info(
|
34
|
-
'
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
59
|
+
f'{len(experiment.state.evaluated_examples)} examples have been '
|
60
|
+
'loaded from checkpoint files. Their outputs will be used '
|
61
|
+
f'for recomputing metrics. Example IDs: {loaded_example_ids}'
|
62
|
+
)
|
63
|
+
experiment.info(
|
64
|
+
f'{len(example_ids_to_evaluate)} examples will be processed from '
|
65
|
+
f'scratch. Example IDs: {list(sorted(example_ids_to_evaluate))}'
|
39
66
|
)
|
40
67
|
else:
|
41
68
|
experiment.info(
|
42
|
-
'No
|
69
|
+
'No examples are loaded from checkpoint files. '
|
43
70
|
f'Experiment {experiment.id} starts from scratch.'
|
44
71
|
)
|
45
72
|
|
73
|
+
def on_example_complete(
|
74
|
+
self,
|
75
|
+
runner: Runner,
|
76
|
+
experiment: Experiment,
|
77
|
+
example: Example,
|
78
|
+
) -> None:
|
79
|
+
"""Saves the example to the checkpoint file."""
|
80
|
+
if example.has_error:
|
81
|
+
experiment.warning(
|
82
|
+
f'Example {example.id} has error. Skipping checkpointing.'
|
83
|
+
)
|
84
|
+
else:
|
85
|
+
self._save_example(runner, experiment, example)
|
86
|
+
|
87
|
+
@abc.abstractmethod
|
88
|
+
def _load_experiment(self, runner: Runner, experiment: Experiment) -> None:
|
89
|
+
"""Loads the experiment state from checkpoint files."""
|
90
|
+
|
91
|
+
@abc.abstractmethod
|
92
|
+
def _save_example(
|
93
|
+
self,
|
94
|
+
runner: Runner,
|
95
|
+
experiment: Experiment,
|
96
|
+
example: Example,
|
97
|
+
) -> None:
|
98
|
+
"""Saves an evaluated example."""
|
99
|
+
|
46
100
|
|
47
101
|
class PerExampleCheckpointer(Checkpointer):
|
48
102
|
"""Checkpointer that saves each example to a separate file."""
|
@@ -55,80 +109,86 @@ class PerExampleCheckpointer(Checkpointer):
|
|
55
109
|
self._checkpoint_file_prefix = prefix
|
56
110
|
self._checkpoint_file_ext = ext
|
57
111
|
|
58
|
-
def
|
112
|
+
def _load_experiment(
|
59
113
|
self,
|
60
114
|
runner: Runner,
|
61
115
|
experiment: Experiment,
|
62
116
|
) -> None:
|
63
117
|
"""Creates the checkpoint file."""
|
64
|
-
|
65
|
-
|
118
|
+
experiment_dir = runner.current_run.input_dir(experiment)
|
119
|
+
if pg.io.path_exists(experiment_dir):
|
120
|
+
ckpt_files = [
|
121
|
+
runner.current_run.input_path_for(experiment, filename)
|
122
|
+
for filename in pg.io.listdir(experiment_dir)
|
123
|
+
if filename.startswith(self._checkpoint_file_prefix)
|
124
|
+
and filename.endswith(self._checkpoint_file_ext)
|
125
|
+
]
|
126
|
+
else:
|
127
|
+
ckpt_files = []
|
66
128
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
129
|
+
experiment.info(f'Found {len(ckpt_files)} checkpoint files to load.')
|
130
|
+
|
131
|
+
# Load the checkpoint files in parallel.
|
132
|
+
context = dict(counter=0, counter_lock=threading.Lock())
|
133
|
+
def _load_state(ckpt_file):
|
134
|
+
error = None
|
135
|
+
with pg.timeit() as t:
|
136
|
+
try:
|
137
|
+
experiment.load_state(ckpt_file)
|
138
|
+
except BaseException as e: # pylint: disable=broad-except
|
139
|
+
error = e
|
140
|
+
finally:
|
141
|
+
with context['counter_lock']:
|
142
|
+
context['counter'] += 1
|
143
|
+
|
144
|
+
progress_str = f'{context["counter"]}/{len(ckpt_files)}'
|
145
|
+
if error is None:
|
146
|
+
experiment.info(
|
147
|
+
f'Loaded checkpoint file {ckpt_file} in {t.elapse:.2f} '
|
148
|
+
f'seconds. ({progress_str})'
|
149
|
+
)
|
150
|
+
else:
|
151
|
+
experiment.warning(
|
152
|
+
f'Failed to load checkpoint file {ckpt_file}: {error}. '
|
153
|
+
f'Skipping the file. ({progress_str})'
|
154
|
+
)
|
155
|
+
|
156
|
+
_ = list(
|
157
|
+
lf.concurrent_map(
|
158
|
+
_load_state, ckpt_files, max_workers=16, silence_on_errors=None
|
72
159
|
)
|
73
|
-
|
74
|
-
experiment.load_state(ckpt_file)
|
75
|
-
|
76
|
-
experiment_dir = runner.current_run.input_dir(experiment)
|
77
|
-
if pg.io.path_exists(experiment_dir):
|
78
|
-
ckpt_files = [
|
79
|
-
runner.current_run.input_path_for(experiment, filename)
|
80
|
-
for filename in pg.io.listdir(experiment_dir)
|
81
|
-
if filename.startswith(self._checkpoint_file_prefix)
|
82
|
-
and filename.endswith(self._checkpoint_file_ext)
|
83
|
-
]
|
84
|
-
else:
|
85
|
-
ckpt_files = []
|
86
|
-
|
87
|
-
for ckpt_file, _, error in lf.concurrent_map(
|
88
|
-
_load_state, ckpt_files, max_workers=64,
|
89
|
-
):
|
90
|
-
if error is not None:
|
91
|
-
experiment.warning(
|
92
|
-
f'Failed to load checkpoint file {ckpt_file}: {error}. '
|
93
|
-
'Skipping the file.'
|
94
|
-
)
|
95
|
-
super().on_experiment_start(experiment)
|
160
|
+
)
|
96
161
|
|
97
|
-
def
|
162
|
+
def _save_example(
|
98
163
|
self,
|
99
164
|
runner: Runner,
|
100
165
|
experiment: Experiment,
|
101
166
|
example: Example,
|
102
167
|
) -> None:
|
103
168
|
"""Saves the example to the checkpoint file."""
|
104
|
-
|
105
|
-
|
106
|
-
|
169
|
+
def save_state(example: Example):
|
170
|
+
writer = SequenceWriter(
|
171
|
+
runner.current_run.output_path_for(
|
172
|
+
experiment,
|
173
|
+
(
|
174
|
+
f'{self._checkpoint_file_prefix}_{example.id}'
|
175
|
+
f'{self._checkpoint_file_ext}'
|
176
|
+
)
|
177
|
+
)
|
107
178
|
)
|
108
|
-
|
109
|
-
|
110
|
-
writer
|
111
|
-
|
112
|
-
|
113
|
-
(
|
114
|
-
f'{self._checkpoint_file_prefix}_{example.id}'
|
115
|
-
f'{self._checkpoint_file_ext}'
|
116
|
-
)
|
117
|
-
)
|
179
|
+
try:
|
180
|
+
writer.add(example)
|
181
|
+
writer.close()
|
182
|
+
experiment.info(
|
183
|
+
f'Example {example.id} saved to {writer.path}.',
|
118
184
|
)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
experiment.error(
|
127
|
-
f'Failed to save example {example.id} to {writer.path}. '
|
128
|
-
f'Error: {e}, Stacktrace: \n{traceback.format_exc()}.',
|
129
|
-
)
|
130
|
-
raise e
|
131
|
-
runner.background_run(save_state, example)
|
185
|
+
except BaseException as e: # pylint: disable=broad-except
|
186
|
+
experiment.error(
|
187
|
+
f'Failed to save example {example.id} to {writer.path}. '
|
188
|
+
f'Error: {e}, Stacktrace: \n{traceback.format_exc()}.',
|
189
|
+
)
|
190
|
+
raise e
|
191
|
+
runner.background_run(save_state, example)
|
132
192
|
|
133
193
|
def _file_prefix_and_ext(self, filename: str) -> tuple[str, str]:
|
134
194
|
ext_index = filename.rfind('.')
|
@@ -180,30 +240,31 @@ class BulkCheckpointer(Checkpointer):
|
|
180
240
|
runner: Runner,
|
181
241
|
experiment: Experiment,
|
182
242
|
) -> None:
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
experiment.info(
|
190
|
-
f'Warm starting from directory: {runner.current_run.input_root}.'
|
191
|
-
)
|
192
|
-
experiment.load_state(
|
193
|
-
runner.current_run.input_path_for(
|
243
|
+
super().on_experiment_start(runner, experiment)
|
244
|
+
|
245
|
+
# Prepare the sequence writer for the experiment.
|
246
|
+
if experiment.is_leaf:
|
247
|
+
sequence_writer = SequenceWriter(
|
248
|
+
runner.current_run.output_path_for(
|
194
249
|
experiment, self.checkpoint_filename
|
195
|
-
)
|
196
|
-
raise_if_not_exist=False
|
250
|
+
)
|
197
251
|
)
|
198
|
-
|
199
|
-
|
252
|
+
with self._lock:
|
253
|
+
if self._sequence_writer is not None:
|
254
|
+
self._sequence_writer[experiment.id] = sequence_writer
|
255
|
+
|
256
|
+
def _load_experiment(
|
257
|
+
self,
|
258
|
+
runner: Runner,
|
259
|
+
experiment: Experiment,
|
260
|
+
) -> None:
|
261
|
+
"""Creates the checkpoint file."""
|
262
|
+
experiment.load_state(
|
263
|
+
runner.current_run.input_path_for(
|
200
264
|
experiment, self.checkpoint_filename
|
201
|
-
)
|
265
|
+
),
|
266
|
+
raise_if_not_exist=False
|
202
267
|
)
|
203
|
-
with self._lock:
|
204
|
-
if self._sequence_writer is not None:
|
205
|
-
self._sequence_writer[experiment.id] = sequence_writer
|
206
|
-
super().on_experiment_start(experiment)
|
207
268
|
|
208
269
|
def on_experiment_complete(
|
209
270
|
self,
|
@@ -225,7 +286,7 @@ class BulkCheckpointer(Checkpointer):
|
|
225
286
|
f'checkpointed to {writer.path}.'
|
226
287
|
)
|
227
288
|
|
228
|
-
def
|
289
|
+
def _save_example(
|
229
290
|
self,
|
230
291
|
runner: Runner,
|
231
292
|
experiment: Experiment,
|
@@ -233,22 +294,20 @@ class BulkCheckpointer(Checkpointer):
|
|
233
294
|
) -> None:
|
234
295
|
"""Saves the example to the checkpoint file."""
|
235
296
|
assert experiment.id in self._sequence_writer
|
236
|
-
|
237
|
-
experiment.
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
raise e
|
251
|
-
runner.background_run(_save_example, example)
|
297
|
+
def _save_example(example: Example):
|
298
|
+
writer = self._sequence_writer[experiment.id]
|
299
|
+
try:
|
300
|
+
writer.add(example)
|
301
|
+
experiment.info(
|
302
|
+
f'Example {example.id} added to {writer.path}.',
|
303
|
+
)
|
304
|
+
except BaseException as e: # pylint: disable=broad-except
|
305
|
+
experiment.error(
|
306
|
+
f'Failed to save example {example.id} to {writer.path}. '
|
307
|
+
f'Error: {e}, Stacktrace: \n{traceback.format_exc()}.',
|
308
|
+
)
|
309
|
+
raise e
|
310
|
+
runner.background_run(_save_example, example)
|
252
311
|
|
253
312
|
|
254
313
|
class SequenceWriter:
|
@@ -55,6 +55,7 @@ class SequenceWriterTest(unittest.TestCase):
|
|
55
55
|
class PerExampleCheckpointerTest(unittest.TestCase):
|
56
56
|
|
57
57
|
def test_checkpointing(self):
|
58
|
+
pg.defaults.loggers.use_stdout()
|
58
59
|
root_dir = os.path.join(tempfile.gettempdir(), 'per_example_checkpointer')
|
59
60
|
experiment = eval_test_helper.test_experiment()
|
60
61
|
checkpoint_filename = 'checkpoint.jsonl'
|
@@ -81,7 +81,7 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
|
|
81
81
|
directory (using the ID 'latest'). Users can specify 'new' to start a fresh
|
82
82
|
run or provide a specific run ID (typically in the format %Y%m%d_%<number>).
|
83
83
|
Additionally, when initiating a new run, users may specify a `warm_start_from`
|
84
|
-
|
84
|
+
directory to restore the experiment’s state from a previous run.
|
85
85
|
|
86
86
|
Examples:
|
87
87
|
|
@@ -97,9 +97,9 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
|
|
97
97
|
# Start a new, clean run.
|
98
98
|
experiment.run(root_dir, 'new')
|
99
99
|
|
100
|
-
# Start a new run with a warm start from the
|
101
|
-
# '
|
102
|
-
experiment.run(root_dir, 'new', warm_start_from='
|
100
|
+
# Start a new run with a warm start from the another run located at
|
101
|
+
# '/path/to/another/run' (e.g. /my_expreriment/run_20241031_1).
|
102
|
+
experiment.run(root_dir, 'new', warm_start_from='/path/to/another/run')
|
103
103
|
|
104
104
|
# Resume run '20241031_1', re-running failed examples and recomputing
|
105
105
|
# metrics as needed.
|
@@ -13,12 +13,14 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
"""Reporting evaluation results."""
|
15
15
|
|
16
|
+
import threading
|
16
17
|
import time
|
17
18
|
import traceback
|
18
19
|
from typing import Annotated
|
19
20
|
|
20
21
|
from langfun.core.eval.v2 import example as example_lib
|
21
22
|
from langfun.core.eval.v2 import experiment as experiment_lib
|
23
|
+
import pyglove as pg
|
22
24
|
|
23
25
|
Runner = experiment_lib.Runner
|
24
26
|
Experiment = experiment_lib.Experiment
|
@@ -40,12 +42,15 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
40
42
|
experiment_report_interval: Annotated[
|
41
43
|
int,
|
42
44
|
'The interval of writing report for inidividual experiments in seconds.'
|
43
|
-
] =
|
45
|
+
] = 120
|
44
46
|
|
45
47
|
def _on_bound(self):
|
46
48
|
super()._on_bound()
|
47
49
|
self._last_summary_time = 0
|
48
50
|
self._last_experiment_report_time = {}
|
51
|
+
self._update_thread = None
|
52
|
+
self._stop_update = False
|
53
|
+
self._stop_update_experiment_ids = set()
|
49
54
|
|
50
55
|
def on_run_start(
|
51
56
|
self,
|
@@ -54,12 +59,19 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
54
59
|
) -> None:
|
55
60
|
self._maybe_update_summary(runner)
|
56
61
|
self._last_experiment_report_time = {leaf.id: 0 for leaf in root.leaf_nodes}
|
62
|
+
self._stop_update = False
|
63
|
+
self._stop_update_experiment_ids = set()
|
64
|
+
self._update_thread = threading.Thread(
|
65
|
+
target=self._update_thread_func, args=(runner,)
|
66
|
+
)
|
67
|
+
self._update_thread.start()
|
57
68
|
|
58
69
|
def on_run_complete(
|
59
70
|
self,
|
60
71
|
runner: Runner,
|
61
72
|
root: Experiment
|
62
73
|
) -> None:
|
74
|
+
self._stop_update = True
|
63
75
|
self._maybe_update_summary(runner, force=True)
|
64
76
|
|
65
77
|
def on_run_abort(
|
@@ -68,8 +80,20 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
68
80
|
root: Experiment,
|
69
81
|
error: BaseException
|
70
82
|
) -> None:
|
83
|
+
self._stop_update = True
|
71
84
|
self._maybe_update_summary(runner, force=True)
|
72
85
|
|
86
|
+
def _update_thread_func(self, runner: Runner):
|
87
|
+
while not self._stop_update:
|
88
|
+
self._maybe_update_summary(runner, background=False)
|
89
|
+
for leaf in runner.current_run.experiment.leaf_nodes:
|
90
|
+
if leaf.id in self._stop_update_experiment_ids:
|
91
|
+
continue
|
92
|
+
self._maybe_update_experiment_html(runner, leaf, background=False)
|
93
|
+
if leaf.progress.is_stopped:
|
94
|
+
self._stop_update_experiment_ids.add(leaf.id)
|
95
|
+
time.sleep(5)
|
96
|
+
|
73
97
|
def on_experiment_start(
|
74
98
|
self,
|
75
99
|
runner: Runner,
|
@@ -101,7 +125,11 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
101
125
|
self._maybe_update_experiment_html(runner, experiment)
|
102
126
|
self._maybe_update_summary(runner)
|
103
127
|
|
104
|
-
def _maybe_update_summary(
|
128
|
+
def _maybe_update_summary(
|
129
|
+
self,
|
130
|
+
runner: Runner,
|
131
|
+
background: bool = True,
|
132
|
+
force: bool = False) -> None:
|
105
133
|
"""Maybe update the summary of current run."""
|
106
134
|
run = runner.current_run
|
107
135
|
def _summary():
|
@@ -115,26 +143,37 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
115
143
|
)
|
116
144
|
|
117
145
|
if force or (time.time() - self._last_summary_time > self.summary_interval):
|
118
|
-
|
146
|
+
if background:
|
147
|
+
runner.background_run(_summary)
|
148
|
+
else:
|
149
|
+
_summary()
|
119
150
|
self._last_summary_time = time.time()
|
120
151
|
|
121
152
|
def _maybe_update_experiment_html(
|
122
|
-
self,
|
153
|
+
self,
|
154
|
+
runner: Runner,
|
155
|
+
experiment: Experiment,
|
156
|
+
force: bool = False,
|
157
|
+
background: bool = True,
|
123
158
|
) -> None:
|
124
159
|
def _save():
|
125
160
|
index_html_path = runner.current_run.output_path_for(
|
126
161
|
experiment, _EVALULATION_DETAIL_FILE
|
127
162
|
)
|
128
163
|
try:
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
164
|
+
with pg.timeit() as t:
|
165
|
+
html = experiment.to_html(
|
166
|
+
collapse_level=None,
|
167
|
+
extra_flags=dict(
|
168
|
+
current_run=runner.current_run,
|
169
|
+
interactive=False,
|
170
|
+
card_view=False,
|
171
|
+
),
|
172
|
+
)
|
173
|
+
html.save(index_html_path)
|
174
|
+
experiment.info(
|
175
|
+
f'Generated HTML {index_html_path!r} in {t.elapse:.2f} seconds.',
|
176
|
+
)
|
138
177
|
except BaseException as e: # pylint: disable=broad-except
|
139
178
|
experiment.error(
|
140
179
|
f'Failed to save HTML {index_html_path!r}. '
|
@@ -146,7 +185,10 @@ class HtmlReporter(experiment_lib.Plugin):
|
|
146
185
|
time.time() - self._last_experiment_report_time[experiment.id]
|
147
186
|
> self.experiment_report_interval
|
148
187
|
):
|
149
|
-
|
188
|
+
if background:
|
189
|
+
runner.background_run(_save)
|
190
|
+
else:
|
191
|
+
_save()
|
150
192
|
self._last_experiment_report_time[experiment.id] = time.time()
|
151
193
|
|
152
194
|
def _save_example_html(
|
@@ -58,14 +58,14 @@ langfun/core/eval/patching_test.py,sha256=8kCd54Egjju22FMgtJuxEsrXkW8ifs-UUBHtrC
|
|
58
58
|
langfun/core/eval/scoring.py,sha256=B69IsIxiPs1xZcOBFIhZF70YmDue2Siik-CPL2bh33s,6254
|
59
59
|
langfun/core/eval/scoring_test.py,sha256=O8olHbrUEg60gMxwOkWzKBJZpZoUlmVnBANX5Se2SXM,4546
|
60
60
|
langfun/core/eval/v2/__init__.py,sha256=qoa6zKdFXOFyCX6vay6OdgPf1eUhYGoHYAxe35qECGk,1628
|
61
|
-
langfun/core/eval/v2/checkpointing.py,sha256=
|
62
|
-
langfun/core/eval/v2/checkpointing_test.py,sha256=
|
61
|
+
langfun/core/eval/v2/checkpointing.py,sha256=5Koc9IM5OFAhLaO7sAZC979vEFxR8a_ssXcaqG_iVw0,10325
|
62
|
+
langfun/core/eval/v2/checkpointing_test.py,sha256=i9qmEJk90kz6SB7OBGAHCogKVyazUZxAZlKXZt9hccI,4435
|
63
63
|
langfun/core/eval/v2/eval_test_helper.py,sha256=pDpZTBnWRR5xjJv3Uy3NWEzArqlL8FTMOgeR4C53F5M,2348
|
64
64
|
langfun/core/eval/v2/evaluation.py,sha256=NFBGAWw2BtW7H0zcoZhfWtz59Psra84eshJm73uAFwg,21807
|
65
65
|
langfun/core/eval/v2/evaluation_test.py,sha256=GmV1TiqX1V15st2qpcGWooM5hudomQVjW5kajovGDvE,6231
|
66
66
|
langfun/core/eval/v2/example.py,sha256=fURrvdNmMsVMqoEErcsmLmC6Xq3ny16dYsnLH8HVlcY,9626
|
67
67
|
langfun/core/eval/v2/example_test.py,sha256=WcJmU7IQQXvjFia63mokySC4CqxzVL9Wso1sC5F0YK8,3032
|
68
|
-
langfun/core/eval/v2/experiment.py,sha256=
|
68
|
+
langfun/core/eval/v2/experiment.py,sha256=DuuqTJA0jmep-CM098MYutKkarLIcd1Do9P0W_HhdBg,29800
|
69
69
|
langfun/core/eval/v2/experiment_test.py,sha256=zSMHYqC9cA0k61U71pCSYTAJ6yK2_b6Dml5btc-bKzQ,9133
|
70
70
|
langfun/core/eval/v2/metric_values.py,sha256=_B905bC-jxrYPLSEcP2M8MaHZOVMz_bVrUw8YC4arCE,4660
|
71
71
|
langfun/core/eval/v2/metric_values_test.py,sha256=ab2oF_HsIwrSy459108ggyjgefHSPn8UVILR4dRwx14,2634
|
@@ -75,7 +75,7 @@ langfun/core/eval/v2/progress.py,sha256=azZgssQgNdv3IgjKEaQBuGI5ucFDNbdi02P4z_nQ
|
|
75
75
|
langfun/core/eval/v2/progress_test.py,sha256=YU7VHzmy5knPZwj9vpBN3rQQH2tukj9eKHkuBCI62h8,2540
|
76
76
|
langfun/core/eval/v2/progress_tracking.py,sha256=l9fEkz4oP5McpZzf72Ua7PYm3lAWtRru7gRWNf8H0ms,6083
|
77
77
|
langfun/core/eval/v2/progress_tracking_test.py,sha256=fouMVJkFJqHjbhQJngGLGCmA9x3n0dU4USI2dY163mg,2291
|
78
|
-
langfun/core/eval/v2/reporting.py,sha256=
|
78
|
+
langfun/core/eval/v2/reporting.py,sha256=qFxoxqQhNGxh1APg6-JVDlIfniGdty2Rh8aXQMc1aak,6612
|
79
79
|
langfun/core/eval/v2/reporting_test.py,sha256=4nobW6pcaatiZh8u4xciexciaiZNDlDoJci157Wp_RI,1492
|
80
80
|
langfun/core/eval/v2/runners.py,sha256=t6_yHAJ4HWufK4wvh_OntKcok2KquA5ARIHIk1vvEwc,15870
|
81
81
|
langfun/core/eval/v2/runners_test.py,sha256=A37fKK2MvAVTiShsg_laluJzJ9AuAQn52k7HPbfD0Ks,11666
|
@@ -148,8 +148,8 @@ langfun/core/templates/demonstration.py,sha256=vCrgYubdZM5Umqcgp8NUVGXgr4P_c-fik
|
|
148
148
|
langfun/core/templates/demonstration_test.py,sha256=SafcDQ0WgI7pw05EmPI2S4v1t3ABKzup8jReCljHeK4,2162
|
149
149
|
langfun/core/templates/selfplay.py,sha256=yhgrJbiYwq47TgzThmHrDQTF4nDrTI09CWGhuQPNv-s,2273
|
150
150
|
langfun/core/templates/selfplay_test.py,sha256=Ot__1P1M8oJfoTp-M9-PQ6HUXqZKyMwvZ5f7yQ3yfyM,2326
|
151
|
-
langfun-0.1.2.
|
152
|
-
langfun-0.1.2.
|
153
|
-
langfun-0.1.2.
|
154
|
-
langfun-0.1.2.
|
155
|
-
langfun-0.1.2.
|
151
|
+
langfun-0.1.2.dev202412240804.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
152
|
+
langfun-0.1.2.dev202412240804.dist-info/METADATA,sha256=BLBcqKA0YgIcOpGcLwl4iXagfZaUBS0h3pDbm4AG978,8281
|
153
|
+
langfun-0.1.2.dev202412240804.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
154
|
+
langfun-0.1.2.dev202412240804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
|
155
|
+
langfun-0.1.2.dev202412240804.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{langfun-0.1.2.dev202412220804.dist-info → langfun-0.1.2.dev202412240804.dist-info}/top_level.txt
RENAMED
File without changes
|