Spaces:
Runtime error
Runtime error
| from loguru import logger | |
| from pydantic_settings import BaseSettings, SettingsConfigDict | |
| from zenml.client import Client | |
| from zenml.exceptions import EntityExistsError | |
| class Settings(BaseSettings): | |
| model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra = 'ignore') # | |
| # --- Required settings even when working locally. --- | |
| # OpenAI API | |
| OPENAI_MODEL_ID: str = "gpt-4o-mini" | |
| OPENAI_API_KEY: str | None = None | |
| # Huggingface API | |
| HUGGINGFACE_ACCESS_TOKEN: str | None = None | |
| # Comet ML (during training) | |
| COMET_API_KEY: str | None = None | |
| COMET_PROJECT: str = "twin" | |
| # --- Required settings when deploying the code. --- | |
| # --- Otherwise, default values values work fine. --- | |
| # MongoDB database | |
| DATABASE_HOST: str = "mongodb://llm_engineering:llm_engineering@127.0.0.1:27017" | |
| DATABASE_NAME: str = "twin" | |
| # Qdrant vector database | |
| USE_QDRANT_CLOUD: bool = False | |
| QDRANT_DATABASE_HOST: str = "localhost" | |
| QDRANT_DATABASE_PORT: int = 6333 | |
| QDRANT_CLOUD_URL: str = "str" | |
| QDRANT_APIKEY: str | None = None | |
| # AWS Authentication | |
| AWS_REGION: str = "eu-central-1" | |
| AWS_ACCESS_KEY: str | None = None | |
| AWS_SECRET_KEY: str | None = None | |
| AWS_ARN_ROLE: str | None = None | |
| # --- Optional settings used to tweak the code. --- | |
| # AWS SageMaker | |
| HF_MODEL_ID: str = "mlabonne/TwinLlama-3.1-8B-DPO" | |
| GPU_INSTANCE_TYPE: str = "ml.g5.2xlarge" | |
| SM_NUM_GPUS: int = 1 | |
| MAX_INPUT_LENGTH: int = 2048 | |
| MAX_TOTAL_TOKENS: int = 4096 | |
| MAX_BATCH_TOTAL_TOKENS: int = 4096 | |
| COPIES: int = 1 # Number of replicas | |
| GPUS: int = 1 # Number of GPUs | |
| CPUS: int = 2 # Number of CPU cores | |
| SAGEMAKER_ENDPOINT_CONFIG_INFERENCE: str = "twin" | |
| SAGEMAKER_ENDPOINT_INFERENCE: str = "twin" | |
| TEMPERATURE_INFERENCE: float = 0.01 | |
| TOP_P_INFERENCE: float = 0.9 | |
| MAX_NEW_TOKENS_INFERENCE: int = 150 | |
| # RAG | |
| TEXT_EMBEDDING_MODEL_ID: str = "sentence-transformers/all-MiniLM-L6-v2" | |
| RERANKING_CROSS_ENCODER_MODEL_ID: str = "cross-encoder/ms-marco-MiniLM-L-4-v2" | |
| RAG_MODEL_DEVICE: str = "cpu" | |
| # LinkedIn Credentials | |
| LINKEDIN_USERNAME: str | None = None | |
| LINKEDIN_PASSWORD: str | None = None | |
| def OPENAI_MAX_TOKEN_WINDOW(self) -> int: | |
| official_max_token_window = { | |
| "gpt-3.5-turbo": 16385, | |
| "gpt-4-turbo": 128000, | |
| "gpt-4o": 128000, | |
| "gpt-4o-mini": 128000, | |
| }.get(self.OPENAI_MODEL_ID, 128000) | |
| max_token_window = int(official_max_token_window * 0.90) | |
| return max_token_window | |
| def load_settings(cls) -> "Settings": | |
| """ | |
| Tries to load the settings from the ZenML secret store. If the secret does not exist, it initializes the settings from the .env file and default values. | |
| Returns: | |
| Settings: The initialized settings object. | |
| """ | |
| try: | |
| logger.info("Loading settings from the ZenML secret store.") | |
| settings_secrets = Client().get_secret("settings") | |
| settings = Settings(**settings_secrets.secret_values) | |
| except (RuntimeError, KeyError): | |
| logger.warning( | |
| "Failed to load settings from the ZenML secret store. Defaulting to loading the settings from the '.env' file." | |
| ) | |
| settings = Settings() | |
| return settings | |
| def export(self) -> None: | |
| """ | |
| Exports the settings to the ZenML secret store. | |
| """ | |
| env_vars = settings.model_dump() | |
| for key, value in env_vars.items(): | |
| env_vars[key] = str(value) | |
| client = Client() | |
| try: | |
| client.create_secret(name="settings", values=env_vars) | |
| except EntityExistsError: | |
| logger.warning( | |
| "Secret 'scope' already exists. Delete it manually by running 'zenml secret delete settings', before trying to recreate it." | |
| ) | |
| settings = Settings.load_settings() | |