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​