Spaces:
Runtime error
Runtime error
| import datetime | |
| import logging | |
| from fastapi import HTTPException | |
| from sqlalchemy.orm import Session | |
| from components.dbo.models.llm_config import LLMConfig as LLMConfigSQL | |
| from schemas.llm_config import LLMConfig as LLMConfigScheme, LLMConfigCreateScheme | |
| logger = logging.getLogger(__name__) | |
| class LLMConfigService: | |
| """ | |
| Сервис для работы с параметрами LLM. | |
| """ | |
| def __init__(self, db: Session): | |
| logger.info("LLMConfigService initializing") | |
| self.db = db | |
| def create(self, config_scheme: LLMConfigCreateScheme): | |
| logger.info("Creating a new config") | |
| with self.db() as session: | |
| new_config: LLMConfigSQL = LLMConfigSQL(**config_scheme.dict()) | |
| session.add(new_config) | |
| session.commit() | |
| session.refresh(new_config) | |
| if(new_config.is_default): | |
| self.set_as_default(new_config.id) | |
| return LLMConfigScheme(**new_config.to_dict()) | |
| def get_list(self) -> list[LLMConfigScheme]: | |
| with self.db() as session: | |
| configs: list[LLMConfigSQL] = session.query(LLMConfigSQL).all() | |
| return [ | |
| LLMConfigScheme(**config.to_dict()) | |
| for config in configs | |
| ] | |
| def get_by_id(self, id: int) -> LLMConfigScheme: | |
| with self.db() as session: | |
| config: LLMConfigSQL = session.query(LLMConfigSQL).filter(LLMConfigSQL.id == id).first() | |
| if not config: | |
| raise HTTPException( | |
| status_code=400, detail=f"Item with id {id} not found" | |
| ) | |
| return LLMConfigScheme(**config.to_dict()) | |
| def get_default(self) -> LLMConfigScheme: | |
| with self.db() as session: | |
| config: LLMConfigSQL = session.query(LLMConfigSQL).filter(LLMConfigSQL.is_default).first() | |
| if not config: | |
| # Возвращаем дефолтнейшие параметры в случае, если ничего нет. | |
| # Неочевидно, но в случае факапа всё работать будет. | |
| return LLMConfigScheme( | |
| is_default=True, | |
| model='meta-llama/Llama-3.3-70B-Instruct-Turbo', | |
| temperature=0.14, | |
| top_p=0.95, | |
| min_p=0.05, | |
| frequency_penalty=-0.001, | |
| presence_penalty=1.3, | |
| n_predict=1000, | |
| seed=42, | |
| id=0, | |
| date_created=datetime.datetime.now(datetime.timezone.utc) | |
| ) | |
| return LLMConfigScheme(**config.to_dict()) | |
| def set_as_default(self, id: int): | |
| logger.info(f"Set default config: {id}") | |
| with self.db() as session: | |
| session.query(LLMConfigSQL).filter(LLMConfigSQL.is_default).update({"is_default": False}) | |
| config_new: LLMConfigSQL = session.query(LLMConfigSQL).filter(LLMConfigSQL.id == id).first() | |
| if not config_new: | |
| raise HTTPException( | |
| status_code=400, detail=f"Item with id {id} not found" | |
| ) | |
| config_new.is_default = True | |
| session.commit() | |
| def update(self, id: int, new_config: LLMConfigScheme): | |
| logger.info("Updating default config") | |
| with self.db() as session: | |
| config: LLMConfigSQL = session.query(LLMConfigSQL).filter(LLMConfigSQL.id == id).first() | |
| if not config: | |
| raise HTTPException( | |
| status_code=400, detail=f"Item with id {id} not found" | |
| ) | |
| update_data = new_config.model_dump(exclude_unset=True) | |
| for key, value in update_data.items(): | |
| if hasattr(config, key): | |
| setattr(config, key, value) | |
| session.commit() | |
| if(new_config.is_default): | |
| self.set_as_default(new_config.id) | |
| session.refresh(config) | |
| return config | |
| def delete(self, id: int): | |
| logger.info("Deleting config: {id}") | |
| with self.db() as session: | |
| config_to_del: LLMConfigSQL = session.query(LLMConfigSQL).get(id) | |
| config_default: LLMConfigSQL = session.query(LLMConfigSQL).filter(LLMConfigSQL.is_default).first() | |
| if config_to_del.id == config_default.id: | |
| raise HTTPException( | |
| status_code=400, detail=f"The default config cannot be deleted" | |
| ) | |
| session.delete(config_to_del) | |
| session.commit() | |