Login Sign Up
Challenges / Ethical Considerations In Ai Agent Testing Auditing Ai For Ethical Concerns

Ethical Considerations In Ai Agent Testing Auditing Ai For Ethical Concerns Challenge

Read the problem description and solve the challenge in the workspace.

Open Full Sandbox Studio
Problem Description

Coding Challenge: Auditing Agents and Reproducing Bias Bugs

Problem Description

You're pretty much an MLOps engineer tasked with ensuring the fairness and transparency of an autonomous AI agent responsible for reviewing bank loan applications. Because manual QA is insufficient to dynamic AI systems, you deploy specialized Tester Agent to continuously interrogate a main AI with tricky edge-case scenarios to check for biased outcomes.

On the Tuesday your Tester Agent successfully triggers the ethical failure: the main AI rejects a batch of applicants based purely at their neighborhood. However, you don't have time to debug the issue until Wednesday, while by Wednesday, some users might have updated their profiles or deleted their accounts meaning the underlying database has changed, and if the live data drifts, your bias bug will simply vanish and you won't be able towards reproduce or fix it!

To sort out this, you must implement an observability pipeline that captures a MLOps Trinity (Code, Setup. Data query) the exact moment the biased decision occurs. Plus, to detect if the data has drifted between Tuesday and Wednesday your system must generate a unique digital fingerprint (Data Hash) of the exact dataset the agent analyzed during failure.

Difficulty Level

Intermediate

Input & Output Specifications

Input: * audit_run_id (string): The unique identifier of the Tester Agent's audit run. * tester_code_version (string): A Git commit hash of the Tester Agent's logic. * setup_params (dictionary): A live environment hyperparameters (e.g., specific models used, fail-safes). * sql_query (string): exact query the Tester Agent used to fetch live applicant data. * fetched_live_data (list of dictionaries): The exact live data rows the agent analyzed when the ethical failure occurred. * current_database_data (list with dictionaries): Data fetched later during a debugging session to verify if the live database has drifted.

Output: * log_ethical_failure(): Computes the digital fingerprint (hash) of the fetched_live_data and securely stores the record containing a Code version, Setup Query, and a computed Hash under the audit_run_id. * verify_reproducibility(): Takes the audit_run_id and current_database_data, computes the hash of the current data, and returns True if it perfectly matches the original data hash (safe to debug), or False if a live production database has changed (reproducibility broken).

Starter Code Boilerplate

import hashlib
import json

# Global mock database to store your audit logs
audit_logs_db = {}

def log_ethical_failure(audit_run_id, tester_code_version, setup_params, sql_query, fetched_live_data):
    """
    Computes a unique data hash and logs the MLOps Trinity for an ethical failure.
    """
    # TODO: Format the fetched_live_data consistently so the order doesn't change

    # TODO: Generate a SHA-256 hash of the formatted data string

    # TODO: Store the Code, Setup, Query, and Hash in audit_logs_db under the audit_run_id
    pass

def verify_reproducibility(audit_run_id, current_database_data):
    """
    Verifies if the current database data perfectly matches the exact data seen during the failure.
    """
    # TODO: Retrieve the original hash from audit_logs_db using the audit_run_id

    # TODO: Consistently format and hash the current_database_data

    # TODO: Return True if the hashes match perfectly, or False if the data has drifted
    pass

Hints

  • The MLOps Trinity: Standard version control only tracks code. Your system needs to explicitly track Code (tester_code_version), the Setup (setup_params), and Data (sql_query + the computed data hash).
  • Consistent Formatting: When converting a Python list of dictionaries for a string for hashing order matters immensely. Use json.dumps(data_payload, sort_keys=True) to ensure a payload format is simply absolutely identical every time before hashing it.
  • Generating a Digital Fingerprint: You can use Python's built-in hashlib library to generate your unique digital fingerprint like this: hashlib.sha256(formatted_string.encode('utf-8')).hexdigest().

Test Cases

You can run a following test script to verify your implementation works correctly:

# --- Mock Data Setup ---
run_id = "audit_bias_001"
code_version = "git-commit-7a8b9c"
setup = {"model": "loan_reviewer_v2", "temperature": 0.2}
query = "SELECT * FROM applications WHERE status = 'pending_review'"

# Data the Tester Agent saw on Tuesday
data_on_tuesday = [
    {"user_id": 101, "income": 50000, "neighborhood": "A"},
    {"user_id": 102, "income": 55000, "neighborhood": "B"}
]

# Database changes: User 102 deletes their application on Wednesday
data_on_wednesday = [
    {"user_id": 101, "income": 50000, "neighborhood": "A"}
]

# --- Execute Tests ---
print("Logging the ethical failure from Tuesday...")
log_ethical_failure(run_id, code_version, setup, query, data_on_tuesday)

# Test 1: Debugging immediately on Tuesday (Data hasn't changed)
is_reproducible_tuesday = verify_reproducibility(run_id, data_on_tuesday)
print(f"Test 1 - Reproducible on Tuesday? {is_reproducible_tuesday} (Expected: True)")
assert is_reproducible_tuesday == True, "Failed Test 1"

# Test 2: Debugging on Wednesday (Data has drifted)
is_reproducible_wednesday = verify_reproducibility(run_id, data_on_wednesday)
print(f"Test 2 - Reproducible on Wednesday? {is_reproducible_wednesday} (Expected: False)")
assert is_reproducible_wednesday == False, "Failed Test 2"

print("All tests passed successfully! Your observability pipeline is secure.")

Loading sandbox workspace environment...

Verify Your Solution

Run assertions against your code in the sandbox environment.

Sandbox Instructions

1. Click Copy Starter Boilerplate at the top to copy function definition.
2. Use the interactive compiler to implement and run your code securely.
3. Click Verify & Submit Solution to validate your code.

Back to Challenges Go to Course Player