Files
2026-06-19 22:17:09 -03:00

141 lines
6.6 KiB
Python

from __future__ import annotations
import os
from pathlib import Path
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict
from dotenv import load_dotenv
ROOT_DIR = Path(__file__).resolve().parents[2]
ENV_PATH = ROOT_DIR / ".env"
load_dotenv(ENV_PATH, override=True)
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=str(ENV_PATH), extra="ignore", case_sensitive=False)
adb_user: str = Field(default="", validation_alias="ADB_USER")
adb_password: str = Field(default="", validation_alias="ADB_PASSWORD")
adb_dsn: str = Field(default="", validation_alias="ADB_DSN")
adb_wallet_location: str | None = Field(default=None, validation_alias="ADB_WALLET_LOCATION")
adb_wallet_password: str | None = Field(default=None, validation_alias="ADB_WALLET_PASSWORD")
adb_table_prefix: str = Field(default="AGENTFW", validation_alias="ADB_TABLE_PREFIX")
enable_langfuse: bool = Field(default=False, validation_alias="ENABLE_LANGFUSE")
langfuse_public_key: str | None = Field(default=None, validation_alias="LANGFUSE_PUBLIC_KEY")
langfuse_secret_key: str | None = Field(default=None, validation_alias="LANGFUSE_SECRET_KEY")
langfuse_host: str = Field(default="http://localhost:3005", validation_alias="LANGFUSE_HOST")
publish_langfuse_scores: bool = Field(default=False, validation_alias="PUBLISH_LANGFUSE_SCORES")
# llm_provider: str = Field(default="mock", validation_alias="LLM_PROVIDER")
# llm_profile: str = Field(default="judge", validation_alias="LLM_PROFILE")
# llm_profiles_path: str = Field(default="configs/llm_profiles/llm_profiles.yaml", validation_alias="LLM_PROFILES_PATH")
# oci_genai_endpoint: str | None = Field(default=None, validation_alias="OCI_GENAI_ENDPOINT")
# oci_genai_model_id: str | None = Field(default=None, validation_alias="OCI_GENAI_MODEL_ID")
# oci_genai_compartment_id: str | None = Field(default=None, validation_alias="OCI_GENAI_COMPARTMENT_ID")
# oci_genai_auth_type: str = Field(default="api_key", validation_alias="OCI_GENAI_AUTH_TYPE")
# oci_config_path: str | None = Field(default=None, validation_alias="OCI_CONFIG_PATH")
# oci_config_profile: str = Field(default="DEFAULT", validation_alias="OCI_CONFIG_PROFILE")
# llm_temperature: float = Field(default=0.0, validation_alias="LLM_TEMPERATURE")
# llm_max_tokens: int = Field(default=900, validation_alias="LLM_MAX_TOKENS")
# LLM / OCI GenAI OpenAI-compatible, mesmo padrão do Agent Framework
llm_provider: str = Field(default="mock", validation_alias="LLM_PROVIDER")
llm_profile: str = Field(default="judge", validation_alias="LLM_PROFILE")
llm_profiles_path: str = Field(default="configs/llm_profiles/llm_profiles.yaml", validation_alias="LLM_PROFILES_PATH")
oci_genai_base_url: str | None = Field(default=None, validation_alias="OCI_GENAI_BASE_URL")
oci_genai_endpoint: str | None = Field(default=None, validation_alias="OCI_GENAI_ENDPOINT") # compatibilidade
oci_genai_model: str = Field(default="openai.gpt-4.1", validation_alias="OCI_GENAI_MODEL")
oci_genai_model_id: str | None = Field(default=None, validation_alias="OCI_GENAI_MODEL_ID") # compatibilidade
oci_genai_api_key: str | None = Field(default=None, validation_alias="OCI_GENAI_API_KEY")
oci_genai_project_ocid: str | None = Field(default=None, validation_alias="OCI_GENAI_PROJECT_OCID")
llm_temperature: float = Field(default=0.0, validation_alias="LLM_TEMPERATURE")
llm_max_tokens: int = Field(default=900, validation_alias="LLM_MAX_TOKENS")
llm_timeout_seconds: int = Field(default=120, validation_alias="LLM_TIMEOUT_SECONDS")
agents_config_path: str = Field(default="configs/judge/agents.yaml", validation_alias="AGENTS_CONFIG_PATH")
trace_prompt_path: str = Field(default="configs/judge/trace_metrics.yaml", validation_alias="TRACE_PROMPT_PATH")
session_prompt_path: str = Field(default="configs/judge/session_metrics.yaml", validation_alias="SESSION_PROMPT_PATH")
output_dir: str = Field(default="output", validation_alias="OUTPUT_DIR")
batch_size: int = Field(default=50, validation_alias="BATCH_SIZE")
max_attempts: int = Field(default=3, validation_alias="MAX_ATTEMPTS")
enable_gcs_upload: bool = Field(default=False, validation_alias="ENABLE_GCS_UPLOAD")
judge_gcs_bucket: str | None = Field(default=None, validation_alias="JUDGE_GCS_BUCKET")
google_application_credentials: str | None = Field(default=None, validation_alias="GOOGLE_APPLICATION_CREDENTIALS")
identity_config_path: str = "configs/identity.yaml"
@property
def project_root(self) -> Path:
return ROOT_DIR
def path(self, value: str | Path) -> Path:
p = Path(value)
return p if p.is_absolute() else ROOT_DIR / p
@property
def ADB_USER(self): return self.adb_user
@property
def ADB_PASSWORD(self): return self.adb_password
@property
def ADB_DSN(self): return self.adb_dsn
@property
def ADB_WALLET_LOCATION(self): return self.adb_wallet_location
@property
def ADB_WALLET_PASSWORD(self): return self.adb_wallet_password
@property
def ADB_TABLE_PREFIX(self): return (self.adb_table_prefix or "AGENTFW").upper().rstrip("_")
@property
def has_langfuse_credentials(self) -> bool:
return bool(self.langfuse_public_key and self.langfuse_secret_key)
@property
def can_use_langfuse(self) -> bool:
return bool(self.enable_langfuse and self.has_langfuse_credentials)
@property
def can_publish_langfuse_scores(self) -> bool:
return bool(self.publish_langfuse_scores and self.can_use_langfuse)
@property
def OCI_GENAI_BASE_URL(self) -> str | None:
return self.oci_genai_base_url or self.oci_genai_endpoint
@property
def OCI_GENAI_MODEL(self) -> str:
return self.oci_genai_model_id or self.oci_genai_model
@property
def OCI_GENAI_API_KEY(self) -> str | None:
return self.oci_genai_api_key
@property
def OCI_GENAI_PROJECT_OCID(self) -> str | None:
return self.oci_genai_project_ocid
@property
def LLM_PROVIDER(self) -> str:
return self.llm_provider
@property
def LLM_TEMPERATURE(self) -> float:
return self.llm_temperature
@property
def LLM_MAX_TOKENS(self) -> int:
return self.llm_max_tokens
@property
def LLM_TIMEOUT_SECONDS(self) -> int:
return self.llm_timeout_seconds
@property
def LLM_PROFILES_PATH(self) -> str:
return self.llm_profiles_path
settings = Settings()
if settings.ADB_WALLET_LOCATION:
os.environ["TNS_ADMIN"] = settings.ADB_WALLET_LOCATION