70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
from pydantic import BaseModel, Field, field_serializer, ConfigDict
|
|
import datetime
|
|
import uuid
|
|
from .user_schema import User
|
|
from .model_schema import ModelConfig
|
|
from typing import Optional
|
|
from app.models.knowledge_model import KnowledgeType, PermissionType
|
|
|
|
|
|
class KnowledgeBase(BaseModel):
|
|
workspace_id: uuid.UUID | None = None
|
|
created_by: uuid.UUID | None = None
|
|
parent_id: uuid.UUID | None = None
|
|
name: str
|
|
description: str | None = None
|
|
avatar: str | None = None
|
|
type: KnowledgeType | None = None
|
|
permission_id: PermissionType | None = None
|
|
embedding_id: uuid.UUID | None = None
|
|
reranker_id: uuid.UUID | None = None
|
|
llm_id: uuid.UUID | None = None
|
|
image2text_id: uuid.UUID | None = None
|
|
doc_num: int | None = None
|
|
chunk_num: int | None = None
|
|
parser_id: str | None = None
|
|
parser_config: dict | None = None
|
|
|
|
|
|
class KnowledgeCreate(KnowledgeBase):
|
|
pass
|
|
|
|
class KnowledgeUpdate(BaseModel):
|
|
parent_id: uuid.UUID | None = Field(None)
|
|
name: str | None = Field(None)
|
|
description: str | None = Field(None)
|
|
avatar: str | None = Field(None)
|
|
type: KnowledgeType | None = Field(None)
|
|
permission_id: PermissionType | None = Field(None)
|
|
embedding_id: uuid.UUID | None = Field(None)
|
|
reranker_id: uuid.UUID | None = Field(None)
|
|
llm_id: uuid.UUID | None = Field(None)
|
|
image2text_id: uuid.UUID | None = Field(None)
|
|
doc_num: int | None = Field(None)
|
|
chunk_num: int | None = Field(None)
|
|
parser_id: str | None = Field(None)
|
|
parser_config: dict | None = Field(None)
|
|
status: int | None = Field(None)
|
|
|
|
|
|
class Knowledge(KnowledgeBase):
|
|
id: uuid.UUID
|
|
status: int
|
|
created_at: datetime.datetime
|
|
updated_at: datetime.datetime
|
|
created_user: User
|
|
embedding: Optional[ModelConfig] = None
|
|
reranker: Optional[ModelConfig] = None
|
|
llm: Optional[ModelConfig] = None
|
|
image2text: Optional[ModelConfig] = None
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
@field_serializer("created_at", when_used="json")
|
|
def _serialize_created_at(self, dt: datetime.datetime):
|
|
return int(dt.timestamp() * 1000) if dt else None
|
|
|
|
@field_serializer("updated_at", when_used="json")
|
|
def _serialize_updated_at(self, dt: datetime.datetime):
|
|
return int(dt.timestamp() * 1000) if dt else None
|