Routing API¶
The routed model is additive. Legacy SurveyVariable and SurveySVIS fields and
ordered JSON semantics remain unchanged.
Router methods¶
| Method | Return | Behavior |
|---|---|---|
route(source, svis, source_binding=...) |
ExtractionResult[RoutedSurveySVIS] |
Synchronous routing outside an event loop |
aroute(source, svis, source_binding=...) |
ExtractionResult[RoutedSurveySVIS] |
Async routing |
The constructor accepts a StructuredProvider | None, optional RoutingConfig,
and optional SourceRegistry. None is valid only for complete native routing.
The exact source name, media type, digest, survey ID, and binding version must
match before provider work starts.
Expected source, binding, provider, and graph failures become safe failed result
envelopes. An unexpected programming error can propagate. route() raises
RuntimeError when called inside an active event loop.
routing ¶
Immutable public models for routed questionnaire SVIS artifacts.
CandidateEdge ¶
Bases: StrictRoutingModel
Non-authoritative edge candidate that can preserve an unresolved target.
evidence_ids
instance-attribute
¶
evidence_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
CandidateStatus ¶
Bases: str, Enum
Current audit state of a non-authoritative edge candidate.
Containment ¶
DiagnosticSeverity ¶
DiscrepancyKind ¶
Bases: str, Enum
Bounded discrepancy categories available to review.
EdgeKind ¶
Bases: str, Enum
Accepted questionnaire flow semantics.
EvidenceRecord ¶
InventoryItem ¶
LoopDefinition ¶
Bases: StrictRoutingModel
Bounded metadata for one declared or source-supported loop region.
LoopKind ¶
Bases: str, Enum
Supported topological or declared loop classification.
RepeatKind ¶
Bases: str, Enum
Logical template represented by a repeat group.
RepeatSpec ¶
Bases: StrictRoutingModel
Logical repeat template without runtime unrolling.
continuation_condition
instance-attribute
¶
continuation_condition: CanonicalRoutingCondition | None
ReplacementEdge ¶
Bases: StrictRoutingModel
Typed reviewer replacement content before canonical edge assignment.
evidence_ids
instance-attribute
¶
evidence_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
ReviewAction ¶
Bases: str, Enum
Append-only reviewer action.
ReviewDecision ¶
Bases: StrictRoutingModel
One append-only source-cited reviewer decision.
discrepancy_ids
instance-attribute
¶
discrepancy_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
candidate_ids
instance-attribute
¶
candidate_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
evidence_ids
instance-attribute
¶
evidence_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
cited_span_ids
instance-attribute
¶
cited_span_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
RoutingDiagnostic ¶
RoutingDiscrepancy ¶
Bases: StrictRoutingModel
Bounded discrepancy packet retained in the primary routed artifact.
candidate_ids
instance-attribute
¶
candidate_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
evidence_ids
instance-attribute
¶
evidence_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
source_span_ids
instance-attribute
¶
source_span_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
RoutingNode ¶
RoutingEdge ¶
Bases: StrictRoutingModel
One authoritative accepted edge in the canonical multigraph.
evidence_ids
instance-attribute
¶
evidence_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
RoutingSourceBinding ¶
TerminalKind ¶
Bases: str, Enum
Meaning of a terminal flow state.
interview_terminated
class-attribute
instance-attribute
¶
interview_terminated = 'interview_terminated'
QuestionnaireRoutingGraph ¶
Bases: StrictRoutingModel
Canonical directed multigraph plus its separate append-only audit.
entry_node_ids
instance-attribute
¶
entry_node_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
RoutingAudit ¶
RoutedSurveyVariable ¶
Bases: SurveyVariable
Legacy-compatible variable with one nullable canonical node link.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid",
frozen=True,
hide_input_in_errors=True,
revalidate_instances="always",
)
categories
class-attribute
instance-attribute
¶
categories: tuple[RoutedAnswerCategory, ...] | None = None
detach_categories
classmethod
¶
detach_categories(value: object) -> object
Detach mutable legacy categories before routed validation.
detach_numeric_range
classmethod
¶
detach_numeric_range(value: object) -> object
Detach a mutable legacy numeric range before routed validation.
to_survey_variable ¶
to_survey_variable() -> SurveyVariable
Reconstruct the exact ordered legacy variable type.
RoutedSurveySVIS ¶
Bases: SurveySVIS
Versioned routed extension with an exact typed legacy projection.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid",
frozen=True,
hide_input_in_errors=True,
revalidate_instances="always",
)
to_survey_svis ¶
to_survey_svis() -> SurveySVIS
Reconstruct an exact ordered v1 SVIS without dictionary deletion.
RoutedAnswerCategory ¶
Bases: AnswerCategory
Deeply immutable routed form of one legacy answer category.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid",
frozen=True,
hide_input_in_errors=True,
revalidate_instances="always",
)
RoutedNumericRange ¶
Bases: NumericRange
Deeply immutable routed form of one legacy numeric range.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid",
frozen=True,
hide_input_in_errors=True,
revalidate_instances="always",
)
canonical_routing_schema_json ¶
canonical_routing_schema_json() -> str
Return the canonical graph JSON Schema with deterministic formatting.
contracts ¶
Strict provider-facing contracts for questionnaire routing extraction.
EvidenceObservation
module-attribute
¶
EvidenceObservation: TypeAlias = Annotated[
TransitionEvidence | ActivationEvidence,
Field(discriminator="evidence_type"),
]
RoutingScalar
module-attribute
¶
RoutingScalar: TypeAlias = (
StrictStr | StrictInt | FiniteFloat | StrictBool
)
ActivationEvidence ¶
CanonicalRoutingCondition ¶
ConditionOperator ¶
Bases: str, Enum
Supported routing-condition operations.
greater_than_or_equal
class-attribute
instance-attribute
¶
greater_than_or_equal = 'greater_than_or_equal'
EvidenceOrigin ¶
Bases: str, Enum
Producer of one source-grounded observation.
EvidencePerspective ¶
ExtractedRoutingCondition ¶
ItemReference ¶
Bases: StrictRoutingModel
Preserved printed or unresolved questionnaire item reference.
binding_key
property
¶
binding_key: ItemReferenceKey
Return an exact hashable key for caller-supplied reference bindings.
NodeKind ¶
Bases: str, Enum
Logical role of a canonical questionnaire node.
RoutingPassKind ¶
RoutingEvidenceBatch ¶
Bases: StrictRoutingModel
Complete strict response for one independent provider extraction pass.
examined_item_ids
instance-attribute
¶
examined_item_ids: Annotated[
tuple[NonEmptyStr, ...], Field(min_length=1)
]
SourceSpan ¶
Bases: StrictRoutingModel
Bounded quote and physical provenance in one normalized source block.
source_quote
instance-attribute
¶
source_quote: Annotated[
StrictStr,
Field(min_length=1, max_length=MAX_SOURCE_QUOTE_CHARS),
]
NativeExpression ¶
StrictRoutingModel ¶
Bases: BaseModel
Immutable base for every routing boundary model.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid",
frozen=True,
hide_input_in_errors=True,
revalidate_instances="always",
)
TransitionEvidence ¶
TransitionKind ¶
Bases: str, Enum
Flow semantics available to extraction and canonical edges.
project_extracted_condition ¶
project_extracted_condition(
condition: ExtractedRoutingCondition,
resolved_references: Mapping[ItemReferenceKey, str],
) -> CanonicalRoutingCondition
Project through caller-supplied exact bindings without resolving identities.
pipeline ¶
Public questionnaire routing pipeline over native and provider evidence.
QuestionnaireRouter ¶
QuestionnaireRouter(
provider: StructuredProvider | None,
*,
config: RoutingConfig | None = None,
sources: SourceRegistry | None = None,
)
Route one existing detached SVIS against its exact validated source snapshot.
route ¶
route(
source: LocalSource | SourceBundle,
svis: SurveySVIS,
*,
source_binding: RoutingSourceBinding,
) -> ExtractionResult[RoutedSurveySVIS]
Run routing synchronously when no event loop is active in this thread.
aroute
async
¶
aroute(
source: LocalSource | SourceBundle,
svis: SurveySVIS,
*,
source_binding: RoutingSourceBinding,
) -> ExtractionResult[RoutedSurveySVIS]
Build a routed SVIS with native bypass or provider-backed enrichment.
config ¶
Stable routing configuration import path.
RoutingConfig ¶
Bases: BaseModel
Provider-neutral routing limits and thresholds.
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="forbid", frozen=True, hide_input_in_errors=True
)
max_source_quote_chars
class-attribute
instance-attribute
¶
max_source_quote_chars: int = Field(
default=2000, ge=1, le=2000, strict=True
)
max_request_tokens
class-attribute
instance-attribute
¶
max_request_tokens: int = Field(
default=32000, ge=1, le=32000, strict=True
)
max_inventory_items_per_call
class-attribute
instance-attribute
¶
max_inventory_items_per_call: int = Field(
default=250, ge=1, le=250, strict=True
)
max_candidate_targets_per_reference
class-attribute
instance-attribute
¶
max_candidate_targets_per_reference: int = Field(
default=10, ge=1, le=10, strict=True
)
max_discrepancies_per_review_call
class-attribute
instance-attribute
¶
max_discrepancies_per_review_call: int = Field(
default=25, ge=1, le=25, strict=True
)
max_source_spans_per_decision
class-attribute
instance-attribute
¶
max_source_spans_per_decision: int = Field(
default=8, ge=1, le=8, strict=True
)
max_condition_depth
class-attribute
instance-attribute
¶
max_condition_depth: int = Field(
default=6, ge=1, le=6, strict=True
)
max_condition_nodes
class-attribute
instance-attribute
¶
max_condition_nodes: int = Field(
default=100, ge=1, le=100, strict=True
)
low_confidence_threshold
class-attribute
instance-attribute
¶
low_confidence_threshold: float = Field(
default=0.7,
ge=0.0,
le=1.0,
strict=True,
allow_inf_nan=False,
)
unusual_in_degree_threshold
class-attribute
instance-attribute
¶
unusual_in_degree_threshold: int = Field(
default=4, ge=1, strict=True
)
unusual_out_degree_threshold
class-attribute
instance-attribute
¶
unusual_out_degree_threshold: int = Field(
default=3, ge=1, strict=True
)
max_concurrency
class-attribute
instance-attribute
¶
max_concurrency: int = Field(
default=4, ge=1, le=128, strict=True
)
generation
class-attribute
instance-attribute
¶
generation: GenerationConfig = Field(
default_factory=GenerationConfig
)