import os import opik from loguru import logger from opik.configurator.configure import OpikConfigurator from second_brain_online.config import settings def configure() -> None: if settings.COMET_API_KEY and settings.COMET_PROJECT: try: client = OpikConfigurator(api_key=settings.COMET_API_KEY) default_workspace = client._get_default_workspace() except Exception: logger.warning( "Default workspace not found. Setting workspace to None and enabling interactive mode." ) default_workspace = None os.environ["OPIK_PROJECT_NAME"] = settings.COMET_PROJECT opik.configure( api_key=settings.COMET_API_KEY, workspace=default_workspace, use_local=False, force=True, ) logger.info( f"Opik configured successfully using workspace '{default_workspace}'" ) else: logger.warning( "COMET_API_KEY and COMET_PROJECT are not set. Set them to enable prompt monitoring with Opik (powered by Comet ML)." ) def get_or_create_dataset(name: str, prompts: list[str]) -> opik.Dataset | None: client = opik.Opik() try: dataset = client.get_dataset(name=name) except Exception: dataset = None if dataset: logger.warning(f"Dataset '{name}' already exists. Skipping dataset creation.") return dataset assert prompts, "Prompts are required to create a dataset." dataset_items = [] for prompt in prompts: dataset_items.append( { "input": prompt, } ) dataset = create_dataset( name=name, description="Dataset for evaluating the agentic app.", items=dataset_items, ) return dataset def create_dataset(name: str, description: str, items: list[dict]) -> opik.Dataset: client = opik.Opik() dataset = client.get_or_create_dataset(name=name, description=description) dataset.insert(items) dataset = client.get_dataset(name=name) return dataset