File size: 1,443 Bytes
7b4b748
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from dataclasses import dataclass, field
from pathlib import Path

from dotenv import load_dotenv

load_dotenv(Path(__file__).resolve().parents[1] / ".env")


@dataclass(frozen=True)
class TelemetryConfig:
    enabled: bool = os.getenv("OTEL_ENABLED", "true").lower() == "true"
    service_name: str = os.getenv("OTEL_SERVICE_NAME", "ollive-oss-api")
    max_spans: int = int(os.getenv("OTEL_MAX_SPANS", "2000"))


@dataclass(frozen=True)
class GuardrailConfig:
    max_input_chars: int = int(os.getenv("GUARDRAIL_MAX_INPUT_CHARS", "4000"))
    block_on_input_violation: bool = True
    block_on_output_violation: bool = True


@dataclass(frozen=True)
class CostConfig:
    cpu_hour_usd: float = float(os.getenv("API_CPU_HOUR_USD", "0.042"))
    estimated_tokens_per_char: float = float(os.getenv("API_TOKENS_PER_CHAR", "0.25"))


@dataclass(frozen=True)
class ApiConfig:
    host: str = os.getenv("API_HOST", "0.0.0.0")
    port: int = int(os.getenv("API_PORT", "8000"))
    api_key: str = os.getenv("API_SERVICE_KEY", "")
    max_history_turns: int = int(os.getenv("MAX_HISTORY_TURNS", "10"))
    benchmark_samples: int = int(os.getenv("BENCHMARK_SAMPLES", "10"))
    benchmark_seed: int = int(os.getenv("BENCHMARK_SEED", "42"))
    telemetry: TelemetryConfig = field(default_factory=TelemetryConfig)
    guardrails: GuardrailConfig = field(default_factory=GuardrailConfig)
    cost: CostConfig = field(default_factory=CostConfig)