Skip to main content

Managing Relationships

Resources in Credo AI can be linked together to represent how your AI systems are organized. This page covers how to manage relationships between use cases, models, vendors, and governance resources.

Relationship Types

The SDK provides several relationship types:

Entity Relationships

These use RelationshipAdd with the top-level relationship resources:

RelationshipResourceDescription
Use Case ↔ Modelsclient.use_case_modelsLink models to use cases
Use Case ↔ Vendorsclient.use_case_vendorsLink vendors to use cases
Model ↔ Vendorsclient.model_vendorsLink vendors to models

Governance Relationships

These use the fluent API via client.use_cases("id"):

RelationshipAccessDescription
Use Case → Policy Packsclient.use_cases(id).policy_packsAttach governance policy packs
Use Case → Risk Scenariosclient.use_cases(id).risk_scenariosAttach risk scenarios
Use Case → Controlsclient.use_cases(id).controlsView attached policy controls
Use Case → Workflowclient.use_cases(id).workflowTrack governance workflow progress

See Policy Packs, Risks, and Workflow for details on these governance resources.

Adding Relationships

Add a Model to a Use Case

from credoai import CredoAI, RelationshipAdd

client = CredoAI()

# Add a model to a use case
result = client.use_case_models.add(
use_case_id="uc_abc123",
data=RelationshipAdd(id="model_xyz789")
)
print(f"Added model: {result.name}")

Add a Vendor to a Use Case

result = client.use_case_vendors.add(
use_case_id="uc_abc123",
data=RelationshipAdd(id="vendor_def456")
)
print(f"Added vendor: {result.name}")

Add a Vendor to a Model

result = client.model_vendors.add(
model_id="model_xyz789",
data=RelationshipAdd(id="vendor_def456")
)
print(f"Linked vendor to model: {result.name}")

Listing Relationships

List Models for a Use Case

# Get paginated results
response = client.use_case_models.list(
use_case_id="uc_abc123",
page_limit=50
)

for model in response.items:
print(f" - {model.name} (ID: {model.id})")

# Or iterate through all with automatic pagination
for model in client.use_case_models.list_all(use_case_id="uc_abc123"):
print(f" - {model.name}")

List Vendors for a Use Case

for vendor in client.use_case_vendors.list_all(use_case_id="uc_abc123"):
print(f" - {vendor.name}")

List Vendors for a Model

for vendor in client.model_vendors.list_all(model_id="model_xyz789"):
print(f" - {vendor.name}")

Removing Relationships

Remove a Model from a Use Case

client.use_case_models.remove(
use_case_id="uc_abc123",
model_id="model_xyz789"
)
print("Model removed from use case")

Remove a Vendor from a Use Case

client.use_case_vendors.remove(
use_case_id="uc_abc123",
vendor_id="vendor_def456"
)
print("Vendor removed from use case")

Remove a Vendor from a Model

client.model_vendors.remove(
model_id="model_xyz789",
vendor_id="vendor_def456"
)
print("Vendor removed from model")

Common Patterns

Setting Up a Complete Use Case

from credoai import CredoAI, UseCaseCreate, ModelCreate, VendorCreate, RelationshipAdd

client = CredoAI()

# Create the use case
use_case = client.use_cases.create(
data=UseCaseCreate(
name="Fraud Detection System",
description="Real-time fraud detection for transactions"
)
)

# Create and link a model
model = client.models.create(
data=ModelCreate(
name="Fraud Classifier v2",
summary="XGBoost model for fraud classification"
)
)
client.use_case_models.add(
use_case_id=use_case.id,
data=RelationshipAdd(id=model.id)
)

# Create and link a vendor
vendor = client.vendors.create(
data=VendorCreate(
name="AWS SageMaker",
description="Model hosting platform"
)
)
client.use_case_vendors.add(
use_case_id=use_case.id,
data=RelationshipAdd(id=vendor.id)
)

# Also link the vendor to the model
client.model_vendors.add(
model_id=model.id,
data=RelationshipAdd(id=vendor.id)
)

print(f"Set up use case '{use_case.name}' with model and vendor")

Auditing All Relationships

def audit_use_case(client, use_case_id):
"""Print all resources linked to a use case."""
use_case = client.use_cases.get(use_case_id=use_case_id)
print(f"Use Case: {use_case.name}")

print(" Models:")
for model in client.use_case_models.list_all(use_case_id=use_case_id):
print(f" - {model.name}")

# Show vendors for each model
for vendor in client.model_vendors.list_all(model_id=model.id):
print(f" └─ Vendor: {vendor.name}")

print(" Direct Vendors:")
for vendor in client.use_case_vendors.list_all(use_case_id=use_case_id):
print(f" - {vendor.name}")

audit_use_case(client, "uc_abc123")

Next Steps