Create Superwise Client

from superwise_api.superwise_client import SuperwiseClient

# assure that you have SUPERWISE_CLIENT_ID, SUPERWISE_CLIENT_SECRET in your env
sw = SuperwiseClient()

with SuperwiseClient you can start to work with Superwise API !!!


Observability

Create a Dataset

dataset = sw.dataset.create(name="My Dataset", id="dataset_id")

Write data record to a dataset



dataset.log_record_to_dataset(
    dataset_id="dataset_id",
    data={
        "some_data_key": "some_data_value",
        "another_data_key": "another_data_value"
        })

Create an S3 Source

s3_source = sw.source.create_s3_source(name="My S3 Source", bucket_arn="<S3 Bucket ARN>",
                                       queue_arn="<SQS ARN>", aws_access_key_id="<AWS ACCESS KEY ID>",
                                       aws_secret_access_key="<AWS SECRET ACCESS KEY>")

Create GCS Source

gcs_source = sw.source.create_gcs_source(name="My GCS Source", bucket_name="<GCS BUCKET NAME>", pubsub_topic="<PUBSUB TOPIC>",
                                         service_account="<LOCAL PATH TO SERVICE ACCOUNT FILE OR SERVICE ACCOUNT DICTIONARY>")

Connect a Source to a Dataset

from superwise_api.models.dataset_source.dataset_source import IngestType

dataset_source = sw.dataset.connect_to_source(dataset_id=dataset.id,
                                              source_id=gcs_source.id,
                                              folder="path/to/my/data/within/the/bucket",
                                              ingest_type=IngestType.INSERT)
## or you can do it with DatasetSource meta entity
dataset_source = sw.dataset_source.create(dataset_id=dataset.id,
                                          source_id=gcs_source.id,
                                          folder="path/to/my/data/within/the/bucket",
                                          ingest_type=IngestType.INSERT)

Create Destination

make sure to authenticate with the integration first - see Destinations


integrations = sw.integration.get()
integration = integrations.items[0]

destination = sw.destination.create(name="My Destination",
                                    integration_id=integration.id,
                                    params={"channel_id": "<SLACK CHANNEL ID>", "channel_name": "<SLACK CHANNEL NAME>"})

Create a Policy


from superwise_api.models.policy.policy import StaticThresholdSettings
from superwise_api.models.policy.policy import DataConfigStatistics
from superwise_api.models.policy.policy import TimeRangeConfig

policy = sw.policy.create(
    name='my_policy',
    dataset_id=dataset.id,
    data_config=DataConfigStatistics(
        query={"measures": [f"{dataset.internal_id}.count"]},  ## you can use Query object for more complex queries
        time_range_config=TimeRangeConfig(
            field_name="ts",
            unit="HOUR",
            value=2
        )
    ),
    cron_expression="2 */1 * * *",
    threshold_settings=StaticThresholdSettings(
        condition_above_value=3.0,
        condition_below_value=None,
    ),
    alert_on_status="HEALTHY_TO_UNHEALTHY",
    alert_on_policy_level=True,
    destination_ids=[destination.id],
    initialize_with_historic_data=True
)

Create Dashboard

dashboard = sw.dashboard.create(name="My Dashboard")

Create General Widget

from superwise_api.models.dashboard_item.dashboard_item import VisualizationType
from superwise_api.models.dashboard_item.dashboard_item import Datasource
from superwise_api.models.dashboard_item.dashboard_item import Query as DashboardItemQuery
from superwise_api.models.dashboard_item.dashboard_item import QueryType
from superwise_api.models.dashboard_item.dashboard_item import DataConfigGeneral as DashboardItemDataConfigGeneral

widget = sw.dashboard_item.create(dashboard_id=dashboard.id,
                                  name="My API Created Widget",
                                  query_type=QueryType.STATISTICS.value,
                                  visualization_type=VisualizationType.TABLE.value,
                                  datasource=Datasource.DATASETS.value,
                                  data_config=DashboardItemDataConfigGeneral(
                                      query=DashboardItemQuery(measures=[f"{dataset.internal_id}.maxCarat"],
                                                               limit=1000,
                                                               dimensions=[f"{dataset.internal_id}.color"])),
                                  item_metadata={}
                                  )

Create Distribution Compare Widget

from superwise_api.models.dashboard_item.dashboard_item import VisualizationType
from superwise_api.models.dashboard_item.dashboard_item import Datasource
from superwise_api.models.dashboard_item.dashboard_item import Query as DashboardItemQuery
from superwise_api.models.dashboard_item.dashboard_item import QueryType
from superwise_api.models.dashboard_item.dashboard_item import

DataConfigDistributionCompare as DashboardItemDataConfigDistributionCompare

# Get distribution of X for color D
query_a = DashboardItemQuery(measures=[f"{dataset.internal_id}.count", f"{dataset.internal_id}.__quantilesX"],
                             limit=1000,
                             dimensions=[f"{dataset.internal_id}.__x_bucket"],
                             filters=[
                                 {"member": f"{dataset.internal_id}.color", "operator": "equals", "values": ["D"]}],

                             # Get distribution of X for color F
                             query_b=DashboardItemQuery(
                                 measures=[f"{dataset.internal_id}.count", f"{dataset.internal_id}.__quantilesX"],
                                 limit=1000,
                                 dimensions=[f"{dataset.internal_id}.__x_bucket"],
                                 filters=[{"member": f"{dataset.internal_id}.color", "operator": "equals",
                                           "values": ["F"]}]),

                             widget=sw.dashboard_item.create(dashboard_id=dashboard.id,
                                                             name="My API Created Widget",
                                                             query_type=QueryType.STATISTICS.value,
                                                             visualization_type=VisualizationType.TABLE.value,
                                                             datasource=Datasource.DATASETS.value,
                                                             data_config=DashboardItemDataConfigDistributionCompare(
                                                                 query_a=query_a,
                                                                 query_b=query_b,
                                                                 distance_function="wasserstein_distance"),
                                                             item_metadata={}
                                                             )

Application Deployment

Create Model

from superwise_api.models.application.application import ModelLLM
from superwise_api.models.application.application import ModelProvider
from superwise_api.models.application.application import OpenAIModelVersion

model = ModelLLM(provider=ModelProvider.OPENAI, version=OpenAIModelVersion.GPT_3_5_TURBO, api_token="your-openai-api-key")

Create Application

app = sw.application.create(name="My Application", tools=[], llm_model=model)