|
from enum import Enum |
|
|
|
from pydantic import BaseModel, ValidationInfo, field_validator |
|
|
|
|
|
class 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 v |
|
|
|
|
|
class 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 v |
|
|
|
|
|
class 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 v |
|
|
|
|
|
OPS_FILE_PATH = "ops_trace/" |
|
OPS_TRACE_FAILED_KEY = "FAILED_OPS_TRACE" |
|
|