Spaces:
Runtime error
Runtime error
| import platform | |
| from pathlib import Path | |
| from tempfile import gettempdir | |
| from typing import List, Literal, Optional, Union | |
| from pydantic import BaseSettings | |
| from yarl import URL | |
| from reworkd_platform.constants import ENV_PREFIX | |
| TEMP_DIR = Path(gettempdir()) | |
| LOG_LEVEL = Literal[ | |
| "NOTSET", | |
| "DEBUG", | |
| "INFO", | |
| "WARNING", | |
| "ERROR", | |
| "FATAL", | |
| ] | |
| SASL_MECHANISM = Literal[ | |
| "PLAIN", | |
| "SCRAM-SHA-256", | |
| ] | |
| ENVIRONMENT = Literal[ | |
| "development", | |
| "production", | |
| ] | |
| class Settings(BaseSettings): | |
| """ | |
| Application settings. | |
| These parameters can be configured | |
| with environment variables. | |
| """ | |
| # Application settings | |
| host: str = "127.0.0.1" | |
| port: int = 8000 | |
| workers_count: int = 1 | |
| reload: bool = True | |
| environment: ENVIRONMENT = "development" | |
| log_level: LOG_LEVEL = "INFO" | |
| # Make sure you update this with your own secret key | |
| # Must be 32 url-safe base64-encoded bytes | |
| secret_signing_key: str = "JF52S66x6WMoifP5gZreiguYs9LYMn0lkXqgPYoNMD0=" | |
| # OpenAI | |
| openai_api_base: str = "https://api.openai.com/v1" | |
| openai_api_key: str = "<Should be updated via env>" | |
| openai_api_version: str = "2023-08-01-preview" | |
| azure_openai_deployment_name: str = "<Should be updated via env if using azure>" | |
| # Helicone | |
| helicone_api_base: str = "https://oai.hconeai.com/v1" | |
| helicone_api_key: Optional[str] = None | |
| replicate_api_key: Optional[str] = None | |
| serp_api_key: Optional[str] = None | |
| # Frontend URL for CORS | |
| frontend_url: str = "http://localhost:3000" | |
| allowed_origins_regex: Optional[str] = None | |
| # Variables for the database | |
| db_host: str = "localhost" | |
| db_port: int = 3308 | |
| db_user: str = "reworkd_platform" | |
| db_pass: str = "reworkd_platform" | |
| db_base: str = "reworkd_platform" | |
| db_echo: bool = False | |
| db_ca_path: Optional[str] = None | |
| # Variables for Pinecone DB | |
| pinecone_api_key: Optional[str] = None | |
| pinecone_index_name: Optional[str] = None | |
| pinecone_environment: Optional[str] = None | |
| # Sentry's configuration. | |
| sentry_dsn: Optional[str] = None | |
| sentry_sample_rate: float = 1.0 | |
| kafka_bootstrap_servers: Union[str, List[str]] = [] | |
| kafka_username: Optional[str] = None | |
| kafka_password: Optional[str] = None | |
| kafka_ssal_mechanism: SASL_MECHANISM = "PLAIN" | |
| # Websocket settings | |
| pusher_app_id: Optional[str] = None | |
| pusher_key: Optional[str] = None | |
| pusher_secret: Optional[str] = None | |
| pusher_cluster: Optional[str] = None | |
| # Application Settings | |
| ff_mock_mode_enabled: bool = False # Controls whether calls are mocked | |
| max_loops: int = 25 # Maximum number of loops to run | |
| # Settings for sid | |
| sid_client_id: Optional[str] = None | |
| sid_client_secret: Optional[str] = None | |
| sid_redirect_uri: Optional[str] = None | |
| def kafka_consumer_group(self) -> str: | |
| """ | |
| Kafka consumer group will be the name of the host in development | |
| mode, making it easier to share a dev cluster. | |
| """ | |
| if self.environment == "development": | |
| return platform.node() | |
| return "platform" | |
| def db_url(self) -> URL: | |
| return URL.build( | |
| scheme="mysql+aiomysql", | |
| host=self.db_host, | |
| port=self.db_port, | |
| user=self.db_user, | |
| password=self.db_pass, | |
| path=f"/{self.db_base}", | |
| ) | |
| def pusher_enabled(self) -> bool: | |
| return all( | |
| [ | |
| self.pusher_app_id, | |
| self.pusher_key, | |
| self.pusher_secret, | |
| self.pusher_cluster, | |
| ] | |
| ) | |
| def kafka_enabled(self) -> bool: | |
| return all( | |
| [ | |
| self.kafka_bootstrap_servers, | |
| self.kafka_username, | |
| self.kafka_password, | |
| ] | |
| ) | |
| def helicone_enabled(self) -> bool: | |
| return all( | |
| [ | |
| self.helicone_api_base, | |
| self.helicone_api_key, | |
| ] | |
| ) | |
| def sid_enabled(self) -> bool: | |
| return all( | |
| [ | |
| self.sid_client_id, | |
| self.sid_client_secret, | |
| self.sid_redirect_uri, | |
| ] | |
| ) | |
| class Config: | |
| env_file = ".env" | |
| env_prefix = ENV_PREFIX | |
| env_file_encoding = "utf-8" | |
| settings = Settings() | |