Spaces:
Sleeping
Sleeping
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) # Will be converted to/from PostGIS POINT type | |
priority = Column(Integer, default=0) | |
is_active = Column(Boolean, default=True) | |
section = Column(String, nullable=True) # Section field (16.1, 16.2.1, 16.2.2, 16.3) | |
section_id = Column(Integer, nullable=True) # Numeric identifier for section | |
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) # Will be converted to/from PostGIS POINT type | |
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()) | |
# Relationships | |
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()) | |
# Relationships | |
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()) | |
# Relationships | |
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) | |
# Relationships | |
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()) | |
# Relationships | |
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()) | |
# Relationships | |
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()) | |
# Relationships | |
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) | |
# Relationships | |
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) |