Files
kotaemon/libs/ktem/ktem/db/base_models.py
Tuan Anh Nguyen Dang (Tadashi_Cin) 3bd3830b8d feat: sso login, demo mode & new mindmap support (#644) bump:minor
* 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
2025-02-02 15:19:48 +07:00

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)