Wrap a Python callable `(LlmRequest) -> LlmRequest` for LLM sanitize request guardrails.
(py_fn: Py<PyAny>)
| 589 | |
| 590 | /// Wrap a Python callable `(LlmRequest) -> LlmRequest` for LLM sanitize request guardrails. |
| 591 | pub fn wrap_py_llm_sanitize_request_fn(py_fn: Py<PyAny>) -> LlmSanitizeRequestFn { |
| 592 | Arc::new(move |request: LlmRequest| { |
| 593 | Python::attach(|py| { |
| 594 | let py_req = PyLLMRequest { |
| 595 | inner: request.clone(), |
| 596 | }; |
| 597 | let result = match py_fn.call1(py, (py_req,)) { |
| 598 | Ok(v) => v, |
| 599 | Err(e) => { |
| 600 | eprintln!("nemo_relay: LLM sanitize request guardrail callable failed: {e}"); |
| 601 | return request; |
| 602 | } |
| 603 | }; |
| 604 | let extracted = result.extract::<PyLLMRequest>(py); |
| 605 | match extracted { |
| 606 | Ok(r) => r.inner, |
| 607 | Err(e) => { |
| 608 | eprintln!( |
| 609 | "nemo_relay: LLM sanitize request guardrail returned unexpected type \ |
| 610 | (expected LlmRequest): {e}" |
| 611 | ); |
| 612 | request |
| 613 | } |
| 614 | } |
| 615 | }) |
| 616 | }) |
| 617 | } |
| 618 | |
| 619 | /// Wrap a Python callable `(LlmRequest) -> Optional[str]` for LLM conditional guardrails. |
| 620 | pub fn wrap_py_llm_conditional_fn(py_fn: Py<PyAny>) -> LlmConditionalFn { |
no outgoing calls