* fix: update .env.example * feat: add SSO login * fix: update flowsetting * fix: add requirement * fix: refine UI * fix: update group id-based operation * fix: improve citation logics * fix: UI enhancement * fix: user_id to string in models * fix: improve chat suggestion UI and flow * fix: improve group id handling * fix: improve chat suggestion * fix: secure download for single file * fix: file limiting in docstore * fix: improve chat suggestion logics & language conform * feat: add markmap and select text to highlight function * fix: update Dockerfile * fix: user id auto generate * fix: default user id * feat: add demo mode * fix: update flowsetting * fix: revise default params for demo * feat: sso_app alternative * feat: sso login demo * feat: demo specific customization * feat: add login using API key * fix: disable key-based login * fix: optimize duplicate upload * fix: gradio routing * fix: disable arm build for demo * fix: revise full-text search js logic * feat: add rate limit * fix: update Dockerfile with new launch script * fix: update Dockerfile * fix: update Dockerignore * fix: update ratelimit logic * fix: user_id in user management page * fix: rename conv logic * feat: update demo hint * fix: minor fix * fix: highlight on long PDF load * feat: add HF paper list * fix: update HF papers load logic * feat: fly config * fix: update fly config * fix: update paper list pull api * fix: minor update root routing * fix: minor update root routing * fix: simplify login flow & paper list UI * feat: add paper recommendation * fix: update Dockerfile * fix: update Dockerfile * fix: update default model * feat: add long context Ollama through LCOllama * feat: espose Gradio share to env * fix: revert customized changes * fix: list group at app load * fix: relocate share conv button * fix: update launch script * fix: update Docker CI * feat: add Ollama model selection at first setup * docs: update README
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
import datetime
|
|
import uuid
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import JSON, Column
|
|
from sqlmodel import Field, SQLModel
|
|
from tzlocal import get_localzone
|
|
|
|
|
|
class BaseConversation(SQLModel):
|
|
"""Store the chat conversation between the user and the bot
|
|
|
|
Attributes:
|
|
id: canonical id to identify the conversation
|
|
name: human-friendly name of the conversation
|
|
user: the user id
|
|
data_source: the data source of the conversation
|
|
date_created: the date the conversation was created
|
|
date_updated: the date the conversation was updated
|
|
"""
|
|
|
|
__table_args__ = {"extend_existing": True}
|
|
|
|
id: str = Field(
|
|
default_factory=lambda: uuid.uuid4().hex, primary_key=True, index=True
|
|
)
|
|
name: str = Field(
|
|
default_factory=lambda: "Untitled - {}".format(
|
|
datetime.datetime.now(get_localzone()).strftime("%Y-%m-%d %H:%M:%S")
|
|
)
|
|
)
|
|
user: str = Field(default="") # For now we only have one user
|
|
|
|
is_public: bool = Field(default=False)
|
|
|
|
# contains messages + current files + chat_suggestions
|
|
data_source: dict = Field(default={}, sa_column=Column(JSON))
|
|
|
|
date_created: datetime.datetime = Field(
|
|
default_factory=lambda: datetime.datetime.now(get_localzone())
|
|
)
|
|
date_updated: datetime.datetime = Field(
|
|
default_factory=lambda: datetime.datetime.now(get_localzone())
|
|
)
|
|
|
|
|
|
class BaseUser(SQLModel):
|
|
"""Store the user information
|
|
|
|
Attributes:
|
|
id: canonical id to identify the user
|
|
username: the username of the user
|
|
password: the hashed password of the user
|
|
"""
|
|
|
|
__table_args__ = {"extend_existing": True}
|
|
|
|
id: str = Field(
|
|
default_factory=lambda: uuid.uuid4().hex, primary_key=True, index=True
|
|
)
|
|
username: str = Field(unique=True)
|
|
username_lower: str = Field(unique=True)
|
|
password: str
|
|
admin: bool = Field(default=False)
|
|
|
|
|
|
class BaseSettings(SQLModel):
|
|
"""Record of user settings
|
|
|
|
Attributes:
|
|
id: canonical id to identify the settings
|
|
user: the user id
|
|
setting: the user settings (in dict/json format)
|
|
"""
|
|
|
|
__table_args__ = {"extend_existing": True}
|
|
|
|
id: str = Field(
|
|
default_factory=lambda: uuid.uuid4().hex, primary_key=True, index=True
|
|
)
|
|
user: str = Field(default="")
|
|
setting: dict = Field(default={}, sa_column=Column(JSON))
|
|
|
|
|
|
class BaseIssueReport(SQLModel):
|
|
"""Store user-reported issues
|
|
|
|
Attributes:
|
|
id: canonical id to identify the issue report
|
|
issues: the issues reported by the user, formatted as a dict
|
|
chat: the conversation id when the user reported the issue
|
|
settings: the user settings at the time of the issue report
|
|
user: the user id
|
|
"""
|
|
|
|
__table_args__ = {"extend_existing": True}
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
issues: dict = Field(default={}, sa_column=Column(JSON))
|
|
chat: Optional[dict] = Field(default=None, sa_column=Column(JSON))
|
|
settings: Optional[dict] = Field(default=None, sa_column=Column(JSON))
|
|
user: Optional[str] = Field(default=None)
|