langfun 0.1.2.dev202411110804__py3-none-any.whl → 0.1.2.dev202411150804__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.
Files changed (44) hide show
  1. langfun/__init__.py +4 -0
  2. langfun/core/agentic/__init__.py +30 -0
  3. langfun/core/agentic/action.py +250 -0
  4. langfun/core/agentic/action_eval.py +150 -0
  5. langfun/core/agentic/action_eval_test.py +109 -0
  6. langfun/core/agentic/action_test.py +84 -0
  7. langfun/core/console.py +10 -2
  8. langfun/core/console_test.py +17 -0
  9. langfun/core/eval/__init__.py +2 -0
  10. langfun/core/eval/v2/__init__.py +38 -0
  11. langfun/core/eval/v2/checkpointing.py +135 -0
  12. langfun/core/eval/v2/checkpointing_test.py +89 -0
  13. langfun/core/eval/v2/evaluation.py +627 -0
  14. langfun/core/eval/v2/evaluation_test.py +156 -0
  15. langfun/core/eval/v2/example.py +295 -0
  16. langfun/core/eval/v2/example_test.py +114 -0
  17. langfun/core/eval/v2/experiment.py +949 -0
  18. langfun/core/eval/v2/experiment_test.py +304 -0
  19. langfun/core/eval/v2/metric_values.py +156 -0
  20. langfun/core/eval/v2/metric_values_test.py +80 -0
  21. langfun/core/eval/v2/metrics.py +357 -0
  22. langfun/core/eval/v2/metrics_test.py +203 -0
  23. langfun/core/eval/v2/progress.py +348 -0
  24. langfun/core/eval/v2/progress_test.py +82 -0
  25. langfun/core/eval/v2/progress_tracking.py +209 -0
  26. langfun/core/eval/v2/progress_tracking_test.py +56 -0
  27. langfun/core/eval/v2/reporting.py +144 -0
  28. langfun/core/eval/v2/reporting_test.py +41 -0
  29. langfun/core/eval/v2/runners.py +417 -0
  30. langfun/core/eval/v2/runners_test.py +311 -0
  31. langfun/core/eval/v2/test_helper.py +80 -0
  32. langfun/core/language_model.py +122 -11
  33. langfun/core/language_model_test.py +97 -4
  34. langfun/core/llms/__init__.py +4 -0
  35. langfun/core/llms/anthropic.py +12 -0
  36. langfun/core/llms/compositional.py +101 -0
  37. langfun/core/llms/compositional_test.py +73 -0
  38. langfun/core/llms/vertexai.py +4 -4
  39. langfun/core/llms/vertexai_test.py +8 -2
  40. {langfun-0.1.2.dev202411110804.dist-info → langfun-0.1.2.dev202411150804.dist-info}/METADATA +1 -1
  41. {langfun-0.1.2.dev202411110804.dist-info → langfun-0.1.2.dev202411150804.dist-info}/RECORD +44 -15
  42. {langfun-0.1.2.dev202411110804.dist-info → langfun-0.1.2.dev202411150804.dist-info}/WHEEL +1 -1
  43. {langfun-0.1.2.dev202411110804.dist-info → langfun-0.1.2.dev202411150804.dist-info}/LICENSE +0 -0
  44. {langfun-0.1.2.dev202411110804.dist-info → langfun-0.1.2.dev202411150804.dist-info}/top_level.txt +0 -0
@@ -24,6 +24,9 @@ from langfun.core.llms.fake import StaticMapping
24
24
  from langfun.core.llms.fake import StaticResponse
25
25
  from langfun.core.llms.fake import StaticSequence
26
26
 
27
+ # Compositional models.
28
+ from langfun.core.llms.compositional import RandomChoice
29
+
27
30
  # REST-based models.
28
31
  from langfun.core.llms.rest import REST
29
32
 
@@ -97,6 +100,7 @@ from langfun.core.llms.anthropic import Claude3Sonnet
97
100
  from langfun.core.llms.anthropic import Claude3Haiku
98
101
  from langfun.core.llms.anthropic import VertexAIAnthropic
99
102
  from langfun.core.llms.anthropic import VertexAIClaude3_5_Sonnet_20241022
103
+ from langfun.core.llms.anthropic import VertexAIClaude3_5_Sonnet_20240620
100
104
  from langfun.core.llms.anthropic import VertexAIClaude3_5_Haiku_20241022
101
105
 
102
106
  from langfun.core.llms.groq import Groq
@@ -53,6 +53,13 @@ SUPPORTED_MODELS_AND_SETTINGS = {
53
53
  cost_per_1k_input_tokens=0.003,
54
54
  cost_per_1k_output_tokens=0.015,
55
55
  ),
56
+ 'claude-3-5-sonnet@20240620': pg.Dict(
57
+ max_tokens=8192,
58
+ rpm=1000,
59
+ tpm=100000,
60
+ cost_per_1k_input_tokens=0.003,
61
+ cost_per_1k_output_tokens=0.015,
62
+ ),
56
63
  'claude-3-5-haiku@20241022': pg.Dict(
57
64
  max_tokens=8192,
58
65
  rpm=1000,
@@ -459,6 +466,11 @@ class VertexAIClaude3_5_Sonnet_20241022(VertexAIAnthropic): # pylint: disable=i
459
466
  model = 'claude-3-5-sonnet-v2@20241022'
460
467
 
461
468
 
469
+ class VertexAIClaude3_5_Sonnet_20240620(VertexAIAnthropic): # pylint: disable=invalid-name
470
+ """Anthropic's Claude 3.5 Sonnet model on VertexAI."""
471
+ model = 'claude-3-5-sonnet@20240620'
472
+
473
+
462
474
  class VertexAIClaude3_5_Haiku_20241022(VertexAIAnthropic): # pylint: disable=invalid-name
463
475
  """Anthropic's Claude 3.5 Haiku model on VertexAI."""
464
476
  model = 'claude-3-5-haiku@20241022'
@@ -0,0 +1,101 @@
1
+ # Copyright 2024 The Langfun Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """Compositions of different LLM models."""
15
+ import random
16
+ from typing import Annotated
17
+
18
+ import langfun.core as lf
19
+ import pyglove as pg
20
+
21
+
22
+ @pg.use_init_args(['candidates', 'seed'])
23
+ class RandomChoice(lf.LanguageModel):
24
+ """Random choice of a list of LLM models."""
25
+
26
+ candidates: Annotated[
27
+ list[lf.LanguageModel],
28
+ (
29
+ 'A list of LLMs as candidates to choose from.'
30
+ )
31
+ ]
32
+
33
+ seed: Annotated[
34
+ int,
35
+ (
36
+ 'The random seed to use for the random choice.'
37
+ )
38
+ ] = 0
39
+
40
+ def _on_bound(self):
41
+ super()._on_bound()
42
+ self._rand = random.Random(self.seed)
43
+ # Applying sampling options to all candidates.
44
+ parent_non_default = self.sampling_options.sym_nondefault()
45
+ if parent_non_default:
46
+ for c in self.candidates:
47
+ c.sampling_options.rebind(
48
+ parent_non_default, notify_parents=False, raise_on_no_change=False
49
+ )
50
+
51
+ @property
52
+ def model_id(self) -> str:
53
+ model_ids = ', '.join(
54
+ sorted(c.model_id for c in self.candidates)
55
+ )
56
+ return f'RandomChoice({model_ids})'
57
+
58
+ @property
59
+ def resource_id(self) -> str:
60
+ resource_ids = ', '.join(
61
+ sorted(c.resource_id for c in self.candidates)
62
+ )
63
+ return f'RandomChoice({resource_ids})'
64
+
65
+ def _select_lm(self) -> lf.LanguageModel:
66
+ """Selects a random LLM from the candidates."""
67
+ return self._rand.choice(self.candidates)
68
+
69
+ def sample(
70
+ self,
71
+ prompts: list[str | lf.Message],
72
+ *,
73
+ cache_seed: int = 0,
74
+ **kwargs,
75
+ ) -> list[lf.LMSamplingResult]:
76
+ return self._select_lm().sample(
77
+ prompts, cache_seed=cache_seed, **kwargs
78
+ )
79
+
80
+ def __call__(
81
+ self, prompt: lf.Message, *, cache_seed: int = 0, **kwargs
82
+ ) -> lf.Message:
83
+ return self._select_lm()(prompt, cache_seed=cache_seed, **kwargs)
84
+
85
+ def score(
86
+ self,
87
+ prompt: str | lf.Message | list[lf.Message],
88
+ completions: list[str | lf.Message],
89
+ **kwargs,
90
+ ) -> list[lf.LMScoringResult]:
91
+ return self._select_lm().score(prompt, completions, **kwargs)
92
+
93
+ def tokenize(
94
+ self,
95
+ prompt: str | lf.Message,
96
+ **kwargs,
97
+ ) -> list[tuple[str | bytes, int]]:
98
+ return self._select_lm().tokenize(prompt, **kwargs)
99
+
100
+ def _sample(self, *arg, **kwargs):
101
+ assert False, 'Should never trigger.'
@@ -0,0 +1,73 @@
1
+ # Copyright 2024 The Langfun Authors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """Tests for compositional models."""
15
+ import unittest
16
+
17
+ import langfun.core as lf
18
+ from langfun.core.llms import compositional
19
+ from langfun.core.llms import fake
20
+
21
+
22
+ class RandomChoiceTest(unittest.TestCase):
23
+
24
+ def test_basic(self):
25
+ lm = compositional.RandomChoice([
26
+ fake.StaticResponse('hi'),
27
+ fake.StaticSequence(['hello', 'world'])
28
+ ])
29
+ self.assertEqual(
30
+ lm.model_id,
31
+ 'RandomChoice(StaticResponse, StaticSequence)'
32
+ )
33
+ self.assertEqual(
34
+ lm.resource_id,
35
+ 'RandomChoice(StaticResponse, StaticSequence)'
36
+ )
37
+ self.assertEqual(
38
+ [lm('a'), lm('b'), lm('c')],
39
+ ['hello', 'world', 'hi']
40
+ )
41
+ lm = lm.clone()
42
+ self.assertEqual(
43
+ [
44
+ x.samples[0].response for x in [
45
+ lm.sample(['a'])[0],
46
+ lm.sample(['b'])[0],
47
+ lm.sample(['c'])[0],
48
+ ]
49
+ ],
50
+ ['hello', 'world', 'hi']
51
+ )
52
+ self.assertEqual(
53
+ lm.score('hello', ['world']),
54
+ [lf.LMScoringResult(0.0)]
55
+ )
56
+ self.assertEqual(
57
+ lm.tokenize('hello'),
58
+ [('hello', 0)]
59
+ )
60
+
61
+ def test_sampling_options(self):
62
+ lm = compositional.RandomChoice([
63
+ fake.StaticResponse('hi'),
64
+ fake.StaticSequence(['hello', 'world'])
65
+ ], temperature=0.5)
66
+ self.assertEqual(
67
+ lm.candidates[0].sampling_options.temperature,
68
+ 0.5
69
+ )
70
+
71
+
72
+ if __name__ == '__main__':
73
+ unittest.main()
@@ -51,13 +51,13 @@ AVGERAGE_CHARS_PER_TOEKN = 4
51
51
  SUPPORTED_MODELS_AND_SETTINGS = {
52
52
  'gemini-1.5-pro-001': pg.Dict(
53
53
  api='gemini',
54
- rpm=500,
54
+ rpm=100,
55
55
  cost_per_1k_input_chars=0.0003125,
56
56
  cost_per_1k_output_chars=0.00125,
57
57
  ),
58
58
  'gemini-1.5-pro-002': pg.Dict(
59
59
  api='gemini',
60
- rpm=500,
60
+ rpm=100,
61
61
  cost_per_1k_input_chars=0.0003125,
62
62
  cost_per_1k_output_chars=0.00125,
63
63
  ),
@@ -75,7 +75,7 @@ SUPPORTED_MODELS_AND_SETTINGS = {
75
75
  ),
76
76
  'gemini-1.5-pro': pg.Dict(
77
77
  api='gemini',
78
- rpm=500,
78
+ rpm=100,
79
79
  cost_per_1k_input_chars=0.0003125,
80
80
  cost_per_1k_output_chars=0.00125,
81
81
  ),
@@ -87,7 +87,7 @@ SUPPORTED_MODELS_AND_SETTINGS = {
87
87
  ),
88
88
  'gemini-1.5-pro-latest': pg.Dict(
89
89
  api='gemini',
90
- rpm=500,
90
+ rpm=100,
91
91
  cost_per_1k_input_chars=0.0003125,
92
92
  cost_per_1k_output_chars=0.00125,
93
93
  ),
@@ -199,6 +199,12 @@ class VertexAITest(unittest.TestCase):
199
199
  # There is a discrepancy between the `property_ordering` in the
200
200
  # Google-internal version and the open-source version.
201
201
  actual['response_schema'].pop('property_ordering', None)
202
+ if pg.KeyPath.parse('response_schema.type_').get(actual):
203
+ actual['response_schema']['type'] = actual['response_schema'].pop('type_')
204
+ if pg.KeyPath.parse('response_schema.properties.name.type_').get(actual):
205
+ actual['response_schema']['properties']['name']['type'] = actual[
206
+ 'response_schema']['properties']['name'].pop('type_')
207
+
202
208
  self.assertEqual(
203
209
  actual,
204
210
  dict(
@@ -209,9 +215,9 @@ class VertexAITest(unittest.TestCase):
209
215
  stop_sequences=['\n'],
210
216
  response_mime_type='application/json',
211
217
  response_schema={
212
- 'type_': 'OBJECT',
218
+ 'type': 'OBJECT',
213
219
  'properties': {
214
- 'name': {'type_': 'STRING'}
220
+ 'name': {'type': 'STRING'}
215
221
  },
216
222
  'required': ['name'],
217
223
  'title': 'Person',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langfun
3
- Version: 0.1.2.dev202411110804
3
+ Version: 0.1.2.dev202411150804
4
4
  Summary: Langfun: Language as Functions.
5
5
  Home-page: https://github.com/google/langfun
6
6
  Author: Langfun Authors
@@ -1,15 +1,15 @@
1
- langfun/__init__.py,sha256=mCES7t3R7Z-ZQYvG38-yrVqZubrXNfGCa8tI5HGB7mE,2274
1
+ langfun/__init__.py,sha256=o_HvoQggla5uqNA7uF1126aZhayHnVNP__nd_t5ElEQ,2358
2
2
  langfun/core/__init__.py,sha256=xlvFTXc7IKUTs8aCFRFhzOLTmmeuhXgk9yx2InBLNiA,4937
3
3
  langfun/core/component.py,sha256=HVrEoTL1Y01iqOHC3FYdbAOnffqfHHtGJXoK1vkdEwo,11583
4
4
  langfun/core/component_test.py,sha256=sG-T2wpvBfHqWGZE7sc4NayJj2aj5QFBzSwFiwrGEIc,10376
5
5
  langfun/core/concurrent.py,sha256=QMNYhB_PyjvVJtabMokpzotZRYvyE9iYu2QsgwDk7M4,29552
6
6
  langfun/core/concurrent_test.py,sha256=ILlAjfhV84yJfY1QLe3N9aYry1sCjY-ywfIlXGafenI,17336
7
- langfun/core/console.py,sha256=bk5rNPNm9rMGW5YT2HixxU04p2umnoabn5SDz6Dqe88,2317
8
- langfun/core/console_test.py,sha256=5SYJdxpJGLgdSSQqqMPoA1X6jpsLD8rgcyk-EgI65oE,1077
7
+ langfun/core/console.py,sha256=Fra2_MSWZbFh6rY8HZoYgpGLsrNvhaGuL03znOwQbhM,2529
8
+ langfun/core/console_test.py,sha256=pBOcuNMJdVELywvroptfcRtJMsegMm3wSlHAL2TdxVk,1679
9
9
  langfun/core/langfunc.py,sha256=G50YgoVZ0y1GFw2ev41MlOqr6qa8YakbvNC0h_E0PiA,11140
10
10
  langfun/core/langfunc_test.py,sha256=fKIAqcSNI_7M6nwoZW77HEam8Oa6vcWhsCNgVJanzb4,8822
11
- langfun/core/language_model.py,sha256=jOvWyiKvcv2yJGBNPWmxV8wyzuWnCcrc1FhldYBtPkE,30219
12
- langfun/core/language_model_test.py,sha256=cgoSdKwicnvHYo-tQeTdONXAVM-bvWLzgTlqxvace-A,28424
11
+ langfun/core/language_model.py,sha256=UtLvclKx55_SAKZ-ajaquudLxKorTARAeZFme5IaPi8,33499
12
+ langfun/core/language_model_test.py,sha256=td81wm4zFPeMb16nmIuIZ6eHtpYhH0k6IeiYLfGgR0o,31525
13
13
  langfun/core/logging.py,sha256=uslllP0RTGN223oro1m4nZZ0bFppcL07OwbFKm2iG6k,7519
14
14
  langfun/core/logging_test.py,sha256=b5bPTSUoYeICATaO6I8dOVumodwRbxSp1Oz96Sf3KcE,6104
15
15
  langfun/core/memory.py,sha256=f-asN1F7Vehgdn_fK84v73GrEUOxRtaW934keutTKjk,2416
@@ -29,6 +29,11 @@ langfun/core/template.py,sha256=_Sae_WsRo_yvwul0nqAPTOa0NOjW1zNYbW0CQpvg7l0,2538
29
29
  langfun/core/template_test.py,sha256=Qokz1hQFhRYaTZWBWGqvPJ0NXC9B9ennUpnRYHEf0hE,20542
30
30
  langfun/core/text_formatting.py,sha256=d7t9vaY6aCn1dkfkikpNYnBy5E_i93vHbfyDWFclGZU,5284
31
31
  langfun/core/text_formatting_test.py,sha256=ck0Xzdd4YF4CtCUj7VE0GybfbAyKQ8p3xkM1FBGrqIk,2096
32
+ langfun/core/agentic/__init__.py,sha256=ndoDX0sAYsa3eVdXuu6nB-a-BH5TaK3urW6zAaFiyVs,1110
33
+ langfun/core/agentic/action.py,sha256=Am5E1EH1ZBAhzagbnDVRnR4vBzI4H6MEtQ58laSPfTg,7515
34
+ langfun/core/agentic/action_eval.py,sha256=ZtjTh34S7XPIUqandQ0YwAtzw-S7ofuZ7rRXnRbUMdQ,4424
35
+ langfun/core/agentic/action_eval_test.py,sha256=tRUkWmOE9p0rpNOq19xAY2oDEnYsEEykjg6sUpAwJk0,2832
36
+ langfun/core/agentic/action_test.py,sha256=CBsUQICD8yPCDUBBFouSkZuyLAcK_C-AWYc28Zts10E,2624
32
37
  langfun/core/coding/__init__.py,sha256=5utju_fwEsImaiftx4oXKl9FAM8p281k8-Esdh_-m1w,835
33
38
  langfun/core/coding/python/__init__.py,sha256=MJ-vubliz-ebrZH3OBRKBwMi0S9-FrhGCp8YQLR6_I4,1776
34
39
  langfun/core/coding/python/correction.py,sha256=WiBdoScL-6C___iA3Tg3vizuYtJWI-_4wy9zcMfVpj8,7020
@@ -43,7 +48,7 @@ langfun/core/coding/python/parsing.py,sha256=LMg8REP4VDY0YQjtPAGNAW4rKlMNdSXF8m1
43
48
  langfun/core/coding/python/parsing_test.py,sha256=9vAWF484kWIm6JZq8NFiMgKUDhXV-deRl1QMmNERfAA,7386
44
49
  langfun/core/coding/python/permissions.py,sha256=1QWGHvzL8MM0Ok_auQ9tURqZHtdOfJaDpBzZ29GUE-c,2544
45
50
  langfun/core/coding/python/permissions_test.py,sha256=w5EDb8QxpxgJyZkojyzVWQvDfg366zn99-g__6TbPQ0,2699
46
- langfun/core/eval/__init__.py,sha256=Ogdr9OtTywhhLPHi3AZzOD2mXX2oyaHWflrSTMm96uA,1899
51
+ langfun/core/eval/__init__.py,sha256=OEXr1ZRuvLuhJJfuQ1ZWQ-SvYzjyrtiAAEogYaB7E6o,1933
47
52
  langfun/core/eval/base.py,sha256=ajHUS_BdzBIDKEwAmMzne0lJi8HcDhPmyw_plO0p7G0,75814
48
53
  langfun/core/eval/base_test.py,sha256=-LsIV9DXlDal0EnOlaWpibJvfef0NbxtZAm0OH_abAE,27189
49
54
  langfun/core/eval/matching.py,sha256=UnjdM_ebPqXKJamY4lvL3AYxrMIz3LqkjRTnHJ5xsYc,9349
@@ -52,9 +57,33 @@ langfun/core/eval/patching.py,sha256=R0s2eAd1m97exQt06dmUL0V_MBG0W2Hxg7fhNB7cXW0
52
57
  langfun/core/eval/patching_test.py,sha256=8kCd54Egjju22FMgtJuxEsrXkW8ifs-UUBHtrCG1L6w,4775
53
58
  langfun/core/eval/scoring.py,sha256=B69IsIxiPs1xZcOBFIhZF70YmDue2Siik-CPL2bh33s,6254
54
59
  langfun/core/eval/scoring_test.py,sha256=O8olHbrUEg60gMxwOkWzKBJZpZoUlmVnBANX5Se2SXM,4546
55
- langfun/core/llms/__init__.py,sha256=ATayGMO5rQzkPBAf7zl3vfgRQ8fth33TFVXv_tvraCQ,6190
56
- langfun/core/llms/anthropic.py,sha256=XPQxjfe9O4b-CygCgqvQU0MPSfe1rU7uErNbo8zth7Q,13606
60
+ langfun/core/eval/v2/__init__.py,sha256=XMpkKjd_vL_qzCQYPAwR1NNO0T_Zo5j4kP3eYL-EJLc,1428
61
+ langfun/core/eval/v2/checkpointing.py,sha256=AhChb5U0fTd0NmDHaIaVE9qJ8zFEe7Lhq7KjIt1D2pQ,3766
62
+ langfun/core/eval/v2/checkpointing_test.py,sha256=xU5asikwUn-rCmNd93ssvT6gDiKvvWogYKQa0r_TqOM,3046
63
+ langfun/core/eval/v2/evaluation.py,sha256=hausa1NnUGi56KNrucd61qv9km1eDvcj2GBqiJzb0FA,19371
64
+ langfun/core/eval/v2/evaluation_test.py,sha256=hh6L2HhQPQ6NBv1pXKcNkYraNcV9MLuJ--69t9jbmaI,5846
65
+ langfun/core/eval/v2/example.py,sha256=fURrvdNmMsVMqoEErcsmLmC6Xq3ny16dYsnLH8HVlcY,9626
66
+ langfun/core/eval/v2/example_test.py,sha256=WcJmU7IQQXvjFia63mokySC4CqxzVL9Wso1sC5F0YK8,3032
67
+ langfun/core/eval/v2/experiment.py,sha256=xkROLFYj2Nf6G9wunfVx6nEhdMX_560hRSsB8qT3S_Q,28787
68
+ langfun/core/eval/v2/experiment_test.py,sha256=R0ujPSluvDu5gwxGpiSWJ3eTiVpfleJDwwT1pXN8Nvg,8933
69
+ langfun/core/eval/v2/metric_values.py,sha256=_B905bC-jxrYPLSEcP2M8MaHZOVMz_bVrUw8YC4arCE,4660
70
+ langfun/core/eval/v2/metric_values_test.py,sha256=ab2oF_HsIwrSy459108ggyjgefHSPn8UVILR4dRwx14,2634
71
+ langfun/core/eval/v2/metrics.py,sha256=bl8i6u-ZHRBz4hAc3LzsZ2Dc7ZRQcuTYeUhhH-GxfF0,10628
72
+ langfun/core/eval/v2/metrics_test.py,sha256=p4FzLJsE8XAzAQuyP9hfEf9YeKWZ__PO_ue8a9P0-cc,6082
73
+ langfun/core/eval/v2/progress.py,sha256=azZgssQgNdv3IgjKEaQBuGI5ucFDNbdi02P4z_nQ8GE,10292
74
+ langfun/core/eval/v2/progress_test.py,sha256=YU7VHzmy5knPZwj9vpBN3rQQH2tukj9eKHkuBCI62h8,2540
75
+ langfun/core/eval/v2/progress_tracking.py,sha256=1imwSbllxHWG3zYrzo2NvytBZsVtjqum6bmXGGsvT1E,5987
76
+ langfun/core/eval/v2/progress_tracking_test.py,sha256=eY2HvZeEXDA5Zyfi2m5NDWO_9kSfQsaAOEcIhkSbWCY,1874
77
+ langfun/core/eval/v2/reporting.py,sha256=TGkli1IDwqfqsCJ_WslOMGk_24JDg7oRRTGXlAJlWpc,4361
78
+ langfun/core/eval/v2/reporting_test.py,sha256=JxffbUPWInUyLjo-AQVFrllga884Mdfm05R86FtxSss,1482
79
+ langfun/core/eval/v2/runners.py,sha256=2OHAVTbqq9hZ3qZpUEvQ--9X-Cr_z8Ghc3MRXCfclpk,13442
80
+ langfun/core/eval/v2/runners_test.py,sha256=s3GgWA-H9x0JyPhPZq2s9-5GXGHo5dSbDD-4faX0h_E,11164
81
+ langfun/core/eval/v2/test_helper.py,sha256=pDpZTBnWRR5xjJv3Uy3NWEzArqlL8FTMOgeR4C53F5M,2348
82
+ langfun/core/llms/__init__.py,sha256=uR2vLghsnZqY6OjZKAs9Lo-YFNxZNunf3A0q6-1GYlc,6346
83
+ langfun/core/llms/anthropic.py,sha256=uJXVgaFONL8okOSVQ4VGMGht_VZ30m1hoLzmDbIjmks,13990
57
84
  langfun/core/llms/anthropic_test.py,sha256=-2U4kc_pgBM7wqxu8RuxzyHPGww1EAWqKUvN4PW8Btw,8058
85
+ langfun/core/llms/compositional.py,sha256=csW_FLlgL-tpeyCOTVvfUQkMa_zCN5Y2I-YbSNuK27U,2872
86
+ langfun/core/llms/compositional_test.py,sha256=4eTnOer-DncRKGaIJW2ZQQMLnt5r2R0UIx_DYOvGAQo,2027
58
87
  langfun/core/llms/fake.py,sha256=gCHBYBLvBCsC78HI1hpoqXCS-p1FMTgY1P1qh_sGBPk,3070
59
88
  langfun/core/llms/fake_test.py,sha256=2h13qkwEz_JR0mtUDPxdAhQo7MueXaFSwsD2DIRDW9g,7653
60
89
  langfun/core/llms/google_genai.py,sha256=btUIfWteBoj8Jl0j8d3e8hyI6p3Biq4rldlQYctVQfg,10936
@@ -67,8 +96,8 @@ langfun/core/llms/openai.py,sha256=qrAiJxE0tS7ZqjaVzRgVJKtMtoo1Z5TYpvi5ikTwPpw,2
67
96
  langfun/core/llms/openai_test.py,sha256=_8cd3VRNEUfE0-Ko1RiM6MlC5hjalRj7nYTJNhG1p3E,18907
68
97
  langfun/core/llms/rest.py,sha256=sWbYUV8S3SuOg9giq7xwD-xDRfaF7NP_ig7bI52-Rj4,3442
69
98
  langfun/core/llms/rest_test.py,sha256=NZ3Nf0XQVpT9kLP5cBVo_yBHLI7vWTYhWQxYEJVMGs4,3472
70
- langfun/core/llms/vertexai.py,sha256=eUFU0JjgpTVCAvQVEWiGqZrlE3Dye-EkzZCF1P8nwc4,18866
71
- langfun/core/llms/vertexai_test.py,sha256=7uBVOF5VF86xQ9HFAbSTh4J-0NjYLnuotBS1YRm-vgw,10529
99
+ langfun/core/llms/vertexai.py,sha256=-KB880Ovab6CQqI-Y5Y6V7RlEA0tAIazmnnG74Ebp4A,18866
100
+ langfun/core/llms/vertexai_test.py,sha256=I8gEHLRXZZGq_d2VDtJAkAIzf-lNSCoB8y2lwFckY-w,10885
72
101
  langfun/core/llms/cache/__init__.py,sha256=QAo3InUMDM_YpteNnVCSejI4zOsnjSMWKJKzkb3VY64,993
73
102
  langfun/core/llms/cache/base.py,sha256=rt3zwmyw0y9jsSGW-ZbV1vAfLxQ7_3AVk0l2EySlse4,3918
74
103
  langfun/core/llms/cache/in_memory.py,sha256=l6b-iU9OTfTRo9Zmg4VrQIuArs4cCJDOpXiEpvNocjo,5004
@@ -119,8 +148,8 @@ langfun/core/templates/demonstration.py,sha256=vCrgYubdZM5Umqcgp8NUVGXgr4P_c-fik
119
148
  langfun/core/templates/demonstration_test.py,sha256=SafcDQ0WgI7pw05EmPI2S4v1t3ABKzup8jReCljHeK4,2162
120
149
  langfun/core/templates/selfplay.py,sha256=yhgrJbiYwq47TgzThmHrDQTF4nDrTI09CWGhuQPNv-s,2273
121
150
  langfun/core/templates/selfplay_test.py,sha256=Ot__1P1M8oJfoTp-M9-PQ6HUXqZKyMwvZ5f7yQ3yfyM,2326
122
- langfun-0.1.2.dev202411110804.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
123
- langfun-0.1.2.dev202411110804.dist-info/METADATA,sha256=nHJrDnL1TXEZf8-6SSGkmpeLoakwYBYyjE5JvJP79dQ,8890
124
- langfun-0.1.2.dev202411110804.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
125
- langfun-0.1.2.dev202411110804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
126
- langfun-0.1.2.dev202411110804.dist-info/RECORD,,
151
+ langfun-0.1.2.dev202411150804.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
152
+ langfun-0.1.2.dev202411150804.dist-info/METADATA,sha256=1RftsAD_qubksdeWSmhbcR35HGkcT7opT3L1c1EO5Ok,8890
153
+ langfun-0.1.2.dev202411150804.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
154
+ langfun-0.1.2.dev202411150804.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
155
+ langfun-0.1.2.dev202411150804.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5