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
- Python
- TypeScript
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}")
import { createCredoAIClient } from '@credo-ai/sdk';
const client = createCredoAIClient('your-tenant');
// Add a model to a use case
const { data: result, error } = await client.useCases.models.add('uc_abc123', {
id: 'model_xyz789',
});
console.log(`Added model: ${result.name}`);
Add a Vendor to a Use Case
- Python
- TypeScript
result = client.use_case_vendors.add(
use_case_id="uc_abc123",
data=RelationshipAdd(id="vendor_def456")
)
print(f"Added vendor: {result.name}")
const { data: result, error } = await client.useCases.vendors.add('uc_abc123', {
id: 'vendor_def456',
});
console.log(`Added vendor: ${result.name}`);
Add a Vendor to a Model
- Python
- TypeScript
result = client.model_vendors.add(
model_id="model_xyz789",
data=RelationshipAdd(id="vendor_def456")
)
print(f"Linked vendor to model: {result.name}")
const { data: result, error } = await client.models.vendors.add('model_xyz789', {
id: 'vendor_def456',
});
console.log(`Linked vendor to model: ${result.name}`);
Listing Relationships
List Models for a Use Case
- Python
- TypeScript
# 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}")
// Get results
const { data: response, error } = await client.useCases.models.list('uc_abc123');
for (const model of response.items) {
console.log(` - ${model.name} (ID: ${model.id})`);
}
List Vendors for a Use Case
- Python
- TypeScript
for vendor in client.use_case_vendors.list_all(use_case_id="uc_abc123"):
print(f" - {vendor.name}")
const { data: response, error } = await client.useCases.vendors.list('uc_abc123');
for (const vendor of response.items) {
console.log(` - ${vendor.name}`);
}
List Vendors for a Model
- Python
- TypeScript
for vendor in client.model_vendors.list_all(model_id="model_xyz789"):
print(f" - {vendor.name}")
const { data: response, error } = await client.models.vendors.list('model_xyz789');
for (const vendor of response.items) {
console.log(` - ${vendor.name}`);
}
Removing Relationships
Remove a Model from a Use Case
- Python
- TypeScript
client.use_case_models.remove(
use_case_id="uc_abc123",
model_id="model_xyz789"
)
print("Model removed from use case")
await client.useCases.models.remove('uc_abc123', 'model_xyz789');
console.log('Model removed from use case');
Remove a Vendor from a Use Case
- Python
- TypeScript
client.use_case_vendors.remove(
use_case_id="uc_abc123",
vendor_id="vendor_def456"
)
print("Vendor removed from use case")
await client.useCases.vendors.remove('uc_abc123', 'vendor_def456');
console.log('Vendor removed from use case');
Remove a Vendor from a Model
- Python
- TypeScript
client.model_vendors.remove(
model_id="model_xyz789",
vendor_id="vendor_def456"
)
print("Vendor removed from model")
await client.models.vendors.remove('model_xyz789', 'vendor_def456');
console.log('Vendor removed from model');
Common Patterns
Setting Up a Complete Use Case
- Python
- TypeScript
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")
import { createCredoAIClient } from '@credo-ai/sdk';
const client = createCredoAIClient('your-tenant');
// Create the use case
const { data: useCase } = await client.useCases.create({
name: 'Fraud Detection System',
description: 'Real-time fraud detection for transactions',
});
// Create and link a model
const { data: model } = await client.models.create({
name: 'Fraud Classifier v2',
summary: 'XGBoost model for fraud classification',
});
await client.useCases.models.add(useCase.id, { id: model.id });
// Create and link a vendor
const { data: vendor } = await client.vendors.create({
name: 'AWS SageMaker',
description: 'Model hosting platform',
});
await client.useCases.vendors.add(useCase.id, { id: vendor.id });
// Also link the vendor to the model
await client.models.vendors.add(model.id, { id: vendor.id });
console.log(`Set up use case '${useCase.name}' with model and vendor`);
Auditing All Relationships
- Python
- TypeScript
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")
async function auditUseCase(client, useCaseId: string) {
// Print all resources linked to a use case.
const { data: useCase } = await client.useCases.get(useCaseId);
console.log(`Use Case: ${useCase.name}`);
console.log(' Models:');
const { data: models } = await client.useCases.models.list(useCaseId);
for (const model of models.items) {
console.log(` - ${model.name}`);
// Show vendors for each model
const { data: vendors } = await client.models.vendors.list(model.id);
for (const vendor of vendors.items) {
console.log(` └─ Vendor: ${vendor.name}`);
}
}
console.log(' Direct Vendors:');
const { data: directVendors } = await client.useCases.vendors.list(useCaseId);
for (const vendor of directVendors.items) {
console.log(` - ${vendor.name}`);
}
}
await auditUseCase(client, 'uc_abc123');
Next Steps
- Learn about Pagination for large relationship lists
- See the API Reference for all relationship methods