@@ -1390,150 +1390,3 @@ def test_generate_response_from_error_handles_streaming_response_failure() -> No
13901390 assert metadata ["body" ] is None
13911391 assert metadata ["headers" ] == {"content-type" : "application/json" }
13921392 assert metadata ["status_code" ] == 400
1393-
1394-
1395- class FakeChatModelWithSecrets (BaseChatModel ):
1396- """Fake chat model with lc_secrets for testing metadata filtering."""
1397-
1398- api_key : str = "secret-key"
1399- model : str = "test-model"
1400- thinking : dict [str , Any ] | None = None
1401-
1402- @property
1403- def lc_secrets (self ) -> dict [str , str ]:
1404- return {"api_key" : "API_KEY" }
1405-
1406- @property
1407- def _identifying_params (self ) -> dict [str , Any ]:
1408- return {
1409- "model" : self .model ,
1410- "thinking" : self .thinking ,
1411- }
1412-
1413- @property
1414- def _llm_type (self ) -> str :
1415- return "fake-chat-model-with-secrets"
1416-
1417- def _generate (
1418- self ,
1419- messages : list [BaseMessage ], # noqa: ARG002
1420- stop : list [str ] | None = None , # noqa: ARG002
1421- run_manager : CallbackManagerForLLMRun | None = None , # noqa: ARG002
1422- ** kwargs : Any , # noqa: ARG002
1423- ) -> ChatResult :
1424- return ChatResult (
1425- generations = [ChatGeneration (message = AIMessage (content = "test response" ))]
1426- )
1427-
1428-
1429- def test_init_params_in_metadata () -> None :
1430- """Test that init params are included in run metadata."""
1431- llm = FakeChatModelWithSecrets (thinking = {"type" : "enabled" , "budget_tokens" : 10000 })
1432- with collect_runs () as cb :
1433- llm .invoke ("hi" )
1434- assert len (cb .traced_runs ) == 1
1435- run = cb .traced_runs [0 ]
1436- assert run .extra is not None
1437- metadata = run .extra .get ("metadata" , {})
1438- assert "model" in metadata
1439- assert metadata ["model" ] == "test-model"
1440- assert "thinking" in metadata
1441- assert metadata ["thinking" ] == {"type" : "enabled" , "budget_tokens" : 10000 }
1442-
1443-
1444- def test_init_params_filter_none_values () -> None :
1445- """Test that None values are filtered from init params in metadata."""
1446- llm = FakeChatModelWithSecrets (thinking = None )
1447- with collect_runs () as cb :
1448- llm .invoke ("hi" )
1449- assert len (cb .traced_runs ) == 1
1450- run = cb .traced_runs [0 ]
1451- assert run .extra is not None
1452- metadata = run .extra .get ("metadata" , {})
1453- assert "thinking" not in metadata
1454-
1455-
1456- def test_init_params_filter_secrets () -> None :
1457- """Test that lc_secrets keys are filtered from init params in metadata."""
1458- llm = FakeChatModelWithSecrets ()
1459- with collect_runs () as cb :
1460- llm .invoke ("hi" )
1461- assert len (cb .traced_runs ) == 1
1462- run = cb .traced_runs [0 ]
1463- assert run .extra is not None
1464- metadata = run .extra .get ("metadata" , {})
1465- assert "api_key" not in metadata
1466-
1467-
1468- def test_runtime_params_in_metadata () -> None :
1469- """Test that runtime invocation params (kwargs) are included in metadata."""
1470- llm = FakeChatModelWithSecrets ()
1471- with collect_runs () as cb :
1472- llm .invoke ("hi" , effort = "low" )
1473- assert len (cb .traced_runs ) == 1
1474- run = cb .traced_runs [0 ]
1475- assert run .extra is not None
1476- metadata = run .extra .get ("metadata" , {})
1477- assert "effort" in metadata
1478- assert metadata ["effort" ] == "low"
1479-
1480-
1481- def test_runtime_secrets_filtered_from_metadata () -> None :
1482- """Test that runtime secret params (kwargs) are filtered from metadata."""
1483- llm = FakeChatModelWithSecrets ()
1484- with collect_runs () as cb :
1485- llm .invoke ("hi" , api_key = "runtime-secret" )
1486- assert len (cb .traced_runs ) == 1
1487- run = cb .traced_runs [0 ]
1488- assert run .extra is not None
1489- metadata = run .extra .get ("metadata" , {})
1490- assert "api_key" not in metadata
1491-
1492-
1493- def test_user_metadata_takes_precedence () -> None :
1494- """Test that user-provided metadata takes precedence over invocation params."""
1495- llm = FakeChatModelWithSecrets (model = "init-model" )
1496- with collect_runs () as cb :
1497- llm .invoke ("hi" , config = {"metadata" : {"model" : "user-override" }})
1498- assert len (cb .traced_runs ) == 1
1499- run = cb .traced_runs [0 ]
1500- assert run .extra is not None
1501- metadata = run .extra .get ("metadata" , {})
1502- assert metadata ["model" ] == "user-override"
1503-
1504-
1505- async def test_invocation_params_in_metadata_ainvoke () -> None :
1506- """Test that invocation params are included in run metadata for ainvoke."""
1507- llm = FakeChatModelWithSecrets (thinking = {"type" : "enabled" })
1508- with collect_runs () as cb :
1509- await llm .ainvoke ("hi" )
1510- assert len (cb .traced_runs ) == 1
1511- run = cb .traced_runs [0 ]
1512- assert run .extra is not None
1513- metadata = run .extra .get ("metadata" , {})
1514- assert "thinking" in metadata
1515-
1516-
1517- def test_invocation_params_in_metadata_stream () -> None :
1518- """Test that invocation params are included in run metadata for stream."""
1519- llm = FakeChatModelWithSecrets (thinking = {"type" : "enabled" })
1520- with collect_runs () as cb :
1521- list (llm .stream ("hi" ))
1522- assert len (cb .traced_runs ) == 1
1523- run = cb .traced_runs [0 ]
1524- assert run .extra is not None
1525- metadata = run .extra .get ("metadata" , {})
1526- assert "thinking" in metadata
1527-
1528-
1529- async def test_invocation_params_in_metadata_astream () -> None :
1530- """Test that invocation params are included in run metadata for astream."""
1531- llm = FakeChatModelWithSecrets (thinking = {"type" : "enabled" })
1532- with collect_runs () as cb :
1533- async for _ in llm .astream ("hi" ):
1534- pass
1535- assert len (cb .traced_runs ) == 1
1536- run = cb .traced_runs [0 ]
1537- assert run .extra is not None
1538- metadata = run .extra .get ("metadata" , {})
1539- assert "thinking" in metadata
0 commit comments