langfun 0.1.2.dev202510240805__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.
- langfun/core/concurrent_test.py +1 -0
- langfun/core/data/conversion/anthropic_test.py +8 -6
- langfun/core/data/conversion/gemini_test.py +12 -9
- langfun/core/data/conversion/openai.py +134 -30
- langfun/core/data/conversion/openai_test.py +161 -17
- langfun/core/eval/v2/progress_tracking_test.py +3 -0
- langfun/core/langfunc_test.py +4 -2
- langfun/core/language_model.py +6 -6
- langfun/core/language_model_test.py +9 -3
- langfun/core/llms/__init__.py +2 -1
- langfun/core/llms/cache/base.py +3 -1
- langfun/core/llms/cache/in_memory_test.py +14 -4
- langfun/core/llms/deepseek.py +1 -1
- langfun/core/llms/groq.py +1 -1
- langfun/core/llms/llama_cpp.py +1 -1
- langfun/core/llms/openai.py +7 -2
- langfun/core/llms/openai_compatible.py +134 -27
- langfun/core/llms/openai_compatible_test.py +207 -20
- langfun/core/llms/openai_test.py +0 -2
- langfun/core/llms/vertexai.py +2 -2
- langfun/core/message.py +78 -44
- langfun/core/message_test.py +56 -81
- langfun/core/modalities/__init__.py +8 -0
- langfun/core/modalities/mime.py +9 -0
- langfun/core/modality.py +104 -27
- langfun/core/modality_test.py +42 -12
- langfun/core/sampling_test.py +20 -4
- langfun/core/structured/completion.py +2 -7
- langfun/core/structured/completion_test.py +23 -43
- langfun/core/structured/mapping.py +4 -13
- langfun/core/structured/querying.py +13 -11
- langfun/core/structured/querying_test.py +65 -29
- langfun/core/template.py +39 -13
- langfun/core/template_test.py +83 -17
- langfun/env/event_handlers/metric_writer_test.py +3 -3
- langfun/env/load_balancers_test.py +2 -2
- {langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/METADATA +1 -1
- {langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/RECORD +41 -41
- {langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/WHEEL +0 -0
- {langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/licenses/LICENSE +0 -0
- {langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/top_level.txt +0 -0
|
@@ -249,35 +249,60 @@ class QueryTest(unittest.TestCase):
|
|
|
249
249
|
|
|
250
250
|
def test_root_modality_to_structure_render(self):
|
|
251
251
|
lm = fake.StaticResponse('1')
|
|
252
|
+
image = modalities.Image.from_bytes(b'mock_image')
|
|
252
253
|
self.assert_render(
|
|
253
|
-
|
|
254
|
+
image,
|
|
254
255
|
int,
|
|
255
256
|
lm=lm,
|
|
256
|
-
expected_snippet='\n\nREQUEST:\n <<[[
|
|
257
|
+
expected_snippet=f'\n\nREQUEST:\n <<[[{image.id}]]>>\n\n',
|
|
257
258
|
expected_modalities=1,
|
|
258
259
|
)
|
|
259
260
|
|
|
260
261
|
def test_root_modality_to_str_render(self):
|
|
261
262
|
lm = fake.StaticResponse('1')
|
|
263
|
+
modality = modalities.Image.from_bytes(b'mock_image')
|
|
262
264
|
self.assert_render(
|
|
263
|
-
|
|
265
|
+
modality,
|
|
264
266
|
None,
|
|
265
267
|
lm=lm,
|
|
266
|
-
expected_snippet='<<[[
|
|
268
|
+
expected_snippet=f'<<[[{modality.id}]]>>',
|
|
267
269
|
exact_match=True,
|
|
268
270
|
expected_modalities=1,
|
|
269
271
|
)
|
|
270
272
|
|
|
271
273
|
def test_str_with_modality_to_str_render(self):
|
|
272
274
|
lm = fake.StaticResponse('A cat and a mouse.')
|
|
275
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
276
|
+
mouse_image = modalities.Image.from_bytes(b'mouse_image')
|
|
273
277
|
self.assert_render(
|
|
274
278
|
'What are these? {{this_image}} and {{that_image}}',
|
|
275
279
|
None,
|
|
276
|
-
this_image=
|
|
277
|
-
that_image=
|
|
280
|
+
this_image=cat_image,
|
|
281
|
+
that_image=mouse_image,
|
|
278
282
|
lm=lm,
|
|
279
283
|
expected_snippet=(
|
|
280
|
-
'What are these? <<[[
|
|
284
|
+
f'What are these? <<[[{cat_image.id}]]>> and '
|
|
285
|
+
f'<<[[{mouse_image.id}]]>>'
|
|
286
|
+
),
|
|
287
|
+
exact_match=True,
|
|
288
|
+
expected_modalities=2,
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
def test_message_with_modality_to_str_render(self):
|
|
292
|
+
lm = fake.StaticResponse('A cat and a mouse.')
|
|
293
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
294
|
+
mouse_image = modalities.Image.from_bytes(b'mouse_image')
|
|
295
|
+
self.assert_render(
|
|
296
|
+
lf.Template(
|
|
297
|
+
'What are these? {{this_image}} and {{that_image}}',
|
|
298
|
+
this_image=cat_image,
|
|
299
|
+
that_image=mouse_image,
|
|
300
|
+
).render(),
|
|
301
|
+
None,
|
|
302
|
+
lm=lm,
|
|
303
|
+
expected_snippet=(
|
|
304
|
+
f'What are these? <<[[{cat_image.id}]]>> and '
|
|
305
|
+
f'<<[[{mouse_image.id}]]>>'
|
|
281
306
|
),
|
|
282
307
|
exact_match=True,
|
|
283
308
|
expected_modalities=2,
|
|
@@ -285,33 +310,33 @@ class QueryTest(unittest.TestCase):
|
|
|
285
310
|
|
|
286
311
|
def test_structure_with_modality_to_str_render(self):
|
|
287
312
|
lm = fake.StaticResponse('A cat and a mouse.')
|
|
313
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
314
|
+
mouse_image = modalities.Image.from_bytes(b'mouse_image')
|
|
288
315
|
self.assert_render(
|
|
289
|
-
[
|
|
290
|
-
modalities.Image.from_bytes(b'cat_image'),
|
|
291
|
-
modalities.Image.from_bytes(b'mouse_image'),
|
|
292
|
-
],
|
|
316
|
+
[cat_image, mouse_image],
|
|
293
317
|
None,
|
|
294
318
|
lm=lm,
|
|
295
|
-
expected_snippet=
|
|
319
|
+
expected_snippet=(
|
|
320
|
+
f'`[<<[[{cat_image.id}]]>>, <<[[{mouse_image.id}]]>>]`'
|
|
321
|
+
),
|
|
296
322
|
exact_match=True,
|
|
297
323
|
expected_modalities=2,
|
|
298
324
|
)
|
|
299
325
|
|
|
300
326
|
def test_structure_with_modality_to_structure_render(self):
|
|
301
327
|
lm = fake.StaticResponse('["cat", "mouse"]')
|
|
328
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
329
|
+
mouse_image = modalities.Image.from_bytes(b'mouse_image')
|
|
302
330
|
self.assert_render(
|
|
303
|
-
[
|
|
304
|
-
modalities.Image.from_bytes(b'cat_image'),
|
|
305
|
-
modalities.Image.from_bytes(b'mouse_image'),
|
|
306
|
-
],
|
|
331
|
+
[cat_image, mouse_image],
|
|
307
332
|
list[str],
|
|
308
333
|
lm=lm,
|
|
309
|
-
expected_snippet=inspect.cleandoc("""
|
|
334
|
+
expected_snippet=inspect.cleandoc(f"""
|
|
310
335
|
REQUEST:
|
|
311
336
|
```python
|
|
312
337
|
[
|
|
313
|
-
<<[[
|
|
314
|
-
<<[[
|
|
338
|
+
<<[[{cat_image.id}]]>>,
|
|
339
|
+
<<[[{mouse_image.id}]]>>
|
|
315
340
|
]
|
|
316
341
|
```
|
|
317
342
|
"""),
|
|
@@ -320,25 +345,25 @@ class QueryTest(unittest.TestCase):
|
|
|
320
345
|
|
|
321
346
|
def test_structure_with_modality_and_examples_to_structure_render(self):
|
|
322
347
|
lm = fake.StaticResponse('["cat", "mouse"]')
|
|
348
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
349
|
+
mouse_image = modalities.Image.from_bytes(b'mouse_image')
|
|
350
|
+
dog_image = modalities.Image.from_bytes(b'dog_image')
|
|
323
351
|
self.assert_render(
|
|
324
|
-
[
|
|
325
|
-
modalities.Image.from_bytes(b'cat_image'),
|
|
326
|
-
modalities.Image.from_bytes(b'mouse_image'),
|
|
327
|
-
],
|
|
352
|
+
[cat_image, mouse_image],
|
|
328
353
|
list[str],
|
|
329
354
|
examples=[
|
|
330
355
|
mapping.MappingExample(
|
|
331
|
-
input=[
|
|
356
|
+
input=[dog_image],
|
|
332
357
|
schema=list[str],
|
|
333
358
|
output=['dog'],
|
|
334
359
|
),
|
|
335
360
|
],
|
|
336
361
|
lm=lm,
|
|
337
|
-
expected_snippet=inspect.cleandoc("""
|
|
362
|
+
expected_snippet=inspect.cleandoc(f"""
|
|
338
363
|
REQUEST:
|
|
339
364
|
```python
|
|
340
365
|
[
|
|
341
|
-
<<[[
|
|
366
|
+
<<[[{dog_image.id}]]>>
|
|
342
367
|
]
|
|
343
368
|
```
|
|
344
369
|
|
|
@@ -356,8 +381,8 @@ class QueryTest(unittest.TestCase):
|
|
|
356
381
|
REQUEST:
|
|
357
382
|
```python
|
|
358
383
|
[
|
|
359
|
-
<<[[
|
|
360
|
-
<<[[
|
|
384
|
+
<<[[{cat_image.id}]]>>,
|
|
385
|
+
<<[[{mouse_image.id}]]>>
|
|
361
386
|
]
|
|
362
387
|
```
|
|
363
388
|
|
|
@@ -369,6 +394,17 @@ class QueryTest(unittest.TestCase):
|
|
|
369
394
|
expected_modalities=3,
|
|
370
395
|
)
|
|
371
396
|
|
|
397
|
+
def test_query_with_modality_output(self):
|
|
398
|
+
cat_image = modalities.Image.from_bytes(b'cat_image')
|
|
399
|
+
lm = fake.StaticResponse(
|
|
400
|
+
lf.Template('Here you go: {{image}}', image=cat_image).render(
|
|
401
|
+
message_cls=lf.AIMessage
|
|
402
|
+
)
|
|
403
|
+
)
|
|
404
|
+
response = querying.query('Generate a cat image', lm=lm)
|
|
405
|
+
self.assertIsInstance(response, lf.AIMessage)
|
|
406
|
+
self.assertEqual(response.modalities(), [cat_image])
|
|
407
|
+
|
|
372
408
|
def test_multiple_queries(self):
|
|
373
409
|
self.assertEqual(
|
|
374
410
|
querying.query(
|
|
@@ -545,7 +581,7 @@ class QueryTest(unittest.TestCase):
|
|
|
545
581
|
)
|
|
546
582
|
).input,
|
|
547
583
|
)
|
|
548
|
-
self.
|
|
584
|
+
self.assertEqual(len(output.referred_modalities), 1)
|
|
549
585
|
|
|
550
586
|
def test_query_and_reduce(self):
|
|
551
587
|
self.assertEqual(
|
langfun/core/template.py
CHANGED
|
@@ -171,6 +171,7 @@ class Template(
|
|
|
171
171
|
|
|
172
172
|
# Last render output.
|
|
173
173
|
self._cached_render_output = None
|
|
174
|
+
self._referred_modalities = None
|
|
174
175
|
|
|
175
176
|
@property
|
|
176
177
|
def render_output(self) -> message_lib.Message | None:
|
|
@@ -322,24 +323,46 @@ class Template(
|
|
|
322
323
|
compact=True,
|
|
323
324
|
python_format=True,
|
|
324
325
|
):
|
|
325
|
-
|
|
326
|
-
#
|
|
326
|
+
|
|
327
|
+
# Capture the modality objects whose references are being
|
|
328
|
+
# rendered
|
|
327
329
|
# in the template.
|
|
328
|
-
with modality.
|
|
329
|
-
|
|
330
|
+
with modality.capture_rendered_modalities() as modality_refs:
|
|
331
|
+
|
|
332
|
+
# Natural language formattable objects will be returned in
|
|
333
|
+
# natural language when they are directly returned as rendering
|
|
334
|
+
# elements in the template.
|
|
335
|
+
with modality.format_modality_as_ref():
|
|
336
|
+
rendered_text = self._template.render(**inputs)
|
|
330
337
|
|
|
331
|
-
|
|
332
|
-
|
|
338
|
+
# Carry the modality references passed from the constructor.
|
|
339
|
+
# This is to support modality objects that is already rendered
|
|
340
|
+
# in the template string.
|
|
341
|
+
if self._referred_modalities:
|
|
342
|
+
modality_refs.update(self._referred_modalities)
|
|
333
343
|
|
|
334
344
|
if self.clean:
|
|
335
345
|
rendered_text = rendered_text.strip()
|
|
336
346
|
|
|
337
|
-
metadata.
|
|
338
|
-
|
|
339
|
-
|
|
347
|
+
# Fill message metadata.
|
|
348
|
+
metadata = {
|
|
349
|
+
'__template_input__': {
|
|
350
|
+
k: pg.Ref(v) for k, v in inputs.items()
|
|
351
|
+
if not inspect.ismethod(v)
|
|
352
|
+
},
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
# Carry additional metadata.
|
|
356
|
+
# TODO(daiyip): Consider to put additional metadata into a separate
|
|
357
|
+
# key under `metadata`.
|
|
358
|
+
metadata.update(self.additional_metadata())
|
|
340
359
|
|
|
341
360
|
# Fill the variables for rendering the template as metadata.
|
|
342
|
-
message = message_cls(
|
|
361
|
+
message = message_cls(
|
|
362
|
+
text=rendered_text,
|
|
363
|
+
referred_modalities=modality_refs,
|
|
364
|
+
metadata=metadata
|
|
365
|
+
)
|
|
343
366
|
|
|
344
367
|
# Tag input as rendered message.
|
|
345
368
|
message.tag(message_lib.Message.TAG_RENDERED)
|
|
@@ -518,10 +541,13 @@ class Template(
|
|
|
518
541
|
if isinstance(value, str):
|
|
519
542
|
return cls(template_str=value, **kwargs)
|
|
520
543
|
if isinstance(value, message_lib.Message):
|
|
521
|
-
|
|
522
|
-
|
|
544
|
+
for k, v in value.metadata.sym_items(): # pylint: disable=attribute-error
|
|
545
|
+
kwargs[_ADDITIONAL_METADATA_PREFIX + k] = v
|
|
546
|
+
t = cls(template_str=value.text, **kwargs)
|
|
547
|
+
t._referred_modalities = value.referred_modalities
|
|
548
|
+
return t
|
|
523
549
|
if isinstance(value, Template):
|
|
524
|
-
lfun = cls(template_str=value.template_str, **kwargs)
|
|
550
|
+
lfun = cls(template_str=value.template_str, **kwargs) # pylint: disable=attribute-error
|
|
525
551
|
# So lfun could acccess all attributes from value.
|
|
526
552
|
lfun.sym_setparent(value)
|
|
527
553
|
return lfun
|
langfun/core/template_test.py
CHANGED
|
@@ -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.
|
|
286
|
-
self.assertEqual(v.x.y.
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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(
|
|
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=
|
|
519
|
-
self.assertEqual(
|
|
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=
|
|
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.
|
|
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
|
-
|
|
56
|
+
pass
|
|
57
57
|
|
|
58
58
|
def shutdown(self) -> None:
|
|
59
|
-
|
|
59
|
+
pass
|
|
60
60
|
|
|
61
61
|
def start_session(self, session_id: str) -> None:
|
|
62
62
|
self._session_id = session_id
|
|
@@ -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=
|
|
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=
|
|
20
|
-
langfun/core/language_model.py,sha256=
|
|
21
|
-
langfun/core/language_model_test.py,sha256=
|
|
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=
|
|
26
|
-
langfun/core/message_test.py,sha256=
|
|
27
|
-
langfun/core/modality.py,sha256=
|
|
28
|
-
langfun/core/modality_test.py,sha256=
|
|
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=
|
|
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=
|
|
36
|
-
langfun/core/template_test.py,sha256=
|
|
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,11 +54,11 @@ 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=
|
|
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=
|
|
60
|
-
langfun/core/data/conversion/openai.py,sha256=
|
|
61
|
-
langfun/core/data/conversion/openai_test.py,sha256=
|
|
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
64
|
langfun/core/eval/base_test.py,sha256=jbl5NMKk9QUsp8R-OeTJ4dEefQdK8JL1lIouuihglbc,27191
|
|
@@ -85,19 +85,19 @@ 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=
|
|
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=
|
|
93
|
+
langfun/core/llms/__init__.py,sha256=UJ1UE41JPgkS56uNzJQ5ag9VWJN3OJuNna7aFR4CyOM,10184
|
|
94
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=
|
|
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
|
|
@@ -105,22 +105,22 @@ langfun/core/llms/gemini.py,sha256=-DL5PebzaTjz7rTFw_1RC5O1aE4EYSv3oNsM65YKCoo,3
|
|
|
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=
|
|
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=
|
|
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=
|
|
113
|
-
langfun/core/llms/openai_compatible.py,sha256=
|
|
114
|
-
langfun/core/llms/openai_compatible_test.py,sha256=
|
|
115
|
-
langfun/core/llms/openai_test.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
147
|
-
langfun/core/structured/completion_test.py,sha256
|
|
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=
|
|
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=
|
|
157
|
-
langfun/core/structured/querying_test.py,sha256=
|
|
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=
|
|
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=
|
|
191
|
-
langfun-0.1.2.
|
|
192
|
-
langfun-0.1.2.
|
|
193
|
-
langfun-0.1.2.
|
|
194
|
-
langfun-0.1.2.
|
|
195
|
-
langfun-0.1.2.
|
|
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,,
|
|
File without changes
|
{langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{langfun-0.1.2.dev202510240805.dist-info → langfun-0.1.2.dev202510250803.dist-info}/top_level.txt
RENAMED
|
File without changes
|