| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | from enum import Enumfrom pydantic import BaseModel, ValidationInfo, field_validatorclass TracingProviderEnum(Enum):    LANGFUSE = "langfuse"    LANGSMITH = "langsmith"    OPIK = "opik"class BaseTracingConfig(BaseModel):    """    Base model class for tracing    """    ...class LangfuseConfig(BaseTracingConfig):    """    Model class for Langfuse tracing config.    """    public_key: str    secret_key: str    host: str = "https://api.langfuse.com"    @field_validator("host")    @classmethod    def set_value(cls, v, info: ValidationInfo):        if v is None or v == "":            v = "https://api.langfuse.com"        if not v.startswith("https://") and not v.startswith("http://"):            raise ValueError("host must start with https:// or http://")        return vclass LangSmithConfig(BaseTracingConfig):    """    Model class for Langsmith tracing config.    """    api_key: str    project: str    endpoint: str = "https://api.smith.langchain.com"    @field_validator("endpoint")    @classmethod    def set_value(cls, v, info: ValidationInfo):        if v is None or v == "":            v = "https://api.smith.langchain.com"        if not v.startswith("https://"):            raise ValueError("endpoint must start with https://")        return vclass OpikConfig(BaseTracingConfig):    """    Model class for Opik tracing config.    """    api_key: str | None = None    project: str | None = None    workspace: str | None = None    url: str = "https://www.comet.com/opik/api/"    @field_validator("project")    @classmethod    def project_validator(cls, v, info: ValidationInfo):        if v is None or v == "":            v = "Default Project"        return v    @field_validator("url")    @classmethod    def url_validator(cls, v, info: ValidationInfo):        if v is None or v == "":            v = "https://www.comet.com/opik/api/"        if not v.startswith(("https://", "http://")):            raise ValueError("url must start with https:// or http://")        if not v.endswith("/api/"):            raise ValueError("url should ends with /api/")        return vOPS_FILE_PATH = "ops_trace/"OPS_TRACE_FAILED_KEY = "FAILED_OPS_TRACE"
 |