|
4 | 4 | from datetime import date, datetime, timezone |
5 | 5 | from enum import Enum |
6 | 6 | from pathlib import Path |
| 7 | +from queue import Queue |
| 8 | +from unittest.mock import Mock |
7 | 9 | from uuid import UUID |
8 | 10 |
|
9 | 11 | from pydantic import BaseModel |
10 | 12 |
|
11 | | -from langfuse._utils.serializer import ( |
12 | | - EventSerializer, |
13 | | -) |
| 13 | +from langfuse._task_manager.score_ingestion_consumer import ScoreIngestionConsumer |
| 14 | +from langfuse._utils.serializer import EventSerializer |
| 15 | +from langfuse.api import ScoreBody |
14 | 16 |
|
15 | 17 |
|
16 | 18 | class TestEnum(Enum): |
@@ -69,6 +71,68 @@ def test_pydantic_model(): |
69 | 71 | assert json.loads(serializer.encode(model)) == {"field": "test"} |
70 | 72 |
|
71 | 73 |
|
| 74 | +def test_langfuse_model_uses_aliases(): |
| 75 | + model = ScoreBody( |
| 76 | + id="score-1", |
| 77 | + trace_id="trace-1", |
| 78 | + session_id="session-1", |
| 79 | + observation_id="observation-1", |
| 80 | + dataset_run_id="dataset-run-1", |
| 81 | + name="rating", |
| 82 | + value=2, |
| 83 | + data_type="NUMERIC", |
| 84 | + config_id="config-1", |
| 85 | + ) |
| 86 | + serializer = EventSerializer() |
| 87 | + |
| 88 | + assert json.loads(serializer.encode(model)) == { |
| 89 | + "id": "score-1", |
| 90 | + "traceId": "trace-1", |
| 91 | + "sessionId": "session-1", |
| 92 | + "observationId": "observation-1", |
| 93 | + "datasetRunId": "dataset-run-1", |
| 94 | + "name": "rating", |
| 95 | + "value": 2, |
| 96 | + "dataType": "NUMERIC", |
| 97 | + "configId": "config-1", |
| 98 | + } |
| 99 | + |
| 100 | + |
| 101 | +def test_score_ingestion_consumer_uses_aliases_for_langfuse_models(): |
| 102 | + ingestion_queue = Queue() |
| 103 | + consumer = ScoreIngestionConsumer( |
| 104 | + ingestion_queue=ingestion_queue, |
| 105 | + identifier=0, |
| 106 | + client=Mock(), |
| 107 | + public_key="pk-test", |
| 108 | + ) |
| 109 | + |
| 110 | + ingestion_queue.put( |
| 111 | + { |
| 112 | + "id": "event-1", |
| 113 | + "type": "score-create", |
| 114 | + "timestamp": "2026-03-25T16:10:45.793Z", |
| 115 | + "body": ScoreBody( |
| 116 | + id="score-1", |
| 117 | + session_id="session-1", |
| 118 | + name="rating", |
| 119 | + value=2, |
| 120 | + data_type="NUMERIC", |
| 121 | + ), |
| 122 | + } |
| 123 | + ) |
| 124 | + |
| 125 | + batch = consumer._next() |
| 126 | + |
| 127 | + assert batch[0]["body"] == { |
| 128 | + "id": "score-1", |
| 129 | + "sessionId": "session-1", |
| 130 | + "name": "rating", |
| 131 | + "value": 2, |
| 132 | + "dataType": "NUMERIC", |
| 133 | + } |
| 134 | + |
| 135 | + |
72 | 136 | def test_path(): |
73 | 137 | path = Path("/tmp/test.txt") |
74 | 138 | serializer = EventSerializer() |
|
0 commit comments