langfun 0.1.2.dev202505130804__py3-none-any.whl → 0.1.2.dev202505150805__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/agentic/action.py +237 -108
- langfun/core/agentic/action_eval.py +4 -6
- langfun/core/agentic/action_test.py +15 -9
- langfun/core/coding/python/correction.py +4 -0
- langfun/core/console.py +6 -3
- langfun/core/language_model.py +4 -2
- langfun/core/llms/anthropic.py +4 -8
- langfun/core/llms/anthropic_test.py +38 -13
- langfun/core/llms/gemini.py +2 -2
- langfun/core/logging.py +3 -4
- langfun/core/structured/mapping.py +6 -0
- langfun/core/structured/querying.py +324 -91
- langfun/core/structured/querying_test.py +242 -2
- langfun/core/structured/schema.py +8 -0
- langfun/core/structured/schema_generation.py +1 -0
- langfun/core/structured/schema_test.py +6 -3
- {langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/METADATA +1 -1
- {langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/RECORD +21 -21
- {langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/WHEEL +1 -1
- {langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/licenses/LICENSE +0 -0
- {langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/top_level.txt +0 -0
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
import inspect
|
17
17
|
import math
|
18
|
+
import time
|
18
19
|
from typing import Any
|
19
20
|
import unittest
|
20
21
|
|
@@ -984,6 +985,19 @@ class LfQueryPythonV2Test(unittest.TestCase):
|
|
984
985
|
):
|
985
986
|
querying.query('Compute 1 + 2', int)
|
986
987
|
|
988
|
+
def test_not_allowed_code(self):
|
989
|
+
lm = fake.StaticResponse(
|
990
|
+
"""
|
991
|
+
class Foo:
|
992
|
+
pass
|
993
|
+
"""
|
994
|
+
)
|
995
|
+
with self.assertRaisesRegex(
|
996
|
+
mapping.MappingError,
|
997
|
+
'Class definition is not allowed',
|
998
|
+
):
|
999
|
+
querying.query('Compute 1 + 2', int, lm=lm)
|
1000
|
+
|
987
1001
|
def test_autofix(self):
|
988
1002
|
lm = fake.StaticSequence([
|
989
1003
|
'=1',
|
@@ -1319,7 +1333,9 @@ class QueryInvocationTest(unittest.TestCase):
|
|
1319
1333
|
|
1320
1334
|
self.assertEqual(queries[0].id, '123')
|
1321
1335
|
self.assertTrue(queries[0].has_error)
|
1322
|
-
self.assertIsInstance(queries[0].
|
1336
|
+
self.assertIsInstance(queries[0].error, pg.utils.ErrorInfo)
|
1337
|
+
self.assertIn('MappingError', queries[0].error.tag)
|
1338
|
+
self.assertIsNone(queries[0].output)
|
1323
1339
|
|
1324
1340
|
def test_kwargs(self):
|
1325
1341
|
lm = fake.StaticSequence([
|
@@ -1374,11 +1390,147 @@ class QueryInvocationTest(unittest.TestCase):
|
|
1374
1390
|
mapping_example = queries[0].as_mapping_example()
|
1375
1391
|
self.assertTrue(pg.eq(mapping_example.input, lf.Template('foo {{x}}', x=1)))
|
1376
1392
|
self.assertEqual(mapping_example.schema.spec.cls, Activity)
|
1377
|
-
self.
|
1393
|
+
self.assertEqual(mapping_example.output, 'Activity(description="hi"')
|
1378
1394
|
|
1379
1395
|
|
1380
1396
|
class TrackQueriesTest(unittest.TestCase):
|
1381
1397
|
|
1398
|
+
def test_query_without_schema(self):
|
1399
|
+
lm = fake.StaticSequence([
|
1400
|
+
'bar',
|
1401
|
+
])
|
1402
|
+
with querying.track_queries() as queries:
|
1403
|
+
querying.query('foo', lm=lm)
|
1404
|
+
self.assertEqual(len(queries), 1)
|
1405
|
+
self.assertEqual(queries[0].lm_response, 'bar')
|
1406
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1407
|
+
self.assertEqual(queries[0].lm_request, 'foo')
|
1408
|
+
self.assertIsNone(queries[0].schema)
|
1409
|
+
self.assertEqual(queries[0].protocol, 'python')
|
1410
|
+
self.assertEqual(queries[0].default, lf.RAISE_IF_HAS_ERROR)
|
1411
|
+
|
1412
|
+
self.assertEqual(queries[0].output, 'bar')
|
1413
|
+
self.assertFalse(queries[0].has_error)
|
1414
|
+
self.assertIsNone(queries[0].error)
|
1415
|
+
self.assertIsNotNone(queries[0].end_time)
|
1416
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1417
|
+
|
1418
|
+
def test_query_with_schema(self):
|
1419
|
+
lm = fake.StaticSequence([
|
1420
|
+
'Activity(description="hi")',
|
1421
|
+
])
|
1422
|
+
with querying.track_queries() as queries:
|
1423
|
+
querying.query('foo', Activity, lm=lm)
|
1424
|
+
self.assertEqual(len(queries), 1)
|
1425
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1426
|
+
self.assertIn('foo', queries[0].lm_request.text)
|
1427
|
+
self.assertIn('Please respond to ', queries[0].lm_request.text)
|
1428
|
+
self.assertEqual(queries[0].schema.spec.cls, Activity)
|
1429
|
+
self.assertEqual(queries[0].default, lf.RAISE_IF_HAS_ERROR)
|
1430
|
+
self.assertTrue(queries[0].protocol.startswith('python:'))
|
1431
|
+
|
1432
|
+
self.assertTrue(pg.eq(queries[0].output, Activity(description='hi')))
|
1433
|
+
self.assertFalse(queries[0].has_error)
|
1434
|
+
self.assertIsNone(queries[0].error)
|
1435
|
+
self.assertIsNotNone(queries[0].end_time)
|
1436
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1437
|
+
|
1438
|
+
def test_query_with_schema_and_default(self):
|
1439
|
+
lm = fake.StaticSequence([
|
1440
|
+
'Activity(description="hi")',
|
1441
|
+
])
|
1442
|
+
with querying.track_queries() as queries:
|
1443
|
+
querying.query('foo', Activity, default=None, lm=lm)
|
1444
|
+
self.assertEqual(len(queries), 1)
|
1445
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1446
|
+
self.assertIn('foo', queries[0].lm_request.text)
|
1447
|
+
self.assertIn('Please respond to ', queries[0].lm_request.text)
|
1448
|
+
self.assertEqual(queries[0].schema.spec.cls, Activity)
|
1449
|
+
self.assertIsNone(queries[0].default)
|
1450
|
+
self.assertTrue(queries[0].protocol.startswith('python:'))
|
1451
|
+
|
1452
|
+
self.assertTrue(pg.eq(queries[0].output, Activity(description='hi')))
|
1453
|
+
self.assertFalse(queries[0].has_error)
|
1454
|
+
self.assertIsNone(queries[0].error)
|
1455
|
+
self.assertIsNotNone(queries[0].end_time)
|
1456
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1457
|
+
|
1458
|
+
def test_oop_error_for_query_with_schema(self):
|
1459
|
+
lm = fake.StaticSequence([
|
1460
|
+
'Activity(description="hi"',
|
1461
|
+
])
|
1462
|
+
with (
|
1463
|
+
self.assertRaises(mapping.MappingError),
|
1464
|
+
querying.track_queries() as queries
|
1465
|
+
):
|
1466
|
+
querying.query('foo', Activity, lm=lm)
|
1467
|
+
self.assertEqual(len(queries), 1)
|
1468
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1469
|
+
self.assertIn('foo', queries[0].lm_request.text)
|
1470
|
+
self.assertIn('Please respond to ', queries[0].lm_request.text)
|
1471
|
+
self.assertEqual(queries[0].schema.spec.cls, Activity)
|
1472
|
+
self.assertEqual(queries[0].default, lf.RAISE_IF_HAS_ERROR)
|
1473
|
+
self.assertTrue(queries[0].protocol.startswith('python:'))
|
1474
|
+
|
1475
|
+
self.assertIsNone(queries[0].output)
|
1476
|
+
self.assertTrue(queries[0].has_error)
|
1477
|
+
self.assertTrue(queries[0].has_oop_error)
|
1478
|
+
self.assertIsNotNone(queries[0].error)
|
1479
|
+
self.assertIn('MappingError', queries[0].error.tag)
|
1480
|
+
self.assertIsNotNone(queries[0].end_time)
|
1481
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1482
|
+
|
1483
|
+
def test_oop_error_for_query_with_schema_and_default(self):
|
1484
|
+
lm = fake.StaticSequence([
|
1485
|
+
'Activity(description="hi"',
|
1486
|
+
])
|
1487
|
+
with querying.track_queries() as queries:
|
1488
|
+
querying.query('foo', Activity, default=1, lm=lm)
|
1489
|
+
|
1490
|
+
self.assertEqual(len(queries), 1)
|
1491
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1492
|
+
self.assertIn('foo', queries[0].lm_request.text)
|
1493
|
+
self.assertIn('Please respond to ', queries[0].lm_request.text)
|
1494
|
+
self.assertEqual(queries[0].schema.spec.cls, Activity)
|
1495
|
+
self.assertEqual(queries[0].default, 1)
|
1496
|
+
self.assertTrue(queries[0].protocol.startswith('python:'))
|
1497
|
+
|
1498
|
+
self.assertEqual(queries[0].output, 1)
|
1499
|
+
self.assertTrue(queries[0].has_error)
|
1500
|
+
self.assertTrue(queries[0].has_oop_error)
|
1501
|
+
self.assertIsNotNone(queries[0].error)
|
1502
|
+
self.assertIn('MappingError', queries[0].error.tag)
|
1503
|
+
self.assertIsNotNone(queries[0].end_time)
|
1504
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1505
|
+
|
1506
|
+
def test_lm_error_for_query_with_schema(self):
|
1507
|
+
class BadLLM(fake.StaticResponse):
|
1508
|
+
response = 'bad call'
|
1509
|
+
|
1510
|
+
def _sample(self, *args, **kwargs):
|
1511
|
+
raise ValueError('bad LLM')
|
1512
|
+
|
1513
|
+
with (
|
1514
|
+
self.assertRaises(ValueError),
|
1515
|
+
querying.track_queries() as queries
|
1516
|
+
):
|
1517
|
+
querying.query('foo', Activity, default=1, lm=BadLLM())
|
1518
|
+
|
1519
|
+
self.assertEqual(len(queries), 1)
|
1520
|
+
self.assertTrue(pg.eq(queries[0].input, lf.Template('foo')))
|
1521
|
+
self.assertIn('foo', queries[0].lm_request.text)
|
1522
|
+
self.assertIn('Please respond to ', queries[0].lm_request.text)
|
1523
|
+
self.assertEqual(queries[0].schema.spec.cls, Activity)
|
1524
|
+
self.assertEqual(queries[0].default, 1)
|
1525
|
+
self.assertTrue(queries[0].protocol.startswith('python:'))
|
1526
|
+
|
1527
|
+
self.assertIsNone(queries[0].output)
|
1528
|
+
self.assertTrue(queries[0].has_error)
|
1529
|
+
self.assertIsNotNone(queries[0].error)
|
1530
|
+
self.assertIn('ValueError', queries[0].error.tag)
|
1531
|
+
self.assertIsNotNone(queries[0].end_time)
|
1532
|
+
self.assertIsNotNone(queries[0].usage_summary)
|
1533
|
+
|
1382
1534
|
def test_include_child_scopes(self):
|
1383
1535
|
lm = fake.StaticSequence([
|
1384
1536
|
'bar',
|
@@ -1413,6 +1565,94 @@ class TrackQueriesTest(unittest.TestCase):
|
|
1413
1565
|
self.assertEqual(len(child_queries), 1)
|
1414
1566
|
self.assertIs(child_queries[0], queries[1])
|
1415
1567
|
|
1568
|
+
def test_callbacks(self):
|
1569
|
+
lm = fake.StaticSequence([
|
1570
|
+
'bar',
|
1571
|
+
])
|
1572
|
+
state = {}
|
1573
|
+
def start_callabck(query):
|
1574
|
+
self.assertFalse(query.is_completed)
|
1575
|
+
self.assertIsNone(query.end_time)
|
1576
|
+
elapse1 = query.elapse
|
1577
|
+
self.assertGreater(elapse1, 0)
|
1578
|
+
time.sleep(0.1)
|
1579
|
+
self.assertGreater(query.elapse, elapse1)
|
1580
|
+
self.assertIsNotNone(query.usage_summary)
|
1581
|
+
self.assertEqual(query.usage_summary.total.num_requests, 0)
|
1582
|
+
self.assertIsNone(query.lm_response)
|
1583
|
+
self.assertIsNone(query.output)
|
1584
|
+
self.assertIsNone(query.error)
|
1585
|
+
state['start'] = query
|
1586
|
+
|
1587
|
+
def end_callback(query):
|
1588
|
+
self.assertTrue(query.is_completed)
|
1589
|
+
self.assertIsNotNone(query.end_time)
|
1590
|
+
self.assertIsNotNone(query.usage_summary)
|
1591
|
+
self.assertEqual(query.usage_summary.total.num_requests, 1)
|
1592
|
+
self.assertIsNotNone(query.lm_response)
|
1593
|
+
self.assertIsNotNone(query.output)
|
1594
|
+
self.assertIsNone(query.error)
|
1595
|
+
state['end'] = query
|
1596
|
+
|
1597
|
+
with querying.track_queries(
|
1598
|
+
start_callabck=start_callabck, end_callabck=end_callback
|
1599
|
+
) as queries:
|
1600
|
+
querying.query('foo', lm=lm)
|
1601
|
+
self.assertIs(state['start'], queries[0])
|
1602
|
+
self.assertIs(state['end'], queries[0])
|
1603
|
+
|
1604
|
+
def test_callbacks_with_error(self):
|
1605
|
+
lm = fake.StaticSequence([
|
1606
|
+
'bar',
|
1607
|
+
])
|
1608
|
+
state = {}
|
1609
|
+
def start_callabck(query):
|
1610
|
+
self.assertFalse(query.is_completed)
|
1611
|
+
self.assertIsNone(query.end_time)
|
1612
|
+
self.assertIsNotNone(query.usage_summary)
|
1613
|
+
self.assertEqual(query.usage_summary.total.num_requests, 0)
|
1614
|
+
self.assertIsNone(query.lm_response)
|
1615
|
+
self.assertIsNone(query.output)
|
1616
|
+
self.assertIsNone(query.error)
|
1617
|
+
state['start'] = query
|
1618
|
+
|
1619
|
+
def end_callback(query):
|
1620
|
+
self.assertTrue(query.is_completed)
|
1621
|
+
self.assertIsNotNone(query.end_time)
|
1622
|
+
self.assertIsNotNone(query.usage_summary)
|
1623
|
+
self.assertEqual(query.usage_summary.total.num_requests, 1)
|
1624
|
+
self.assertIsNotNone(query.lm_response)
|
1625
|
+
self.assertIsNone(query.output)
|
1626
|
+
self.assertIsNotNone(query.error)
|
1627
|
+
state['end'] = query
|
1628
|
+
|
1629
|
+
with self.assertRaises(mapping.MappingError):
|
1630
|
+
with querying.track_queries(
|
1631
|
+
start_callabck=start_callabck, end_callabck=end_callback
|
1632
|
+
) as queries:
|
1633
|
+
querying.query('foo', int, lm=lm)
|
1634
|
+
self.assertIs(state['start'], queries[0])
|
1635
|
+
self.assertIs(state['end'], queries[0])
|
1636
|
+
|
1637
|
+
def test_track_with_autofix(self):
|
1638
|
+
lm = fake.StaticSequence([
|
1639
|
+
'=1',
|
1640
|
+
inspect.cleandoc("""
|
1641
|
+
CorrectedCode(
|
1642
|
+
corrected_code='1',
|
1643
|
+
)
|
1644
|
+
"""),
|
1645
|
+
])
|
1646
|
+
with querying.track_queries() as queries:
|
1647
|
+
querying.query('foo', int, lm=lm, autofix=1)
|
1648
|
+
self.assertEqual(len(queries), 2)
|
1649
|
+
self.assertTrue(queries[0].has_error)
|
1650
|
+
self.assertTrue(queries[0].has_oop_error)
|
1651
|
+
self.assertIsNone(queries[0].output)
|
1652
|
+
self.assertFalse(queries[1].has_error)
|
1653
|
+
self.assertEqual(queries[1].output.__class__.__name__, 'CorrectedCode')
|
1654
|
+
self.assertEqual(queries[1].output.corrected_code, '1')
|
1655
|
+
|
1416
1656
|
def test_exclude_child_scopes(self):
|
1417
1657
|
lm = fake.StaticSequence([
|
1418
1658
|
'bar',
|
@@ -722,6 +722,9 @@ class ValuePythonRepr(ValueRepr):
|
|
722
722
|
schema: Schema | None = None,
|
723
723
|
*,
|
724
724
|
additional_context: dict[str, Type[Any]] | None = None,
|
725
|
+
permission: pg.coding.CodePermission = (
|
726
|
+
pg.coding.CodePermission.ASSIGN | pg.coding.CodePermission.CALL
|
727
|
+
),
|
725
728
|
autofix=0,
|
726
729
|
autofix_lm: lf.LanguageModel = lf.contextual(),
|
727
730
|
**kwargs,
|
@@ -737,6 +740,7 @@ class ValuePythonRepr(ValueRepr):
|
|
737
740
|
global_vars=global_vars,
|
738
741
|
autofix=autofix,
|
739
742
|
autofix_lm=autofix_lm,
|
743
|
+
permission=permission,
|
740
744
|
)
|
741
745
|
|
742
746
|
|
@@ -744,6 +748,9 @@ def structure_from_python(
|
|
744
748
|
code: str,
|
745
749
|
*,
|
746
750
|
global_vars: dict[str, Any] | None = None,
|
751
|
+
permission: pg.coding.CodePermission = (
|
752
|
+
pg.coding.CodePermission.ASSIGN | pg.coding.CodePermission.CALL
|
753
|
+
),
|
747
754
|
autofix=0,
|
748
755
|
autofix_lm: lf.LanguageModel = lf.contextual(),
|
749
756
|
) -> Any:
|
@@ -769,6 +776,7 @@ def structure_from_python(
|
|
769
776
|
sandbox=False,
|
770
777
|
max_attempts=autofix,
|
771
778
|
lm=autofix_lm,
|
779
|
+
permission=permission,
|
772
780
|
)
|
773
781
|
|
774
782
|
|
@@ -27,6 +27,7 @@ class GenerateClass(mapping.Mapping):
|
|
27
27
|
input_title = 'GENERATION_CONTEXT'
|
28
28
|
context_title = 'CLASS_NAME'
|
29
29
|
output_title = 'OUTPUT_CLASS'
|
30
|
+
permission = pg.coding.CodePermission.ALL
|
30
31
|
|
31
32
|
preamble: lf.Template = lf.Template("""
|
32
33
|
Help generate a class based on the last {{ context_title }} and {{ input_title }}.
|
@@ -149,7 +149,8 @@ class SchemaTest(unittest.TestCase):
|
|
149
149
|
class C(B):
|
150
150
|
pass
|
151
151
|
""",
|
152
|
-
global_vars=dict(B=B)
|
152
|
+
global_vars=dict(B=B),
|
153
|
+
permission=pg.coding.CodePermission.ALL,
|
153
154
|
)
|
154
155
|
self.assertEqual(v.__module__, 'builtins')
|
155
156
|
self.assertEqual(schema.class_dependencies(), [Foo, A, Bar, X, B])
|
@@ -175,7 +176,8 @@ class SchemaTest(unittest.TestCase):
|
|
175
176
|
class CC(BB):
|
176
177
|
pass
|
177
178
|
""",
|
178
|
-
global_vars=dict(BB=BB)
|
179
|
+
global_vars=dict(BB=BB),
|
180
|
+
permission=pg.coding.CodePermission.ALL,
|
179
181
|
)
|
180
182
|
self.assertEqual(v.__module__, 'builtins')
|
181
183
|
schema = schema_lib.Schema([AA])
|
@@ -818,7 +820,8 @@ class ValuePythonReprTest(unittest.TestCase):
|
|
818
820
|
x: Dict[str, Any]
|
819
821
|
y: Optional[Sequence[str]]
|
820
822
|
z: Union[int, List[int], Tuple[int]]
|
821
|
-
"""
|
823
|
+
""",
|
824
|
+
permission=pg.coding.CodePermission.ALL,
|
822
825
|
)
|
823
826
|
)
|
824
827
|
)
|
@@ -4,13 +4,13 @@ langfun/core/component.py,sha256=g1kQM0bryYYYWVDrSMnHfc74wIBbpfe5_B3s-UIP5GE,302
|
|
4
4
|
langfun/core/component_test.py,sha256=0CxTgjAud3aj8wBauFhG2FHDqrxCTl4OI4gzQTad-40,9254
|
5
5
|
langfun/core/concurrent.py,sha256=zY-pXqlGqss_GI20tM1gXvyW8QepVPUuFNmutcIdhbI,32760
|
6
6
|
langfun/core/concurrent_test.py,sha256=roMFze0EKuyPbmG6DZzz8K8VGsZwWzc0F1uJZTFROC4,17572
|
7
|
-
langfun/core/console.py,sha256=
|
7
|
+
langfun/core/console.py,sha256=cLQEf84aDxItA9fStJV22xJch0TqFLNf9hLqwJ0RHmU,2652
|
8
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=CDn-gJCa5EnjN7cotAVCfSCbuzddq2o-HzEt7kV8HbY,8882
|
11
|
-
langfun/core/language_model.py,sha256=
|
11
|
+
langfun/core/language_model.py,sha256=GCvbu749TviZyLQSNunO0rKeDAb7E_6G4rzqQJerN_E,47913
|
12
12
|
langfun/core/language_model_test.py,sha256=iA5uo7rIj2jAtCYzMzhyNg1fWqE2Onn60bOO58q72C0,36454
|
13
|
-
langfun/core/logging.py,sha256=
|
13
|
+
langfun/core/logging.py,sha256=jwPamwFYozrs3Tsds8xXG23PhfqODTZ2Au7poTH3yxE,9121
|
14
14
|
langfun/core/logging_test.py,sha256=vbVGOQxwMmVSiFfbt2897gUt-8nqDpV64jCAeUG_q5U,6924
|
15
15
|
langfun/core/memory.py,sha256=vyXVvfvSdLLJAzdIupnbn3k26OgclCx-OJ7gddS5e1Y,2070
|
16
16
|
langfun/core/message.py,sha256=qUJZ9NfrlYG3aU_K2ud236gdTnvZ7Qw2T4pv4hI9ivg,32817
|
@@ -26,13 +26,13 @@ langfun/core/subscription_test.py,sha256=Y4ZdbZEwm83YNZBxHff0QR4QUa4rdaNXA3_jfIc
|
|
26
26
|
langfun/core/template.py,sha256=jNhYSrbLIn9kZOa03w5QZbyjgfnzJzE_ZrrMvvWY4t4,24929
|
27
27
|
langfun/core/template_test.py,sha256=AQv_m9qE93WxhEhSlm1xaBgB4hu0UVtA53dljngkUW0,17090
|
28
28
|
langfun/core/agentic/__init__.py,sha256=qR3jlfUO4rhIoYdRDLz-d22YZf3FvU4FW88vsjiGDQQ,1224
|
29
|
-
langfun/core/agentic/action.py,sha256=
|
30
|
-
langfun/core/agentic/action_eval.py,sha256=
|
29
|
+
langfun/core/agentic/action.py,sha256=WEKCaqtGVYKHARvY0Nqichc_hMKkJUYarrUky-DsfHk,50709
|
30
|
+
langfun/core/agentic/action_eval.py,sha256=YTilyUEkJl_8FVMgdfO17PurWWaEJ6oA15CuefJJRLk,4887
|
31
31
|
langfun/core/agentic/action_eval_test.py,sha256=7AkOwNbUX-ZgR1R0a7bvUZ5abNTUV7blf_8Mnrwb-II,2811
|
32
|
-
langfun/core/agentic/action_test.py,sha256=
|
32
|
+
langfun/core/agentic/action_test.py,sha256=FO42Ab_riHHJxD6iJensskDCMx1-j7blzPr3fFaIfwc,15885
|
33
33
|
langfun/core/coding/__init__.py,sha256=5utju_fwEsImaiftx4oXKl9FAM8p281k8-Esdh_-m1w,835
|
34
34
|
langfun/core/coding/python/__init__.py,sha256=4ByknuoNU-mOIHwHKnTtmo6oD64oMFtlqPlYWmA5Wic,1736
|
35
|
-
langfun/core/coding/python/correction.py,sha256=
|
35
|
+
langfun/core/coding/python/correction.py,sha256=4PD76Xfv36Xrm8Ji3-GgGDNImtcDqWfMw3z6ircJMlM,7285
|
36
36
|
langfun/core/coding/python/correction_test.py,sha256=sie88lAbsV15bvkRcYC88pgToybZYXI32Xmg_ym5V1A,4175
|
37
37
|
langfun/core/coding/python/execution.py,sha256=tsXnJ-11RqNDro0C-6LwbHkqPuNVJ_cLxAq8-C5Wz20,4442
|
38
38
|
langfun/core/coding/python/execution_test.py,sha256=NynCGNP0gZ08fqmmQIJjJu6HmhkNOSkgWUXUCNQ0_yg,5990
|
@@ -82,8 +82,8 @@ langfun/core/eval/v2/reporting_test.py,sha256=hcPJJaMtPulqERvHYTpId83WXdqDKnnexm
|
|
82
82
|
langfun/core/eval/v2/runners.py,sha256=iqbH4jMtnNMhfuv1eHaxJmk1Vvsrz-sAJJFP8U44-tA,16758
|
83
83
|
langfun/core/eval/v2/runners_test.py,sha256=DO3xV0sBNB6n65j41xx2i7gqUCJcPF37DFZLEjrmISg,11987
|
84
84
|
langfun/core/llms/__init__.py,sha256=QWxRhzVn_vgJvdmW_xs5PcPuDbHsUxTU94YyV4Ofl34,8684
|
85
|
-
langfun/core/llms/anthropic.py,sha256=
|
86
|
-
langfun/core/llms/anthropic_test.py,sha256=
|
85
|
+
langfun/core/llms/anthropic.py,sha256=dCkTYvwb_wWWeKQNzMtRfA6kno1E_bO9PBHSNqL0wiw,22080
|
86
|
+
langfun/core/llms/anthropic_test.py,sha256=qA9vByp_cwwXNlXzcwHpPWFnO9lfFo8NKfDi5nBNqgI,9052
|
87
87
|
langfun/core/llms/azure_openai.py,sha256=-KkSLaR54MlsIqz_XIwv0TnsBnvNTAxnjA2Q2O2u5KM,2733
|
88
88
|
langfun/core/llms/azure_openai_test.py,sha256=lkMZkQdJBV97fTM4C4z8qNfvr6spgiN5G4hvVUIVr0M,1735
|
89
89
|
langfun/core/llms/compositional.py,sha256=csW_FLlgL-tpeyCOTVvfUQkMa_zCN5Y2I-YbSNuK27U,2872
|
@@ -92,7 +92,7 @@ langfun/core/llms/deepseek.py,sha256=jvTxdXPr-vH6HNakn_Ootx1heDg8Fen2FUkUW36bpCs
|
|
92
92
|
langfun/core/llms/deepseek_test.py,sha256=DvROWPlDuow5E1lfoSkhyGt_ELA19JoQoDsTnRgDtTg,1847
|
93
93
|
langfun/core/llms/fake.py,sha256=xmgCkk9y0I4x0IT32SZ9_OT27aLadXH8PRiYNo5VTd4,3265
|
94
94
|
langfun/core/llms/fake_test.py,sha256=2h13qkwEz_JR0mtUDPxdAhQo7MueXaFSwsD2DIRDW9g,7653
|
95
|
-
langfun/core/llms/gemini.py,sha256=
|
95
|
+
langfun/core/llms/gemini.py,sha256=JCxwTDdOBBhtME_s-wxV3-fOREIkQ-uMOVYFg09RmfQ,25589
|
96
96
|
langfun/core/llms/gemini_test.py,sha256=Ve9X2Wvwu9wVFHpKZDP-qoM1_hzB4kgt6_HR9wxtNkg,7592
|
97
97
|
langfun/core/llms/google_genai.py,sha256=YjvyasibmXYPFr_sxdrIdHDPHfaNzMCiJjWJs0iQyms,5188
|
98
98
|
langfun/core/llms/google_genai_test.py,sha256=NKNtpebArQ9ZR7Qsnhd2prFIpMjleojy6o6VMXkJ1zY,1502
|
@@ -133,16 +133,16 @@ langfun/core/structured/description.py,sha256=6BztYOiucPkF4CrTQtPLPJo1gN2dwnKmaJ
|
|
133
133
|
langfun/core/structured/description_test.py,sha256=UxaXnKKP7TnyPDPUyf3U-zPE0TvLlIP6DGr8thjcePw,7365
|
134
134
|
langfun/core/structured/function_generation.py,sha256=g7AOR_e8HxFU6n6Df750aGkgMgV1KExLZMAz0yd5Agg,8555
|
135
135
|
langfun/core/structured/function_generation_test.py,sha256=LaXYDXf9GlqUrR6v_gtmK_H4kxzonmU7SYbn7XXMgjU,12128
|
136
|
-
langfun/core/structured/mapping.py,sha256=
|
136
|
+
langfun/core/structured/mapping.py,sha256=iraHpcEeF_iuEX2eoTsLGwTHHvxqp2gNDjoMf98l0Kk,13941
|
137
137
|
langfun/core/structured/mapping_test.py,sha256=OntYvfDitAf0tAnzQty3YS90vyEn6FY1Mi93r_ViEk8,9594
|
138
138
|
langfun/core/structured/parsing.py,sha256=MGvI7ypXlwfzr5XB8_TFU9Ei0_5reYqkWkv64eAy0EA,12015
|
139
139
|
langfun/core/structured/parsing_test.py,sha256=V8Cj1tJK4Lxv_b0YQj6-2hzXZgnYNBa2JR7rOLRBKoQ,22346
|
140
|
-
langfun/core/structured/querying.py,sha256=
|
141
|
-
langfun/core/structured/querying_test.py,sha256=
|
142
|
-
langfun/core/structured/schema.py,sha256=
|
143
|
-
langfun/core/structured/schema_generation.py,sha256=
|
140
|
+
langfun/core/structured/querying.py,sha256=7QvM4TS57O5kDCty6H8leWXfZxcN5ugWV-4bmdDABC0,38006
|
141
|
+
langfun/core/structured/querying_test.py,sha256=AXIVamBeKvby10zogjZl_wqtBopbpud-NNEZlqfLyqY,49766
|
142
|
+
langfun/core/structured/schema.py,sha256=r_ewdRMsALVOdnvGSeYBcz2-VJ_3_nMxY4GtzUHCYUU,29111
|
143
|
+
langfun/core/structured/schema_generation.py,sha256=pEWeTd8tQWYnEHukas6GVl4uGerLsQ2aNybtnm4Qgxc,5352
|
144
144
|
langfun/core/structured/schema_generation_test.py,sha256=RM9s71kMNg2jTePwInkiW9fK1ACN37eyPeF8OII-0zw,2950
|
145
|
-
langfun/core/structured/schema_test.py,sha256=
|
145
|
+
langfun/core/structured/schema_test.py,sha256=H42ZZdPi8CIv7WzrnXwMwQQaPQxlmDSY31pfqQs-Xqw,26567
|
146
146
|
langfun/core/structured/scoring.py,sha256=Y7Jqs5VVjUQLF_9Z1uIY_dw5zasv2FF52Cz-cxGMsro,5857
|
147
147
|
langfun/core/structured/scoring_test.py,sha256=QvlwDAzwuamKL5tCotm1L3Sx0cs3idoNK4aIEhaO4Yk,2272
|
148
148
|
langfun/core/structured/tokenization.py,sha256=-b4_693quHeYn2AqndwucuXNmhd5NVXVTU3mmDane98,2189
|
@@ -156,8 +156,8 @@ langfun/core/templates/demonstration.py,sha256=vCrgYubdZM5Umqcgp8NUVGXgr4P_c-fik
|
|
156
156
|
langfun/core/templates/demonstration_test.py,sha256=SafcDQ0WgI7pw05EmPI2S4v1t3ABKzup8jReCljHeK4,2162
|
157
157
|
langfun/core/templates/selfplay.py,sha256=yhgrJbiYwq47TgzThmHrDQTF4nDrTI09CWGhuQPNv-s,2273
|
158
158
|
langfun/core/templates/selfplay_test.py,sha256=Ot__1P1M8oJfoTp-M9-PQ6HUXqZKyMwvZ5f7yQ3yfyM,2326
|
159
|
-
langfun-0.1.2.
|
160
|
-
langfun-0.1.2.
|
161
|
-
langfun-0.1.2.
|
162
|
-
langfun-0.1.2.
|
163
|
-
langfun-0.1.2.
|
159
|
+
langfun-0.1.2.dev202505150805.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
160
|
+
langfun-0.1.2.dev202505150805.dist-info/METADATA,sha256=O9L1gbEi6xg41c0yHT45Pla-2HS9u_5f4f04flDUcIw,8178
|
161
|
+
langfun-0.1.2.dev202505150805.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
162
|
+
langfun-0.1.2.dev202505150805.dist-info/top_level.txt,sha256=RhlEkHxs1qtzmmtWSwYoLVJAc1YrbPtxQ52uh8Z9VvY,8
|
163
|
+
langfun-0.1.2.dev202505150805.dist-info/RECORD,,
|
{langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{langfun-0.1.2.dev202505130804.dist-info → langfun-0.1.2.dev202505150805.dist-info}/top_level.txt
RENAMED
File without changes
|