langfun 0.0.2.dev20240507__py3-none-any.whl → 0.0.2.dev20240508__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langfun/__init__.py +5 -0
- langfun/core/eval/base.py +4 -2
- langfun/core/langfunc.py +1 -17
- langfun/core/langfunc_test.py +4 -0
- langfun/core/llms/fake.py +6 -6
- langfun/core/structured/__init__.py +2 -0
- langfun/core/structured/prompting.py +31 -7
- langfun/core/structured/prompting_test.py +43 -0
- langfun/core/template.py +22 -1
- {langfun-0.0.2.dev20240507.dist-info → langfun-0.0.2.dev20240508.dist-info}/METADATA +1 -1
- {langfun-0.0.2.dev20240507.dist-info → langfun-0.0.2.dev20240508.dist-info}/RECORD +14 -14
- {langfun-0.0.2.dev20240507.dist-info → langfun-0.0.2.dev20240508.dist-info}/LICENSE +0 -0
- {langfun-0.0.2.dev20240507.dist-info → langfun-0.0.2.dev20240508.dist-info}/WHEEL +0 -0
- {langfun-0.0.2.dev20240507.dist-info → langfun-0.0.2.dev20240508.dist-info}/top_level.txt +0 -0
langfun/__init__.py
CHANGED
@@ -33,6 +33,11 @@ complete = structured.complete
|
|
33
33
|
score = structured.score
|
34
34
|
generate_class = structured.generate_class
|
35
35
|
|
36
|
+
# Helper functions for input/output transformations based on
|
37
|
+
# `lf.query` (e.g. jax-on-beam could use these for batch processing)
|
38
|
+
query_prompt = structured.query_prompt
|
39
|
+
query_output = structured.query_output
|
40
|
+
|
36
41
|
source_form = structured.source_form
|
37
42
|
function_gen = structured.function_gen
|
38
43
|
|
langfun/core/eval/base.py
CHANGED
@@ -1179,7 +1179,7 @@ class Evaluation(Evaluable):
|
|
1179
1179
|
|
1180
1180
|
def process(self, example: Any, **kwargs) -> lf.Message:
|
1181
1181
|
"""Process an example and returns its output."""
|
1182
|
-
prompt = self.prompt
|
1182
|
+
prompt = lf.Template.from_value(self.prompt, example=example)
|
1183
1183
|
if self.method == 'call':
|
1184
1184
|
return lf_structured.call(
|
1185
1185
|
prompt,
|
@@ -1207,7 +1207,9 @@ class Evaluation(Evaluable):
|
|
1207
1207
|
else:
|
1208
1208
|
assert self.method == 'complete', self.method
|
1209
1209
|
assert isinstance(self.schema.spec, pg.typing.Object), self.schema
|
1210
|
-
|
1210
|
+
# TODO(daiyip): Currently multi-modal inputs within the prompt for
|
1211
|
+
# completion is not supported.
|
1212
|
+
input_value = self.schema.spec.cls.partial(prompt.render().text)
|
1211
1213
|
return lf_structured.complete(
|
1212
1214
|
input_value,
|
1213
1215
|
lm=self.lm,
|
langfun/core/langfunc.py
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
"""LangFunc: Language-based functions."""
|
15
15
|
|
16
16
|
import dataclasses
|
17
|
-
from typing import Annotated, Type
|
17
|
+
from typing import Annotated, Type
|
18
18
|
|
19
19
|
from langfun.core import component
|
20
20
|
from langfun.core import language_model
|
@@ -328,22 +328,6 @@ class LangFunc(
|
|
328
328
|
"""Transforms the output message before returning from __call__."""
|
329
329
|
return lm_output
|
330
330
|
|
331
|
-
@classmethod
|
332
|
-
def from_value(
|
333
|
-
cls, value: Union[str, template_lib.Template], **kwargs
|
334
|
-
) -> 'LangFunc':
|
335
|
-
"""Create a LangFunc object from a string or template."""
|
336
|
-
if isinstance(value, LangFunc):
|
337
|
-
return value
|
338
|
-
if isinstance(value, template_lib.Template):
|
339
|
-
lfun = LangFunc(value.template_str, **kwargs)
|
340
|
-
# So lfun could acccess all attributes from value.
|
341
|
-
lfun.sym_setparent(value)
|
342
|
-
return lfun
|
343
|
-
if isinstance(value, str):
|
344
|
-
return LangFunc(template_str=value, **kwargs)
|
345
|
-
return LangFunc('{{input}}', input=value, **kwargs)
|
346
|
-
|
347
331
|
|
348
332
|
# Register converter from str to LangFunc, therefore we can always
|
349
333
|
# pass strs to attributes that accept LangFunc.
|
langfun/core/langfunc_test.py
CHANGED
@@ -57,6 +57,10 @@ class BasicTest(unittest.TestCase):
|
|
57
57
|
l2 = LangFunc.from_value(l1)
|
58
58
|
self.assertIs(l2, l1)
|
59
59
|
|
60
|
+
l3 = LangFunc.from_value(l1, x=1)
|
61
|
+
self.assertIsNot(l3, l1)
|
62
|
+
self.assertTrue(pg.eq(l3, LangFunc('Hello', x=1)))
|
63
|
+
|
60
64
|
c = template_lib.Template(
|
61
65
|
'{{x}} + {{l}}',
|
62
66
|
x=1,
|
langfun/core/llms/fake.py
CHANGED
@@ -57,12 +57,12 @@ class StaticResponse(Fake):
|
|
57
57
|
"""Language model that always gives the same canned response."""
|
58
58
|
|
59
59
|
response: Annotated[
|
60
|
-
str,
|
60
|
+
str | lf.Message,
|
61
61
|
'A canned response that will be returned regardless of the prompt.'
|
62
62
|
]
|
63
63
|
|
64
64
|
def _response_from(self, prompt: lf.Message) -> lf.Message:
|
65
|
-
return lf.AIMessage(self.response)
|
65
|
+
return lf.AIMessage.from_value(self.response)
|
66
66
|
|
67
67
|
|
68
68
|
@lf.use_init_args(['mapping'])
|
@@ -70,12 +70,12 @@ class StaticMapping(Fake):
|
|
70
70
|
"""A static mapping from prompt to response."""
|
71
71
|
|
72
72
|
mapping: Annotated[
|
73
|
-
dict[str, str],
|
73
|
+
dict[str, str | lf.Message],
|
74
74
|
'A mapping from prompt to response.'
|
75
75
|
]
|
76
76
|
|
77
77
|
def _response_from(self, prompt: lf.Message) -> lf.Message:
|
78
|
-
return lf.AIMessage(self.mapping[prompt])
|
78
|
+
return lf.AIMessage.from_value(self.mapping[prompt])
|
79
79
|
|
80
80
|
|
81
81
|
@lf.use_init_args(['sequence'])
|
@@ -83,7 +83,7 @@ class StaticSequence(Fake):
|
|
83
83
|
"""A static sequence of responses to use."""
|
84
84
|
|
85
85
|
sequence: Annotated[
|
86
|
-
list[str],
|
86
|
+
list[str | lf.Message],
|
87
87
|
'A sequence of strings as the response.'
|
88
88
|
]
|
89
89
|
|
@@ -92,6 +92,6 @@ class StaticSequence(Fake):
|
|
92
92
|
self._pos = 0
|
93
93
|
|
94
94
|
def _response_from(self, prompt: lf.Message) -> lf.Message:
|
95
|
-
r = lf.AIMessage(self.sequence[self._pos])
|
95
|
+
r = lf.AIMessage.from_value(self.sequence[self._pos])
|
96
96
|
self._pos += 1
|
97
97
|
return r
|
@@ -64,6 +64,8 @@ from langfun.core.structured.prompting import QueryStructure
|
|
64
64
|
from langfun.core.structured.prompting import QueryStructureJson
|
65
65
|
from langfun.core.structured.prompting import QueryStructurePython
|
66
66
|
from langfun.core.structured.prompting import query
|
67
|
+
from langfun.core.structured.prompting import query_prompt
|
68
|
+
from langfun.core.structured.prompting import query_output
|
67
69
|
|
68
70
|
from langfun.core.structured.description import DescribeStructure
|
69
71
|
from langfun.core.structured.description import describe
|
@@ -16,6 +16,7 @@
|
|
16
16
|
from typing import Any, Callable, Type, Union
|
17
17
|
|
18
18
|
import langfun.core as lf
|
19
|
+
from langfun.core.llms import fake
|
19
20
|
from langfun.core.structured import mapping
|
20
21
|
from langfun.core.structured import schema as schema_lib
|
21
22
|
import pyglove as pg
|
@@ -214,13 +215,8 @@ def query(
|
|
214
215
|
# prompt rendering.
|
215
216
|
prompt_kwargs.pop('template_str', None)
|
216
217
|
|
217
|
-
if isinstance(prompt, str):
|
218
|
-
prompt = lf.Template(prompt, **prompt_kwargs)
|
219
|
-
elif isinstance(prompt, lf.Template):
|
220
|
-
prompt = prompt.rebind(**prompt_kwargs, raise_on_no_change=False)
|
221
|
-
|
222
|
-
if isinstance(prompt, lf.Template):
|
223
|
-
prompt = prompt.render(lm=lm)
|
218
|
+
if isinstance(prompt, (str, lf.Message, lf.Template)):
|
219
|
+
prompt = lf.Template.from_value(prompt, **prompt_kwargs).render(lm=lm)
|
224
220
|
else:
|
225
221
|
prompt = schema_lib.mark_missing(prompt)
|
226
222
|
|
@@ -240,3 +236,31 @@ def query(
|
|
240
236
|
skip_lm=skip_lm,
|
241
237
|
)
|
242
238
|
return output if returns_message else output.result
|
239
|
+
|
240
|
+
|
241
|
+
def query_prompt(
|
242
|
+
prompt: Union[str, pg.Symbolic],
|
243
|
+
schema: Union[
|
244
|
+
schema_lib.Schema, Type[Any], list[Type[Any]], dict[str, Any], None
|
245
|
+
] = None,
|
246
|
+
**kwargs,
|
247
|
+
) -> lf.Message:
|
248
|
+
"""Returns the final prompt sent to LLM for `lf.query`."""
|
249
|
+
kwargs.pop('returns_message', None)
|
250
|
+
kwargs.pop('skip_lm', None)
|
251
|
+
return query(prompt, schema, skip_lm=True, returns_message=True, **kwargs)
|
252
|
+
|
253
|
+
|
254
|
+
def query_output(
|
255
|
+
response: Union[str, lf.Message],
|
256
|
+
schema: Union[
|
257
|
+
schema_lib.Schema, Type[Any], list[Type[Any]], dict[str, Any], None
|
258
|
+
],
|
259
|
+
**kwargs,
|
260
|
+
) -> Any:
|
261
|
+
"""Returns the final output of `lf.query` from a provided LLM response."""
|
262
|
+
kwargs.pop('prompt', None)
|
263
|
+
kwargs.pop('lm', None)
|
264
|
+
return query(
|
265
|
+
'Unused prompt', schema, lm=fake.StaticResponse(response), **kwargs
|
266
|
+
)
|
@@ -285,6 +285,49 @@ class QueryTest(unittest.TestCase):
|
|
285
285
|
with self.assertRaisesRegex(ValueError, 'Unknown protocol'):
|
286
286
|
prompting.query('what is 1 + 1', int, protocol='text')
|
287
287
|
|
288
|
+
def test_query_prompt(self):
|
289
|
+
self.assertEqual(
|
290
|
+
prompting.query_prompt('what is this?', int),
|
291
|
+
inspect.cleandoc("""
|
292
|
+
Please respond to the last INPUT_OBJECT with OUTPUT_OBJECT according to OUTPUT_TYPE.
|
293
|
+
|
294
|
+
INPUT_OBJECT:
|
295
|
+
1 + 1 =
|
296
|
+
|
297
|
+
OUTPUT_TYPE:
|
298
|
+
Answer
|
299
|
+
|
300
|
+
```python
|
301
|
+
class Answer:
|
302
|
+
final_answer: int
|
303
|
+
```
|
304
|
+
|
305
|
+
OUTPUT_OBJECT:
|
306
|
+
```python
|
307
|
+
Answer(
|
308
|
+
final_answer=2
|
309
|
+
)
|
310
|
+
```
|
311
|
+
|
312
|
+
INPUT_OBJECT:
|
313
|
+
what is this?
|
314
|
+
|
315
|
+
OUTPUT_TYPE:
|
316
|
+
int
|
317
|
+
|
318
|
+
OUTPUT_OBJECT:
|
319
|
+
"""),
|
320
|
+
)
|
321
|
+
|
322
|
+
def test_query_output(self):
|
323
|
+
self.assertEqual(
|
324
|
+
prompting.query_output(
|
325
|
+
lf.AIMessage('1'),
|
326
|
+
int,
|
327
|
+
),
|
328
|
+
1,
|
329
|
+
)
|
330
|
+
|
288
331
|
|
289
332
|
class QueryStructurePythonTest(unittest.TestCase):
|
290
333
|
|
langfun/core/template.py
CHANGED
@@ -17,7 +17,7 @@ import contextlib
|
|
17
17
|
import dataclasses
|
18
18
|
import functools
|
19
19
|
import inspect
|
20
|
-
from typing import Annotated, Any, Callable, Iterator, Set, Tuple, Type
|
20
|
+
from typing import Annotated, Any, Callable, Iterator, Set, Tuple, Type, Union
|
21
21
|
|
22
22
|
import jinja2
|
23
23
|
from jinja2 import meta as jinja2_meta
|
@@ -495,6 +495,27 @@ class Template(
|
|
495
495
|
t.sym_setparent(self)
|
496
496
|
return t
|
497
497
|
|
498
|
+
@classmethod
|
499
|
+
def from_value(
|
500
|
+
cls,
|
501
|
+
value: Union[str, message_lib.Message, 'Template'],
|
502
|
+
**kwargs
|
503
|
+
) -> 'Template':
|
504
|
+
"""Create a template object from a string or template."""
|
505
|
+
if isinstance(value, cls):
|
506
|
+
return value.clone(override=kwargs) if kwargs else value # pylint: disable=no-value-for-parameter
|
507
|
+
if isinstance(value, str):
|
508
|
+
return cls(template_str=value, **kwargs)
|
509
|
+
if isinstance(value, message_lib.Message):
|
510
|
+
kwargs.update(value.metadata)
|
511
|
+
return cls(template_str=value.text, **kwargs)
|
512
|
+
if isinstance(value, Template):
|
513
|
+
lfun = cls(template_str=value.template_str, **kwargs)
|
514
|
+
# So lfun could acccess all attributes from value.
|
515
|
+
lfun.sym_setparent(value)
|
516
|
+
return lfun
|
517
|
+
return cls(template_str='{{input}}', input=value, **kwargs)
|
518
|
+
|
498
519
|
|
499
520
|
# Register converter from str to LangFunc, therefore we can always
|
500
521
|
# pass strs to attributes that accept LangFunc.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
langfun/__init__.py,sha256=
|
1
|
+
langfun/__init__.py,sha256=YAbi2FfTfKT41KJAx1tSNoiole_YRJmcEk3oOoqFqOs,2128
|
2
2
|
langfun/core/__init__.py,sha256=6QEuXOZ9BXxm6TjpaMXuLwUBTYO3pkFDqn9QVBXyyPQ,4248
|
3
3
|
langfun/core/component.py,sha256=oxesbC0BoE_TbtxwW5x-BAZWxZyyJbuPiX5S38RqCv0,9909
|
4
4
|
langfun/core/component_test.py,sha256=uR-_Sz_42Jxc5qzLIB-f5_pXmNwnC01Xlbv5NOQSeSU,8021
|
@@ -6,8 +6,8 @@ langfun/core/concurrent.py,sha256=TRc49pJ3HQro2kb5FtcWkHjhBm8UcgE8RJybU5cU3-0,24
|
|
6
6
|
langfun/core/concurrent_test.py,sha256=mwFMZhDUdppnDr7vDSTwcbMHwrdsIoKJwRYNtl4ZWL4,15185
|
7
7
|
langfun/core/console.py,sha256=bk5rNPNm9rMGW5YT2HixxU04p2umnoabn5SDz6Dqe88,2317
|
8
8
|
langfun/core/console_test.py,sha256=5SYJdxpJGLgdSSQqqMPoA1X6jpsLD8rgcyk-EgI65oE,1077
|
9
|
-
langfun/core/langfunc.py,sha256=
|
10
|
-
langfun/core/langfunc_test.py,sha256=
|
9
|
+
langfun/core/langfunc.py,sha256=RvIcRjIq0jWYRu1xim-FYe4HSrt97r3GMBO_PuagUmw,11060
|
10
|
+
langfun/core/langfunc_test.py,sha256=_mfARnakX3oji5HDigFSLMd6yQ2wma-2Mgbztwqn73g,8501
|
11
11
|
langfun/core/language_model.py,sha256=6wtY8RGbOymfo1PYzcYCfOlWuKQcSVFs5R1sFB4-QMQ,20202
|
12
12
|
langfun/core/language_model_test.py,sha256=T-itu7Li2smv2dkru0C0neCs2W4VJXlNTYahXU6jF54,19548
|
13
13
|
langfun/core/memory.py,sha256=f-asN1F7Vehgdn_fK84v73GrEUOxRtaW934keutTKjk,2416
|
@@ -21,7 +21,7 @@ langfun/core/sampling.py,sha256=vygWvgC8MFw0_AKNSmz-ywMXJYWf8cl0tI8QycvAmyI,5795
|
|
21
21
|
langfun/core/sampling_test.py,sha256=U7PANpMsl9E_pa4_Y4FzesSjcwg-u-LKHGCWSgv-8FY,3663
|
22
22
|
langfun/core/subscription.py,sha256=euawEuSZP-BHydaT-AQpfYFL0m5pWPGcW0upFhrojqc,10930
|
23
23
|
langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIcArBo,8717
|
24
|
-
langfun/core/template.py,sha256=
|
24
|
+
langfun/core/template.py,sha256=UhNNGUDJ4StUhPBKzHmjym36khxHOGWGr9MDxBwgxQA,22284
|
25
25
|
langfun/core/template_test.py,sha256=Mbv0dFjboGCVvbDkHD-HacZnlCi8Ku2Hpf2UjdwGSNo,15464
|
26
26
|
langfun/core/text_formatting.py,sha256=ytjj7opnRJ6w-pkglL2CZUyfYDXLpNf65E42LBb31gc,5158
|
27
27
|
langfun/core/text_formatting_test.py,sha256=nyKC6tn2L4hPJiqQHgxcbQsJJi4A4Nbj8FiO8iT6B80,1514
|
@@ -40,7 +40,7 @@ langfun/core/coding/python/parsing_test.py,sha256=9vAWF484kWIm6JZq8NFiMgKUDhXV-d
|
|
40
40
|
langfun/core/coding/python/permissions.py,sha256=1QWGHvzL8MM0Ok_auQ9tURqZHtdOfJaDpBzZ29GUE-c,2544
|
41
41
|
langfun/core/coding/python/permissions_test.py,sha256=w5EDb8QxpxgJyZkojyzVWQvDfg366zn99-g__6TbPQ0,2699
|
42
42
|
langfun/core/eval/__init__.py,sha256=Evt-E4FEhZF2tXL6-byh_AyA7Cc_ZoGmvnN7vkAZedk,1898
|
43
|
-
langfun/core/eval/base.py,sha256=
|
43
|
+
langfun/core/eval/base.py,sha256=zcMPBKmcll5O08waEEnvmkEoXgcINhOat9rRJk8X8b4,74268
|
44
44
|
langfun/core/eval/base_test.py,sha256=cHOTIWVW4Dp8gKKIKcZrAcJ-w84j2GIozTzJoiAX7p4,26743
|
45
45
|
langfun/core/eval/matching.py,sha256=Y4vFoNTQEOwko6IA8l9OZ52-vt52e3VGmcTtvLA67wM,9782
|
46
46
|
langfun/core/eval/matching_test.py,sha256=f7iVyXH5KGJBWt4Wp14Bt9J3X59A6Ayfog9MbuFvPew,5532
|
@@ -51,7 +51,7 @@ langfun/core/eval/scoring_test.py,sha256=O8olHbrUEg60gMxwOkWzKBJZpZoUlmVnBANX5Se
|
|
51
51
|
langfun/core/llms/__init__.py,sha256=1bPg1QI8duOZCYINm-jWi094x0JtLmsk4KX60qIC_gs,3245
|
52
52
|
langfun/core/llms/anthropic.py,sha256=7W9YdPN3SlAFhAIQlihMkrpo7tTY_4NvD0KIlCrqcsk,8505
|
53
53
|
langfun/core/llms/anthropic_test.py,sha256=TMM30myyEhwF99Le4RvJEXOn8RYl0q1FRkt9Q9nl1jk,5540
|
54
|
-
langfun/core/llms/fake.py,sha256=
|
54
|
+
langfun/core/llms/fake.py,sha256=_smsN_CsYbeWrtjpegEPwdAPV9mwaIuH_4oZGeXQwQI,2896
|
55
55
|
langfun/core/llms/fake_test.py,sha256=ipKfdOcuqVcJ8lDXVpnBVb9HHG0hAVkFkMoHpWjC2cI,7212
|
56
56
|
langfun/core/llms/google_genai.py,sha256=n8zyJwh9UCTgb6-8LyvmjVNFGZQ4-zfzZ0ulkhHAnR8,8624
|
57
57
|
langfun/core/llms/google_genai_test.py,sha256=_UcGTfl16-aDUlEWFC2W2F8y9jPUs53RBYA6MOCpGXw,7525
|
@@ -75,7 +75,7 @@ langfun/core/modalities/mime.py,sha256=wVfaYflhGz1W4v3m972rAplW3OGOFtjFpHDYIaUD5
|
|
75
75
|
langfun/core/modalities/mime_test.py,sha256=cVHxRvJ1QXC1SVhBmWkJdWGpL9Xl0UNfTQq6j0OGGL4,1881
|
76
76
|
langfun/core/modalities/video.py,sha256=25M4XsNG5XEWRy57LYT_a6_aMURMPAgC41B3weEXFsY,1747
|
77
77
|
langfun/core/modalities/video_test.py,sha256=jYuI2m8S8zDCAVBPEUbbpP205dXAht90A2_PHWo4-r8,2039
|
78
|
-
langfun/core/structured/__init__.py,sha256=
|
78
|
+
langfun/core/structured/__init__.py,sha256=Qg1ocwsb60od8fJky3F3JAOhwjwT9WA7IX3C2j2s3zA,3707
|
79
79
|
langfun/core/structured/completion.py,sha256=skBxt6V_fv2TBUKnzFgnPMbVY8HSYn8sY04MLok2yvs,7299
|
80
80
|
langfun/core/structured/completion_test.py,sha256=MYxEzeScC3gFVujvrMMboBF5nh-QiVLwGgqAV3oaFUQ,19273
|
81
81
|
langfun/core/structured/description.py,sha256=SXW4MJvshFjbR-0gw6rE21o6WXq12UlRXawvDBXMZFA,5211
|
@@ -86,8 +86,8 @@ langfun/core/structured/mapping.py,sha256=V2EI53KwhXxqcoH2ouhuei8aYWny0ml_FwMTiS
|
|
86
86
|
langfun/core/structured/mapping_test.py,sha256=PiXklMeIa8L6KtMi3ju7J9Y39gZy0hIGz-Oeq4A_7XE,3835
|
87
87
|
langfun/core/structured/parsing.py,sha256=keoVqEfzAbdULh6GawWFsTQzU91MzJXYFZjXGXLaD8g,11492
|
88
88
|
langfun/core/structured/parsing_test.py,sha256=34wDrXaQ-EYhJLfDL8mX9K53oQMSzh5pVYdKjnESmK8,20895
|
89
|
-
langfun/core/structured/prompting.py,sha256=
|
90
|
-
langfun/core/structured/prompting_test.py,sha256=
|
89
|
+
langfun/core/structured/prompting.py,sha256=cswl9c93edsYnXsZQmMzPpmqOuKnBzbgebTYBbSxwzo,8815
|
90
|
+
langfun/core/structured/prompting_test.py,sha256=rddf5qHN8Gm_JaNMmytwiVEBm-eZVJFLQO4GljUgR44,21700
|
91
91
|
langfun/core/structured/schema.py,sha256=Zy9y6Vq9DrFwcuP5o5VL_PvMCmzavF-nuDqyviBnaxk,25818
|
92
92
|
langfun/core/structured/schema_generation.py,sha256=U3nRQsqmMZg_qIVDh2fiY3K4JLfsAL1LcKzIFP1iXFg,5316
|
93
93
|
langfun/core/structured/schema_generation_test.py,sha256=RM9s71kMNg2jTePwInkiW9fK1ACN37eyPeF8OII-0zw,2950
|
@@ -103,8 +103,8 @@ langfun/core/templates/demonstration.py,sha256=vCrgYubdZM5Umqcgp8NUVGXgr4P_c-fik
|
|
103
103
|
langfun/core/templates/demonstration_test.py,sha256=SafcDQ0WgI7pw05EmPI2S4v1t3ABKzup8jReCljHeK4,2162
|
104
104
|
langfun/core/templates/selfplay.py,sha256=yhgrJbiYwq47TgzThmHrDQTF4nDrTI09CWGhuQPNv-s,2273
|
105
105
|
langfun/core/templates/selfplay_test.py,sha256=DYVrkk7uNKCqJGEHH31HssU2BPuMItU1vJLzfcXIlYg,2156
|
106
|
-
langfun-0.0.2.
|
107
|
-
langfun-0.0.2.
|
108
|
-
langfun-0.0.2.
|
109
|
-
langfun-0.0.2.
|
110
|
-
langfun-0.0.2.
|
106
|
+
langfun-0.0.2.dev20240508.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
107
|
+
langfun-0.0.2.dev20240508.dist-info/METADATA,sha256=-kG5pyZ6wAFJRP0hINq-JUhoEnKJsXrn2YCZbZuAFhY,3405
|
108
|
+
langfun-0.0.2.dev20240508.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
109
|
+
langfun-0.0.2.dev20240508.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
|
110
|
+
langfun-0.0.2.dev20240508.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|