langfun 0.1.2.dev202510230805__py3-none-any.whl → 0.1.2.dev202510250803__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 (44) hide show
  1. langfun/core/concurrent_test.py +1 -0
  2. langfun/core/data/conversion/anthropic_test.py +8 -6
  3. langfun/core/data/conversion/gemini_test.py +12 -9
  4. langfun/core/data/conversion/openai.py +134 -30
  5. langfun/core/data/conversion/openai_test.py +161 -17
  6. langfun/core/eval/base_test.py +4 -4
  7. langfun/core/eval/v2/progress_tracking_test.py +3 -0
  8. langfun/core/langfunc_test.py +6 -4
  9. langfun/core/language_model.py +15 -6
  10. langfun/core/language_model_test.py +9 -3
  11. langfun/core/llms/__init__.py +7 -1
  12. langfun/core/llms/anthropic.py +130 -0
  13. langfun/core/llms/cache/base.py +3 -1
  14. langfun/core/llms/cache/in_memory_test.py +14 -4
  15. langfun/core/llms/deepseek.py +1 -1
  16. langfun/core/llms/gemini.py +2 -5
  17. langfun/core/llms/groq.py +1 -1
  18. langfun/core/llms/llama_cpp.py +1 -1
  19. langfun/core/llms/openai.py +7 -2
  20. langfun/core/llms/openai_compatible.py +136 -27
  21. langfun/core/llms/openai_compatible_test.py +207 -20
  22. langfun/core/llms/openai_test.py +0 -2
  23. langfun/core/llms/vertexai.py +12 -2
  24. langfun/core/message.py +78 -44
  25. langfun/core/message_test.py +56 -81
  26. langfun/core/modalities/__init__.py +8 -0
  27. langfun/core/modalities/mime.py +9 -0
  28. langfun/core/modality.py +104 -27
  29. langfun/core/modality_test.py +42 -12
  30. langfun/core/sampling_test.py +20 -4
  31. langfun/core/structured/completion.py +2 -7
  32. langfun/core/structured/completion_test.py +23 -43
  33. langfun/core/structured/mapping.py +4 -13
  34. langfun/core/structured/querying.py +13 -11
  35. langfun/core/structured/querying_test.py +65 -29
  36. langfun/core/template.py +39 -13
  37. langfun/core/template_test.py +83 -17
  38. langfun/env/event_handlers/metric_writer_test.py +3 -3
  39. langfun/env/load_balancers_test.py +2 -2
  40. {langfun-0.1.2.dev202510230805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/METADATA +1 -1
  41. {langfun-0.1.2.dev202510230805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/RECORD +44 -44
  42. {langfun-0.1.2.dev202510230805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/WHEEL +0 -0
  43. {langfun-0.1.2.dev202510230805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/licenses/LICENSE +0 -0
  44. {langfun-0.1.2.dev202510230805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/top_level.txt +0 -0
@@ -176,6 +176,51 @@ class DefinitionTest(unittest.TestCase):
176
176
  Template('{{x=1')
177
177
 
178
178
 
179
+ class FromValueTest(unittest.TestCase):
180
+
181
+ def test_from_str(self):
182
+ t = Template.from_value('Hello {{x}}', x=1)
183
+ self.assertTrue(pg.eq(t, Template('Hello {{x}}', x=1)))
184
+ self.assertEqual(t.render(), 'Hello 1')
185
+
186
+ def test_from_message(self):
187
+ class CustomModality(modality.Modality):
188
+ content: str
189
+
190
+ def to_bytes(self):
191
+ return self.content.encode()
192
+
193
+ message = Template('{{image}}', image=CustomModality('foo')).render()
194
+ t = Template.from_value(message)
195
+ m = t.render()
196
+ self.assertTrue(
197
+ pg.eq(m.modalities(), [CustomModality('foo')])
198
+ )
199
+ self.assertEqual(message.metadata, m.metadata)
200
+
201
+ def test_from_same_template(self):
202
+ t = Template('Hello {{x}}', x=1)
203
+ t2 = Template.from_value(t)
204
+ self.assertTrue(pg.eq(t, t2))
205
+ self.assertEqual(t2.x, 1)
206
+
207
+ def test_from_different_template(self):
208
+ t = Template('Hello {{x}}', x=1)
209
+
210
+ class MyTemplate(Template):
211
+ pass
212
+
213
+ t2 = MyTemplate.from_value(t, x=2)
214
+ self.assertIsInstance(t2, MyTemplate)
215
+ self.assertEqual(t2.template_str, t.template_str)
216
+ self.assertEqual(t2.x, 2)
217
+
218
+ def test_from_python_object(self):
219
+ t = Template.from_value(pg.Dict(x=1, y=2))
220
+ self.assertEqual(t.template_str, '{{input}}')
221
+ self.assertEqual(t.input, pg.Dict(x=1, y=2))
222
+
223
+
179
224
  class VarsTest(unittest.TestCase):
180
225
 
181
226
  def assert_missing_vars(self, t: Template, missing_vars: set[str]):
@@ -251,6 +296,10 @@ class VarsTest(unittest.TestCase):
251
296
 
252
297
  class RenderTest(unittest.TestCase):
253
298
 
299
+ def setUp(self):
300
+ super().setUp()
301
+ self.maxDiff = None
302
+
254
303
  def test_clean(self):
255
304
  l = Template('\n Hello\n ')
256
305
  self.assertEqual(l.render(), 'Hello')
@@ -279,19 +328,20 @@ class RenderTest(unittest.TestCase):
279
328
  )
280
329
  v = l.render()
281
330
  self.assertEqual(v, 'How are you 1')
282
- self.assertIs(v.x, l.x)
283
- self.assertEqual(v.x.render_output, 'are you 1')
284
- self.assertIs(v.x.y, l.x.y)
285
- self.assertEqual(v.x.y.render_output, 'you 1')
286
- self.assertEqual(v.x.y.n, 1)
331
+ self.assertIs(v.__template_input__.x, l.x)
332
+ self.assertEqual(v.__template_input__.x.render_output, 'are you 1')
333
+ self.assertIs(v.__template_input__.x.y, l.x.y)
334
+ self.assertIs(v.__template_input__.x.y.n, l.x.y.n)
335
+ self.assertEqual(v.__template_input__.x.y.render_output, 'you 1')
336
+ self.assertEqual(v.__template_input__.x.y.n, 1)
287
337
 
288
338
  def test_render_with_call_args(self):
289
339
  l = Template('Hello {{x}} and {{y}}', x=1, y=Template('{{z}}'), z=3)
290
340
  v = l.render(x=2)
291
341
  self.assertEqual(v, 'Hello 2 and 3')
292
- self.assertEqual(v.x, 2)
293
- self.assertEqual(v.y, '3')
294
- self.assertEqual(v.y.z, 3)
342
+ self.assertEqual(v.__template_input__.x, 2)
343
+ self.assertEqual(v.__template_input__.y, '3')
344
+ self.assertEqual(v.__template_input__.y.z, 3)
295
345
 
296
346
  def test_render_cache(self):
297
347
  class DynamicContent(Template):
@@ -321,11 +371,17 @@ class RenderTest(unittest.TestCase):
321
371
  def to_bytes(self):
322
372
  return self.content.encode()
323
373
 
374
+ foo = CustomModality('foo')
375
+ message = Template('This is {{ x }} and {{ a }}', x=1, a=foo).render()
324
376
  self.assertEqual(
325
- Template(
326
- 'This is {{ x }} and {{ a }}', x=1, a=CustomModality('foo')
327
- ).render(),
328
- 'This is 1 and <<[[a]]>>',
377
+ message,
378
+ 'This is 1 and <<[[custom_modality:acbd18db]]>>',
379
+ )
380
+ self.assertIn(
381
+ 'custom_modality:acbd18db', message.referred_modalities
382
+ )
383
+ self.assertIs(
384
+ message.referred_modalities['custom_modality:acbd18db'], foo
329
385
  )
330
386
 
331
387
  def test_render_with_default(self):
@@ -511,12 +567,22 @@ class RenderTest(unittest.TestCase):
511
567
  self.assert_partial(Template('Hello {{len(x)}}'), 'Hello {{len(x)}}')
512
568
 
513
569
  def test_additional_metadata(self):
514
- t = Template('hi', metadata_weights=1.0, y=2)
515
- self.assertEqual(t.render(), message_lib.UserMessage('hi', weights=1.0))
570
+ t = Template('hi {{y}}', metadata_weights=1.0, y=2, z=1)
571
+ self.assertEqual(
572
+ t.render(),
573
+ message_lib.UserMessage(
574
+ 'hi 2', weights=1.0, __template_input__={'y': 2}
575
+ )
576
+ )
516
577
 
517
- t = Template('hi')
518
- with component.context(metadata_weights=1.0, y=2):
519
- self.assertEqual(t.render(), message_lib.UserMessage('hi', weights=1.0))
578
+ t = Template('hi {{y}}')
579
+ with component.context(metadata_weights=1.0, y=3):
580
+ self.assertEqual(
581
+ t.render(z=2),
582
+ message_lib.UserMessage(
583
+ 'hi 3', weights=1.0, __template_input__={'y': 3}
584
+ )
585
+ )
520
586
 
521
587
 
522
588
  class TemplateRenderEventTest(unittest.TestCase):
@@ -31,7 +31,7 @@ class MetricWriterTest(unittest.TestCase):
31
31
  pool_size=2,
32
32
  outage_grace_period=0,
33
33
  outage_retry_interval=0,
34
- housekeep_interval=0.0,
34
+ housekeep_interval=10.0,
35
35
  sandbox_keepalive_interval=1.0,
36
36
  event_handlers=[writer],
37
37
  )
@@ -43,13 +43,13 @@ class MetricWriterTest(unittest.TestCase):
43
43
  with env.sandbox('session2') as sb:
44
44
  sb.shell('echo "bar"', raise_error=RuntimeError)
45
45
 
46
- self.assertEqual(
46
+ self.assertIn(
47
47
  writer._sandbox_start.value(
48
48
  app='test_app',
49
49
  environment_id='testing-env',
50
50
  error='Success'
51
51
  ),
52
- 2
52
+ (2, 3)
53
53
  )
54
54
  self.assertGreater(
55
55
  writer._sandbox_housekeep.value(
@@ -53,10 +53,10 @@ class TestingSandbox(interface.Sandbox):
53
53
  self.set_status(self.Status.ACQUIRED)
54
54
 
55
55
  def start(self) -> None:
56
- self.set_alive()
56
+ pass
57
57
 
58
58
  def shutdown(self) -> None:
59
- self.set_alive(False)
59
+ pass
60
60
 
61
61
  def start_session(self, session_id: str) -> None:
62
62
  self._session_id = session_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langfun
3
- Version: 0.1.2.dev202510230805
3
+ Version: 0.1.2.dev202510250803
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -12,28 +12,28 @@ langfun/core/async_support_test.py,sha256=fMz1ulGrfUCuHp7RtYktuBwpbRN3kCBKnB4LFv
12
12
  langfun/core/component.py,sha256=g1kQM0bryYYYWVDrSMnHfc74wIBbpfe5_B3s-UIP5GE,3028
13
13
  langfun/core/component_test.py,sha256=0CxTgjAud3aj8wBauFhG2FHDqrxCTl4OI4gzQTad-40,9254
14
14
  langfun/core/concurrent.py,sha256=zY-pXqlGqss_GI20tM1gXvyW8QepVPUuFNmutcIdhbI,32760
15
- langfun/core/concurrent_test.py,sha256=KzXOlfR3i_-s_GKBLYrO5-ETCvHoFbFY2o9FEeOeXq4,17818
15
+ langfun/core/concurrent_test.py,sha256=Da4oqfu_YWH-B8H2Bv6e8tWIkR0ubkW40bccQ3N1mMg,17855
16
16
  langfun/core/console.py,sha256=cLQEf84aDxItA9fStJV22xJch0TqFLNf9hLqwJ0RHmU,2652
17
17
  langfun/core/console_test.py,sha256=pBOcuNMJdVELywvroptfcRtJMsegMm3wSlHAL2TdxVk,1679
18
18
  langfun/core/langfunc.py,sha256=G50YgoVZ0y1GFw2ev41MlOqr6qa8YakbvNC0h_E0PiA,11140
19
- langfun/core/langfunc_test.py,sha256=CDn-gJCa5EnjN7cotAVCfSCbuzddq2o-HzEt7kV8HbY,8882
20
- langfun/core/language_model.py,sha256=xrSaO7KLBRf0rEjnFHBH9fZ0oGfmWhlA0ezAlWEMnTc,52107
21
- langfun/core/language_model_test.py,sha256=aJWn3UJm_S6U7VhU7EVXdJHPe1xza5glngPkRGtx280,38426
19
+ langfun/core/langfunc_test.py,sha256=eY7hNgkwtVKcro2G6Fh2k6upVEg8ggXBKjVmqT8oLn4,8961
20
+ langfun/core/language_model.py,sha256=_YhWB6PsyghkN-ykvVtjr3qUZT9SoAp_pcxX1SQZoe0,52339
21
+ langfun/core/language_model_test.py,sha256=UIQpovmVfJnJ2EDOi9OZG_1UNClWs9lkTaE22_ClSlQ,38550
22
22
  langfun/core/logging.py,sha256=7IGAhp7mGokZxxqtL-XZvFLKaZ5k3F5_Xp2NUtR4GwE,9136
23
23
  langfun/core/logging_test.py,sha256=vbVGOQxwMmVSiFfbt2897gUt-8nqDpV64jCAeUG_q5U,6924
24
24
  langfun/core/memory.py,sha256=vyXVvfvSdLLJAzdIupnbn3k26OgclCx-OJ7gddS5e1Y,2070
25
- langfun/core/message.py,sha256=Nx9SqEIkPMS5I1RyMQFlWUjZCsdlGamv_wTze2-3R4M,32784
26
- langfun/core/message_test.py,sha256=dAA_ZzI5MGyFfXyejxPrB90SbR066mkIgmRtdZ5ZbL4,40803
27
- langfun/core/modality.py,sha256=K8pUGuMpfWcOtVcXC_OqVjro1-RhHF6ddQni61DuYzM,4166
28
- langfun/core/modality_test.py,sha256=0WL_yd3B4K-FviWdSpDnOwj0f9TQI0v9t6X0vWvvJbo,2415
25
+ langfun/core/message.py,sha256=m36GDLtuDVUURkYORTEj61Uho6eILwSkCjrksK0HLWs,33964
26
+ langfun/core/message_test.py,sha256=hjnzxJbjLNau30Ex7h5B0qC8qUU4uscoUcEVayRiXFQ,38355
27
+ langfun/core/modality.py,sha256=h56hfCyxX_rK_BU3pFxXpGD79TvFeRXVo71QvpzmZiw,6596
28
+ langfun/core/modality_test.py,sha256=0MQz6e39XOd2UjAIc5Vq9Eems1IUgOxD7Skf0gTMGTg,3665
29
29
  langfun/core/natural_language.py,sha256=3ynSnaYQnjE60LIPK5fyMgdIjubnPYZwzGq4rWPeloE,1177
30
30
  langfun/core/natural_language_test.py,sha256=LHGU_1ytbkGuSZQFIFP7vP3dBlcY4-A12fT6dbjUA0E,1424
31
31
  langfun/core/sampling.py,sha256=SCnS5PFJWNVxSKvSkSCNRUmruvScun8UcNN4gafuXcw,5866
32
- langfun/core/sampling_test.py,sha256=U7PANpMsl9E_pa4_Y4FzesSjcwg-u-LKHGCWSgv-8FY,3663
32
+ langfun/core/sampling_test.py,sha256=kzoWYRiAOFFMYDraqnEi7lOWKfhW6EqGBgFRTHxPsaw,3958
33
33
  langfun/core/subscription.py,sha256=euawEuSZP-BHydaT-AQpfYFL0m5pWPGcW0upFhrojqc,10930
34
34
  langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIcArBo,8717
35
- langfun/core/template.py,sha256=9uswFC3Vbj9l1Zi9-Kbw6BZuCiP9H598ysbN3IBcBoI,24966
36
- langfun/core/template_test.py,sha256=AQv_m9qE93WxhEhSlm1xaBgB4hu0UVtA53dljngkUW0,17090
35
+ langfun/core/template.py,sha256=CQOEA1Lq0gU_uk43K1FJjpBSwL8o5fglFr2tGCbOxpI,26008
36
+ langfun/core/template_test.py,sha256=vQZvFVS4VHk-6GUdOEQ-UA_4tlVBbpRPqB1Bw7DFJJg,19052
37
37
  langfun/core/agentic/__init__.py,sha256=vsnuvjaz9-nysBjdihGf43JC8AyLPhPJwIOevyONyAQ,1517
38
38
  langfun/core/agentic/action.py,sha256=ojwaPIV_a_khKPR6x1Fk5i2dsUTSe3VjKaxnZ92b0nE,58243
39
39
  langfun/core/agentic/action_eval.py,sha256=YTilyUEkJl_8FVMgdfO17PurWWaEJ6oA15CuefJJRLk,4887
@@ -54,14 +54,14 @@ langfun/core/coding/python/sandboxing_test.py,sha256=H_0_pd-_uS-ci5yYhmDTR6-hyzo
54
54
  langfun/core/data/__init__.py,sha256=qllw9ST1vveZv-1E0VM5hezn1YH-OcqGI-yFqQYnWgI,732
55
55
  langfun/core/data/conversion/__init__.py,sha256=ZcGntBruvvZSfESO-Tha1nzHfgWEK7I1u78Jw8gsoVU,883
56
56
  langfun/core/data/conversion/anthropic.py,sha256=0xf1sWt6WhmG8EsaeLY4Ee7S3FcDWKPOtn6caCBhtrQ,4431
57
- langfun/core/data/conversion/anthropic_test.py,sha256=R43PyveNUCHNCvfu6RFsTk0EIKK8M1Gzng0Kay8TlE8,8534
57
+ langfun/core/data/conversion/anthropic_test.py,sha256=BMIyLgFOtFuJYJAkSLR1nwG7UOwtoT61R5xAXtJfSMY,8624
58
58
  langfun/core/data/conversion/gemini.py,sha256=mLft9j30W8aIi5a7tOdjfO2v8O8a61FSDKf2k-co93M,5825
59
- langfun/core/data/conversion/gemini_test.py,sha256=G-av2BUngBkxOkJz94CMpZRGq6DGDBvgLltoezuohm0,7239
60
- langfun/core/data/conversion/openai.py,sha256=sSpkDSxMJWJ3I1dNICBCzvLsJv4iiLg8FPYLtubBJUM,4181
61
- langfun/core/data/conversion/openai_test.py,sha256=38WV_3ofFZiUF10bTKnZp4VyuDP5-81aR3h3Q0HlBm0,5283
59
+ langfun/core/data/conversion/gemini_test.py,sha256=LeSToAqEhBHekSCjHFkC_cLN7Xv_cn-nnCURS95511M,7366
60
+ langfun/core/data/conversion/openai.py,sha256=S1isgEgZHr1ZncydA1JSkPTQQxYCamnck8aqVH3s4wE,7203
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=g2qnOg9zyU20coNTCwX6Fbi0pPFEUoOxHY5uw98LcNg,75810
64
- langfun/core/eval/base_test.py,sha256=q4wEd2KDUxzUkeELwof0HXBKe9TMQYUq84ddA043VPg,27191
64
+ langfun/core/eval/base_test.py,sha256=jbl5NMKk9QUsp8R-OeTJ4dEefQdK8JL1lIouuihglbc,27191
65
65
  langfun/core/eval/matching.py,sha256=AVKkGoc-BaHEzgSBamaAk3194TgqckDe_dinpS6LrXI,9323
66
66
  langfun/core/eval/matching_test.py,sha256=2xtwsTi-UzLTt0QnXl3u_eAG3fFjCG2tsae7YkcQTB0,5312
67
67
  langfun/core/eval/patching.py,sha256=R0s2eAd1m97exQt06dmUL0V_MBG0W2Hxg7fhNB7cXW0,3866
@@ -85,42 +85,42 @@ langfun/core/eval/v2/metrics_test.py,sha256=LibZXvWEJDVRY-Mza_bQT-SbmbXCHUnFhL7Z
85
85
  langfun/core/eval/v2/progress.py,sha256=azZgssQgNdv3IgjKEaQBuGI5ucFDNbdi02P4z_nQ8GE,10292
86
86
  langfun/core/eval/v2/progress_test.py,sha256=YU7VHzmy5knPZwj9vpBN3rQQH2tukj9eKHkuBCI62h8,2540
87
87
  langfun/core/eval/v2/progress_tracking.py,sha256=zNhNPGlnJnHELEfFpbTMCSXFn8d1IJ57OOYkfFaBFfM,6097
88
- langfun/core/eval/v2/progress_tracking_test.py,sha256=MC7hD-KfxqSIwKK_BN7oGx7HA8O3_fY-Y3cYYAhZzxE,2343
88
+ langfun/core/eval/v2/progress_tracking_test.py,sha256=omOvSTvF-KgzwmXiOUj8sr5DhaYShaGOwTVPmM8AGxQ,2476
89
89
  langfun/core/eval/v2/reporting.py,sha256=yUIPCAMnp7InIzpv1DDWrcLO-75iiOUTpscj7smkfrA,8335
90
90
  langfun/core/eval/v2/reporting_test.py,sha256=CMK-vwho8cNRJwlbkCqm_v5fykE7Y3V6SaIOCY0CDyA,5671
91
91
  langfun/core/eval/v2/runners.py,sha256=bEniZDNu44AQgvqpwLsvBU4V_7WltAe-NPhYgIsLj1E,16848
92
92
  langfun/core/eval/v2/runners_test.py,sha256=spjkmqlls_vyERdZMdjv6dhIN9ZfxsDDvIQAWTj2kMk,11954
93
- langfun/core/llms/__init__.py,sha256=SViaAza5E00WG_vdsB69FF1n1vTm5pQrqR6eTfjXlhE,9793
94
- langfun/core/llms/anthropic.py,sha256=YcQ2VG8iOfXtry_tTpAukmiwXa2hK_9LkpkmXk41Nm0,26226
93
+ langfun/core/llms/__init__.py,sha256=UJ1UE41JPgkS56uNzJQ5ag9VWJN3OJuNna7aFR4CyOM,10184
94
+ langfun/core/llms/anthropic.py,sha256=O_OuBiFhHou1Y15W2GwYFY1gV3FUsSUBOsAJp9UORqI,30710
95
95
  langfun/core/llms/anthropic_test.py,sha256=qA9vByp_cwwXNlXzcwHpPWFnO9lfFo8NKfDi5nBNqgI,9052
96
96
  langfun/core/llms/azure_openai.py,sha256=-KkSLaR54MlsIqz_XIwv0TnsBnvNTAxnjA2Q2O2u5KM,2733
97
97
  langfun/core/llms/azure_openai_test.py,sha256=lkMZkQdJBV97fTM4C4z8qNfvr6spgiN5G4hvVUIVr0M,1735
98
98
  langfun/core/llms/compositional.py,sha256=W_Fe2BdbkjwTzWW-paCWcEeG9oOR3-IcBG8oc73taSM,2878
99
99
  langfun/core/llms/compositional_test.py,sha256=4eTnOer-DncRKGaIJW2ZQQMLnt5r2R0UIx_DYOvGAQo,2027
100
- langfun/core/llms/deepseek.py,sha256=jvTxdXPr-vH6HNakn_Ootx1heDg8Fen2FUkUW36bpCs,5247
100
+ langfun/core/llms/deepseek.py,sha256=Pyv2Pmviu91HfNGR994Mh7AKNvWHAAlue7Xfb9MZaPo,5254
101
101
  langfun/core/llms/deepseek_test.py,sha256=DvROWPlDuow5E1lfoSkhyGt_ELA19JoQoDsTnRgDtTg,1847
102
102
  langfun/core/llms/fake.py,sha256=bDk_4u7V2LmYUotyOaicwzi0-lnWOIIBbR3-Bil1P3o,3481
103
103
  langfun/core/llms/fake_test.py,sha256=lC-C2TpEsnf2kmZpa3OiH2H944I4hMWTAaHEXzRj1DU,7855
104
- langfun/core/llms/gemini.py,sha256=qR_rBdkFO6z9MRFoXhq3jiJjKo1tFi4yLkcD2wXzJlY,30337
104
+ langfun/core/llms/gemini.py,sha256=-DL5PebzaTjz7rTFw_1RC5O1aE4EYSv3oNsM65YKCoo,30143
105
105
  langfun/core/llms/gemini_test.py,sha256=y1s0W65SrdepbZxzgIeoTB2MI7sXnfBDf1NsGn57LbM,7617
106
106
  langfun/core/llms/google_genai.py,sha256=ogyoOUK4s1OcSFKun0YK5xBRDVyxmvz9WsYNKAwuB0g,5918
107
107
  langfun/core/llms/google_genai_test.py,sha256=NKNtpebArQ9ZR7Qsnhd2prFIpMjleojy6o6VMXkJ1zY,1502
108
- langfun/core/llms/groq.py,sha256=S9V10kFo3cgX89qPgt_umq-SpRnxEDLTt_hJmpERfbo,12066
108
+ langfun/core/llms/groq.py,sha256=nDhnQEmyNn32DMvNbOv6GZhfZKmFLfIk2lGdqgKrhhg,12073
109
109
  langfun/core/llms/groq_test.py,sha256=P4EgexCqsh4K2x11w0UL_vz-YYNaPdQU0WsDAdnTRQ8,2045
110
- langfun/core/llms/llama_cpp.py,sha256=Z7P3gc4xeIjc2bX0Ey1y5EUYJVMnMa2Q67PZ9iye9sE,1409
110
+ langfun/core/llms/llama_cpp.py,sha256=gESwY8sSSF40dj5RId5oXolmSMDUSKaSS2wDdtTKef8,1416
111
111
  langfun/core/llms/llama_cpp_test.py,sha256=wfTO7nmUwL65U2kK9P9fcMt92JjNDuVia4G1E7znf_4,1086
112
- langfun/core/llms/openai.py,sha256=UZM0j3BHRz5NVLs8q7YYRkneM1CwuGQSt7sFaM4IAPU,44164
113
- langfun/core/llms/openai_compatible.py,sha256=JlFUTiK4e3ox2DGeGBcAD-cXkxmBdx5g6LrYkyMIaps,5777
114
- langfun/core/llms/openai_compatible_test.py,sha256=KwOMA7tsmOxFBjezltkBDSU77AvOQkI23dO2nHLAlB4,17689
115
- langfun/core/llms/openai_test.py,sha256=gwuO6aoa296iM2welWV9ua4KF8gEVGsEPakgbtkWkFQ,2687
112
+ langfun/core/llms/openai.py,sha256=ytappj4uh_DOncIexg8MaoRB534j5qU-R8ka57SFuV0,44277
113
+ langfun/core/llms/openai_compatible.py,sha256=l8nucff-ovmiv9PvrAMSp9v5GE7t8nu4_knGQrKN52o,9319
114
+ langfun/core/llms/openai_compatible_test.py,sha256=8yr_jGmHCDyMwp-VcJwThFgh7B_56h69Fmw97XZxAZw,23133
115
+ langfun/core/llms/openai_test.py,sha256=1o5rxiHZj-UEgugWN8JmfJtznhUmDywy6dU3Euax-Ts,2639
116
116
  langfun/core/llms/rest.py,sha256=YXzSjr7YgtZ5zKDgjA-3D-sabo5wTjpLQDHUIcEPPgg,4773
117
117
  langfun/core/llms/rest_test.py,sha256=_zM7nV8DEVyoXNiQOnuwJ917mWjki0614H88rNmDboE,5020
118
- langfun/core/llms/vertexai.py,sha256=M0GySUbTukyfc6Pwo7i6AX4uapYyshY49VfPsTU8xac,20245
118
+ langfun/core/llms/vertexai.py,sha256=Pob7eCw5GpfeATL2zXUYJahxPEhcvLIfO54iy7wGGdQ,20568
119
119
  langfun/core/llms/vertexai_test.py,sha256=_e-acnNBAf9C3WO6i1b2J_mhRzdDdYQTorD9hIVZKOg,5034
120
120
  langfun/core/llms/cache/__init__.py,sha256=QAo3InUMDM_YpteNnVCSejI4zOsnjSMWKJKzkb3VY64,993
121
- langfun/core/llms/cache/base.py,sha256=rt3zwmyw0y9jsSGW-ZbV1vAfLxQ7_3AVk0l2EySlse4,3918
121
+ langfun/core/llms/cache/base.py,sha256=xVUOfHWa8uzuVcvhBPqGcmBKlQlOGpqemBXfYyqq5y0,4024
122
122
  langfun/core/llms/cache/in_memory.py,sha256=i58oiQL28RDsq37dwqgVpC2mBETJjIEFS20yHiV5MKU,5185
123
- langfun/core/llms/cache/in_memory_test.py,sha256=V2UPeu5co5vUwSkjekCH1B1iLm9qQKPaacvP6VW3GTg,10388
123
+ langfun/core/llms/cache/in_memory_test.py,sha256=AG9OGdxfyW9LdteFRF-aOIhxiH5Kna5U-pQk91ljHCQ,10538
124
124
  langfun/core/mcp/__init__.py,sha256=cyVP_YTjOmbjhYg8BE7-RnE4Txt8wDukYC0anhHKpuo,286
125
125
  langfun/core/mcp/client.py,sha256=NBo4W2fdvYyywlUHynAbyh7LNohILccTkCiisj-UEEg,3642
126
126
  langfun/core/mcp/client_test.py,sha256=Vjbh7bXM8xXMMe_QOnFJ4rE0wITovAZbwk7Nu-cqf8g,2766
@@ -131,30 +131,30 @@ langfun/core/mcp/testing/simple_mcp_server.py,sha256=dw4t6ERWMdmi6kDE38RU5oYu5MQ
131
131
  langfun/core/memories/__init__.py,sha256=HpghfZ-w1NQqzJXBx8Lz0daRhB2rcy2r9Xm491SBhC4,773
132
132
  langfun/core/memories/conversation_history.py,sha256=KR78PurXTSeqsRK9QG9xM7-f245rs20EvWO7Mm2n2Vw,1827
133
133
  langfun/core/memories/conversation_history_test.py,sha256=2kzAq2pUrbR01Z9jhxviIao52JK4JVjr5iGP8pwGxlU,2156
134
- langfun/core/modalities/__init__.py,sha256=rh74vS_oL3XzD83ZJrDzwmW-8jnJHJ3s2_Prmp3ndYQ,1116
134
+ langfun/core/modalities/__init__.py,sha256=2_T5Hsc4iEqmJZuYaqwRNgNM5XpmuTVcnZUMe5cAQDk,1521
135
135
  langfun/core/modalities/audio.py,sha256=qCrVCX690SG0ps-ZfOtNWvHn_CmdJsmxF7GySScWUqY,964
136
136
  langfun/core/modalities/audio_test.py,sha256=tW1vEy-Cumhf-HgDgCxlSNZqgJb2HTgqOixGWLiwOmw,2065
137
137
  langfun/core/modalities/image.py,sha256=9TMO63UHtkimouDb6e1naXWxbK7kRgSGPLzBY26BNk8,1835
138
138
  langfun/core/modalities/image_test.py,sha256=XMgtJXY75R5eo0CZ222D1QUy57_hESnttmCGWwDLt7k,3824
139
- langfun/core/modalities/mime.py,sha256=BSRGMHNM2X6xgYJIbGsqZyZX9JOlebeYa8-QkFEHsCw,8937
139
+ langfun/core/modalities/mime.py,sha256=K_nnm0p6413IqTGyXAezLdRdEDNi6ByuX4xMOELfOIM,9204
140
140
  langfun/core/modalities/mime_test.py,sha256=n084tOkeKHKMOVblCmi5s8nw4o7VYn3ynqvcrz8ww7c,5977
141
141
  langfun/core/modalities/pdf.py,sha256=mfaeCbUA4JslFVTARiJh8hW7imvL4tLVw9gUhO5bAZA,727
142
142
  langfun/core/modalities/pdf_test.py,sha256=ulZ0FbnlsU0wkrdckJ4ONZPTYRyMPO9Aob1UO6FXygk,1950
143
143
  langfun/core/modalities/video.py,sha256=vI9apcHIHGyp90i34Srg7S3G6IBDtDCk8qiXhwRQmkw,967
144
144
  langfun/core/modalities/video_test.py,sha256=7OXZoohKMYjt7vrJUdPb553HLyl1oBOKRgzBePFv68Q,2042
145
145
  langfun/core/structured/__init__.py,sha256=uc9f2DaXcbPRU35CgTpObub6hsnxDCHx-4s149qnzJ0,3655
146
- langfun/core/structured/completion.py,sha256=B0PHqBucu-keexJUa5g0F9fu57DlLtWDhZzJ-OD4VrE,8823
147
- langfun/core/structured/completion_test.py,sha256=-SGcMgtLuS6RQB8gFh18dUkSMQMDWKZGmBkPsAYHApQ,20348
146
+ langfun/core/structured/completion.py,sha256=0qfbmHBDftI4f-CkPBxYC934x41yKTOVbgOEXBwDZ1w,8672
147
+ langfun/core/structured/completion_test.py,sha256=OoyxtbiaAdy_QfJeTNKfvijPiC0H91gIjuIiWvGUd4o,19776
148
148
  langfun/core/structured/description.py,sha256=6BztYOiucPkF4CrTQtPLPJo1gN2dwnKmaJW83GBf4H0,5213
149
149
  langfun/core/structured/description_test.py,sha256=UxaXnKKP7TnyPDPUyf3U-zPE0TvLlIP6DGr8thjcePw,7365
150
150
  langfun/core/structured/function_generation.py,sha256=g7AOR_e8HxFU6n6Df750aGkgMgV1KExLZMAz0yd5Agg,8555
151
151
  langfun/core/structured/function_generation_test.py,sha256=LaXYDXf9GlqUrR6v_gtmK_H4kxzonmU7SYbn7XXMgjU,12128
152
- langfun/core/structured/mapping.py,sha256=1YBW8PKpJKXS7DKukfzKNioL84PrKUcB4KOUudrQ20w,14374
152
+ langfun/core/structured/mapping.py,sha256=Q1zhkTdOYQBOVqekNEOTtTP_1mGhu_5ChYza3Ms2_u0,14035
153
153
  langfun/core/structured/mapping_test.py,sha256=OntYvfDitAf0tAnzQty3YS90vyEn6FY1Mi93r_ViEk8,9594
154
154
  langfun/core/structured/parsing.py,sha256=bLi7o1AdyDWc6TwxmYg70t_oTgmLkJWBafakdF8n2RI,14195
155
155
  langfun/core/structured/parsing_test.py,sha256=vRfCSzA9q7C1cElkAnDvbRepULEa_vclqDIv-heypDw,22745
156
- langfun/core/structured/querying.py,sha256=P8miXfg6Q6HEvChnrLYUq5frIYREtduoTPTyQuysMGc,39649
157
- langfun/core/structured/querying_test.py,sha256=ulRgKniUd-pMEWFKo_B5NY0pv_mVCSJ_-34QIGspZRo,50353
156
+ langfun/core/structured/querying.py,sha256=5PYVZUkf2YIJmwN6CDBgwubiU7mK2jGMAEZH6wp-afM,39552
157
+ langfun/core/structured/querying_test.py,sha256=zjUEtBPcD0xAPKVmnIwZLzoGpRCMk5pIDtMDG2K5Ps4,51728
158
158
  langfun/core/structured/schema.py,sha256=xtgrr3t5tcYQ2gi_fkTKz2IgDMf84gpiykmBdfnV6Io,29486
159
159
  langfun/core/structured/schema_generation.py,sha256=pEWeTd8tQWYnEHukas6GVl4uGerLsQ2aNybtnm4Qgxc,5352
160
160
  langfun/core/structured/schema_generation_test.py,sha256=RM9s71kMNg2jTePwInkiW9fK1ACN37eyPeF8OII-0zw,2950
@@ -180,16 +180,16 @@ langfun/env/base_test.py,sha256=DrBtyweO4v8Fz3Oz-gnpJ4W_9hRhuVXA1CTLvXJDa9s,6109
180
180
  langfun/env/interface.py,sha256=2Amf-_op7dGRF8c4-wYxcFxs1UCBYz1AB20Lk7__V4E,25724
181
181
  langfun/env/interface_test.py,sha256=hfQn4RRTEo1YfVHXTPzH1puzD14BTo8R_5v1IpXVZ90,1398
182
182
  langfun/env/load_balancers.py,sha256=qRhCthqzjZIQBwta8qC1C0s0J-VQAVomJQqI7Nqv-r4,1948
183
- langfun/env/load_balancers_test.py,sha256=KIDIwZeQHcW0fCL5ScZD0lm0QV4_X2y-rMqdd6R1gLc,3737
183
+ langfun/env/load_balancers_test.py,sha256=73QQG-Lufy5DBhQuzWNUaaH24YiZFdZEHe67TkJn7a0,3708
184
184
  langfun/env/test_utils.py,sha256=rnIQZ2ZpiFuB7yfl5ckGtacBoySAwguzBzXzqhyo8jw,14042
185
185
  langfun/env/event_handlers/__init__.py,sha256=H34n-TbKSgtxqBhE-yAti8fY6weF2_v3yw59M9_zmGM,443
186
186
  langfun/env/event_handlers/base.py,sha256=eGdJ6N5em9kX-c9wzm1TdnRP5_5IAltX5JTHILdjzLM,10124
187
187
  langfun/env/event_handlers/event_logger.py,sha256=3dbPjBe53dBgntYHlyLlj_77hVecPSXkmKeiGXMxlO0,12699
188
188
  langfun/env/event_handlers/event_logger_test.py,sha256=PGof3rPllNnyzs3Yp8kaOHLeTkVrzUgCJwlODTrVRKI,9111
189
189
  langfun/env/event_handlers/metric_writer.py,sha256=NgJKsd6xWOtEd0IjYi7coGEaqGYkkPcDjXN9CQ3vxPU,18043
190
- langfun/env/event_handlers/metric_writer_test.py,sha256=flRqK10wonhJk4idGD_8jjEjrfjgH0R-qcu-7Bj1G5s,5335
191
- langfun-0.1.2.dev202510230805.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
192
- langfun-0.1.2.dev202510230805.dist-info/METADATA,sha256=6jD5kI_6Y_Mvj4czgua_j_Qak0_5VP60qRA3VCAJWDw,7522
193
- langfun-0.1.2.dev202510230805.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
194
- langfun-0.1.2.dev202510230805.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
195
- langfun-0.1.2.dev202510230805.dist-info/RECORD,,
190
+ langfun/env/event_handlers/metric_writer_test.py,sha256=deqCIdo-Q89rRCF2lerU3GpWmFG_SvDx162UQIZxPgE,5338
191
+ langfun-0.1.2.dev202510250803.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
192
+ langfun-0.1.2.dev202510250803.dist-info/METADATA,sha256=XnXFFEd0l7fdGDPdiJZ4VmFT56ssu8MUyOdpDTsUaF4,7522
193
+ langfun-0.1.2.dev202510250803.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
194
+ langfun-0.1.2.dev202510250803.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
195
+ langfun-0.1.2.dev202510250803.dist-info/RECORD,,