refactor(backend): update service layers
- services/ontology.py: update ontology service logic - services/user_agent.py: update user agent service logic
This commit is contained in:
@@ -325,7 +325,11 @@ class SemanticOntologyService:
|
||||
|
||||
entities = self._extract_entities(query, compact_query, reference)
|
||||
rule_scenario, scenario_score = self._detect_scenario(compact_query)
|
||||
time_range, _time_score = self._extract_time_range(query, compact_query)
|
||||
time_range, _time_score = self._extract_time_range(
|
||||
query,
|
||||
compact_query,
|
||||
context_json=context_json,
|
||||
)
|
||||
context_scenario = self._resolve_context_scenario(context_json)
|
||||
if rule_scenario == "unknown" and context_scenario is not None:
|
||||
rule_scenario = context_scenario
|
||||
@@ -1175,16 +1179,22 @@ class SemanticOntologyService:
|
||||
self,
|
||||
query: str,
|
||||
compact_query: str,
|
||||
*,
|
||||
context_json: dict[str, Any],
|
||||
) -> tuple[OntologyTimeRange, float]:
|
||||
today = datetime.now(UTC).date()
|
||||
today = self._resolve_reference_today(context_json)
|
||||
|
||||
direct_mappings = {
|
||||
"今天": self._single_day_range(today, "今天", "day"),
|
||||
"昨日": self._single_day_range(today - timedelta(days=1), "昨日", "day"),
|
||||
"昨天": self._single_day_range(today - timedelta(days=1), "昨天", "day"),
|
||||
"明天": self._single_day_range(today + timedelta(days=1), "明天", "day"),
|
||||
}
|
||||
for keyword, value in direct_mappings.items():
|
||||
direct_mappings = [
|
||||
("大前天", self._single_day_range(today - timedelta(days=3), "大前天", "day")),
|
||||
("前天", self._single_day_range(today - timedelta(days=2), "前天", "day")),
|
||||
("昨日", self._single_day_range(today - timedelta(days=1), "昨日", "day")),
|
||||
("昨天", self._single_day_range(today - timedelta(days=1), "昨天", "day")),
|
||||
("今天", self._single_day_range(today, "今天", "day")),
|
||||
("明天", self._single_day_range(today + timedelta(days=1), "明天", "day")),
|
||||
("后天", self._single_day_range(today + timedelta(days=2), "后天", "day")),
|
||||
("大后天", self._single_day_range(today + timedelta(days=3), "大后天", "day")),
|
||||
]
|
||||
for keyword, value in direct_mappings:
|
||||
if keyword in query:
|
||||
return value, 0.10
|
||||
|
||||
@@ -1263,6 +1273,29 @@ class SemanticOntologyService:
|
||||
|
||||
return OntologyTimeRange(), 0.0
|
||||
|
||||
@staticmethod
|
||||
def _resolve_reference_today(context_json: dict[str, Any]) -> date:
|
||||
client_now_iso = str(context_json.get("client_now_iso") or "").strip()
|
||||
if not client_now_iso:
|
||||
return datetime.now(UTC).date()
|
||||
|
||||
normalized = client_now_iso.replace("Z", "+00:00")
|
||||
try:
|
||||
client_now = datetime.fromisoformat(normalized)
|
||||
except ValueError:
|
||||
return datetime.now(UTC).date()
|
||||
|
||||
if client_now.tzinfo is None:
|
||||
client_now = client_now.replace(tzinfo=UTC)
|
||||
|
||||
try:
|
||||
offset_minutes = int(context_json.get("client_timezone_offset_minutes") or 0)
|
||||
except (TypeError, ValueError):
|
||||
offset_minutes = 0
|
||||
|
||||
local_now = client_now - timedelta(minutes=offset_minutes)
|
||||
return local_now.date()
|
||||
|
||||
@staticmethod
|
||||
def _single_day_range(target: date, raw: str, granularity: str) -> OntologyTimeRange:
|
||||
return OntologyTimeRange(
|
||||
|
||||
Reference in New Issue
Block a user