feat: 重构 agentscope 缓存架构,新增消息和附件缓存
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from datetime import date, datetime, timezone
|
||||
import hashlib
|
||||
|
||||
from urllib.parse import urlparse
|
||||
@@ -10,6 +10,9 @@ from fastapi import HTTPException
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from core.auth.models import CurrentUser
|
||||
from core.agentscope.caches.context_messages_cache import (
|
||||
create_context_messages_cache,
|
||||
)
|
||||
from core.agentscope.schemas.agui_input import extract_latest_user_payload
|
||||
from core.config.settings import config
|
||||
from core.logging import get_logger
|
||||
@@ -124,6 +127,13 @@ class AgentService:
|
||||
visibility_mask=visibility_mask,
|
||||
)
|
||||
await self._repository.commit()
|
||||
await self._append_context_cache_user_message(
|
||||
thread_id=thread_id,
|
||||
runtime_mode=runtime_mode,
|
||||
visibility_mask=visibility_mask,
|
||||
content=user_message_text,
|
||||
metadata=user_message_metadata,
|
||||
)
|
||||
|
||||
queue = "automation" if runtime_mode == RuntimeMode.AUTOMATION else "agent"
|
||||
task_id = await self._queue.enqueue(
|
||||
@@ -147,6 +157,44 @@ class AgentService:
|
||||
created=created,
|
||||
)
|
||||
|
||||
async def _append_context_cache_user_message(
|
||||
self,
|
||||
*,
|
||||
thread_id: str,
|
||||
runtime_mode: RuntimeMode,
|
||||
visibility_mask: int,
|
||||
content: str,
|
||||
metadata: AgentChatMessageMetadata | None,
|
||||
) -> None:
|
||||
metadata_payload = (
|
||||
metadata.model_dump(mode="json", exclude_none=True)
|
||||
if isinstance(metadata, AgentChatMessageMetadata)
|
||||
else None
|
||||
)
|
||||
message_payload: dict[str, object] = {
|
||||
"role": "user",
|
||||
"content": content,
|
||||
"timestamp": datetime.now(timezone.utc).isoformat(timespec="seconds"),
|
||||
}
|
||||
if isinstance(metadata_payload, dict):
|
||||
message_payload["metadata"] = metadata_payload
|
||||
|
||||
try:
|
||||
context_cache = create_context_messages_cache()
|
||||
await context_cache.append_message(
|
||||
thread_id=thread_id,
|
||||
runtime_mode=runtime_mode.value,
|
||||
visibility_mask=visibility_mask,
|
||||
message=message_payload,
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.warning(
|
||||
"Failed to append user message to context cache",
|
||||
thread_id=thread_id,
|
||||
runtime_mode=runtime_mode.value,
|
||||
error=str(exc),
|
||||
)
|
||||
|
||||
async def _resolve_user_message_visibility_mask(
|
||||
self, *, runtime_mode: RuntimeMode
|
||||
) -> int:
|
||||
|
||||
@@ -7,10 +7,10 @@ from uuid import UUID
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from core.auth.models import CurrentUser
|
||||
from core.agentscope.persistence.user_context_cache import (
|
||||
from core.agentscope.caches.user_context_cache import (
|
||||
create_user_context_cache,
|
||||
)
|
||||
from core.auth.models import CurrentUser
|
||||
from core.db.base_service import BaseService
|
||||
from core.logging import get_logger
|
||||
from schemas.shared.user import UserContext, parse_profile_settings
|
||||
|
||||
Reference in New Issue
Block a user