diff --git a/tests/models/test_fallback.py b/tests/models/test_fallback.py index 89709d4a2e..2b5b5a781e 100644 --- a/tests/models/test_fallback.py +++ b/tests/models/test_fallback.py @@ -3,6 +3,7 @@ import sys from collections.abc import AsyncIterator from datetime import timezone +from typing import Any import pytest from inline_snapshot import snapshot @@ -247,6 +248,14 @@ def test_all_failed() -> None: assert exceptions[0].body == {'error': 'test error'} +def add_missing_response_model(spans: list[dict[str, Any]]) -> list[dict[str, Any]]: + for span in spans: + attrs = span.setdefault('attributes', {}) + if 'gen_ai.request.model' in attrs: + attrs.setdefault('gen_ai.response.model', attrs['gen_ai.request.model']) + return spans + + @pytest.mark.skipif(not logfire_imports_successful(), reason='logfire not installed') def test_all_failed_instrumented(capfire: CaptureLogfire) -> None: fallback_model = FallbackModel(failure_model, failure_model) @@ -260,7 +269,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None: assert exceptions[0].status_code == 500 assert exceptions[0].model_name == 'test-function-model' assert exceptions[0].body == {'error': 'test error'} - assert capfire.exporter.exported_spans_as_dict() == snapshot( + assert add_missing_response_model(capfire.exporter.exported_spans_as_dict()) == snapshot( [ { 'name': 'chat fallback:function:failure_response:,function:failure_response:', @@ -277,6 +286,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None: 'logfire.span_type': 'span', 'logfire.msg': 'chat fallback:function:failure_response:,function:failure_response:', 'logfire.level_num': 17, + 'gen_ai.response.model': 'fallback:function:failure_response:,function:failure_response:', }, 'events': [ { diff --git a/uv.lock b/uv.lock index 9f62d14ff1..ebb0a6e1f0 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.13' and platform_python_implementation == 'PyPy'", @@ -1696,7 +1696,7 @@ wheels = [ [[package]] name = "logfire" -version = "3.17.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "executing" }, @@ -1708,9 +1708,9 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/3e/0367dc7cf0636c2baf4c5b58fa2b0d837302d71362c58f21472beddd271d/logfire-3.17.0.tar.gz", hash = "sha256:5c7230b373d9994b61466ec8a2462957826c4ca1d8351af7f43dde3e54f6f072", size = 486770, upload-time = "2025-06-03T15:26:49.148Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/85/4ee1ced49f2c378fd7df9f507d6426da3c3520957bfe56e6c049ccacd4e4/logfire-4.0.0.tar.gz", hash = "sha256:64d95fbf0f05c99a8b4c99a35b5b2971f11adbfbe9a73726df11d01c12f9959c", size = 512056, upload-time = "2025-07-22T15:12:05.951Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/81/e8d76d8b6c0d6d855df0e328af2ab68030b40f502002a5293f3b36c33b03/logfire-3.17.0-py3-none-any.whl", hash = "sha256:8ebccdb01e3af12ecf271246c2a6761ea35c109ef94f4d7520db6b7c3532cd05", size = 197653, upload-time = "2025-06-03T15:26:45.103Z" }, + { url = "https://files.pythonhosted.org/packages/b3/06/377ff0eb5d78ba893025eafed6104088eccefb0e538a9bed24e1f5d4fe53/logfire-4.0.0-py3-none-any.whl", hash = "sha256:4e50887d61954f849ec05343ca71b29fec5c0b6e4e945cabbceed664e37966e7", size = 211515, upload-time = "2025-07-22T15:12:02.113Z" }, ] [package.optional-dependencies]