Spaces:
Runtime error
Runtime error
File size: 4,476 Bytes
cd6f98e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
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
@property
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"
@property
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}",
)
@property
def pusher_enabled(self) -> bool:
return all(
[
self.pusher_app_id,
self.pusher_key,
self.pusher_secret,
self.pusher_cluster,
]
)
@property
def kafka_enabled(self) -> bool:
return all(
[
self.kafka_bootstrap_servers,
self.kafka_username,
self.kafka_password,
]
)
@property
def helicone_enabled(self) -> bool:
return all(
[
self.helicone_api_base,
self.helicone_api_key,
]
)
@property
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()
|