|
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, Float, Text, LargeBinary, JSON |
|
from sqlalchemy.sql import func |
|
from sqlalchemy.orm import relationship |
|
from .postgresql import Base |
|
import datetime |
|
|
|
class FAQItem(Base): |
|
__tablename__ = "faq_item" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
question = Column(String, nullable=False) |
|
answer = Column(String, nullable=False) |
|
is_active = Column(Boolean, default=True) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class EmergencyItem(Base): |
|
__tablename__ = "emergency_item" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False) |
|
phone_number = Column(String, nullable=False) |
|
description = Column(String, nullable=True) |
|
address = Column(String, nullable=True) |
|
location = Column(String, nullable=True) |
|
priority = Column(Integer, default=0) |
|
is_active = Column(Boolean, default=True) |
|
section = Column(String, nullable=True) |
|
section_id = Column(Integer, nullable=True) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class EventItem(Base): |
|
__tablename__ = "event_item" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False) |
|
description = Column(Text, nullable=False) |
|
address = Column(String, nullable=False) |
|
location = Column(String, nullable=True) |
|
date_start = Column(DateTime, nullable=False) |
|
date_end = Column(DateTime, nullable=True) |
|
price = Column(JSON, nullable=True) |
|
url = Column(String, nullable=True) |
|
is_active = Column(Boolean, default=True) |
|
featured = Column(Boolean, default=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class AboutPixity(Base): |
|
__tablename__ = "about_pixity" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
content = Column(Text, nullable=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class SolanaSummit(Base): |
|
__tablename__ = "solana_summit" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
content = Column(Text, nullable=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class DaNangBucketList(Base): |
|
__tablename__ = "danang_bucket_list" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
content = Column(Text, nullable=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
class VectorDatabase(Base): |
|
__tablename__ = "vector_database" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False, unique=True) |
|
description = Column(String, nullable=True) |
|
pinecone_index = Column(String, nullable=False) |
|
api_key_id = Column(Integer, ForeignKey("api_key.id"), nullable=True) |
|
status = Column(String, default="active") |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
|
|
documents = relationship("Document", back_populates="vector_database") |
|
vector_statuses = relationship("VectorStatus", back_populates="vector_database") |
|
engine_associations = relationship("EngineVectorDb", back_populates="vector_database") |
|
api_key_ref = relationship("ApiKey", foreign_keys=[api_key_id]) |
|
|
|
class Document(Base): |
|
__tablename__ = "document" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False) |
|
file_type = Column(String, nullable=True) |
|
content_type = Column(String, nullable=True) |
|
size = Column(Integer, nullable=True) |
|
is_embedded = Column(Boolean, default=False) |
|
vector_database_id = Column(Integer, ForeignKey("vector_database.id"), nullable=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
|
|
vector_database = relationship("VectorDatabase", back_populates="documents") |
|
vector_statuses = relationship("VectorStatus", back_populates="document") |
|
file_content_ref = relationship("DocumentContent", back_populates="document", uselist=False, cascade="all, delete-orphan") |
|
|
|
class DocumentContent(Base): |
|
__tablename__ = "document_content" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
document_id = Column(Integer, ForeignKey("document.id"), nullable=False, unique=True) |
|
file_content = Column(LargeBinary, nullable=True) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
|
|
|
|
document = relationship("Document", back_populates="file_content_ref") |
|
|
|
class VectorStatus(Base): |
|
__tablename__ = "vector_status" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
document_id = Column(Integer, ForeignKey("document.id"), nullable=False) |
|
vector_database_id = Column(Integer, ForeignKey("vector_database.id"), nullable=False) |
|
vector_id = Column(String, nullable=True) |
|
status = Column(String, default="pending") |
|
error_message = Column(String, nullable=True) |
|
embedded_at = Column(DateTime, nullable=True) |
|
|
|
|
|
document = relationship("Document", back_populates="vector_statuses") |
|
vector_database = relationship("VectorDatabase", back_populates="vector_statuses") |
|
|
|
class TelegramBot(Base): |
|
__tablename__ = "telegram_bot" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False) |
|
username = Column(String, nullable=False, unique=True) |
|
token = Column(String, nullable=False) |
|
status = Column(String, default="inactive") |
|
created_at = Column(DateTime, server_default=func.now()) |
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
|
|
bot_engines = relationship("BotEngine", back_populates="bot") |
|
|
|
class ChatEngine(Base): |
|
__tablename__ = "chat_engine" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
name = Column(String, nullable=False) |
|
answer_model = Column(String, nullable=False) |
|
system_prompt = Column(Text, nullable=True) |
|
empty_response = Column(String, nullable=True) |
|
characteristic = Column(Text, nullable=True) |
|
historical_sessions_number = Column(Integer, default=3) |
|
similarity_top_k = Column(Integer, default=3) |
|
vector_distance_threshold = Column(Float, default=0.75) |
|
grounding_threshold = Column(Float, default=0.2) |
|
use_public_information = Column(Boolean, default=False) |
|
pinecone_index_name = Column(String, default="testbot768") |
|
status = Column(String, default="active") |
|
created_at = Column(DateTime, server_default=func.now()) |
|
last_modified = Column(DateTime, server_default=func.now(), onupdate=func.now()) |
|
|
|
|
|
bot_engines = relationship("BotEngine", back_populates="engine") |
|
engine_vector_dbs = relationship("EngineVectorDb", back_populates="engine") |
|
|
|
class BotEngine(Base): |
|
__tablename__ = "bot_engine" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
bot_id = Column(Integer, ForeignKey("telegram_bot.id"), nullable=False) |
|
engine_id = Column(Integer, ForeignKey("chat_engine.id"), nullable=False) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
|
|
|
|
bot = relationship("TelegramBot", back_populates="bot_engines") |
|
engine = relationship("ChatEngine", back_populates="bot_engines") |
|
|
|
class EngineVectorDb(Base): |
|
__tablename__ = "engine_vector_db" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
engine_id = Column(Integer, ForeignKey("chat_engine.id"), nullable=False) |
|
vector_database_id = Column(Integer, ForeignKey("vector_database.id"), nullable=False) |
|
priority = Column(Integer, default=0) |
|
|
|
|
|
engine = relationship("ChatEngine", back_populates="engine_vector_dbs") |
|
vector_database = relationship("VectorDatabase", back_populates="engine_associations") |
|
|
|
class ApiKey(Base): |
|
__tablename__ = "api_key" |
|
|
|
id = Column(Integer, primary_key=True, index=True) |
|
key_type = Column(String, nullable=False) |
|
key_value = Column(Text, nullable=False) |
|
description = Column(Text, nullable=True) |
|
created_at = Column(DateTime, server_default=func.now()) |
|
last_used = Column(DateTime, nullable=True) |
|
expires_at = Column(DateTime, nullable=True) |
|
is_active = Column(Boolean, default=True) |