langfun 0.1.2.dev202503110804__py3-none-any.whl → 0.1.2.dev202503130804__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/agentic/action.py +4 -0
- langfun/core/agentic/action_eval.py +5 -4
- langfun/core/eval/v2/checkpointing.py +4 -4
- langfun/core/eval/v2/checkpointing_test.py +30 -4
- langfun/core/eval/v2/eval_test_helper.py +4 -3
- langfun/core/eval/v2/evaluation.py +68 -21
- langfun/core/eval/v2/evaluation_test.py +12 -9
- langfun/core/eval/v2/runners.py +4 -3
- {langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/METADATA +1 -1
- {langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/RECORD +13 -13
- {langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/LICENSE +0 -0
- {langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/WHEEL +0 -0
- {langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/top_level.txt +0 -0
langfun/core/agentic/action.py
CHANGED
@@ -674,6 +674,10 @@ class Session(pg.Object, pg.views.html.HtmlTreeView.Extension):
|
|
674
674
|
"""Session for performing an agentic task."""
|
675
675
|
|
676
676
|
root: ActionInvocation = ActionInvocation(RootAction())
|
677
|
+
id: Annotated[
|
678
|
+
str | None,
|
679
|
+
'An optional identifier for the sessin, which will be used for logging.'
|
680
|
+
] = None
|
677
681
|
|
678
682
|
def _on_bound(self):
|
679
683
|
super()._on_bound()
|
@@ -31,9 +31,10 @@ class ActionEval(lf.eval.v2.Evaluation):
|
|
31
31
|
'Arguments to call the action.'
|
32
32
|
] = {}
|
33
33
|
|
34
|
-
def process(self, example:
|
35
|
-
|
36
|
-
|
34
|
+
def process(self, example: lf.eval.v2.Example) -> tuple[str, dict[str, Any]]:
|
35
|
+
example_input = example.input
|
36
|
+
action = example_input.action
|
37
|
+
session = action_lib.Session(id=str(example.id))
|
37
38
|
with lf.logging.use_log_level('fatal'):
|
38
39
|
action(session=session, **self.action_args)
|
39
40
|
return session.final_result, dict(session=session)
|
@@ -68,7 +69,7 @@ class ActionEvalV1(lf_eval.Matching):
|
|
68
69
|
|
69
70
|
def process(self, example: pg.Dict, **kwargs):
|
70
71
|
action = example.action
|
71
|
-
session = action_lib.Session()
|
72
|
+
session = action_lib.Session(id=str(getattr(example, 'id', '<empty>')))
|
72
73
|
action(session=session, lm=self.lm, **kwargs)
|
73
74
|
return session.as_message()
|
74
75
|
|
@@ -53,14 +53,14 @@ class Checkpointer(experiment_lib.Plugin):
|
|
53
53
|
self._load_experiment(runner, experiment)
|
54
54
|
|
55
55
|
example_ids_to_evaluate = current_run.examples_to_evaluate(experiment)
|
56
|
-
if experiment.state.
|
56
|
+
if experiment.state.ckpt_examples:
|
57
57
|
loaded_example_ids = list(
|
58
|
-
sorted(experiment.state.
|
58
|
+
sorted(experiment.state.ckpt_examples.keys())
|
59
59
|
)
|
60
60
|
example_ids_to_evaluate -= set(loaded_example_ids)
|
61
61
|
example_ids_to_evaluate = list(sorted(example_ids_to_evaluate))
|
62
62
|
experiment.info(
|
63
|
-
f'{len(experiment.state.
|
63
|
+
f'{len(experiment.state.ckpt_examples)} examples '
|
64
64
|
'loaded from checkpoint files. Their outputs will be used '
|
65
65
|
f'for recomputing metrics. Example IDs: {loaded_example_ids}.'
|
66
66
|
)
|
@@ -316,7 +316,7 @@ class BulkCheckpointer(Checkpointer):
|
|
316
316
|
writer = self._sequence_writer.pop(experiment.id)
|
317
317
|
writer.close()
|
318
318
|
experiment.info(
|
319
|
-
f'{len(experiment.state.
|
319
|
+
f'{len(experiment.state.evaluation_status)} examples are '
|
320
320
|
f'checkpointed to {writer.path}.'
|
321
321
|
)
|
322
322
|
|
@@ -18,6 +18,7 @@ import unittest
|
|
18
18
|
from langfun.core.eval.v2 import checkpointing
|
19
19
|
from langfun.core.eval.v2 import eval_test_helper
|
20
20
|
from langfun.core.eval.v2 import example as example_lib
|
21
|
+
from langfun.core.eval.v2 import experiment as experiment_lib
|
21
22
|
from langfun.core.eval.v2 import runners as runners_lib # pylint: disable=unused-import
|
22
23
|
import pyglove as pg
|
23
24
|
|
@@ -52,6 +53,26 @@ class SequenceWriterTest(unittest.TestCase):
|
|
52
53
|
self.assertEqual(len(list(iter(f))), 1)
|
53
54
|
|
54
55
|
|
56
|
+
class ExampleCollector(experiment_lib.Plugin):
|
57
|
+
"""Collects all examples."""
|
58
|
+
|
59
|
+
def _on_bound(self):
|
60
|
+
super()._on_bound()
|
61
|
+
self._examples = {}
|
62
|
+
|
63
|
+
@property
|
64
|
+
def examples(self) -> dict[int, example_lib.Example]:
|
65
|
+
return self._examples
|
66
|
+
|
67
|
+
def on_example_complete(
|
68
|
+
self, runner: runners_lib.Runner,
|
69
|
+
experiment: experiment_lib.Experiment,
|
70
|
+
example: example_lib.Example,
|
71
|
+
):
|
72
|
+
assert experiment.is_leaf, None
|
73
|
+
self._examples[example.id] = example
|
74
|
+
|
75
|
+
|
55
76
|
class CheckpointerTest(unittest.TestCase):
|
56
77
|
|
57
78
|
def assert_found_in_log(self, experiment, message):
|
@@ -70,13 +91,15 @@ class PerExampleCheckpointerTest(CheckpointerTest):
|
|
70
91
|
experiment = eval_test_helper.test_experiment()
|
71
92
|
checkpoint_filename = 'checkpoint.jsonl'
|
72
93
|
checkpointer = checkpointing.PerExampleCheckpointer(checkpoint_filename)
|
94
|
+
collector = ExampleCollector()
|
73
95
|
run = experiment.run(
|
74
|
-
root_dir, 'new', runner='sequential', plugins=[checkpointer]
|
96
|
+
root_dir, 'new', runner='sequential', plugins=[checkpointer, collector]
|
75
97
|
)
|
76
98
|
num_processed = {}
|
77
99
|
for leaf in experiment.leaf_nodes:
|
78
100
|
for i in range(leaf.num_examples):
|
79
|
-
|
101
|
+
self.assertIn(i + 1, collector.examples)
|
102
|
+
example = collector.examples[i + 1]
|
80
103
|
ckpt = run.output_path_for(leaf, f'checkpoint_{example.id}.jsonl')
|
81
104
|
if example.has_error:
|
82
105
|
self.assertFalse(pg.io.path_exists(ckpt))
|
@@ -134,12 +157,15 @@ class PerExampleCheckpointerTest(CheckpointerTest):
|
|
134
157
|
experiment = eval_test_helper.TestEvaluation()
|
135
158
|
checkpoint_filename = 'checkpoint.jsonl'
|
136
159
|
checkpointer = checkpointing.PerExampleCheckpointer(checkpoint_filename)
|
160
|
+
collector = ExampleCollector()
|
161
|
+
|
137
162
|
run = experiment.run(
|
138
|
-
root_dir, 'new', runner='sequential', plugins=[checkpointer]
|
163
|
+
root_dir, 'new', runner='sequential', plugins=[checkpointer, collector]
|
139
164
|
)
|
140
165
|
num_processed = {}
|
141
166
|
for i in range(experiment.num_examples):
|
142
|
-
|
167
|
+
self.assertIn(i + 1, collector.examples)
|
168
|
+
example = collector.examples[i + 1]
|
143
169
|
ckpt = run.output_path_for(experiment, f'checkpoint_{example.id}.jsonl')
|
144
170
|
if not example.has_error:
|
145
171
|
self.assertTrue(pg.io.path_exists(ckpt))
|
@@ -63,7 +63,8 @@ class TestEvaluation(Evaluation):
|
|
63
63
|
metrics = [metrics_lib.Match()]
|
64
64
|
lm: language_model.LanguageModel = TestLLM()
|
65
65
|
|
66
|
-
def process(self,
|
66
|
+
def process(self, example):
|
67
|
+
v = example.input
|
67
68
|
if v.x == 5:
|
68
69
|
raise ValueError('x should not be 5')
|
69
70
|
return structured.query(
|
@@ -83,7 +84,7 @@ class TestEvaluationWithExampleCheckpointingError(TestEvaluation):
|
|
83
84
|
inputs = test_inputs()
|
84
85
|
metrics = [metrics_lib.Match()]
|
85
86
|
|
86
|
-
def process(self,
|
87
|
+
def process(self, example):
|
87
88
|
return 1, dict(
|
88
89
|
x=BadJsonConvertible()
|
89
90
|
)
|
@@ -100,7 +101,7 @@ class TestEvaluationWithExampleHtmlGenerationError(Evaluation):
|
|
100
101
|
inputs = test_inputs()
|
101
102
|
metrics = [metrics_lib.Match()]
|
102
103
|
|
103
|
-
def process(self,
|
104
|
+
def process(self, example):
|
104
105
|
return 1, dict(
|
105
106
|
x=BadHtmlConvertible()
|
106
107
|
)
|
@@ -127,13 +127,17 @@ class Evaluation(experiment_lib.Experiment):
|
|
127
127
|
#
|
128
128
|
|
129
129
|
@abc.abstractmethod
|
130
|
-
def process(
|
130
|
+
def process(
|
131
|
+
self,
|
132
|
+
example: example_lib.Example
|
133
|
+
) -> Any | tuple[Any, dict[str, Any]]:
|
131
134
|
"""Processes a single example from the evaluation set.
|
132
135
|
|
133
136
|
Users should override this method to implement the evaluation logic.
|
134
137
|
|
135
138
|
Args:
|
136
|
-
|
139
|
+
example: An example object to process. `example.input` is an object
|
140
|
+
returned from `Evaluable.inputs`.
|
137
141
|
|
138
142
|
Returns:
|
139
143
|
A processed output. Or a tuple of (output, metadata).
|
@@ -162,25 +166,24 @@ class Evaluation(experiment_lib.Experiment):
|
|
162
166
|
if pg.MISSING_VALUE == example.input:
|
163
167
|
example.input = self.example_input_by_id(example.id)
|
164
168
|
|
165
|
-
|
166
|
-
|
169
|
+
checkpointed = self._state.ckpt_example(example.id)
|
167
170
|
with pg.timeit('evaluate') as timeit, lf.track_usages() as usage_summary:
|
168
|
-
if
|
171
|
+
if checkpointed is None or checkpointed.has_error:
|
169
172
|
example.start_time = time.time()
|
170
173
|
self._process(example, raise_if_has_error=raise_if_has_error)
|
171
174
|
else:
|
172
|
-
example.start_time =
|
175
|
+
example.start_time = checkpointed.start_time
|
173
176
|
|
174
|
-
# Use
|
175
|
-
example.output =
|
176
|
-
example.metadata =
|
177
|
+
# Use the output and metadata obtained from the previous processing.
|
178
|
+
example.output = checkpointed.output
|
179
|
+
example.metadata = checkpointed.metadata
|
177
180
|
example.newly_processed = False
|
178
181
|
|
179
182
|
# For previously processed examples, we merge previous usages as
|
180
183
|
# cached, so the usage summary will account previous usages, but as
|
181
184
|
# cached.
|
182
|
-
assert
|
183
|
-
usage_summary.merge(
|
185
|
+
assert checkpointed.usage_summary is not None
|
186
|
+
usage_summary.merge(checkpointed.usage_summary, as_cached=True)
|
184
187
|
|
185
188
|
# Recompute the metrics and metadata for the example even its processed
|
186
189
|
# output and metadata were from the cache.
|
@@ -221,7 +224,7 @@ class Evaluation(experiment_lib.Experiment):
|
|
221
224
|
):
|
222
225
|
try:
|
223
226
|
with pg.timeit('process'):
|
224
|
-
output = self.process(example
|
227
|
+
output = self.process(example)
|
225
228
|
if (isinstance(output, tuple)
|
226
229
|
and len(output) == 2
|
227
230
|
and isinstance(output[1], dict)):
|
@@ -687,9 +690,29 @@ class Evaluation(experiment_lib.Experiment):
|
|
687
690
|
class EvaluationState:
|
688
691
|
"""Evaluation state."""
|
689
692
|
|
693
|
+
class ExampleStatus(pg.Object):
|
694
|
+
"""Example state."""
|
695
|
+
evaluated: Annotated[
|
696
|
+
bool,
|
697
|
+
'Whether the example is evaluated.'
|
698
|
+
] = False
|
699
|
+
|
700
|
+
newly_processed: Annotated[
|
701
|
+
bool,
|
702
|
+
'Whether the example is newly processed.'
|
703
|
+
] = False
|
704
|
+
|
705
|
+
has_error: Annotated[
|
706
|
+
bool,
|
707
|
+
'Whether the example has error.'
|
708
|
+
] = False
|
709
|
+
|
690
710
|
def __init__(self):
|
691
711
|
super().__init__()
|
692
|
-
self.
|
712
|
+
self._ckpt_examples: dict[int, example_lib.Example] = {}
|
713
|
+
self._evaluation_status: dict[
|
714
|
+
int, EvaluationState.ExampleStatus
|
715
|
+
] = {}
|
693
716
|
|
694
717
|
def load(
|
695
718
|
self,
|
@@ -711,17 +734,41 @@ class EvaluationState:
|
|
711
734
|
assert isinstance(example, example_lib.Example), example
|
712
735
|
if filter is not None and not filter(example):
|
713
736
|
continue
|
714
|
-
|
737
|
+
example.newly_processed = False
|
738
|
+
self._ckpt_examples[example.id] = example
|
715
739
|
|
716
740
|
@property
|
717
|
-
def
|
718
|
-
"""Returns the
|
719
|
-
return self.
|
741
|
+
def evaluation_status(self) -> dict[int, ExampleStatus]:
|
742
|
+
"""Returns the evaluation status of the examples."""
|
743
|
+
return self._evaluation_status
|
720
744
|
|
721
|
-
|
722
|
-
|
723
|
-
|
745
|
+
@property
|
746
|
+
def ckpt_examples(self) -> dict[int, example_lib.Example]:
|
747
|
+
"""Returns the unevaluated examples from checkpoints."""
|
748
|
+
return self._ckpt_examples
|
749
|
+
|
750
|
+
def ckpt_example(self, example_id: int) -> example_lib.Example | None:
|
751
|
+
"""Returns the unevaluated example from checkpoints for a given ID."""
|
752
|
+
return self._ckpt_examples.get(example_id)
|
753
|
+
|
754
|
+
def get_status(self, example_id: int) -> ExampleStatus:
|
755
|
+
"""Returns the evaluation status of the example."""
|
756
|
+
return self._evaluation_status.get(
|
757
|
+
example_id, EvaluationState.ExampleStatus()
|
758
|
+
)
|
724
759
|
|
725
760
|
def update(self, example: example_lib.Example) -> None:
|
726
761
|
"""Updates the state with the given example."""
|
727
|
-
self.
|
762
|
+
self._update_status(example)
|
763
|
+
# Processed examples will be removed once it's done.
|
764
|
+
self._ckpt_examples.pop(example.id, None)
|
765
|
+
|
766
|
+
def _update_status(self, example: example_lib.Example) -> None:
|
767
|
+
"""Updates the evaluation status of the example."""
|
768
|
+
self._evaluation_status[example.id] = (
|
769
|
+
EvaluationState.ExampleStatus(
|
770
|
+
evaluated=example.output != pg.MISSING_VALUE,
|
771
|
+
newly_processed=example.newly_processed,
|
772
|
+
has_error=example.has_error,
|
773
|
+
)
|
774
|
+
)
|
@@ -78,7 +78,9 @@ class EvaluationTest(unittest.TestCase):
|
|
78
78
|
def test_evaluate(self):
|
79
79
|
exp = eval_test_helper.TestEvaluation()
|
80
80
|
example = exp.evaluate(Example(id=3))
|
81
|
-
self.
|
81
|
+
self.assertTrue(exp.state.get_status(3).evaluated)
|
82
|
+
self.assertTrue(exp.state.get_status(3).newly_processed)
|
83
|
+
self.assertFalse(exp.state.get_status(3).has_error)
|
82
84
|
self.assertTrue(example.newly_processed)
|
83
85
|
self.assertEqual(example.input, pg.Dict(x=2, y=4, groundtruth=6))
|
84
86
|
self.assertEqual(example.output, 6)
|
@@ -111,7 +113,7 @@ class EvaluationTest(unittest.TestCase):
|
|
111
113
|
self.assertEqual(example.metadata, {})
|
112
114
|
self.assertEqual(example.metric_metadata, dict(error='ValueError'))
|
113
115
|
|
114
|
-
def
|
116
|
+
def test_evaluate_withstate(self):
|
115
117
|
eval_dir = os.path.join(tempfile.gettempdir(), 'test_eval')
|
116
118
|
pg.io.mkdirs(eval_dir, exist_ok=True)
|
117
119
|
state_file = os.path.join(eval_dir, 'state.jsonl')
|
@@ -121,13 +123,14 @@ class EvaluationTest(unittest.TestCase):
|
|
121
123
|
self.assertTrue(example.newly_processed)
|
122
124
|
self.assertEqual(example.input, pg.Dict(x=2, y=4, groundtruth=6))
|
123
125
|
self.assertEqual(example.output, 6)
|
124
|
-
self.assertEqual(len(exp.
|
126
|
+
self.assertEqual(len(exp.state.evaluation_status), 1)
|
125
127
|
f.add(pg.to_json_str(example))
|
126
128
|
|
127
129
|
exp.reset()
|
128
|
-
self.assertEqual(len(exp.
|
130
|
+
self.assertEqual(len(exp.state.ckpt_examples), 0)
|
129
131
|
exp.load_state(state_file)
|
130
|
-
self.assertEqual(len(exp.
|
132
|
+
self.assertEqual(len(exp.state.ckpt_examples), 1)
|
133
|
+
self.assertEqual(len(exp.state.evaluation_status), 0)
|
131
134
|
example = exp.evaluate(3)
|
132
135
|
self.assertFalse(example.newly_processed)
|
133
136
|
self.assertEqual(example.input, pg.Dict(x=2, y=4, groundtruth=6))
|
@@ -140,14 +143,14 @@ class EvaluationTest(unittest.TestCase):
|
|
140
143
|
|
141
144
|
# Test load_state with filter.
|
142
145
|
exp.reset()
|
143
|
-
self.assertEqual(len(exp.
|
146
|
+
self.assertEqual(len(exp.state.ckpt_examples), 0)
|
144
147
|
exp.load_state(state_file, filter=lambda x: x.id == 3)
|
145
|
-
self.assertEqual(len(exp.
|
148
|
+
self.assertEqual(len(exp.state.ckpt_examples), 1)
|
146
149
|
|
147
150
|
exp.reset()
|
148
|
-
self.assertEqual(len(exp.
|
151
|
+
self.assertEqual(len(exp.state.ckpt_examples), 0)
|
149
152
|
exp.load_state(state_file, filter=lambda x: x.id == 1)
|
150
|
-
self.assertEqual(len(exp.
|
153
|
+
self.assertEqual(len(exp.state.ckpt_examples), 0)
|
151
154
|
|
152
155
|
def test_html_view(self):
|
153
156
|
exp = eval_test_helper.TestEvaluation()
|
langfun/core/eval/v2/runners.py
CHANGED
@@ -181,8 +181,8 @@ class RunnerBase(Runner):
|
|
181
181
|
)
|
182
182
|
num_from_checkpoint, num_processed = 0, 0
|
183
183
|
for example_id in example_ids:
|
184
|
-
|
185
|
-
if
|
184
|
+
status = experiment.state.get_status(example_id)
|
185
|
+
if status.newly_processed:
|
186
186
|
num_processed += 1
|
187
187
|
else:
|
188
188
|
num_from_checkpoint += 1
|
@@ -358,7 +358,8 @@ class RunnerBase(Runner):
|
|
358
358
|
"""Runs the evaluation example."""
|
359
359
|
self.on_example_start(evaluation, item)
|
360
360
|
item = evaluation.evaluate(
|
361
|
-
item,
|
361
|
+
item,
|
362
|
+
raise_if_has_error=self.current_run.raise_if_has_error,
|
362
363
|
)
|
363
364
|
self.on_example_complete(evaluation, item)
|
364
365
|
return item
|
@@ -26,8 +26,8 @@ langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIc
|
|
26
26
|
langfun/core/template.py,sha256=jNhYSrbLIn9kZOa03w5QZbyjgfnzJzE_ZrrMvvWY4t4,24929
|
27
27
|
langfun/core/template_test.py,sha256=g7x4mgNIAXEEj-4W1D5whGfl5YikLEQoylKPzaeDomk,17069
|
28
28
|
langfun/core/agentic/__init__.py,sha256=ndoDX0sAYsa3eVdXuu6nB-a-BH5TaK3urW6zAaFiyVs,1110
|
29
|
-
langfun/core/agentic/action.py,sha256=
|
30
|
-
langfun/core/agentic/action_eval.py,sha256
|
29
|
+
langfun/core/agentic/action.py,sha256=c2UErthLm9xqcpVNMheBoCtuleJoPkugB6mYyZqMWs8,27660
|
30
|
+
langfun/core/agentic/action_eval.py,sha256=-ZcWt_eYqnTyOe9HFGyrLJkQRd4iG3hfN4IZ-NYAWwA,4534
|
31
31
|
langfun/core/agentic/action_eval_test.py,sha256=tRUkWmOE9p0rpNOq19xAY2oDEnYsEEykjg6sUpAwJk0,2832
|
32
32
|
langfun/core/agentic/action_test.py,sha256=Gu7P5XQvzqbKawn2jjyTpWaARzzhzO04KkC1TuBnUnw,4612
|
33
33
|
langfun/core/coding/__init__.py,sha256=5utju_fwEsImaiftx4oXKl9FAM8p281k8-Esdh_-m1w,835
|
@@ -52,11 +52,11 @@ langfun/core/eval/patching_test.py,sha256=8kCd54Egjju22FMgtJuxEsrXkW8ifs-UUBHtrC
|
|
52
52
|
langfun/core/eval/scoring.py,sha256=_DvnlgI1SdRVaOojao_AkV3pnenfCPOqyhvlg-Sw-5M,6322
|
53
53
|
langfun/core/eval/scoring_test.py,sha256=adQEeuDux11dt9lkJIzLYNmqYSi9h-Mi2Cr0lUUTx9I,4546
|
54
54
|
langfun/core/eval/v2/__init__.py,sha256=qoa6zKdFXOFyCX6vay6OdgPf1eUhYGoHYAxe35qECGk,1628
|
55
|
-
langfun/core/eval/v2/checkpointing.py,sha256=
|
56
|
-
langfun/core/eval/v2/checkpointing_test.py,sha256=
|
57
|
-
langfun/core/eval/v2/eval_test_helper.py,sha256=
|
58
|
-
langfun/core/eval/v2/evaluation.py,sha256=
|
59
|
-
langfun/core/eval/v2/evaluation_test.py,sha256=
|
55
|
+
langfun/core/eval/v2/checkpointing.py,sha256=t47rBfzGZYgIqWW1N1Ak9yQnNtHd-IRbEO0cZjG2VRo,11755
|
56
|
+
langfun/core/eval/v2/checkpointing_test.py,sha256=NggOSJ_6XSa4cNP6nGIu9wLsK59dUwe8SPWDiXtGGDE,9197
|
57
|
+
langfun/core/eval/v2/eval_test_helper.py,sha256=sKFi_wPYCNmr96WyTduuXY0KnxjFxcJyEhXey-_nGX8,3962
|
58
|
+
langfun/core/eval/v2/evaluation.py,sha256=qiM1z8xLEDU1381woIkcJmFkfF2oaRKG2NrixW2UNZ0,24042
|
59
|
+
langfun/core/eval/v2/evaluation_test.py,sha256=TKbeyeenoaUDH23E3TXXJ4otuq3VZBuWkWdV7c5vMk4,6804
|
60
60
|
langfun/core/eval/v2/example.py,sha256=4-LNr8Ke-fhaF6gyeXX4JMyw0s8YkVTC63pXZ-CXKrE,10144
|
61
61
|
langfun/core/eval/v2/example_test.py,sha256=1DNm6EuyZOq827DKvf3oTRVFkMNM_qTnLUpvOjpgz5I,3419
|
62
62
|
langfun/core/eval/v2/experiment.py,sha256=qYWx22KMfoUa4ieSq1bt7NE8L9dgoiJpuNOQGT1IBQw,32723
|
@@ -71,7 +71,7 @@ langfun/core/eval/v2/progress_tracking.py,sha256=l9fEkz4oP5McpZzf72Ua7PYm3lAWtRr
|
|
71
71
|
langfun/core/eval/v2/progress_tracking_test.py,sha256=fouMVJkFJqHjbhQJngGLGCmA9x3n0dU4USI2dY163mg,2291
|
72
72
|
langfun/core/eval/v2/reporting.py,sha256=7rL9LLmGYnQ5HIjqRqsOMkUlBl4BmFPEL6Vlofqi2Hk,8353
|
73
73
|
langfun/core/eval/v2/reporting_test.py,sha256=UmYSAQvD3AIXsSyWQ-WD2uLtEISYpmBeoKY5u5Qwc8E,5696
|
74
|
-
langfun/core/eval/v2/runners.py,sha256=
|
74
|
+
langfun/core/eval/v2/runners.py,sha256=De4d5QQ-Tpw0nPDODQexDPy0ti-FEgzHBvfH78zqdtg,15945
|
75
75
|
langfun/core/eval/v2/runners_test.py,sha256=A37fKK2MvAVTiShsg_laluJzJ9AuAQn52k7HPbfD0Ks,11666
|
76
76
|
langfun/core/llms/__init__.py,sha256=F2nqEv9Cc-1QALrlPnIEp-TZiSVTi6U8WWb1YwDt1w0,8038
|
77
77
|
langfun/core/llms/anthropic.py,sha256=d6ncYfPbK1YjofebKdOgGu0un_AXdsKBgt0SFGwE70s,23391
|
@@ -150,8 +150,8 @@ langfun/core/templates/demonstration.py,sha256=vCrgYubdZM5Umqcgp8NUVGXgr4P_c-fik
|
|
150
150
|
langfun/core/templates/demonstration_test.py,sha256=SafcDQ0WgI7pw05EmPI2S4v1t3ABKzup8jReCljHeK4,2162
|
151
151
|
langfun/core/templates/selfplay.py,sha256=yhgrJbiYwq47TgzThmHrDQTF4nDrTI09CWGhuQPNv-s,2273
|
152
152
|
langfun/core/templates/selfplay_test.py,sha256=Ot__1P1M8oJfoTp-M9-PQ6HUXqZKyMwvZ5f7yQ3yfyM,2326
|
153
|
-
langfun-0.1.2.
|
154
|
-
langfun-0.1.2.
|
155
|
-
langfun-0.1.2.
|
156
|
-
langfun-0.1.2.
|
157
|
-
langfun-0.1.2.
|
153
|
+
langfun-0.1.2.dev202503130804.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
154
|
+
langfun-0.1.2.dev202503130804.dist-info/METADATA,sha256=PS0ixoenOC9mpUPOMNjOpeu3Zn6C6ZNaj7XU1v27Th4,8172
|
155
|
+
langfun-0.1.2.dev202503130804.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
156
|
+
langfun-0.1.2.dev202503130804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
|
157
|
+
langfun-0.1.2.dev202503130804.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{langfun-0.1.2.dev202503110804.dist-info → langfun-0.1.2.dev202503130804.dist-info}/top_level.txt
RENAMED
File without changes
|