Skip to content

Divergence Engine Reference

DivergenceEngine

from ct_toolkit.divergence.engine import DivergenceEngine

engine = DivergenceEngine(
    identity_layer=layer,
    kernel=kernel,
    template="general",
    l1_threshold=0.15,
    l2_threshold=0.30,
    l3_threshold=0.50,
)

result = engine.analyze(request_text, response_text)

Timeout & Retry

L2 Judge ve L3 ICM çağrıları otomatik timeout ve retry logic ile korunmaktadır:

  • L2 Judge: 30 saniye timeout, 2 retries with exponential backoff
  • L3 ICM: 60 saniye timeout, 2 retries with exponential backoff

Retry'ler sadece geçici hatalar için yapılır (rate limit, timeout, connection error).

DivergenceResult fields

Field Type Description
tier DivergenceTier Highest tier reached
l1_score float \| None ECS divergence score
l2_verdict str \| None aligned, misaligned, uncertain
l2_confidence float \| None Judge confidence (0–1)
l2_reason str \| None Judge explanation
l3_report ICMReport \| None Probe battery results
action_required bool Whether intervention is needed
cascade_blocked bool Whether to halt sub-agent propagation

LLMJudge

from ct_toolkit.divergence.l2_judge import LLMJudge, JudgeVerdict

judge = LLMJudge(
    client=openai.OpenAI(),
    provider="openai",
    model="gpt-4o-mini",
)

result = judge.evaluate(
    request_text="user question",
    response_text="model response",
    kernel=kernel,
)

print(f"Verdict: {result.verdict}")
print(f"Confidence: {result.confidence}")

Timeout & Retry Configuration

# Module-level configuration
from ct_toolkit.divergence.l2_judge import JUDGE_TIMEOUT_SECONDS, JUDGE_MAX_RETRIES

print(f"Timeout: {JUDGE_TIMEOUT_SECONDS}s")  # 30 seconds
print(f"Max retries: {JUDGE_MAX_RETRIES}")    # 2

ICMRunner

from ct_toolkit.divergence.l3_icm import ICMRunner

runner = ICMRunner(
    client=openai.OpenAI(),
    provider="openai",
    kernel=kernel,
    template="general",
)

report = runner.run()
print(report.summary())

Timeout & Retry Configuration

from ct_toolkit.divergence.l3_icm import ICM_TIMEOUT_SECONDS, ICM_MAX_RETRIES

print(f"Timeout: {ICM_TIMEOUT_SECONDS}s")  # 60 seconds
print(f"Max retries: {ICM_MAX_RETRIES}")    # 2

ElasticityScheduler

from ct_toolkit.divergence.scheduler import ElasticityScheduler, RiskProfile

scheduler = ElasticityScheduler(
    base_thresholds=(0.15, 0.30, 0.50),
    max_thresholds=(0.25, 0.45, 0.70),
    growth_rate=0.001,
    risk_profile=RiskProfile(has_tool_calling=True, mcp_server_count=2),
)

l1, l2, l3 = scheduler.calculate_thresholds(interaction_count=500)