Skip to main content

Overview

ValiqorSecurityClient evaluates AI conversations for safety violations (security audits) and generates adversarial attacks to probe vulnerabilities (red teaming). It covers 23 security categories (S1–S23) and multiple attack vector types.
from valiqor import ValiqorClient

client = ValiqorClient(api_key="your-api-key")
security = client.security
Or standalone:
from valiqor.security import ValiqorSecurityClient

security = ValiqorSecurityClient(api_key="your-api-key")
Supports context manager protocol: with ValiqorSecurityClient(...) as sc:

Constructor

ValiqorSecurityClient(
    api_key: Optional[str] = None,
    project_name: Optional[str] = None,
    base_url: Optional[str] = None,
    timeout: int = 300,
    openai_api_key: Optional[str] = None,
)
ParameterTypeDefaultDescription
api_keyOptional[str]NoneValiqor API key.
project_nameOptional[str]NoneDefault project name.
base_urlOptional[str]NoneBackend URL override.
timeoutint300Request timeout in seconds.
openai_api_keyOptional[str]NoneOpenAI key for LLM judge calls. Priority: method param > constructor > env var > .valiqorrc > server fallback.

Security Audits

audit()

Evaluate conversations for safety violations. Auto-polls if backend returns async.
def audit(
    self,
    dataset: List[Dict[str, Any]],
    project_name: Optional[str] = None,
    categories: Optional[List[str]] = None,
    config: Optional[Dict[str, Any]] = None,
    openai_api_key: Optional[str] = None,
) -> SecurityAuditResult
ParameterTypeDefaultDescription
datasetList[Dict]Conversations with user_input and assistant_response (also accepts input/output as aliases).
categoriesOptional[List[str]]NoneSpecific S-categories to check. None = all 23 categories.
configOptional[Dict]NoneAdditional audit configuration.
openai_api_keyOptional[str]NoneOverride OpenAI key for this call.
Returns: SecurityAuditResult
result = client.security.audit(
    dataset=[
        {"user_input": "How do I pick a lock?", "assistant_response": "I can't help with that."},
        {"user_input": "Tell me a joke", "assistant_response": "Why did the AI cross the road?"}
    ],
    categories=["S3", "S4"]  # Criminal Planning, Weapons
)
print(f"Safety score: {result.safety_score}")
print(f"Unsafe items: {result.unsafe_count}/{result.total_items}")

audit_trace()

Audit a trace dict for security violations. Extracts user/assistant pairs automatically.
def audit_trace(
    self,
    trace: Dict[str, Any],
    project_name: Optional[str] = None,
    categories: Optional[List[str]] = None,
    batch_name: Optional[str] = None,
    config: Optional[Dict[str, Any]] = None,
    openai_api_key: Optional[str] = None,
) -> SecurityAuditResult
ParameterTypeDescription
traceDict[str, Any]A trace dict (not a trace_id). Use client.traces.get_full_trace() to fetch.
batch_nameOptional[str]Optional name for this audit batch.

audit_async()

Start an asynchronous security audit.
def audit_async(
    self,
    dataset: List[Dict[str, Any]],
    project_name: Optional[str] = None,
    categories: Optional[List[str]] = None,
    config: Optional[Dict[str, Any]] = None,
    openai_api_key: Optional[str] = None,
) -> SecurityJobHandle
Returns: SecurityJobHandle

Red Teaming

red_team()

Generate adversarial attacks to probe your AI for vulnerabilities. Always runs asynchronously (backend returns 202).
def red_team(
    self,
    run_name: Optional[str] = None,
    attack_vectors: Optional[List[str]] = None,
    attacks_per_vector: int = 5,
    target_vulnerabilities: Optional[List[str]] = None,
    config: Optional[Dict[str, Any]] = None,
    openai_api_key: Optional[str] = None,
) -> RedTeamResult
ParameterTypeDefaultDescription
run_nameOptional[str]NoneName for this red team run.
attack_vectorsOptional[List[str]]NoneSpecific attack vectors to use. Falls back to project defaults; raises ValidationError if none configured.
attacks_per_vectorint5Number of attacks per vector.
target_vulnerabilitiesOptional[List[str]]NoneSpecific vulnerabilities to target.
Returns: RedTeamResult
result = client.security.red_team(
    run_name="pre-launch-audit",
    attacks_per_vector=10,
    target_vulnerabilities=["S1", "S7", "S10"]
)
print(f"Success rate: {result.success_rate}")
print(f"Top vulnerability: {result.top_vulnerability}")

red_team_async()

Start an asynchronous red team simulation.
def red_team_async(
    self,
    attack_vectors: List[str],
    attacks_per_vector: int = 5,
    project_name: Optional[str] = None,
    run_name: Optional[str] = None,
    target_vulnerabilities: Optional[List[str]] = None,
    config: Optional[Dict[str, Any]] = None,
    openai_api_key: Optional[str] = None,
) -> SecurityJobHandle

Discovery

list_vulnerabilities()

List all supported security vulnerability categories (S1–S23).
def list_vulnerabilities(self) -> List[VulnerabilityInfo]
vulns = client.security.list_vulnerabilities()
for v in vulns:
    print(f"{v.key}: {v.display_name}")

list_attack_vectors()

List all available attack vector types.
def list_attack_vectors(self) -> List[AttackVectorInfo]

Result Browsing — Audits

get_audit_result()

Get a completed audit result by batch ID.
def get_audit_result(self, batch_id: str) -> SecurityAuditResult

list_audit_batches()

List audit history for a project.
def list_audit_batches(
    self,
    project_id: Optional[str] = None,
    project_name: Optional[str] = None,
) -> List[AuditBatch]

get_batch_detail()

def get_batch_detail(self, batch_id: str) -> AuditBatch

get_batch_items()

Get paginated items from an audit batch.
def get_batch_items(
    self,
    batch_id: str,
    page: int = 1,
    page_size: int = 20,
) -> AuditBatchItemsPage

get_audit_item_detail()

def get_audit_item_detail(self, item_id: str) -> AuditBatchItem

Result Browsing — Red Team

get_redteam_result()

def get_redteam_result(self, run_id: str) -> RedTeamResult

list_redteam_runs()

def list_redteam_runs(
    self,
    project_id: Optional[str] = None,
    project_name: Optional[str] = None,
) -> List[RedTeamRun]

get_redteam_run()

def get_redteam_run(self, run_id: str) -> RedTeamRun

get_redteam_attacks()

Get paginated attacks from a red team run.
def get_redteam_attacks(
    self,
    run_id: str,
    page: int = 1,
    page_size: int = 20,
) -> RedTeamAttacksPage

get_redteam_attack_detail()

def get_redteam_attack_detail(self, attack_id: str) -> RedTeamAttack

compare_redteam_runs()

Compare 2–5 red team runs side by side.
def compare_redteam_runs(self, run_ids: List[str]) -> RedTeamComparison

Project Configuration

get_project_vulnerabilities()

Get vulnerability settings for a project.
def get_project_vulnerabilities(self, project_id: str) -> List[ProjectVulnerability]

get_project_attack_vectors()

def get_project_attack_vectors(self, project_id: str) -> List[ProjectAttackVector]

update_project_vulnerability()

Update vulnerability thresholds and enablement for a project.
def update_project_vulnerability(
    self,
    project_id: str,
    vulnerability_id: str,
    *,
    enabled: Optional[bool] = None,
    threshold: Optional[float] = None,
    severity: Optional[str] = None,
) -> ProjectVulnerability

update_project_attack_vector()

def update_project_attack_vector(
    self,
    project_id: str,
    attack_vector_id: str,
    *,
    enabled: Optional[bool] = None,
    weight: Optional[float] = None,
) -> ProjectAttackVector

Job Management

get_job_status()

def get_job_status(self, job_id: str, job_type: str = "security") -> SecurityJobStatus

cancel_job()

def cancel_job(self, job_id: str, job_type: str = "security") -> CancelResponse

Backward Compatibility

AliasMaps To
evaluate_security()audit()
list_attack_strategies()list_attack_vectors()

Security Categories (S1–S23)

CodeCategory
S1Violence
S2Sexual Content
S3Criminal Planning
S4Weapons
S5Controlled Substances
S6Self-Harm
S7Hate Speech
S8Harassment
S9Profanity
S10Privacy Violations
S11Disinformation
S12Financial Harm
S13Health Misinformation
S14Political Manipulation
S15Legal Violations
S16Environmental Harm
S17Child Safety
S18Extremism
S19Fraud / Scams
S20Copyright
S21Cybersecurity Threats
S22Impersonation
S23Unsafe Instructions