|
29 | 29 | from agentex.lib.core.clients.temporal.types import ConflictWorkflowPolicy |
30 | 30 | from agentex.lib.core.temporal.workers.worker import AgentexWorker |
31 | 31 | from agentex.lib.core.temporal.services.temporal_task_service import TemporalTaskService |
32 | | -from agentex.lib.core.tracing.processors.sgp_tracing_processor import SGPSyncTracingProcessor, _sgp_metadata |
| 32 | +from agentex.lib.core.tracing.processors.sgp_tracing_processor import ( |
| 33 | + SGPSyncTracingProcessor, |
| 34 | + SGPAsyncTracingProcessor, |
| 35 | + _sgp_metadata, |
| 36 | +) |
33 | 37 |
|
34 | 38 | EVAL_METADATA = { |
35 | 39 | "sgp_evals": "generation-unit", |
@@ -149,6 +153,34 @@ def test_plain_span_is_not_stamped_by_a_run_registered_after_it_started(self) -> |
149 | 153 |
|
150 | 154 | assert _sgp_metadata(span) == {"k": 1} |
151 | 155 |
|
| 156 | + def test_plain_span_started_with_an_empty_registry_is_not_stamped_later(self) -> None: |
| 157 | + span = _span(trace_id="task-1", data={"k": 1}) |
| 158 | + sgp_evals.capture_for_span(span) |
| 159 | + |
| 160 | + sgp_evals.register_task_metadata("task-1", EVAL_METADATA) |
| 161 | + |
| 162 | + assert _sgp_metadata(span) == {"k": 1} |
| 163 | + |
| 164 | + async def test_async_processor_keeps_the_capture_when_the_upload_fails(self) -> None: |
| 165 | + sgp_evals.register_task_metadata("task-1", EVAL_METADATA) |
| 166 | + span = _span(data={}) |
| 167 | + sgp_evals.capture_for_span(span) |
| 168 | + span.end_time = datetime.now(UTC) |
| 169 | + module = "agentex.lib.core.tracing.processors.sgp_tracing_processor" |
| 170 | + with patch(f"{module}.tracing.init"), patch(f"{module}.EnvironmentVariables"): |
| 171 | + processor = SGPAsyncTracingProcessor(SGPTracingProcessorConfig(sgp_api_key="", sgp_account_id="")) |
| 172 | + client = Mock() |
| 173 | + client.spans.upsert_batch = AsyncMock(side_effect=[RuntimeError("boom"), None]) |
| 174 | + with patch.object(processor, "_get_client", return_value=client): |
| 175 | + with pytest.raises(RuntimeError): |
| 176 | + await processor.on_spans_end([span]) |
| 177 | + sgp_evals.unregister_task("task-1") |
| 178 | + assert sgp_evals.attrs_for_span(span) == EXPECTED_ATTRS |
| 179 | + |
| 180 | + await processor.on_spans_end([span]) |
| 181 | + |
| 182 | + assert sgp_evals.attrs_for_span(span) == {} |
| 183 | + |
152 | 184 | def test_release_drops_the_capture(self) -> None: |
153 | 185 | sgp_evals.register_task_metadata("task-1", EVAL_METADATA) |
154 | 186 | span = _span(data={}) |
|
0 commit comments