kofdai's picture
Upload folder using huggingface_hub
594ed40 verified
from typing import List, Optional
from pydantic import BaseModel
from datetime import datetime
# Pydanticモデルを更新
class VerificationMark(BaseModel):
verification_type: str = "none"
is_expert_verified: bool
expert_orcid_id: Optional[str] = None
expert_name: Optional[str] = None
verification_date: Optional[datetime] = None
verification_count: int = 0
class Config:
from_attributes = True
class KnowledgeTile(BaseModel):
tile_id: str
domain_id: str
topic: str
content_preview: str
created_at: datetime
updated_at: datetime
verification_mark: VerificationMark
contributor_id: Optional[str] = None
confidence_score: float = 0.0
tags: List[str] = []
coordinates: Optional[List[float]] = None # 6D coordinates [x, y, z, c, g, v]
# ORMモデルからPydanticモデルへの変換を補助
@classmethod
def from_orm(cls, orm_obj):
content_preview = orm_obj.content[:200] + "..." if len(orm_obj.content) > 200 else orm_obj.content
is_expert_verified = orm_obj.verification_type in ["expert", "multi_expert"]
expert_orcid = None
expert_name = None
if is_expert_verified and orm_obj.last_verified_by:
expert_orcid = orm_obj.last_verified_by.orcid_id
expert_name = orm_obj.last_verified_by.display_name
verification_mark = VerificationMark(
verification_type=orm_obj.verification_type,
is_expert_verified=is_expert_verified,
expert_orcid_id=expert_orcid,
expert_name=expert_name,
verification_date=orm_obj.last_verified_at,
verification_count=orm_obj.verification_count
)
return cls(
tile_id=orm_obj.id,
domain_id=orm_obj.domain_id,
topic=orm_obj.topic,
content_preview=content_preview,
created_at=orm_obj.created_at,
updated_at=orm_obj.updated_at,
verification_mark=verification_mark,
contributor_id=orm_obj.contributor_id,
confidence_score=orm_obj.confidence_score,
tags=orm_obj.tags or [],
coordinates=orm_obj.coordinates
)
class KnowledgeListResponse(BaseModel):
tiles: List[KnowledgeTile]
total_count: int
page: int
page_size: int
has_more: bool
class KnowledgeDetailResponse(BaseModel):
tile: KnowledgeTile
full_content: str
sources: List[str] = []
related_tiles: List[str] = []
edit_history: List[dict] = []
class EditRequest(BaseModel):
content: str
edit_reason: Optional[str] = None