chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:08:41 +08:00
commit bcc7968ff6
9988 changed files with 1016778 additions and 0 deletions
@@ -0,0 +1,22 @@
from datetime import datetime
import secrets
from typing import Optional
import uuid
from sqlalchemy import JSON, Column
from sqlmodel import Field, SQLModel
class AsyncPresentationGenerationTaskModel(SQLModel, table=True):
__tablename__ = "async_presentation_generation_tasks"
id: str = Field(
default_factory=lambda: f"task-{secrets.token_hex(32)}", primary_key=True
)
status: str
message: Optional[str] = None
error: Optional[dict] = Field(sa_column=Column(JSON), default=None)
created_at: datetime = Field(default_factory=datetime.now)
updated_at: datetime = Field(default_factory=datetime.now)
data: Optional[dict] = Field(sa_column=Column(JSON), default=None)
+37
View File
@@ -0,0 +1,37 @@
from datetime import datetime
import secrets
from typing import Any, Optional
from sqlalchemy import JSON, Column, DateTime
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class AsyncTaskModel(SQLModel, table=True):
__tablename__ = "async_tasks"
id: str = Field(
default_factory=lambda: f"task-{secrets.token_hex(32)}",
primary_key=True,
)
type: str = Field(index=True)
status: str = Field(index=True)
message: Optional[str] = None
error: Optional[dict[str, Any]] = Field(sa_column=Column(JSON), default=None)
data: Optional[dict[str, Any]] = Field(sa_column=Column(JSON), default=None)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True),
nullable=False,
default=get_current_utc_datetime,
)
)
updated_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True),
nullable=False,
default=get_current_utc_datetime,
onupdate=get_current_utc_datetime,
)
)
@@ -0,0 +1,41 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import JSON, Column, DateTime, ForeignKey, String, Text
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class ChatHistoryMessageModel(SQLModel, table=True):
__tablename__ = "chat_history_messages"
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
presentation_id: Optional[uuid.UUID] = Field(
default=None,
sa_column=Column(
ForeignKey("presentations.id", ondelete="CASCADE"),
index=True,
nullable=True,
)
)
template_v2_id: Optional[str] = Field(
default=None,
sa_column=Column(
String,
ForeignKey("template_v2.id", ondelete="CASCADE"),
index=True,
nullable=True,
)
)
conversation_id: uuid.UUID = Field(index=True)
position: int = Field(index=True, ge=1)
role: str
content: str = Field(sa_column=Column(Text, nullable=False))
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
)
)
tool_calls: Optional[list[str]] = Field(sa_column=Column(JSON), default=None)
+31
View File
@@ -0,0 +1,31 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import JSON, Column, DateTime, Integer, String
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class FontUpload(SQLModel, table=True):
__tablename__ = "font_uploads"
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
),
)
filename: str
path: str
normalized_family_name: str = Field(index=True)
family_name: Optional[str] = Field(sa_column=Column(String), default=None)
subfamily_name: Optional[str] = Field(sa_column=Column(String), default=None)
full_name: Optional[str] = Field(sa_column=Column(String), default=None)
postscript_name: Optional[str] = Field(sa_column=Column(String), default=None)
weight_class: Optional[int] = Field(sa_column=Column(Integer), default=None)
width_class: Optional[int] = Field(sa_column=Column(Integer), default=None)
format: Optional[str] = Field(sa_column=Column(String), default=None)
size_bytes: int
extras: Optional[dict] = Field(sa_column=Column(JSON), default=None)
+20
View File
@@ -0,0 +1,20 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import JSON, Column, DateTime
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class ImageAsset(SQLModel, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
),
)
is_uploaded: bool = Field(default=False)
path: str
extras: Optional[dict] = Field(sa_column=Column(JSON), default=None)
+8
View File
@@ -0,0 +1,8 @@
import uuid
from sqlmodel import Field, Column, JSON, SQLModel
class KeyValueSqlModel(SQLModel, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
key: str = Field(index=True)
value: dict = Field(sa_column=Column(JSON))
@@ -0,0 +1,9 @@
from datetime import datetime
import uuid
from sqlmodel import Field, Column, JSON, SQLModel, DateTime
class OllamaPullStatus(SQLModel, table=True):
id: str = Field(primary_key=True)
last_updated: datetime = Field(sa_column=Column(DateTime, default=datetime.now))
status: dict = Field(sa_column=Column(JSON))
+105
View File
@@ -0,0 +1,105 @@
from datetime import datetime
from enum import Enum
from typing import List, Optional
import uuid
import copy
from sqlalchemy import JSON, Column, DateTime, Enum as SAEnum, String
from sqlmodel import Boolean, Field, SQLModel
from models.presentation_outline_model import PresentationOutlineModel
from models.presentation_structure_model import PresentationStructureModel
from models.presentation_layout import PresentationLayoutModel
from utils.datetime_utils import get_current_utc_datetime
class PresentationVersion(str, Enum):
V1_STANDARD = "v1-standard"
V2_STANDARD = "v2-standard"
class PresentationModel(SQLModel, table=True):
__tablename__ = "presentations"
id: uuid.UUID = Field(primary_key=True, default_factory=uuid.uuid4)
version: PresentationVersion = Field(
sa_column=Column(
SAEnum(
PresentationVersion,
values_callable=lambda enum: [item.value for item in enum],
name="presentation_version",
native_enum=False,
create_constraint=True,
),
nullable=False,
),
)
content: str
n_slides: int
language: str
title: Optional[str] = None
file_paths: Optional[List[str]] = Field(sa_column=Column(JSON), default=None)
outlines: Optional[dict] = Field(sa_column=Column(JSON), default=None)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
),
)
updated_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True),
nullable=False,
default=get_current_utc_datetime,
onupdate=get_current_utc_datetime,
),
)
layout: Optional[dict] = Field(sa_column=Column(JSON), default=None)
structure: Optional[dict] = Field(sa_column=Column(JSON), default=None)
instructions: Optional[str] = Field(sa_column=Column(String), default=None)
tone: Optional[str] = Field(sa_column=Column(String), default=None)
verbosity: Optional[str] = Field(sa_column=Column(String), default=None)
include_table_of_contents: bool = Field(sa_column=Column(Boolean), default=False)
include_title_slide: bool = Field(sa_column=Column(Boolean), default=True)
web_search: bool = Field(sa_column=Column(Boolean), default=False)
theme: Optional[dict] = Field(sa_column=Column(JSON), default=None)
fonts: Optional[dict] = Field(sa_column=Column(JSON), default=None)
def get_new_presentation(self):
return PresentationModel(
id=uuid.uuid4(),
version=self.version,
content=self.content,
n_slides=self.n_slides,
language=self.language,
title=self.title,
file_paths=copy.deepcopy(self.file_paths),
outlines=copy.deepcopy(self.outlines),
layout=copy.deepcopy(self.layout),
structure=copy.deepcopy(self.structure),
instructions=self.instructions,
tone=self.tone,
verbosity=self.verbosity,
include_table_of_contents=self.include_table_of_contents,
include_title_slide=self.include_title_slide,
web_search=self.web_search,
theme=copy.deepcopy(self.theme),
fonts=copy.deepcopy(self.fonts),
)
def get_presentation_outline(self):
if not self.outlines:
return None
return PresentationOutlineModel(**self.outlines)
def get_layout(self):
return PresentationLayoutModel(**self.layout)
def set_layout(self, layout: PresentationLayoutModel):
self.layout = layout.model_dump()
def get_structure(self):
if not self.structure:
return None
return PresentationStructureModel(**self.structure)
def set_structure(self, structure: PresentationStructureModel):
self.structure = structure.model_dump()
@@ -0,0 +1,38 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import JSON, Column, DateTime, Text
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class PresentationLayoutCodeModel(SQLModel, table=True):
__tablename__ = "presentation_layout_codes"
id: Optional[int] = Field(default=None, primary_key=True)
presentation: uuid.UUID = Field(index=True, description="UUID of the presentation")
layout_id: str = Field(description="Unique identifier for the layout")
layout_name: str = Field(description="Display name of the layout")
layout_code: str = Field(
sa_column=Column(Text), description="TSX/React component code for the layout"
)
fonts: Optional[dict[str, str] | list[str]] = Field(
default=None,
sa_column=Column(JSON, nullable=True),
description="Optional font metadata associated with the layout",
)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
)
)
updated_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True),
nullable=False,
default=get_current_utc_datetime,
onupdate=get_current_utc_datetime,
),
)
+36
View File
@@ -0,0 +1,36 @@
from typing import Optional
import uuid
import copy
from sqlalchemy import ForeignKey
from sqlmodel import Field, Column, JSON, SQLModel
class SlideModel(SQLModel, table=True):
__tablename__ = "slides"
id: uuid.UUID = Field(primary_key=True, default_factory=uuid.uuid4)
presentation: uuid.UUID = Field(
sa_column=Column(ForeignKey("presentations.id", ondelete="CASCADE"), index=True)
)
layout_group: str
layout: str
index: int
content: dict = Field(sa_column=Column(JSON))
html_content: Optional[str] = None
speaker_note: Optional[str] = None
properties: Optional[dict] = Field(sa_column=Column(JSON))
ui: Optional[dict] = Field(default=None, sa_column=Column(JSON, nullable=True))
def get_new_slide(self, presentation: uuid.UUID, content: Optional[dict] = None):
return SlideModel(
id=uuid.uuid4(),
presentation=presentation,
layout_group=self.layout_group,
layout=self.layout,
index=self.index,
speaker_note=self.speaker_note,
content=copy.deepcopy(content or self.content),
html_content=self.html_content,
properties=copy.deepcopy(self.properties),
ui=copy.deepcopy(self.ui),
)
+27
View File
@@ -0,0 +1,27 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import Column, DateTime
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class TemplateModel(SQLModel, table=True):
__tablename__ = "templates"
id: uuid.UUID = Field(
default_factory=uuid.uuid4,
primary_key=True,
description="UUID for the template (matches presentation_id)",
)
name: str = Field(description="Human friendly template name")
description: Optional[str] = Field(
default=None, description="Optional template description"
)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
),
)
@@ -0,0 +1,25 @@
from datetime import datetime
import uuid
from sqlalchemy import JSON, Column, DateTime
from sqlmodel import Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class TemplateCreateInfoModel(SQLModel, table=True):
__tablename__ = "template_create_infos"
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
fonts: dict[str, str] | None = Field(
default=None,
sa_column=Column(JSON, nullable=True),
)
pptx_url: str | None = Field(default=None)
slide_htmls: list[str] = Field(sa_column=Column(JSON, nullable=False))
slide_image_urls: list[str] = Field(sa_column=Column(JSON, nullable=False))
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
)
)
+49
View File
@@ -0,0 +1,49 @@
from datetime import datetime
from typing import Optional
import uuid
from sqlmodel import Field, SQLModel
from sqlalchemy import JSON, Column, DateTime
from utils.datetime_utils import get_current_utc_datetime
def _new_template_v2_id() -> str:
return str(uuid.uuid4())
class TemplateV2(SQLModel, table=True):
__tablename__ = "template_v2"
id: str = Field(primary_key=True, default_factory=_new_template_v2_id)
name: str = Field(nullable=False)
description: Optional[str] = Field(default=None, nullable=True)
raw_layouts: Optional[dict] = Field(
default=None, sa_column=Column(JSON, nullable=True)
)
components: Optional[dict] = Field(
default=None, sa_column=Column(JSON, nullable=True)
)
merged_components: Optional[dict] = Field(
default=None, sa_column=Column(JSON, nullable=True)
)
layouts: Optional[dict] = Field(
default=None, sa_column=Column(JSON, nullable=True)
)
assets: Optional[dict] = Field(
default=None, sa_column=Column(JSON, nullable=True)
)
is_default: bool = Field(default=False, nullable=False)
created_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True), nullable=False, default=get_current_utc_datetime
)
)
updated_at: datetime = Field(
sa_column=Column(
DateTime(timezone=True),
nullable=False,
default=get_current_utc_datetime,
onupdate=get_current_utc_datetime,
)
)
@@ -0,0 +1,22 @@
import secrets
from typing import Optional
import uuid
from datetime import datetime
from sqlmodel import Column, DateTime, Field, SQLModel
from utils.datetime_utils import get_current_utc_datetime
class WebhookSubscription(SQLModel, table=True):
__tablename__ = "webhook_subscriptions"
id: str = Field(
default_factory=lambda: f"webhook-{secrets.token_hex(32)}", primary_key=True
)
created_at: datetime = Field(
sa_column=Column(DateTime(timezone=True), nullable=False),
default_factory=get_current_utc_datetime,
)
url: str
secret: Optional[str] = None
event: str = Field(index=True)