/ main.py
main.py
  1  from os import system
  2  from dataclasses import dataclass
  3  from sqlite3 import connect, Error as SQLError
  4  from ollama import create, RequestError, ResponseError
  5  from loguru import logger
  6  
  7  DB_PATH: str = "db/models.db"
  8  
  9  name: str = input("Choose a name for your model: ")
 10  select: str = input("Select a model to train: ")
 11  prompt: str = input("Enter a prompt to train the model with: ")
 12  backup: str = input("Would you like to backup this model? (y/n/restore/view): ")
 13  
 14  system("clear")
 15  
 16  modelfile: str = f"""
 17  FROM {select}
 18  SYSTEM {prompt}
 19  """
 20  
 21  
 22  class Database:
 23      @staticmethod
 24      def create_backup(path: str) -> None:
 25          try:
 26              conn = connect(path)
 27              c = conn.cursor()
 28              c.execute("CREATE TABLE IF NOT EXISTS models (name TEXT, modelfile TEXT)")
 29              c.execute("INSERT INTO models VALUES (?, ?)", (name, modelfile))
 30              conn.commit()
 31          except SQLError as e:
 32              logger.error(e)
 33          finally:
 34              conn.close()
 35  
 36      @staticmethod
 37      def restore_backup(path: str) -> None:
 38          try:
 39              conn = connect(path)
 40              c = conn.cursor()
 41              c.execute("SELECT * FROM models")
 42              models = c.fetchall()
 43              for model in models:
 44                  create(model=model[0], modelfile=model[1])
 45                  logger.info(f"Restored Model: {model[0]}")
 46          except SQLError as e:
 47              logger.error(e)
 48          finally:
 49              conn.close()
 50      
 51      @staticmethod
 52      def lookup(path: str, name: str) -> None:
 53          try:
 54              conn = connect(path)
 55              c = conn.cursor()
 56              c.execute("SELECT modelfile FROM models WHERE name=?", (name,))
 57              modelfile = c.fetchone()
 58              logger.info(f"Model: {name}\n {modelfile[0]}")
 59          except SQLError as e:
 60              logger.error(e)
 61          finally:
 62              conn.close()
 63  
 64  
 65  class Factory:
 66      @staticmethod
 67      def generate() -> None:
 68          try:
 69              model: Model = Model(name, modelfile)
 70              create(model=model.name, modelfile=model.modelfile)
 71              logger.info(f"Generated Model: {model.name}")
 72          except (RuntimeError, RequestError, ResponseError) as e:
 73              logger.error(e)
 74          finally:
 75              match backup:
 76                  case "y":
 77                      Database.create_backup(DB_PATH)
 78                      logger.info(f"Backup created for Model: {name}")
 79                  case "n":
 80                      logger.info("No backup created")
 81                      exit(0)
 82                  case "restore":
 83                      logger.info("Restoring backup...")
 84                      Database.restore_backup(DB_PATH)
 85                      exit(0)
 86                  case "view":
 87                      query = input("Enter the name of the backup you'd like to view: ")
 88                      system("clear")
 89                      Database.lookup(DB_PATH, query)
 90                      exit(0)
 91                  case _:
 92                      logger.error("No backup created. Invalid input, exiting...")
 93                      exit(1)
 94  
 95  
 96  @dataclass
 97  class Model(Factory):
 98      name: str
 99      modelfile: str
100      
101      
102  if __name__ == "__main__":
103      Model.generate()