feat(ext-proc): make external processor crate publishable#780
Conversation
4bb3e25 to
fdaf11c
Compare
Signed-off-by: Brent Salisbury <bsalisbu@redhat.com>
fdaf11c to
7fe5bff
Compare
praxis-bot
left a comment
There was a problem hiding this comment.
ext-proc publish review
Clean, minimal PR. The visibility changes (pub(crate) to pub for proto and its inner modules), export_filters! usage, clippy::missing_errors_doc lint suppression for generated gRPC code, publish-crate ordering in the Makefile, and doc updates all look correct.
| Severity | Count |
|---|---|
| Critical | 0 |
| Large | 0 |
| Medium | 1 |
Medium -- no test for new register_filters() API: see inline comment.
| } | ||
| } | ||
|
|
||
| praxis_filter::export_filters! { |
There was a problem hiding this comment.
[Medium] The export_filters! invocation generates a new public register_filters() function -- the recommended API documented in the crate doc comment -- but no test in this crate exercises it. The existing pipeline_builds_with_ext_proc_and_failure_mode test manually registers via registry.register("ext_proc", http_builtin(...)) instead.
Update that test to use register_filters() so the published API has end-to-end coverage:
let mut registry = praxis_filter::FilterRegistry::with_builtins();
register_filters(&mut registry);There was a problem hiding this comment.
I would prefer not to publish this crate. I want to aim for it to not exist at all in time.
I suggest we transfer this crate over the the ai repository, and wall it off for everything except llm-d, and note that it's only for llm-d, keep the anti-pattern warning language, and keep it as an experimental feature.
We should explicitly claim no support or backwards compatibility for any use case except llm-d.
We run the risk of people building on it for other use cases and then it becomes quite hard to remove it later. Bare minimum, I want any such usage outside of llm-d to be gated behind a github request to discuss the use cases beyond llm-d.
|
Superseded by praxis-proxy/ai#334 |
Summary
This PR makes the generic
praxis-proxy-ext-proccrate publishable.Currently
ext_procworks inside the Praxis workspace, but downstream repos cannot depend on it through the normal released-crate path. That blocks llm-d integration test work inpraxis-proxy/ai, where the AI gateway needs to register the same genericext_procfilter without local-path or git-dependency workarounds.ext_procis not full Envoy parity yet, but publishing the crate unblocks the llm-d integration-testing epic.What Changed
praxis-proxy-ext-procas publishable.register_filters()so downstream binaries can explicitly register the filter.praxis_ext_proc::protoso downstream code can use the generated Envoyext_procprotobuf and gRPC types.praxis-proxy-ext-procto theMakefilepublish dry-run crate list.Generated Proto Lint Suppression
This PR exposes
praxis_ext_proc::protoso downstream crates can use the same generated Envoyext_procprotobuf and gRPC types as Praxis. That is needed for downstream integration tests and external processor implementations that needExternalProcessor,ExternalProcessorServer,ProcessingRequest, andProcessingResponse.This is a new public API shape for Praxis filter crates: most published filters expose handwritten Rust filters/config types, while
praxis-proxy-ext-procalso exposes generated tonic/prost code.Because the tonic-generated gRPC client/server methods are generated code, they do not include Praxis-style rustdoc sections such as
# Errorson every publicResultreturning method. The PR keeps Praxis lint standards for handwritten code and suppresses generated-code-only Clippy lints only at theinclude_proto!module boundary.Validation
git diff --checkcargo +nightly-2026-03-28 fmt --all -- --checkmake lintcargo clippy --workspace --all-targets -- -D warningscargo test -p praxis-proxy-ext-proccargo test -p praxis-proxy-ext-proc -- --test-threads=1cargo deny checkcargo doc --workspace --no-deps --document-private-itemscargo package -p praxis-proxy-ext-proc --allow-dirty --no-verifyNote: full
cargo packageverification depends on release ordering and will pass after the nextpraxis-proxy-filtercrate version is published first.