ollive-api / config.py
Karthik Namboori
Deploy ollive FastAPI Docker Space
7b4b748
import os
from dataclasses import dataclass, field
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(__file__).parent / ".env")
@dataclass(frozen=True)
class OSSConfig:
model_id: str = os.getenv("OSS_MODEL_ID", "Qwen/Qwen2.5-0.5B-Instruct")
backend: str = os.getenv("OSS_BACKEND", "local") # local | api
hf_token: str = os.getenv("HF_TOKEN", "")
device: int = int(os.getenv("OSS_DEVICE", "-1")) # -1 = CPU, 0 = first GPU
max_history_turns: int = int(os.getenv("MAX_HISTORY_TURNS", "10"))
max_tokens: int = int(os.getenv("OSS_MAX_TOKENS", "512"))
temperature: float = float(os.getenv("OSS_TEMPERATURE", "0.3"))
@dataclass(frozen=True)
class FrontierConfig:
provider: str = os.getenv("FRONTIER_PROVIDER", "openai")
model_id: str = os.getenv("FRONTIER_MODEL_ID", "gpt-4o-mini")
api_key: str = os.getenv("OPENAI_API_KEY", "")
anthropic_api_key: str = os.getenv("ANTHROPIC_API_KEY", "")
max_history_turns: int = int(os.getenv("MAX_HISTORY_TURNS", "10"))
max_tokens: int = int(os.getenv("FRONTIER_MAX_TOKENS", "512"))
temperature: float = float(os.getenv("FRONTIER_TEMPERATURE", "0.7"))
@dataclass(frozen=True)
class JudgeConfig:
model_id: str = os.getenv("JUDGE_MODEL_ID", "gpt-4o-mini")
@dataclass(frozen=True)
class AppConfig:
oss: OSSConfig = field(default_factory=OSSConfig)
frontier: FrontierConfig = field(default_factory=FrontierConfig)
judge: JudgeConfig = field(default_factory=JudgeConfig)
system_prompt: str = os.getenv(
"SYSTEM_PROMPT",
(
"You are a helpful personal assistant. "
"Answer clearly, remember context from the conversation, "
"and ask clarifying questions when needed."
),
)
oss_system_prompt: str = os.getenv(
"OSS_SYSTEM_PROMPT",
(
"You are Olive, a local open-source assistant powered by the Qwen model. "
"Your name is Olive. You are NOT Claude, NOT ChatGPT, and NOT Ollie. "
"Never say you were made by Anthropic or OpenAI. "
"If asked who you are, say: 'I'm Olive, an open-source assistant running on Qwen.' "
"Keep answers concise and stay in character as Olive."
),
)
@property
def judge_model_id(self) -> str:
return self.judge.model_id