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:
| Relationship | Resource | Description |
|---|---|---|
| Use Case ↔ Models | client.use_case_models | Link models to use cases |
| Use Case ↔ Vendors | client.use_case_vendors | Link vendors to use cases |
| Model ↔ Vendors | client.model_vendors | Link vendors to models |
Governance Relationships
These use the fluent API via client.use_cases("id"):
| Relationship | Access | Description |
|---|---|---|
| Use Case → Policy Packs | client.use_cases(id).policy_packs | Attach governance policy packs |
| Use Case → Risk Scenarios | client.use_cases(id).risk_scenarios | Attach risk scenarios |
| Use Case → Controls | client.use_cases(id).controls | View attached policy controls |
| Use Case → Workflow | client.use_cases(id).workflow | Track 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
- Learn about Pagination for large relationship lists
- See the API Reference for all relationship methods