diff --git a/server/telemetry.py b/server/telemetry.py index ae5164e3e1..7309eacc34 100644 --- a/server/telemetry.py +++ b/server/telemetry.py @@ -35,7 +35,7 @@ def _load_state() -> dict[str, Any]: if not STATE_PATH.exists(): return {} try: - return json.loads(STATE_PATH.read_text()) + return json.loads(STATE_PATH.read_text(encoding="utf-8")) except (OSError, json.JSONDecodeError): return {} @@ -43,7 +43,7 @@ def _load_state() -> dict[str, Any]: def _save_state(state: dict[str, Any]) -> None: try: STATE_PATH.parent.mkdir(parents=True, exist_ok=True) - STATE_PATH.write_text(json.dumps(state)) + STATE_PATH.write_text(json.dumps(state), encoding="utf-8") except OSError: logging.exception("telemetry: failed to persist state") diff --git a/tests/test_server_telemetry.py b/tests/test_server_telemetry.py new file mode 100644 index 0000000000..4589a0ee9a --- /dev/null +++ b/tests/test_server_telemetry.py @@ -0,0 +1,19 @@ +import json +import sys +from types import SimpleNamespace + + +sys.modules.setdefault("mem0", SimpleNamespace(__version__="test")) + +from server import telemetry # noqa: E402 + + +def test_telemetry_state_round_trips_non_ascii(tmp_path, monkeypatch): + state_path = tmp_path / "telemetry.json" + monkeypatch.setattr(telemetry, "STATE_PATH", state_path) + state = {"install_id": "abc", "use_case": "Olá, 世界"} + + telemetry._save_state(state) + + assert json.loads(state_path.read_text(encoding="utf-8")) == state + assert telemetry._load_state() == state