hermes-association-engine / tests /test_recorder.py
feiertu's picture
Upload tests/test_recorder.py with huggingface_hub
5e4b975 verified
Raw
History Blame Contribute Delete
2.89 kB
"""测试 record_detail."""
import uuid
import pytest
from hermes_core.embedder import Embedder
from hermes_core.recorder import record_detail
pytestmark = pytest.mark.requires_embedder
@pytest.fixture
def embedder():
return Embedder()
def _uid():
"""生成唯一 user_id,确保测试隔离。"""
return f"u_{uuid.uuid4().hex[:8]}"
def test_record_first_entry(embedder):
result = record_detail(
user_id=_uid(), scope_desc="后端API开发",
dimensions=[{"key": "language", "value": "TypeScript", "context": "默认语言"}],
embedder=embedder,
)
assert result["status"] == "recorded"
assert result["dimension_count"] == 1
assert result["id"].startswith("rec_")
def test_record_dimension_increment_enforced(embedder):
"""同 scope 内,维度数必须递增。"""
uid = _uid()
# 第一条: 2 维
result1 = record_detail(
user_id=uid, scope_desc="后端开发",
dimensions=[
{"key": "language", "value": "TypeScript", "context": ""},
{"key": "framework", "value": "Express", "context": ""},
],
embedder=embedder,
)
assert result1["status"] == "recorded"
# 第二条: 1 维 → 应拒绝
result2 = record_detail(
user_id=uid, scope_desc="后端开发",
dimensions=[{"key": "language", "value": "Python", "context": ""}],
embedder=embedder,
)
assert result2["status"] == "rejected"
assert "dimension" in result2["reason"].lower()
def test_record_same_conversation_relaxes_constraint(embedder):
"""同一次对话内维度约束松弛。"""
uid = _uid()
conv_id = "conv_test_123"
result1 = record_detail(
user_id=uid, scope_desc="后端开发",
dimensions=[
{"key": "language", "value": "TypeScript", "context": ""},
{"key": "framework", "value": "Express", "context": ""},
],
conversation_id=conv_id, embedder=embedder,
)
assert result1["status"] == "recorded"
result2 = record_detail(
user_id=uid, scope_desc="后端开发",
dimensions=[{"key": "db", "value": "PostgreSQL", "context": ""}],
conversation_id=conv_id, embedder=embedder,
)
assert result2["status"] == "recorded" # 同对话,约束松弛
def test_record_upsert_increments_occurrences(embedder):
"""相同 scope+dimensions 应 upsert 并增加 occurrences。"""
uid = _uid()
dims = [{"key": "language", "value": "Go", "context": ""}]
result1 = record_detail(
user_id=uid, scope_desc="系统编程",
dimensions=dims, embedder=embedder,
)
rid = result1["id"]
result2 = record_detail(
user_id=uid, scope_desc="系统编程",
dimensions=dims, embedder=embedder,
)
# 同 dimensions 匹配到同一条记录,upsert
assert result2["id"] == rid