- Updated API authentication headers to use `X-API-Key` for both admin and user APIs. - Modified the account creation process to directly create user-specific accounts without requiring an admin workspace. - Enhanced user creation to return account-specific details, including `admin_user_id`. - Introduced new endpoints for retrieving task status and user profiles, allowing for more flexible user data management. - Updated search functionality to include additional parameters such as `level` and `score_threshold`. - Improved the handling of user keys in the storage layer to associate them with specific accounts. - Added tests to validate the new user account creation process and search functionalities, ensuring proper integration with the OpenViking service. - Included new documentation to reflect changes in API usage and expected request/response formats.
107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
"""Schemas for the lightweight Memory System API."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
OperationStatus = Literal["success", "partial_success", "failed"]
|
|
|
|
|
|
class MessageIngestRequest(BaseModel):
|
|
user_id: str = Field(min_length=1)
|
|
user_key: str = Field(min_length=1)
|
|
session_id: str = Field(min_length=1)
|
|
user_message: str | None = None
|
|
assistant_message: str | None = None
|
|
timestamp: int | None = None
|
|
metadata: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class SessionUserRequest(BaseModel):
|
|
user_id: str = Field(min_length=1)
|
|
user_key: str = Field(min_length=1)
|
|
|
|
|
|
class TaskStatusRequest(SessionUserRequest):
|
|
session_id: str | None = Field(default=None, min_length=1)
|
|
|
|
|
|
class SearchRequest(BaseModel):
|
|
user_id: str = Field(min_length=1)
|
|
user_key: str = Field(min_length=1)
|
|
session_id: str | None = None
|
|
query: str = Field(min_length=1)
|
|
use_llm: bool = False
|
|
limit: int = Field(default=10, ge=1, le=100)
|
|
level: int = Field(default=2, ge=0)
|
|
score_threshold: float = Field(default=0.8, ge=0, le=1)
|
|
target_uri: str = Field(default="viking://user/memories", min_length=1)
|
|
|
|
|
|
class SessionContextRequest(BaseModel):
|
|
user_id: str = Field(min_length=1)
|
|
user_key: str = Field(min_length=1)
|
|
query: str = Field(min_length=1)
|
|
limit: int = Field(default=10, ge=1, le=100)
|
|
|
|
|
|
class ProfileRequest(BaseModel):
|
|
user_key: str = Field(min_length=1)
|
|
query: str = Field(default="用户画像", min_length=1)
|
|
limit: int = Field(default=10, ge=1, le=100)
|
|
level: int = Field(default=2, ge=0)
|
|
|
|
|
|
class BackendStatus(BaseModel):
|
|
status: OperationStatus
|
|
result: Any = None
|
|
error: str | None = None
|
|
|
|
|
|
class UserCreateRequest(BaseModel):
|
|
user_id: str = Field(min_length=1)
|
|
|
|
|
|
class AccountResponse(BaseModel):
|
|
status: OperationStatus
|
|
account: Any = None
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class MessageIngestResponse(BaseModel):
|
|
status: OperationStatus
|
|
message_count: int
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class CommitResponse(BaseModel):
|
|
status: OperationStatus
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class ExtractResponse(BaseModel):
|
|
status: OperationStatus
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class SearchResponse(BaseModel):
|
|
status: OperationStatus
|
|
items: list[dict[str, Any]] = Field(default_factory=list)
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class SessionContextResponse(BaseModel):
|
|
status: OperationStatus
|
|
context: dict[str, Any] | None = None
|
|
items: list[dict[str, Any]] = Field(default_factory=list)
|
|
backends: dict[str, BackendStatus]
|
|
|
|
|
|
class ProfileResponse(BaseModel):
|
|
status: OperationStatus
|
|
profile: Any = None
|
|
items: list[dict[str, Any]] = Field(default_factory=list)
|
|
backends: dict[str, BackendStatus]
|