langfun 0.1.2.dev202512150805__py3-none-any.whl → 0.1.2.dev202601030804__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.
@@ -288,6 +288,8 @@ class Action(pg.Object):
288
288
 
289
289
  with session.track_action(self, max_execution_time=max_execution_time):
290
290
  try:
291
+ # Early terminate the action if the execution time is exceeded.
292
+ session.check_execution_time()
291
293
  result = self.call(session=session, **kwargs)
292
294
  self._invocation.end(result)
293
295
  except BaseException as e:
@@ -2005,9 +2007,6 @@ class Session(pg.Object, pg.views.html.HtmlTreeView.Extension):
2005
2007
  'signal the start and end of the session.'
2006
2008
  )
2007
2009
 
2008
- # Early terminate the action if the execution time is exceeded.
2009
- self.check_execution_time()
2010
-
2011
2010
  invocation = ActionInvocation(
2012
2011
  pg.maybe_ref(action),
2013
2012
  max_execution_time=self._child_max_execution_time(max_execution_time)
@@ -122,7 +122,7 @@ class Checkpointer(experiment_lib.Plugin):
122
122
  example: Example,
123
123
  ) -> None:
124
124
  """Saves the example to the checkpoint file."""
125
- if example.newly_processed:
125
+ if example.newly_processed or runner.current_run.force_recompute_metrics:
126
126
  self._save_example(runner, experiment, example)
127
127
 
128
128
  def _load_experiment(
@@ -173,9 +173,9 @@ class Checkpointer(experiment_lib.Plugin):
173
173
  output_ckpt_file = current_run.output_path_for(
174
174
  experiment, os.path.basename(ckpt_file)
175
175
  )
176
- if ckpt_file != output_ckpt_file and any(
177
- e for e in loaded_examples if not e.has_error
178
- ):
176
+ if (not runner.current_run.force_recompute_metrics
177
+ and ckpt_file != output_ckpt_file
178
+ and any(e for e in loaded_examples if not e.has_error)):
179
179
  # Write the error-free warm-start examples to the output checkpoint
180
180
  # file.
181
181
  with SequenceWriter(output_ckpt_file) as writer:
@@ -373,7 +373,6 @@ class BulkCheckpointer(Checkpointer):
373
373
  )
374
374
  if pg.io.path_exists(input_ckpt_file):
375
375
  return [input_ckpt_file]
376
- print('CCC', experiment.hash, [])
377
376
  return []
378
377
 
379
378
  def on_experiment_complete(
@@ -376,23 +376,24 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
376
376
  def run(
377
377
  self,
378
378
  root_dir: str,
379
- id: str | None = None, # pylint: disable=redefined-builtin
379
+ id: str | None = None, # pylint: disable=redefined-builtin
380
380
  *,
381
381
  runner: str = 'parallel',
382
382
  warm_start_from: str | None = None,
383
- filter: Callable[['Experiment'], bool] | None = None, # pylint: disable=redefined-builtin
383
+ filter: Callable[['Experiment'], bool] | None = None, # pylint: disable=redefined-builtin
384
384
  example_ids: list[int] | None = None,
385
385
  shuffle_inputs: bool = False,
386
386
  raise_if_has_error: bool = False,
387
387
  reevaluate_upon_previous_errors: bool = True,
388
388
  reprocess: bool | list[int] = False,
389
+ force_recompute_metrics: bool = False,
389
390
  generate_example_html: Literal['new', 'all', 'no'] | list[int] = 'new',
390
391
  process_timeout: int | None = None,
391
392
  use_cache: Literal['global', 'per_dataset', 'no'] = 'per_dataset',
392
393
  note: str | None = None,
393
394
  tags: list[str] | None = None,
394
395
  plugins: list['Plugin'] | None = None,
395
- **kwargs
396
+ **kwargs,
396
397
  ) -> 'Run':
397
398
  """Runs the experiment.
398
399
 
@@ -445,6 +446,8 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
445
446
  meaning that existing checkpoints will be ignored. If a list of
446
447
  example IDs, it indicates that only the specified examples will be
447
448
  reprocessed.
449
+ force_recompute_metrics: If True, it will recompute the metrics for all
450
+ examples, even if the previous checkpoints have metric metadata.
448
451
  generate_example_html: Among 'new', 'all', 'no' or a list of example IDs.
449
452
  If 'new', generate HTML files for all newly processed examples, and
450
453
  keep/copy existing HTML files for unchanged examples.
@@ -481,6 +484,7 @@ class Experiment(lf.Component, pg.views.HtmlTreeView.Extension):
481
484
  raise_if_has_error=raise_if_has_error,
482
485
  reevaluate_upon_previous_errors=reevaluate_upon_previous_errors,
483
486
  reprocess=reprocess,
487
+ force_recompute_metrics=force_recompute_metrics,
484
488
  generate_example_html=generate_example_html,
485
489
  use_cache=use_cache,
486
490
  process_timeout=process_timeout,
@@ -884,6 +888,14 @@ class Run(pg.Object, pg.views.html.HtmlTreeView.Extension):
884
888
  )
885
889
  ] = True
886
890
 
891
+ force_recompute_metrics: Annotated[
892
+ bool,
893
+ (
894
+ 'If True, force recompute the metrics even if metric metadata is '
895
+ 'already present from previous checkpoint.'
896
+ )
897
+ ] = False
898
+
887
899
  note: Annotated[
888
900
  str | None,
889
901
  'The user note for the current run.'
@@ -1003,7 +1015,7 @@ class Run(pg.Object, pg.views.html.HtmlTreeView.Extension):
1003
1015
  load_metadata_ids = set()
1004
1016
  if isinstance(self.generate_example_html, list):
1005
1017
  load_metadata_ids = set(self.generate_example_html)
1006
- elif self.generate_example_html == 'all':
1018
+ elif self.generate_example_html == 'all' or self.force_recompute_metrics:
1007
1019
  load_metadata_ids = self.examples_to_evaluate(experiment)
1008
1020
  load_metadata_ids -= self.examples_to_reprocess(experiment)
1009
1021
  return load_metadata_ids
@@ -227,7 +227,11 @@ class Progress(pg.Object, pg.views.HtmlTreeView.Extension):
227
227
 
228
228
  def merge_from(self, other: 'Progress') -> None:
229
229
  """Merges the progress from another progress."""
230
- with pg.notify_on_change(False), pg.allow_writable_accessors(True):
230
+ with (
231
+ self._lock,
232
+ pg.notify_on_change(False),
233
+ pg.allow_writable_accessors(True)
234
+ ):
231
235
  if other.start_time is not None and (
232
236
  self.start_time is None or self.start_time > other.start_time):
233
237
  self.start_time = other.start_time
@@ -268,16 +272,17 @@ class Progress(pg.Object, pg.views.HtmlTreeView.Extension):
268
272
  stop_time=self.stop_time_str,
269
273
  )
270
274
  if self.execution_summary:
271
- time_info['execution'] = pg.Dict(
272
- {
273
- k: pg.Dict(
274
- num_started=v.num_started,
275
- num_ended=v.num_ended,
276
- num_failed=v.num_failed,
277
- avg_duration=round(v.avg_duration, 2),
278
- ) for k, v in self.execution_summary.breakdown.items()
279
- }
280
- )
275
+ with self._lock:
276
+ time_info['execution'] = pg.Dict(
277
+ {
278
+ k: pg.Dict(
279
+ num_started=v.num_started,
280
+ num_ended=v.num_ended,
281
+ num_failed=v.num_failed,
282
+ avg_duration=round(v.avg_duration, 2),
283
+ ) for k, v in self.execution_summary.breakdown.items()
284
+ }
285
+ )
281
286
  return pg.format(time_info, verbose=False)
282
287
 
283
288
  def _html_tree_view(
@@ -99,6 +99,7 @@ class ExampleHtmlGenerator(experiment_lib.Plugin):
99
99
 
100
100
  generate_example_html = current_run.generate_example_html
101
101
  if (generate_example_html == 'all'
102
+ or runner.current_run.force_recompute_metrics
102
103
  or (generate_example_html == 'new' and example.newly_processed)
103
104
  or (isinstance(generate_example_html, list)
104
105
  and example.id in generate_example_html)):
@@ -396,6 +396,7 @@ class RunnerBase(Runner):
396
396
  item,
397
397
  raise_if_has_error=self.current_run.raise_if_has_error,
398
398
  reevaluate_upon_previous_errors=self.current_run.reevaluate_upon_previous_errors,
399
+ force_recompute_metrics=self.current_run.force_recompute_metrics,
399
400
  )
400
401
  self.on_example_complete(evaluation, item)
401
402
  return item
@@ -43,6 +43,7 @@ from langfun.core.llms.azure_openai import AzureOpenAI
43
43
  # Gemini models.
44
44
  from langfun.core.llms.google_genai import GenAI
45
45
  from langfun.core.llms.google_genai import Gemini3ProPreview
46
+ from langfun.core.llms.google_genai import Gemini3FlashPreview
46
47
  from langfun.core.llms.google_genai import Gemini25Pro
47
48
  from langfun.core.llms.google_genai import Gemini25Flash
48
49
  from langfun.core.llms.google_genai import Gemini25ProPreview_20250605
@@ -94,6 +95,7 @@ from langfun.core.llms.vertexai import VertexAIGemini25Flash
94
95
  from langfun.core.llms.vertexai import VertexAIGemini25FlashImagePreview
95
96
  from langfun.core.llms.vertexai import VertexAIGemini3ProPreview
96
97
  from langfun.core.llms.vertexai import VertexAIGemini3ProImagePreview
98
+ from langfun.core.llms.vertexai import VertexAIGemini3FlashPreview
97
99
 
98
100
  # For backward compatibility.
99
101
  GeminiPro1_5 = Gemini15Pro
@@ -160,6 +162,7 @@ from langfun.core.llms.openai import Gpt35
160
162
  from langfun.core.llms.anthropic import Claude45
161
163
  from langfun.core.llms.anthropic import Claude45Haiku_20251001
162
164
  from langfun.core.llms.anthropic import Claude45Sonnet_20250929
165
+ from langfun.core.llms.anthropic import Claude45Opus_20251101
163
166
  from langfun.core.llms.anthropic import Claude4
164
167
  from langfun.core.llms.anthropic import Claude4Sonnet_20250514
165
168
  from langfun.core.llms.anthropic import Claude4Opus_20250514
@@ -179,6 +182,7 @@ from langfun.core.llms.anthropic import Claude3Haiku_20240307
179
182
  from langfun.core.llms.vertexai import VertexAIAnthropic
180
183
  from langfun.core.llms.vertexai import VertexAIClaude45Haiku_20251001
181
184
  from langfun.core.llms.vertexai import VertexAIClaude45Sonnet_20250929
185
+ from langfun.core.llms.vertexai import VertexAIClaude45Opus_20251101
182
186
  from langfun.core.llms.vertexai import VertexAIClaude4Opus_20250514
183
187
  from langfun.core.llms.vertexai import VertexAIClaude4Sonnet_20250514
184
188
  from langfun.core.llms.vertexai import VertexAIClaude37Sonnet_20250219
@@ -113,6 +113,32 @@ SUPPORTED_MODELS = [
113
113
  max_output_tokens_per_minute=400_000,
114
114
  ),
115
115
  ),
116
+ AnthropicModelInfo(
117
+ model_id='claude-opus-4-5-20251101',
118
+ provider='Anthropic',
119
+ in_service=True,
120
+ description='Claude 4.5 Opus model (11/01/2025).',
121
+ release_date=datetime.datetime(2025, 11, 1),
122
+ input_modalities=(
123
+ AnthropicModelInfo.INPUT_IMAGE_TYPES
124
+ + AnthropicModelInfo.INPUT_DOC_TYPES
125
+ ),
126
+ context_length=lf.ModelInfo.ContextLength(
127
+ max_input_tokens=200_000,
128
+ max_output_tokens=64_000,
129
+ ),
130
+ pricing=lf.ModelInfo.Pricing(
131
+ cost_per_1m_cached_input_tokens=0.5,
132
+ cost_per_1m_input_tokens=5,
133
+ cost_per_1m_output_tokens=25,
134
+ ),
135
+ rate_limits=AnthropicModelInfo.RateLimits(
136
+ # Tier 4 rate limits
137
+ max_requests_per_minute=2000,
138
+ max_input_tokens_per_minute=1_000_000,
139
+ max_output_tokens_per_minute=400_000,
140
+ ),
141
+ ),
116
142
  AnthropicModelInfo(
117
143
  model_id='claude-4-opus-20250514',
118
144
  provider='Anthropic',
@@ -300,6 +326,32 @@ SUPPORTED_MODELS = [
300
326
  max_output_tokens_per_minute=0,
301
327
  ),
302
328
  ),
329
+ AnthropicModelInfo(
330
+ model_id='claude-opus-4-5@20251101',
331
+ alias_for='claude-opus-4-5-20251101',
332
+ provider='VertexAI',
333
+ in_service=True,
334
+ description='Claude 4.5 Opus model served on VertexAI (11/01/2025).',
335
+ release_date=datetime.datetime(2025, 11, 1),
336
+ input_modalities=(
337
+ AnthropicModelInfo.INPUT_IMAGE_TYPES
338
+ + AnthropicModelInfo.INPUT_DOC_TYPES
339
+ ),
340
+ context_length=lf.ModelInfo.ContextLength(
341
+ max_input_tokens=200_000,
342
+ max_output_tokens=64_000,
343
+ ),
344
+ pricing=lf.ModelInfo.Pricing(
345
+ cost_per_1m_cached_input_tokens=0.5,
346
+ cost_per_1m_input_tokens=5,
347
+ cost_per_1m_output_tokens=25,
348
+ ),
349
+ rate_limits=AnthropicModelInfo.RateLimits(
350
+ max_requests_per_minute=100,
351
+ max_input_tokens_per_minute=1_000_000,
352
+ max_output_tokens_per_minute=80_000,
353
+ ),
354
+ ),
303
355
  AnthropicModelInfo(
304
356
  model_id='claude-opus-4@20250514',
305
357
  alias_for='claude-opus-4-20250514',
@@ -834,6 +886,13 @@ class Claude45Sonnet_20250929(Claude45):
834
886
  model = 'claude-sonnet-4-5-20250929'
835
887
 
836
888
 
889
+ # pylint: disable=invalid-name
890
+ class Claude45Opus_20251101(Claude45):
891
+ """Claude 4.5 Opus model 20251101."""
892
+
893
+ model = 'claude-opus-4-5-20251101'
894
+
895
+
837
896
  class Claude4(Anthropic):
838
897
  """Base class for Claude 4 models."""
839
898
 
@@ -200,6 +200,32 @@ SUPPORTED_MODELS = [
200
200
  max_tokens_per_minute=1_000_000,
201
201
  ),
202
202
  ),
203
+ # Gemini 3 Flash Preview
204
+ GeminiModelInfo(
205
+ model_id='gemini-3-flash-preview',
206
+ in_service=True,
207
+ provider=pg.oneof(['Google GenAI', 'VertexAI']),
208
+ model_type='instruction-tuned',
209
+ description=(
210
+ 'Gemini 3 Flash Preview: High-efficiency, low-latency multimodal'
211
+ ' model optimized for agentic workflows.'
212
+ ),
213
+ release_date=datetime.datetime(2025, 12, 17),
214
+ input_modalities=GeminiModelInfo.ALL_SUPPORTED_INPUT_TYPES,
215
+ context_length=lf.ModelInfo.ContextLength(
216
+ max_input_tokens=1_048_576,
217
+ max_output_tokens=65_536,
218
+ ),
219
+ pricing=GeminiModelInfo.Pricing(
220
+ cost_per_1m_cached_input_tokens=0.05,
221
+ cost_per_1m_input_tokens=0.50,
222
+ cost_per_1m_output_tokens=3.00,
223
+ ),
224
+ rate_limits=lf.ModelInfo.RateLimits(
225
+ max_requests_per_minute=2_000,
226
+ max_tokens_per_minute=4_000_000,
227
+ ),
228
+ ),
203
229
  # Gemini 2.5 Flash
204
230
  GeminiModelInfo(
205
231
  model_id='gemini-2.5-flash',
@@ -143,6 +143,12 @@ class Gemini3ProImagePreview(GenAI):
143
143
  response_modalities = ['TEXT', 'IMAGE']
144
144
 
145
145
 
146
+ class Gemini3FlashPreview(GenAI):
147
+ """Gemini 3 Flash Preview model."""
148
+
149
+ model = 'gemini-3-flash-preview'
150
+
151
+
146
152
  class Gemini25FlashImagePreview(GenAI):
147
153
  """Gemini 2.5 Flash Image Preview model."""
148
154
  model = 'gemini-2.5-flash-image-preview'
@@ -240,6 +240,13 @@ class VertexAIGemini3ProImagePreview(VertexAIGemini): # pylint: disable=invalid
240
240
  response_modalities = ['TEXT', 'IMAGE']
241
241
 
242
242
 
243
+ class VertexAIGemini3FlashPreview(VertexAIGemini): # pylint: disable=invalid-name
244
+ """Gemini 3 Flash Preview model launched on 12/17/2025."""
245
+
246
+ model = 'gemini-3-flash-preview'
247
+ location = 'global'
248
+
249
+
243
250
  class VertexAIGemini25Pro(VertexAIGemini): # pylint: disable=invalid-name
244
251
  """Gemini 2.5 Pro GA model launched on 06/17/2025."""
245
252
 
@@ -439,6 +446,12 @@ class VertexAIClaude45Sonnet_20250929(VertexAIAnthropic):
439
446
  model = 'claude-sonnet-4-5@20250929'
440
447
 
441
448
 
449
+ class VertexAIClaude45Opus_20251101(VertexAIAnthropic):
450
+ """Anthropic's Claude 4.5 Opus model on VertexAI."""
451
+
452
+ model = 'claude-opus-4-5@20251101'
453
+
454
+
442
455
  class VertexAIClaude4Opus_20250514(VertexAIAnthropic):
443
456
  """Anthropic's Claude 4 Opus model on VertexAI."""
444
457
  model = 'claude-opus-4@20250514'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202512150805
3
+ Version: 0.1.2.dev202601030804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -35,7 +35,7 @@ langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIc
35
35
  langfun/core/template.py,sha256=KIRLEhijPf5UP5auJKf9x6HKKW2E1Ki83Dcs9W8eKs8,29571
36
36
  langfun/core/template_test.py,sha256=K7gx1CsDlau2CCvrE4BeKV26n0GyovhbsadWf8pDMek,20400
37
37
  langfun/core/agentic/__init__.py,sha256=ajI1SGcQWXfBp2MFH13Fr9OkSN4slSKDlJSHPDp4P_c,1573
38
- langfun/core/agentic/action.py,sha256=mgRUU6_dQVntZP3OmCoQCbrnNRHA_KVnOcKSy9GCQQM,72375
38
+ langfun/core/agentic/action.py,sha256=R3KQNzyuv2ME7ciK7PP_mB_5HaKTyFGMLeaCIZRRn5A,72385
39
39
  langfun/core/agentic/action_eval.py,sha256=Mjk5QBFInjIK3VlDR2RT__pugmtAW-iv-SMtH5GMcNo,5258
40
40
  langfun/core/agentic/action_eval_test.py,sha256=7AkOwNbUX-ZgR1R0a7bvUZ5abNTUV7blf_8Mnrwb-II,2811
41
41
  langfun/core/agentic/action_test.py,sha256=sKaU8IZ9whgBeV7oMB-0s8TdQ6PqDkI_eT9Yw3EZSYU,24123
@@ -69,7 +69,7 @@ langfun/core/eval/patching_test.py,sha256=8kCd54Egjju22FMgtJuxEsrXkW8ifs-UUBHtrC
69
69
  langfun/core/eval/scoring.py,sha256=1C7e7gR8Wai7M9oBXRZifntxy5HEik5qjVo9gY8B7KI,6423
70
70
  langfun/core/eval/scoring_test.py,sha256=UcBH0R6vAovZ0A4yM22s5cBHL1qVKASubrbu1t8dYBw,4529
71
71
  langfun/core/eval/v2/__init__.py,sha256=XbkBqoyJBH_khtAS01gP6_V4KnWLY3bFJ7D0rtHa1BU,1878
72
- langfun/core/eval/v2/checkpointing.py,sha256=ui4kOwOo_yu_ONzOho9Ri36NJOmYGqD1gYa6o1U7L9o,15463
72
+ langfun/core/eval/v2/checkpointing.py,sha256=_WJydQn43LDHTpjyt7qIh5XQl1--Jvq03lrwktcgy6U,15526
73
73
  langfun/core/eval/v2/checkpointing_test.py,sha256=s_E94dOPNO1zYzXyQI37wvCF3suez-r4Nls9popN58w,9787
74
74
  langfun/core/eval/v2/config_saver.py,sha256=nsuG0pqTikIlsL-Mij6swteUBif-zxJUdGxTHZsOVeQ,1205
75
75
  langfun/core/eval/v2/config_saver_test.py,sha256=OD0zl26YHjNibFD67YxwrZ7-zT9V7p-3zLDItWBAgic,1261
@@ -78,20 +78,20 @@ langfun/core/eval/v2/evaluation.py,sha256=1T0lxTu9gy329Mq4ii16ktARbtvbBGY9IUtsUI
78
78
  langfun/core/eval/v2/evaluation_test.py,sha256=gurFzSfPECZ_FMQOnf3bzKOHmQ7C4IUxEfbyZy50bjM,7966
79
79
  langfun/core/eval/v2/example.py,sha256=VZeBqMWnfEtn1mmdPW2w2u2XbAWVll1q1-50qL8DjS8,11606
80
80
  langfun/core/eval/v2/example_test.py,sha256=RwtBcUumPBWynA8BLMoZetSHdgvFywlHXuyvInf1y_s,3576
81
- langfun/core/eval/v2/experiment.py,sha256=NpVRkMRi4IXt1qx9b3k_hwHfVLkBrvtYRlMH3ID8FBA,36758
81
+ langfun/core/eval/v2/experiment.py,sha256=_tmahrRoFxSf8oPzsS-VcxqbCT2KvYafUoQuBP4yQ4s,37256
82
82
  langfun/core/eval/v2/experiment_test.py,sha256=7prE4ASKlbwQIXiLzEqjgaF4yQDL7KjxX-dBUPT84VA,14145
83
83
  langfun/core/eval/v2/metric_values.py,sha256=WAL1BdHaU_oq7d_k1KyjhiQDK32dNLSyn1L2yEkz0o4,6040
84
84
  langfun/core/eval/v2/metric_values_test.py,sha256=5ffwnqrbLIBh1hdUl3L9mpJlUvsmd2VQ8UWPOJcQj4s,3630
85
85
  langfun/core/eval/v2/metrics.py,sha256=cdFqrhRlxqpBk_04Mmhk21NcOD0kor5H0iFX54_rO4s,14486
86
86
  langfun/core/eval/v2/metrics_test.py,sha256=gf8hT5V5OeM-Ah-Wa4aLtgrYZmlMStKPjEhCTS0VMHQ,6812
87
- langfun/core/eval/v2/progress.py,sha256=Cd79j8fhumW5QOuISiSXOJKOZ5-I9IkmGLgvqRmoULA,11677
87
+ langfun/core/eval/v2/progress.py,sha256=-kYzdiVbw56eb8mc0yCS_2d5aIUdZ1oVi1QWBuhFW74,11764
88
88
  langfun/core/eval/v2/progress_test.py,sha256=MzJ7wa65XYZ0chArA-lSg1eRSvQ_TzZJIHMk85Kwz7o,3208
89
89
  langfun/core/eval/v2/progress_tracking.py,sha256=yMYlOMJF8M4FUhyjGRkM6O6TXiMwKPsEn3wbpftxcss,6376
90
90
  langfun/core/eval/v2/progress_tracking_test.py,sha256=37v42y4kh2GfDXBrkugEupW6IRAzA774wwPJaOyefUs,2597
91
- langfun/core/eval/v2/reporting.py,sha256=Z_tt_EfApPa-AcfYmfZ2818fk8eWK-EGl1fYlgxpCAk,8895
91
+ langfun/core/eval/v2/reporting.py,sha256=U6ToanG_y-zFZ1W1CRaju6T_zLlbmknLR148nIvl8mw,8949
92
92
  langfun/core/eval/v2/reporting_test.py,sha256=q3LBfPk7jvEWXB3sdk2CycbMKqNRyXhs5z6BokfwDIE,6096
93
93
  langfun/core/eval/v2/runners/__init__.py,sha256=2TcCLW32OsmXQINcVKa2ZJY8Ca7j3NnT0yy9hXYUDn8,1115
94
- langfun/core/eval/v2/runners/base.py,sha256=_ixOIxGxrrNKDLBxJlfjLHCzlkjxKUkJY_MO3CmzM14,14072
94
+ langfun/core/eval/v2/runners/base.py,sha256=8KZlkSuuzlSxeoQfsG32OM6E2WUbtgNuz9p5MyfVFQY,14146
95
95
  langfun/core/eval/v2/runners/beam.py,sha256=LQK9bZCFJR9j9DJ-mAudhphumItGwXc5bbGwadl9kxY,11782
96
96
  langfun/core/eval/v2/runners/beam_test.py,sha256=cI5WaQQObnRrPnGjED3OFT3JXYOE3thQ640H08TG_dw,5306
97
97
  langfun/core/eval/v2/runners/ckpt_monitor.py,sha256=KaaDYvHNOewUrJqJ4FHjdMeS7okpX7FYdjCx558joPU,12071
@@ -102,8 +102,8 @@ langfun/core/eval/v2/runners/parallel.py,sha256=PSdOY3i2ot94TWVCZY0iJSWFAT0CCxa1
102
102
  langfun/core/eval/v2/runners/parallel_test.py,sha256=8M8OTpsDd-wQYZRRSPCYGkwjt7gUvkgze8NMCTKydUw,6146
103
103
  langfun/core/eval/v2/runners/sequential.py,sha256=hebMZd6EVraY9zAwariT9WfsWQyX5AYuRsFdRo-knKU,1631
104
104
  langfun/core/eval/v2/runners/sequential_test.py,sha256=apbNC0-Pi6r17_OQlHqqOZM0OVo1mZlaPk2B4vUteRg,6064
105
- langfun/core/llms/__init__.py,sha256=KU00R0906yLWjSg_tquCna1CU_6z4XOIKMhLzzGE-Zc,10489
106
- langfun/core/llms/anthropic.py,sha256=6uE1EC9YWtbiFwZNNPEFv-QzeGQQ7G27kheTTE15Ewg,31175
105
+ langfun/core/llms/__init__.py,sha256=BPPV18zMOvLuAhStVVbef13Pe59CsEWGo9YvRAyeFAo,10750
106
+ langfun/core/llms/anthropic.py,sha256=HwgzvMkVdQwmwfDtI_X6lxW0gBxsbYAdMKes8u8Jv_Y,33224
107
107
  langfun/core/llms/anthropic_test.py,sha256=qA9vByp_cwwXNlXzcwHpPWFnO9lfFo8NKfDi5nBNqgI,9052
108
108
  langfun/core/llms/azure_openai.py,sha256=LEc7-ay2fOOCwwL3SfxDr3KCdH8-2i1EtD-PBvr4kfk,2777
109
109
  langfun/core/llms/azure_openai_test.py,sha256=lkMZkQdJBV97fTM4C4z8qNfvr6spgiN5G4hvVUIVr0M,1735
@@ -113,9 +113,9 @@ langfun/core/llms/deepseek.py,sha256=jQsotTUk4161EJIcoQOV7iOWBZfQ3Ukh9GOh31A0HYU
113
113
  langfun/core/llms/deepseek_test.py,sha256=DvROWPlDuow5E1lfoSkhyGt_ELA19JoQoDsTnRgDtTg,1847
114
114
  langfun/core/llms/fake.py,sha256=NH8Zlezmx3eacao4D7wihrZjRuyBJuHR5rdyp94PrAw,4409
115
115
  langfun/core/llms/fake_test.py,sha256=lC-C2TpEsnf2kmZpa3OiH2H944I4hMWTAaHEXzRj1DU,7855
116
- langfun/core/llms/gemini.py,sha256=_GMcbkfaSWkMGiK1d8DfpQzRiSCZrd092VhBMfRZ9H0,33243
116
+ langfun/core/llms/gemini.py,sha256=6ys2nm9WnhyO27YY3c6AI7reOs-rMk7yPBBh9EC07-s,34225
117
117
  langfun/core/llms/gemini_test.py,sha256=bv-Ulv3vjGhxd8nJD_UDhWDMK3K3TM7b5powBcYrv1c,10844
118
- langfun/core/llms/google_genai.py,sha256=hodpibBtcxg8pU-XrEsPBkhzGsjSYrEUHyz0w9RWwCc,6986
118
+ langfun/core/llms/google_genai.py,sha256=YObrVUhHJcGCiUlL4LuoGyjEiyf_WM2y4iBxQIV0GHY,7096
119
119
  langfun/core/llms/google_genai_test.py,sha256=NKNtpebArQ9ZR7Qsnhd2prFIpMjleojy6o6VMXkJ1zY,1502
120
120
  langfun/core/llms/groq.py,sha256=O-kv2_R_IkC8wGIT086xin8jYi7QnsakPCGVLR58lMw,12517
121
121
  langfun/core/llms/groq_test.py,sha256=P4EgexCqsh4K2x11w0UL_vz-YYNaPdQU0WsDAdnTRQ8,2045
@@ -127,7 +127,7 @@ langfun/core/llms/openai_compatible_test.py,sha256=8yr_jGmHCDyMwp-VcJwThFgh7B_56
127
127
  langfun/core/llms/openai_test.py,sha256=1o5rxiHZj-UEgugWN8JmfJtznhUmDywy6dU3Euax-Ts,2639
128
128
  langfun/core/llms/rest.py,sha256=eR-M1st5ZnzuitICyYfxSRcmQWmy_eeOoe2bHLalzN0,5351
129
129
  langfun/core/llms/rest_test.py,sha256=_zM7nV8DEVyoXNiQOnuwJ917mWjki0614H88rNmDboE,5020
130
- langfun/core/llms/vertexai.py,sha256=KjiMrEjWgoJct9QQTQKQ_8fzZ5SbpVNDyZpvHgHZj3g,22134
130
+ langfun/core/llms/vertexai.py,sha256=zQO-zi1HVLwLJU9r5_hmCvyfxdox7FKT_43XjILRwvA,22489
131
131
  langfun/core/llms/vertexai_test.py,sha256=_e-acnNBAf9C3WO6i1b2J_mhRzdDdYQTorD9hIVZKOg,5034
132
132
  langfun/core/llms/cache/__init__.py,sha256=QAo3InUMDM_YpteNnVCSejI4zOsnjSMWKJKzkb3VY64,993
133
133
  langfun/core/llms/cache/base.py,sha256=qLGlEMi5cfsDxRTsOWrmwbxjvvwUaq4Y8MxlXr69wpw,5060
@@ -210,8 +210,8 @@ langfun/env/event_handlers/event_logger.py,sha256=ga8RN8qjwtAOCnV_MnhNPTktN8EJ-x
210
210
  langfun/env/event_handlers/event_logger_test.py,sha256=qSAcirtRz00H-1RL9ShELBiZKiPxsk_v6cVA6XdAk4k,9274
211
211
  langfun/env/event_handlers/metric_writer.py,sha256=7ZrUp0rYvs7TfNpQ16Xbxg8vp-6ZbjuJ-qrhVSbhv2I,21085
212
212
  langfun/env/event_handlers/metric_writer_test.py,sha256=bjdYXoXMPWpWz_-HUPM6vFP1ez5G386u0fmPfe-SR_M,5952
213
- langfun-0.1.2.dev202512150805.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
214
- langfun-0.1.2.dev202512150805.dist-info/METADATA,sha256=AEsimQbtMKxj8Kja2fIIgEXhoBsmqLwq-1PF3i_WlFg,7522
215
- langfun-0.1.2.dev202512150805.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
216
- langfun-0.1.2.dev202512150805.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
217
- langfun-0.1.2.dev202512150805.dist-info/RECORD,,
213
+ langfun-0.1.2.dev202601030804.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
214
+ langfun-0.1.2.dev202601030804.dist-info/METADATA,sha256=FRXTPzGp4Bi8NFAGVHUUWOaEuO-5nUIy-X2y1CH_bds,7522
215
+ langfun-0.1.2.dev202601030804.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
216
+ langfun-0.1.2.dev202601030804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
217
+ langfun-0.1.2.dev202601030804.dist-info/RECORD,,