langfun 0.1.2.dev202511160804__py3-none-any.whl → 0.1.2.dev202511270805__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.

Potentially problematic release.


This version of langfun might be problematic. Click here for more details.

Files changed (41) hide show
  1. langfun/core/__init__.py +1 -0
  2. langfun/core/agentic/__init__.py +4 -1
  3. langfun/core/agentic/action.py +340 -17
  4. langfun/core/agentic/action_test.py +124 -21
  5. langfun/core/eval/base_test.py +5 -5
  6. langfun/core/eval/v2/checkpointing.py +25 -1
  7. langfun/core/eval/v2/checkpointing_test.py +8 -1
  8. langfun/core/eval/v2/eval_test_helper.py +7 -2
  9. langfun/core/eval/v2/evaluation.py +4 -1
  10. langfun/core/eval/v2/example.py +5 -1
  11. langfun/core/eval/v2/example_test.py +13 -5
  12. langfun/core/eval/v2/experiment.py +23 -0
  13. langfun/core/eval/v2/experiment_test.py +19 -0
  14. langfun/core/eval/v2/progress_tracking.py +12 -3
  15. langfun/core/eval/v2/progress_tracking_test.py +3 -1
  16. langfun/core/eval/v2/reporting_test.py +4 -0
  17. langfun/core/eval/v2/runners/__init__.py +4 -0
  18. langfun/core/eval/v2/runners/base.py +40 -21
  19. langfun/core/eval/v2/runners/beam.py +341 -0
  20. langfun/core/eval/v2/runners/beam_test.py +131 -0
  21. langfun/core/eval/v2/runners/ckpt_monitor.py +294 -0
  22. langfun/core/eval/v2/runners/ckpt_monitor_test.py +162 -0
  23. langfun/core/eval/v2/runners/debug_test.py +1 -4
  24. langfun/core/eval/v2/runners/parallel_test.py +1 -4
  25. langfun/core/eval/v2/runners/sequential_test.py +1 -4
  26. langfun/core/langfunc_test.py +3 -3
  27. langfun/core/language_model.py +38 -5
  28. langfun/core/language_model_test.py +45 -0
  29. langfun/core/llms/__init__.py +2 -0
  30. langfun/core/llms/gemini.py +41 -8
  31. langfun/core/llms/gemini_test.py +84 -0
  32. langfun/core/llms/google_genai.py +5 -0
  33. langfun/core/llms/vertexai.py +7 -0
  34. langfun/core/modalities/mime.py +2 -0
  35. langfun/core/modalities/mime_test.py +11 -0
  36. langfun/core/structured/schema/__init__.py +1 -0
  37. {langfun-0.1.2.dev202511160804.dist-info → langfun-0.1.2.dev202511270805.dist-info}/METADATA +1 -1
  38. {langfun-0.1.2.dev202511160804.dist-info → langfun-0.1.2.dev202511270805.dist-info}/RECORD +41 -37
  39. {langfun-0.1.2.dev202511160804.dist-info → langfun-0.1.2.dev202511270805.dist-info}/WHEEL +0 -0
  40. {langfun-0.1.2.dev202511160804.dist-info → langfun-0.1.2.dev202511270805.dist-info}/licenses/LICENSE +0 -0
  41. {langfun-0.1.2.dev202511160804.dist-info → langfun-0.1.2.dev202511270805.dist-info}/top_level.txt +0 -0
@@ -151,6 +151,32 @@ SUPPORTED_MODELS = [
151
151
  #
152
152
  # Production models.
153
153
  #
154
+ # Gemini 3 Pro Preview
155
+ GeminiModelInfo(
156
+ model_id='gemini-3-pro-preview',
157
+ in_service=True,
158
+ provider=pg.oneof(['Google GenAI', 'VertexAI']),
159
+ model_type='instruction-tuned',
160
+ description='Gemini 3 Pro Preview.',
161
+ release_date=datetime.datetime(2025, 11, 18),
162
+ input_modalities=GeminiModelInfo.ALL_SUPPORTED_INPUT_TYPES,
163
+ context_length=lf.ModelInfo.ContextLength(
164
+ max_input_tokens=1_048_576,
165
+ max_output_tokens=65_536,
166
+ ),
167
+ pricing=GeminiModelInfo.Pricing(
168
+ cost_per_1m_cached_input_tokens=0.2,
169
+ cost_per_1m_input_tokens=2.0,
170
+ cost_per_1m_output_tokens=12.0,
171
+ cost_per_1m_cached_input_tokens_with_prompt_longer_than_128k=0.4,
172
+ cost_per_1m_input_tokens_with_prompt_longer_than_128k=4.0,
173
+ cost_per_1m_output_tokens_with_prompt_longer_than_128k=18.0,
174
+ ),
175
+ rate_limits=lf.ModelInfo.RateLimits(
176
+ max_requests_per_minute=2000,
177
+ max_tokens_per_minute=4_000_000,
178
+ ),
179
+ ),
154
180
  # Gemini 2.5 Flash
155
181
  GeminiModelInfo(
156
182
  model_id='gemini-2.5-flash',
@@ -793,11 +819,14 @@ class Gemini(rest.REST):
793
819
  + '\n\n [RESPONSE FORMAT (not part of prompt)]\n'
794
820
  + pg.to_json_str(json_schema, json_indent=2)
795
821
  )
822
+ thinking_config_data = {}
796
823
  if options.max_thinking_tokens is not None:
797
- config['thinkingConfig'] = {
798
- 'includeThoughts': options.max_thinking_tokens > 0,
799
- 'thinkingBudget': options.max_thinking_tokens,
800
- }
824
+ thinking_config_data['includeThoughts'] = options.max_thinking_tokens > 0
825
+ thinking_config_data['thinkingBudget'] = options.max_thinking_tokens
826
+ if options.thinking_level is not None:
827
+ thinking_config_data['thinkingLevel'] = options.thinking_level
828
+ if thinking_config_data:
829
+ config['thinkingConfig'] = thinking_config_data
801
830
 
802
831
  if self.response_modalities:
803
832
  config['responseModalities'] = self.response_modalities
@@ -813,10 +842,14 @@ class Gemini(rest.REST):
813
842
  'No candidates found in response. This is a Gemini API issue that '
814
843
  'happens occasionally, and retrying should fix it. '
815
844
  )
816
- messages = [
817
- lf.Message.from_value(candidate['content'], format='gemini')
818
- for candidate in candidates
819
- ]
845
+
846
+ messages = []
847
+ for candidate in candidates:
848
+ message = lf.Message.from_value(candidate['content'], format='gemini')
849
+ if finish_reason := candidate.get('finishReason'):
850
+ message.metadata['finish_reason'] = finish_reason
851
+ messages.append(message)
852
+
820
853
  usage = json['usageMetadata']
821
854
  input_tokens = usage['promptTokenCount']
822
855
  # NOTE(daiyip): We saw cases that `candidatesTokenCount` is not present.
@@ -177,6 +177,58 @@ class GeminiTest(unittest.TestCase):
177
177
  ),
178
178
  )
179
179
 
180
+ # Add test for thinkingConfig with thinking_level.
181
+ actual = model._generation_config(
182
+ lf.UserMessage('hi'),
183
+ lf.LMSamplingOptions(
184
+ thinking_level='high',
185
+ ),
186
+ )
187
+ self.assertEqual(
188
+ actual,
189
+ dict(
190
+ candidateCount=1,
191
+ temperature=None,
192
+ topP=None,
193
+ topK=40,
194
+ maxOutputTokens=None,
195
+ stopSequences=None,
196
+ responseLogprobs=False,
197
+ logprobs=None,
198
+ seed=None,
199
+ thinkingConfig={'thinkingLevel': 'high'},
200
+ ),
201
+ )
202
+
203
+ # Add test for thinkingConfig with both max_thinking_tokens and
204
+ # thinking_level.
205
+ actual = model._generation_config(
206
+ lf.UserMessage('hi'),
207
+ lf.LMSamplingOptions(
208
+ max_thinking_tokens=100,
209
+ thinking_level='low',
210
+ ),
211
+ )
212
+ self.assertEqual(
213
+ actual,
214
+ dict(
215
+ candidateCount=1,
216
+ temperature=None,
217
+ topP=None,
218
+ topK=40,
219
+ maxOutputTokens=None,
220
+ stopSequences=None,
221
+ responseLogprobs=False,
222
+ logprobs=None,
223
+ seed=None,
224
+ thinkingConfig={
225
+ 'includeThoughts': True,
226
+ 'thinkingBudget': 100,
227
+ 'thinkingLevel': 'low',
228
+ },
229
+ ),
230
+ )
231
+
180
232
  with self.assertRaisesRegex(
181
233
  ValueError, '`json_schema` must be a dict, got'
182
234
  ):
@@ -225,6 +277,38 @@ class GeminiTest(unittest.TestCase):
225
277
  ):
226
278
  lm('hello')
227
279
 
280
+ def test_call_model_with_max_tokens_error(self):
281
+ def mock_requests_post_error(*args, **kwargs):
282
+ del args, kwargs
283
+ response = requests.Response()
284
+ response.status_code = 200
285
+ response._content = pg.to_json_str({
286
+ 'candidates': [
287
+ {
288
+ 'finishReason': 'MAX_TOKENS',
289
+ 'content': {
290
+ 'parts': [
291
+ {
292
+ 'text': 'This is'
293
+ }
294
+ ]
295
+ }
296
+ },
297
+ ],
298
+ 'usageMetadata': {
299
+ 'promptTokenCount': 3,
300
+ 'candidatesTokenCount': 4,
301
+ }
302
+ }).encode()
303
+ return response
304
+
305
+ with mock.patch('requests.Session.post') as mock_generate:
306
+ mock_generate.side_effect = mock_requests_post_error
307
+ lm = gemini.Gemini('gemini-1.5-pro', api_endpoint='')
308
+ m = lm('hello')
309
+ self.assertEqual(m.metadata.finish_reason, 'MAX_TOKENS')
310
+ self.assertEqual(m.text, 'This is')
311
+
228
312
  def test_call_model_with_system_message(self):
229
313
  with mock.patch('requests.Session.post') as mock_generate:
230
314
  mock_generate.side_effect = mock_requests_post
@@ -115,9 +115,14 @@ class GenAI(gemini.Gemini):
115
115
 
116
116
  # pylint: disable=invalid-name
117
117
 
118
+
118
119
  #
119
120
  # Experimental models.
120
121
  #
122
+ class Gemini3ProPreview(GenAI):
123
+ """Gemini 3 Pro Preview model."""
124
+
125
+ model = 'gemini-3-pro-preview'
121
126
 
122
127
 
123
128
  class Gemini25FlashImagePreview(GenAI):
@@ -213,6 +213,13 @@ class VertexAIGemini(VertexAI, gemini.Gemini):
213
213
  #
214
214
  # Production models.
215
215
  #
216
+ class VertexAIGemini3ProPreview(VertexAIGemini): # pylint: disable=invalid-name
217
+ """Gemini 3 Pro Preview model launched on 11/18/2025."""
218
+
219
+ model = 'gemini-3-pro-preview'
220
+ location = 'global'
221
+
222
+
216
223
  class VertexAIGemini25Pro(VertexAIGemini): # pylint: disable=invalid-name
217
224
  """Gemini 2.5 Pro GA model launched on 06/17/2025."""
218
225
 
@@ -204,6 +204,8 @@ class Mime(lf.Modality):
204
204
  return cls.class_from_mime_type(mime_type).from_bytes(content, **kwargs)
205
205
 
206
206
  if cls is Mime:
207
+ if 'youtube.com/watch' in uri:
208
+ return Custom(mime='text/html', uri=uri, **kwargs)
207
209
  content = cls.download(uri)
208
210
  mime = _detect_mime_type(content)
209
211
  return cls.class_from_mime_type(mime)(uri=uri, content=content, **kwargs)
@@ -109,6 +109,17 @@ class CustomMimeTest(unittest.TestCase):
109
109
  with self.assertRaisesRegex(ValueError, 'Unsupported encoding'):
110
110
  mime.Mime.from_uri('data:text/plain;base16,abcd')
111
111
 
112
+ # Test YouTube URI
113
+ yt_uri = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
114
+ with mock.patch(
115
+ 'langfun.core.modalities.mime.Mime.download'
116
+ ) as mock_download:
117
+ content = mime.Mime.from_uri(yt_uri)
118
+ self.assertIsInstance(content, mime.Custom)
119
+ self.assertEqual(content.mime_type, 'text/html')
120
+ self.assertEqual(content.uri, yt_uri)
121
+ mock_download.assert_not_called()
122
+
112
123
  def assert_html_content(self, html, expected):
113
124
  expected = inspect.cleandoc(expected).strip()
114
125
  actual = html.content.strip()
@@ -17,6 +17,7 @@
17
17
  # pylint: disable=g-importing-member
18
18
  from langfun.core.structured.schema.base import Schema
19
19
  from langfun.core.structured.schema.base import SchemaError
20
+ from langfun.core.structured.schema.base import SchemaType
20
21
 
21
22
  from langfun.core.structured.schema.base import class_dependencies
22
23
  from langfun.core.structured.schema.base import schema_spec
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202511160804
3
+ Version: 0.1.2.dev202511270805
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -6,7 +6,7 @@ langfun/assistant/capabilities/gui/drawing.py,sha256=8wgol61P7HovLg5EaevRmDPXTFu
6
6
  langfun/assistant/capabilities/gui/drawing_test.py,sha256=d6LQ1ctG78YRi58UVBdndwyEqTC_ITdk191oA3tASxM,3421
7
7
  langfun/assistant/capabilities/gui/location.py,sha256=QYJlY5kUNEwiZFiPYRyFAO7bD2ez4jL5hYn1_AK1ulc,8643
8
8
  langfun/assistant/capabilities/gui/location_test.py,sha256=pQUOH1sKuAwjTTYKu615RUnecc_lNrddfvkyxf9297w,9051
9
- langfun/core/__init__.py,sha256=-HrGZb0Gv4nH6R2I2dXOVfkWKrGQfEu9UHBmXsG-x-E,5056
9
+ langfun/core/__init__.py,sha256=HeTypJn85zOOzRb8hiIoC1vOE69xKtvUSz7TmeogLQo,5117
10
10
  langfun/core/async_support.py,sha256=TZA5toE-dEm7NvmggvsE7dPUGF9SG6_nXdyVPLTXMzs,4142
11
11
  langfun/core/async_support_test.py,sha256=fMz1ulGrfUCuHp7RtYktuBwpbRN3kCBKnB4LFvaXSAA,1754
12
12
  langfun/core/component.py,sha256=OApzlPc3jOsYJdW29SBNs9D5NMFItf-cGWv8hLbogy4,3866
@@ -16,9 +16,9 @@ langfun/core/concurrent_test.py,sha256=Da4oqfu_YWH-B8H2Bv6e8tWIkR0ubkW40bccQ3N1m
16
16
  langfun/core/console.py,sha256=g3jczlZoMpIcbYyMB4cSoEHEGg5OxzQLMqAR-u8RSgE,2684
17
17
  langfun/core/console_test.py,sha256=pBOcuNMJdVELywvroptfcRtJMsegMm3wSlHAL2TdxVk,1679
18
18
  langfun/core/langfunc.py,sha256=bqYwgjAl56k7v1TLe2LrOj_cdfJ-9WQbbXPcW_f0a_c,8628
19
- langfun/core/langfunc_test.py,sha256=eY7hNgkwtVKcro2G6Fh2k6upVEg8ggXBKjVmqT8oLn4,8961
20
- langfun/core/language_model.py,sha256=VZfYhXw28z5rTp8RGmSH0mql7xJ6ONvyNphdObjzbKQ,54794
21
- langfun/core/language_model_test.py,sha256=UIQpovmVfJnJ2EDOi9OZG_1UNClWs9lkTaE22_ClSlQ,38550
19
+ langfun/core/langfunc_test.py,sha256=QDtGA5pa2qt9F3YbXZs6jSpvU98PxvqezGvzFNc27NI,8982
20
+ langfun/core/language_model.py,sha256=TLrhJE4902YcUKDQsuuUxIFobVfSIQJunJh-QGTUvSk,55883
21
+ langfun/core/language_model_test.py,sha256=-1qjrgafNXa2WbicmqJyP-G8Ev-9ZmlFuE375foiWzM,40165
22
22
  langfun/core/logging.py,sha256=xUmEsKLNmeZLZd3Ar8ROdv7kK2GjOkuEAgKRcAyo0AM,9138
23
23
  langfun/core/logging_test.py,sha256=vbVGOQxwMmVSiFfbt2897gUt-8nqDpV64jCAeUG_q5U,6924
24
24
  langfun/core/memory.py,sha256=tTZ7hWcFGG4Rl0SsWb7_82L1w-V46sA9BiOaDBUCaVI,2099
@@ -34,11 +34,11 @@ langfun/core/subscription.py,sha256=1VzAX6aaESy0l8B5luNTcOqGRwAFNmA6jG_nLSfFDLI,
34
34
  langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIcArBo,8717
35
35
  langfun/core/template.py,sha256=KIRLEhijPf5UP5auJKf9x6HKKW2E1Ki83Dcs9W8eKs8,29571
36
36
  langfun/core/template_test.py,sha256=K7gx1CsDlau2CCvrE4BeKV26n0GyovhbsadWf8pDMek,20400
37
- langfun/core/agentic/__init__.py,sha256=vsnuvjaz9-nysBjdihGf43JC8AyLPhPJwIOevyONyAQ,1517
38
- langfun/core/agentic/action.py,sha256=9UX4auiIizKLidP9FQrDnslFMPbJkHmpldMwGGPitLU,61973
37
+ langfun/core/agentic/__init__.py,sha256=ajI1SGcQWXfBp2MFH13Fr9OkSN4slSKDlJSHPDp4P_c,1573
38
+ langfun/core/agentic/action.py,sha256=mgRUU6_dQVntZP3OmCoQCbrnNRHA_KVnOcKSy9GCQQM,72375
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
- langfun/core/agentic/action_test.py,sha256=4X11bNffNZG8WfjB1Z-Sm33Z2hs0YPzz-6ct77V8M7Q,19824
41
+ langfun/core/agentic/action_test.py,sha256=sKaU8IZ9whgBeV7oMB-0s8TdQ6PqDkI_eT9Yw3EZSYU,24123
42
42
  langfun/core/coding/__init__.py,sha256=5utju_fwEsImaiftx4oXKl9FAM8p281k8-Esdh_-m1w,835
43
43
  langfun/core/coding/python/__init__.py,sha256=yTXm92oLpQb4A-fZ2qy-bzfhPYND7B-oidtbv1PNaX0,1678
44
44
  langfun/core/coding/python/correction.py,sha256=KbIJMNLmBv6QHEx8ja_ZweIqffzF95FdEssahy4AFhI,7702
@@ -61,7 +61,7 @@ langfun/core/data/conversion/openai.py,sha256=P_HPlS9DIH6s-LTVq9I-UM_GGKSK9ZsPgi
61
61
  langfun/core/data/conversion/openai_test.py,sha256=7OrB_i4HF2zUxkdeFp35p4pyzwnpY6uN-ACIqrPgUVI,9835
62
62
  langfun/core/eval/__init__.py,sha256=OEXr1ZRuvLuhJJfuQ1ZWQ-SvYzjyrtiAAEogYaB7E6o,1933
63
63
  langfun/core/eval/base.py,sha256=A7jMpvvEej37GAnVWjt9FLP2Yiuuac0AP9GjzDSZDRs,76158
64
- langfun/core/eval/base_test.py,sha256=jbl5NMKk9QUsp8R-OeTJ4dEefQdK8JL1lIouuihglbc,27191
64
+ langfun/core/eval/base_test.py,sha256=yiZARvXldmIdpAj0hD_FM5D40DEZuYvwhnEM-x5kjso,27197
65
65
  langfun/core/eval/matching.py,sha256=IXih9N3tvLuF1EmdmqldLBR0kyQsXuh2dOz2J3RC12E,9458
66
66
  langfun/core/eval/matching_test.py,sha256=2xtwsTi-UzLTt0QnXl3u_eAG3fFjCG2tsae7YkcQTB0,5312
67
67
  langfun/core/eval/patching.py,sha256=wJqqML_z_hXQQ65f9oJpdtiNEkUvwWWdNgGiIcV1Jq4,3871
@@ -69,34 +69,38 @@ 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=qYF7AN3K4fDV6pB4uMiCrAYZaAR6R_VX1EVSAeFJopg,1790
72
- langfun/core/eval/v2/checkpointing.py,sha256=NYWUqMJfSKeD7KFw17fYFztiVnQpFgaMsx6ySPP95QM,13101
73
- langfun/core/eval/v2/checkpointing_test.py,sha256=ve_A1_MQn1id9zlr9Sjqb6Jdza0HQRBZs8BeIqeSAbw,9574
74
- langfun/core/eval/v2/eval_test_helper.py,sha256=B35FC6lm56jx8Iq3YgVNetkN7tARwIVUUmEZxd85bmw,6433
75
- langfun/core/eval/v2/evaluation.py,sha256=aJjbhutTwQjdlPVng_c2Wk4Pj1RM2YURjaKWfPcKgY8,30366
72
+ langfun/core/eval/v2/checkpointing.py,sha256=f7PH7Zbu3IQBSq6x2CIMiD_w6oHcC1kE_weopoJIZx4,13838
73
+ langfun/core/eval/v2/checkpointing_test.py,sha256=s_E94dOPNO1zYzXyQI37wvCF3suez-r4Nls9popN58w,9787
74
+ langfun/core/eval/v2/eval_test_helper.py,sha256=baew3-cqomy1p7mF1_Xw7AvEWUwCimi3J7-8Ay3eEPo,6539
75
+ langfun/core/eval/v2/evaluation.py,sha256=A_5go1bsZuSfkLueo24jmIf4Tao2rfW-VPE2x1onG8U,30456
76
76
  langfun/core/eval/v2/evaluation_test.py,sha256=gurFzSfPECZ_FMQOnf3bzKOHmQ7C4IUxEfbyZy50bjM,7966
77
- langfun/core/eval/v2/example.py,sha256=R-ezw-rbJDQh26lyqRhU-uT6L0BALMz9eb09ZEpmERE,11484
78
- langfun/core/eval/v2/example_test.py,sha256=CIMJQ0wWA87_t3crzRtUpKPNhBZI4Vau3gaKfJ5B28Q,3406
79
- langfun/core/eval/v2/experiment.py,sha256=IV67wXNj6r_UelrnXOYqpY_UJbLqSOf8-AyvTJzsSPg,35436
80
- langfun/core/eval/v2/experiment_test.py,sha256=BYrPYfQfU2jDfAlZcHDT0KUaXOnCnyTWyUEKhDoqXfw,13645
77
+ langfun/core/eval/v2/example.py,sha256=VZeBqMWnfEtn1mmdPW2w2u2XbAWVll1q1-50qL8DjS8,11606
78
+ langfun/core/eval/v2/example_test.py,sha256=RwtBcUumPBWynA8BLMoZetSHdgvFywlHXuyvInf1y_s,3576
79
+ langfun/core/eval/v2/experiment.py,sha256=HbZwnSQYrx_vehKc-hj9ylKjnAS40gHRhNlmIw5bgqE,36314
80
+ langfun/core/eval/v2/experiment_test.py,sha256=7prE4ASKlbwQIXiLzEqjgaF4yQDL7KjxX-dBUPT84VA,14145
81
81
  langfun/core/eval/v2/metric_values.py,sha256=WAL1BdHaU_oq7d_k1KyjhiQDK32dNLSyn1L2yEkz0o4,6040
82
82
  langfun/core/eval/v2/metric_values_test.py,sha256=5ffwnqrbLIBh1hdUl3L9mpJlUvsmd2VQ8UWPOJcQj4s,3630
83
83
  langfun/core/eval/v2/metrics.py,sha256=cdFqrhRlxqpBk_04Mmhk21NcOD0kor5H0iFX54_rO4s,14486
84
84
  langfun/core/eval/v2/metrics_test.py,sha256=gf8hT5V5OeM-Ah-Wa4aLtgrYZmlMStKPjEhCTS0VMHQ,6812
85
85
  langfun/core/eval/v2/progress.py,sha256=odflCHCqBZua_Al1v5Mjl09JgrdDSfnXKUK4mpC8bPQ,11647
86
86
  langfun/core/eval/v2/progress_test.py,sha256=MzJ7wa65XYZ0chArA-lSg1eRSvQ_TzZJIHMk85Kwz7o,3208
87
- langfun/core/eval/v2/progress_tracking.py,sha256=zNhNPGlnJnHELEfFpbTMCSXFn8d1IJ57OOYkfFaBFfM,6097
88
- langfun/core/eval/v2/progress_tracking_test.py,sha256=omOvSTvF-KgzwmXiOUj8sr5DhaYShaGOwTVPmM8AGxQ,2476
87
+ langfun/core/eval/v2/progress_tracking.py,sha256=7E5LOt0DUo4yUpnYYrwLnE6FiYJM3Pn1aa93Zl3C3UQ,6439
88
+ langfun/core/eval/v2/progress_tracking_test.py,sha256=37v42y4kh2GfDXBrkugEupW6IRAzA774wwPJaOyefUs,2597
89
89
  langfun/core/eval/v2/reporting.py,sha256=-IV-RzR-QriPZz2Ke6nNNRXu6avxpX48zr9c-j815iA,9001
90
- langfun/core/eval/v2/reporting_test.py,sha256=UaUbsCGUW7GifbMBjUU9F35xDjme9pu4Dsth1DSxT68,5985
91
- langfun/core/eval/v2/runners/__init__.py,sha256=RGzu_QUC2Td0gmDV4JkSZ2Rgc-1oDPVejhr6OKtGkUk,967
92
- langfun/core/eval/v2/runners/base.py,sha256=kOhsei9_2VRDrQsHptqrxzDpgrzmeoIkF9ar9bL8ULI,13847
90
+ langfun/core/eval/v2/reporting_test.py,sha256=q3LBfPk7jvEWXB3sdk2CycbMKqNRyXhs5z6BokfwDIE,6096
91
+ langfun/core/eval/v2/runners/__init__.py,sha256=2TcCLW32OsmXQINcVKa2ZJY8Ca7j3NnT0yy9hXYUDn8,1115
92
+ langfun/core/eval/v2/runners/base.py,sha256=Tio4a9lp2lWTZusG9iM3Uqq7GOHflgVXzShlQfhcxA4,14647
93
+ langfun/core/eval/v2/runners/beam.py,sha256=E5X3XunXZ_KGe5MmkVumnFQDR_R1wqYiwpW9NQs25A0,11338
94
+ langfun/core/eval/v2/runners/beam_test.py,sha256=LynBKJexkOk_uyHGR1VhRZLYhGrU5B3JHgIAEi1SFNk,4507
95
+ langfun/core/eval/v2/runners/ckpt_monitor.py,sha256=91vGMgYPOxGL59NYyRiSi51wZsBjt_eXpB6y9oAkLEk,10099
96
+ langfun/core/eval/v2/runners/ckpt_monitor_test.py,sha256=38sdIAObTdYUibD27cmyDCKrl_DhOZLynDKVkOrvbB4,5440
93
97
  langfun/core/eval/v2/runners/debug.py,sha256=ExsBcAvmhFsaaS3VLjxE70HImHe2YVs0IpoefM01onY,1442
94
- langfun/core/eval/v2/runners/debug_test.py,sha256=U3KZ_EqEzoAg1--xjfEDT3uW7dooKjIYBKPiy-zEuL4,2609
98
+ langfun/core/eval/v2/runners/debug_test.py,sha256=kDWs4Fu7itzBxbRwFc-UKEP2hAV0iVFp2wWkEuZNEcg,2577
95
99
  langfun/core/eval/v2/runners/parallel.py,sha256=CUX1ZULE0TYU5_Ll3XQWIHFl_CRDJbxVX4HVYJNQDKU,3293
96
- langfun/core/eval/v2/runners/parallel_test.py,sha256=kULhcjdUn55UVKw0bBgIe_sN-1W2j8qWl-_O8P2tLzM,3294
100
+ langfun/core/eval/v2/runners/parallel_test.py,sha256=zomSwfvtCly0TolCiWBoZwlA0o2QB0UqX3Q69kzE9oo,3262
97
101
  langfun/core/eval/v2/runners/sequential.py,sha256=hebMZd6EVraY9zAwariT9WfsWQyX5AYuRsFdRo-knKU,1631
98
- langfun/core/eval/v2/runners/sequential_test.py,sha256=OYYMheIXtkRfMb-WzCirbz984xxchbcW8FUR9sGDUR4,6194
99
- langfun/core/llms/__init__.py,sha256=UJ1UE41JPgkS56uNzJQ5ag9VWJN3OJuNna7aFR4CyOM,10184
102
+ langfun/core/eval/v2/runners/sequential_test.py,sha256=hyL43WS-4ZLmVClqOpGvoHqkiEetkjrge6ADExQSjqQ,6162
103
+ langfun/core/llms/__init__.py,sha256=QCNlrSvJSxvFi9W98rZ6hes1PHxnd1LBdU9FE9pLfg0,10310
100
104
  langfun/core/llms/anthropic.py,sha256=6uE1EC9YWtbiFwZNNPEFv-QzeGQQ7G27kheTTE15Ewg,31175
101
105
  langfun/core/llms/anthropic_test.py,sha256=qA9vByp_cwwXNlXzcwHpPWFnO9lfFo8NKfDi5nBNqgI,9052
102
106
  langfun/core/llms/azure_openai.py,sha256=LEc7-ay2fOOCwwL3SfxDr3KCdH8-2i1EtD-PBvr4kfk,2777
@@ -107,9 +111,9 @@ langfun/core/llms/deepseek.py,sha256=jQsotTUk4161EJIcoQOV7iOWBZfQ3Ukh9GOh31A0HYU
107
111
  langfun/core/llms/deepseek_test.py,sha256=DvROWPlDuow5E1lfoSkhyGt_ELA19JoQoDsTnRgDtTg,1847
108
112
  langfun/core/llms/fake.py,sha256=NH8Zlezmx3eacao4D7wihrZjRuyBJuHR5rdyp94PrAw,4409
109
113
  langfun/core/llms/fake_test.py,sha256=lC-C2TpEsnf2kmZpa3OiH2H944I4hMWTAaHEXzRj1DU,7855
110
- langfun/core/llms/gemini.py,sha256=1DDzNmhgFvZg6-Y76TSJKQLcSak8IAJhdr3m5PuRESM,30527
111
- langfun/core/llms/gemini_test.py,sha256=y1s0W65SrdepbZxzgIeoTB2MI7sXnfBDf1NsGn57LbM,7617
112
- langfun/core/llms/google_genai.py,sha256=Sn0_5X7WDVgAHwJH8osrds4Xy2oICPZ_D6okkQ1X0Kk,6413
114
+ langfun/core/llms/gemini.py,sha256=uaIOy20np9OWd_K0gauOEsyZKI7CM_GgAaFxsnF-SDs,31970
115
+ langfun/core/llms/gemini_test.py,sha256=REE3x3v3xTTznUVHLcWxJrpGkc_XCUeDQXtFrv8zD9M,10010
116
+ langfun/core/llms/google_genai.py,sha256=0MaLyh4ndwWEFsMZZZymHxImvao9_kaWmXEElWWXAkE,6516
113
117
  langfun/core/llms/google_genai_test.py,sha256=NKNtpebArQ9ZR7Qsnhd2prFIpMjleojy6o6VMXkJ1zY,1502
114
118
  langfun/core/llms/groq.py,sha256=O-kv2_R_IkC8wGIT086xin8jYi7QnsakPCGVLR58lMw,12517
115
119
  langfun/core/llms/groq_test.py,sha256=P4EgexCqsh4K2x11w0UL_vz-YYNaPdQU0WsDAdnTRQ8,2045
@@ -121,7 +125,7 @@ langfun/core/llms/openai_compatible_test.py,sha256=8yr_jGmHCDyMwp-VcJwThFgh7B_56
121
125
  langfun/core/llms/openai_test.py,sha256=1o5rxiHZj-UEgugWN8JmfJtznhUmDywy6dU3Euax-Ts,2639
122
126
  langfun/core/llms/rest.py,sha256=eR-M1st5ZnzuitICyYfxSRcmQWmy_eeOoe2bHLalzN0,5351
123
127
  langfun/core/llms/rest_test.py,sha256=_zM7nV8DEVyoXNiQOnuwJ917mWjki0614H88rNmDboE,5020
124
- langfun/core/llms/vertexai.py,sha256=E7RG8c7n_eeaunAaOmPU3NaFm-iSAD1zIgCyyFt3-7I,21365
128
+ langfun/core/llms/vertexai.py,sha256=TvF4nO8p-JS1GvwDfAZL_xmzbqkdnQX1IFhujap7D4Y,21563
125
129
  langfun/core/llms/vertexai_test.py,sha256=_e-acnNBAf9C3WO6i1b2J_mhRzdDdYQTorD9hIVZKOg,5034
126
130
  langfun/core/llms/cache/__init__.py,sha256=QAo3InUMDM_YpteNnVCSejI4zOsnjSMWKJKzkb3VY64,993
127
131
  langfun/core/llms/cache/base.py,sha256=qLGlEMi5cfsDxRTsOWrmwbxjvvwUaq4Y8MxlXr69wpw,5060
@@ -144,8 +148,8 @@ langfun/core/modalities/audio.py,sha256=cb95FzDE-IIQf7kXy7D4AAXtziQF0FYkZUe4pw5E
144
148
  langfun/core/modalities/audio_test.py,sha256=tW1vEy-Cumhf-HgDgCxlSNZqgJb2HTgqOixGWLiwOmw,2065
145
149
  langfun/core/modalities/image.py,sha256=_R_T2Jl1G62Y8erjlyA9E2pT-0rSSXITs25oswH0nuA,2353
146
150
  langfun/core/modalities/image_test.py,sha256=XMgtJXY75R5eo0CZ222D1QUy57_hESnttmCGWwDLt7k,3824
147
- langfun/core/modalities/mime.py,sha256=4vrq_ohnsJvStNGCEl10DKNkDUXXek7mDk-RPnPqlB4,10713
148
- langfun/core/modalities/mime_test.py,sha256=n084tOkeKHKMOVblCmi5s8nw4o7VYn3ynqvcrz8ww7c,5977
151
+ langfun/core/modalities/mime.py,sha256=dc0pmWl4S_fmVlHYXT7kx_WcBXxGCfk654w1vOsDAt8,10809
152
+ langfun/core/modalities/mime_test.py,sha256=9Juvs4KQgPfP72nn8TbPNwqShV7Bs8oFe--Qvt0QR5A,6390
149
153
  langfun/core/modalities/pdf.py,sha256=rc-uIKRVkTTa0j7jC6WRwKM9WqiS5NxF-H6PPunVeXM,1231
150
154
  langfun/core/modalities/pdf_test.py,sha256=ulZ0FbnlsU0wkrdckJ4ONZPTYRyMPO9Aob1UO6FXygk,1950
151
155
  langfun/core/modalities/video.py,sha256=ZopyDf-8bi0V-QZDAg-_8S3HkMNiEQL9aWmGuI6Fkrs,1506
@@ -169,7 +173,7 @@ langfun/core/structured/scoring.py,sha256=BQSme22gV3XcTyALhXNrMR0fkuWhFi0HozSdBR
169
173
  langfun/core/structured/scoring_test.py,sha256=msxtZX1MWgoLTWkmM-McbUo-qGev0uDdlXLm4kPiIiE,2473
170
174
  langfun/core/structured/tokenization.py,sha256=xaOztsBaFj2b3bwny5-pdAutPV9YeAiQTdP81VVwhM4,3436
171
175
  langfun/core/structured/tokenization_test.py,sha256=8IXndRokZmlLPZD_jIitfhgcRxBjmG09PhT-WLHe9dw,1499
172
- langfun/core/structured/schema/__init__.py,sha256=gub1OlStYMZ5fOVMsHXz2lwQaXedPmZ44pBjqv7G_8c,2197
176
+ langfun/core/structured/schema/__init__.py,sha256=QOKreIMT4QftjHTx764rrB0z0fnw98gA1mzBYVVv6WQ,2256
173
177
  langfun/core/structured/schema/base.py,sha256=kpsu729IIIC8r6EsdT6ur2FpwyFoxCrz6WwSCWBkZG4,19488
174
178
  langfun/core/structured/schema/base_test.py,sha256=_j9U4GwO9BLpj_ENqw_4XwLopfHG1HgR0ek-VUoXkfE,15039
175
179
  langfun/core/structured/schema/json.py,sha256=gWs6Pe99WsZNiv5vNU3VFXKS6GhYpBxuaJMuiU7agxY,5047
@@ -204,8 +208,8 @@ langfun/env/event_handlers/event_logger.py,sha256=ga8RN8qjwtAOCnV_MnhNPTktN8EJ-x
204
208
  langfun/env/event_handlers/event_logger_test.py,sha256=qSAcirtRz00H-1RL9ShELBiZKiPxsk_v6cVA6XdAk4k,9274
205
209
  langfun/env/event_handlers/metric_writer.py,sha256=7ZrUp0rYvs7TfNpQ16Xbxg8vp-6ZbjuJ-qrhVSbhv2I,21085
206
210
  langfun/env/event_handlers/metric_writer_test.py,sha256=bjdYXoXMPWpWz_-HUPM6vFP1ez5G386u0fmPfe-SR_M,5952
207
- langfun-0.1.2.dev202511160804.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
208
- langfun-0.1.2.dev202511160804.dist-info/METADATA,sha256=o1cAFAzriHIaD2-x-35UXoGmCPJb_5UAPEeo2BkLyQc,7522
209
- langfun-0.1.2.dev202511160804.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
210
- langfun-0.1.2.dev202511160804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
211
- langfun-0.1.2.dev202511160804.dist-info/RECORD,,
211
+ langfun-0.1.2.dev202511270805.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
212
+ langfun-0.1.2.dev202511270805.dist-info/METADATA,sha256=R2vGxVHasYKrDywhNr-opNyzmjTeiHKqU_0Yl5ngngA,7522
213
+ langfun-0.1.2.dev202511270805.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
214
+ langfun-0.1.2.dev202511270805.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
215
+ langfun-0.1.2.dev202511270805.dist-info/RECORD,,