diff --git a/agentops/logging/instrument_logging.py b/agentops/logging/instrument_logging.py index 0c5cca53c..e255b3e4d 100644 --- a/agentops/logging/instrument_logging.py +++ b/agentops/logging/instrument_logging.py @@ -81,6 +81,7 @@ def upload_logfile(trace_id: int) -> None: Upload the log content from the memory buffer to the API. """ from agentops import get_client + from agentops.logging import logger # Get the content from the buffer log_content = _log_buffer.getvalue() @@ -88,6 +89,18 @@ def upload_logfile(trace_id: int) -> None: return client = get_client() + + # Check if authentication is complete before attempting to upload + if not client.api.v4.auth_token: + logger.debug( + "[agentops.upload_logfile] Skipping logfile upload - authentication not yet complete. " + "This is normal for short-running traces that complete before authentication finishes." + ) + # Clear the buffer even if we don't upload + _log_buffer.seek(0) + _log_buffer.truncate() + return + client.api.v4.upload_logfile(log_content, trace_id) # Clear the buffer after upload diff --git a/tests/unit/logging/test_upload_logfile_no_auth.py b/tests/unit/logging/test_upload_logfile_no_auth.py new file mode 100644 index 000000000..1abaf858a --- /dev/null +++ b/tests/unit/logging/test_upload_logfile_no_auth.py @@ -0,0 +1,40 @@ +import builtins +import pytest +from unittest.mock import patch, MagicMock +from agentops.logging.instrument_logging import setup_print_logger, upload_logfile + + +@pytest.fixture +def reset_print(): + """Fixture to reset the print function after tests""" + original_print = builtins.print + yield + builtins.print = original_print + + +def test_upload_logfile_skips_when_no_auth_token(reset_print): + """Test that upload_logfile skips upload gracefully when auth token is not set.""" + setup_print_logger() + test_message = "Test upload message" + print(test_message) + + mock_client = MagicMock() + mock_client.api.v4.auth_token = None + + with patch("agentops.get_client", return_value=mock_client): + upload_logfile(trace_id=123) + mock_client.api.v4.upload_logfile.assert_not_called() + + +def test_upload_logfile_uploads_when_auth_token_is_set(reset_print): + """Test that upload_logfile uploads when auth token is set.""" + setup_print_logger() + test_message = "Test upload message" + print(test_message) + + mock_client = MagicMock() + mock_client.api.v4.auth_token = "test_token" + + with patch("agentops.get_client", return_value=mock_client): + upload_logfile(trace_id=123) + mock_client.api.v4.upload_logfile.assert_called_once()