Spaces:
Sleeping
Sleeping
| from sqlalchemy import insert, MetaData, Table | |
| from sqlalchemy.orm import sessionmaker | |
| from sqlalchemy import create_engine, select | |
| from typing import Any | |
| import uuid | |
| from sqlalchemy import Column, Integer, String, ForeignKey, DateTime | |
| from sqlalchemy.ext.declarative import declarative_base | |
| import uuid | |
| from datetime import datetime | |
| Base = declarative_base() | |
| class Origin(Base): | |
| __tablename__ = "origin" | |
| id_origin = Column( | |
| String, primary_key=True, index=True, default=lambda: str(uuid.uuid4()) | |
| ) | |
| origin = Column(String, nullable=True) | |
| class Status(Base): | |
| __tablename__ = "status" | |
| id_status = Column( | |
| String, primary_key=True, index=True, default=lambda: str(uuid.uuid4()) | |
| ) | |
| status = Column(String, nullable=True) | |
| class Prompt(Base): | |
| __tablename__ = "prompt" | |
| id_prompt = Column( | |
| String, primary_key=True, index=True, default=lambda: str(uuid.uuid4()) | |
| ) | |
| session_id = Column(String, nullable=False) | |
| id_origin = Column(String, ForeignKey("origin.id_origin"), nullable=True) | |
| prompt = Column(String, nullable=True) | |
| response = Column(String, nullable=True) | |
| timestamp = Column(DateTime, nullable=True, default=datetime.now) | |
| class Log(Base): | |
| __tablename__ = "log" | |
| id_log = Column( | |
| String, primary_key=True, index=True, default=lambda: str(uuid.uuid4()) | |
| ) | |
| timestamp = Column(String, nullable=False) | |
| id_prompt = Column(String, ForeignKey("prompt.id_prompt"), nullable=False) | |
| id_status = Column(String, ForeignKey("status.id_status"), nullable=False) | |
| id_origin = Column(String, ForeignKey("origin.id_origin"), nullable=False) | |
| class Database: | |
| def __init__(self, db_path: str): | |
| self.engine = create_engine(f"sqlite:///{db_path}") | |
| self.Session = sessionmaker(bind=self.engine) | |
| self.session = self.Session() | |
| self.metadata = MetaData() | |
| self.metadata.reflect(bind=self.engine) # Load all tables | |
| def insert(self, table: str, data: dict[str, Any]) -> bool: | |
| """ | |
| Inserts a row into the specified table. | |
| :param table: str. | |
| :param data: Dictionary of column names and values. | |
| :return: True if insertion is successful, otherwise False. | |
| clés pour enregistrer dans la table prompt: | |
| - session_id | |
| - origin | |
| - prompt | |
| - response | |
| clés pour enregistrer dans la table log : | |
| - timestamp | |
| - prompt | |
| - status | |
| """ | |
| if not data: | |
| erreur = "Error: No data provided for insertion." | |
| return erreur, False | |
| table_obj = self.metadata.tables.get(table) | |
| if table_obj is None: | |
| erreur = f"Error: Table '{table}' does not exist." | |
| return erreur, False | |
| try: | |
| with self.Session() as session: | |
| if table == "prompt": | |
| statement = select(Origin).where(Origin.origin == data["origin"]) | |
| id_origin = session.scalar(statement=statement) | |
| if not id_origin: | |
| insert_origin = insert(Origin).values( | |
| id_origin=str(uuid.uuid4()), origin=data["origin"] | |
| ) | |
| session.execute(statement=insert_origin) | |
| session.commit() | |
| id_origin = session.scalar(statement=statement).id_origin | |
| insert_prompt = insert(Prompt).values( | |
| id_prompt=str(uuid.uuid4()), | |
| session_id=data["session_id"], | |
| id_origin=id_origin, | |
| prompt=data["prompt"], | |
| response=data["response"], | |
| ) | |
| session.execute(insert_prompt) | |
| session.commit() | |
| return id_prompt, True | |
| if table == "log": | |
| statement = select(Status).where(Status.status == data["status"]) | |
| id_status = session.scalar(statement=statement) | |
| if not id_status: | |
| insert_status = insert(Status).values( | |
| id_status=str(uuid.uuid4()), status=data["status"] | |
| ) | |
| session.execute(insert_status) | |
| session.commit() | |
| id_status = session.scalar(statement).id_status | |
| statement = select(Prompt).where(Prompt.prompt == data["prompt"]) | |
| prompt = session.scalar(statement) | |
| if not prompt: | |
| raise "Le prompt demandé n'existe pas." | |
| id_prompt = prompt.id_prompt | |
| id_origin = prompt.id_origin | |
| insert_log = insert(Log).values( | |
| id_log=str(uuid.uuid4()), | |
| timestamp=data["timestamp"], | |
| id_prompt=id_prompt, | |
| id_status=id_status, | |
| id_origin=id_origin, | |
| ) | |
| session.execute(insert_log) | |
| session.commit() | |
| return id_status, True | |
| except Exception as e: | |
| erreur = f"Error inserting into table '{table}': {e}" | |
| return erreur, False | |