Skip to main content

ExternalPolicy

Trait ExternalPolicy 

Source
pub trait ExternalPolicy: DecisionPolicy {
    // Required method
    fn submitted_response(
        &self,
        ticket: &DecisionTicket,
    ) -> Option<ExternalDecisionResponse>;

    // Provided method
    fn external_request(
        &self,
        ticket: &DecisionTicket,
    ) -> ExternalDecisionRequest { ... }
}

Required Methods§

Provided Methods§

Source

fn external_request(&self, ticket: &DecisionTicket) -> ExternalDecisionRequest

Examples found in repository?
examples/uncertainty_resolution.rs (line 201)
176fn llm_interface_branch() -> Result<(), Box<dyn std::error::Error>> {
177    let mut canwu = Canwu::demo(202)?;
178    let ticket_id = DecisionTicketId::new(2);
179    enqueue_ticket(
180        &mut canwu,
181        ticket_id,
182        10,
183        DecisionControllerBinding::new(
184            "law-llm-controller",
185            DecisionPolicyIdentity::new(DecisionPolicyKind::Llm, "strict-law-selector", "1"),
186            DecisionAuthority::Actor {
187                actor: Canwu::demo_ids().commander,
188            },
189        ),
190    )?;
191    let mut policy = QueuedLlmPolicy::new(
192        "strict-law-selector",
193        "1",
194        LlmModelIdentity {
195            provider: "not-connected".to_owned(),
196            model: "host-selected-model".to_owned(),
197            prompt_contract: "return one existing option_id and no new action".to_owned(),
198        },
199    );
200    let ticket = canwu.decision_ticket(ticket_id).expect("LLM ticket");
201    let request = policy.external_request(ticket);
202    println!("llm_request={}", serde_json::to_string(&request)?);
203
204    // A real host sends `request` to its model and parses a strict structured
205    // answer. This example supplies the same response object without making a
206    // network call.
207    policy.submit(
208        ticket_id,
209        ExternalDecisionResponse {
210            ticket_version: request.ticket_version,
211            option_id: "pass".to_owned(),
212            provider: "not-connected".to_owned(),
213            request_id: "example-response-1".to_owned(),
214            metadata: BTreeMap::new(),
215        },
216    )?;
217    let evaluation = canwu.drive_decision(
218        canwu.time(),
219        0,
220        DecisionRequestId::new(12),
221        None,
222        ticket_id,
223        &policy,
224    )?;
225    assert!(matches!(evaluation, DecisionEvaluation::Prepared(_)));
226    canwu.step_canonical()?.expect("LLM decision boundary");
227    Ok(())
228}

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§