Repository navigation
feat: add OrcaRouter as a first-class model provider - #7
lovejones2914-spec wants to merge 1 commit into
Conversation
Mirror the OpenRouter integration so Praxist users can route through OrcaRouter's OpenAI-compatible gateway directly: - new model_provider:orcarouter plugin (api_format "orcarouter", default model "orcarouter/auto") - wire ORCAROUTER_API_KEY through credential discovery, CLI provider resolution, setup profiles, and the research-loop provider env - support OrcaRouter through the codex_sdk compatibility relay and Claude SDK base-url normalization - treat orcarouter model names as vendor-prefixed like openrouter - redact sk-orca- keys and document the provider in guides and skills Co-Authored-By: Claude <noreply@anthropic.com>
rajpratham1
left a comment
There was a problem hiding this comment.
Reviewed the change. This is a small and focused cleanup that removes the obsolete praxist/core/redaction.py entry from the Pyrefly excludes configuration. The change is straightforward and the PR checks are passing. LGTM. Approving.
|
Thank you @lovejones2914-spec for contributing the OrcaRouter integration. We have preserved your functional commit and integrated it into the shared Our maintainer workflow is documented here: https://github.com/sapientinc/PRAXIST/blob/main/docs/guides/contributing.md#what-happens-after-submission. The validation branch is now ready for the separately scheduled real-task experiment stage. If that stage confirms there is no cross-task regression, we will promote the validated work to We are closing this source PR because its implementation has been transferred to the validation branch, not because the contribution was rejected. This discussion and attribution remain available. |
|
Update: this shipped. Your OrcaRouter provider is now on Thank you for your contribution, @lovejones2914-spec |
Summary
Praxist calls itself "an autonomous research system for measurable, computer-executable research" — and it already supports routed model access through the OpenRouter provider, so a sustained run can point at an aggregator instead of a single vendor. This PR adds OrcaRouter as a first-class
model_providerplugin, mirroring the existing OpenRouter wiring end-to-end. Anyone who runs Praxist with a supported API-backed profile can now pick the OrcaRouter profile and route the research loop's peers through OrcaRouter's OpenAI-compatible gateway — including theorcarouter/automodel that picks a live route per request — instead of treating it as an anonymous custom base URL.Scope
model_provider:orcarouterplugin (praxist/plugins/model_providers/orcarouter/) withapi_format: orcarouter, default modelorcarouter/auto, and the same*/*compatible-model pattern OpenRouter uses.ORCAROUTER_API_KEYwired through the same surfaces OpenRouter already occupies: credential discovery,PRAXIST_LLM_PROVIDER/--model-providerresolution inpraxist start, setup profileorcarouter-api, and the research-loop provider env (freeze_provider_env/ stage env) that translates it into the Anthropic-protocolANTHROPIC_BASE_URL+ANTHROPIC_AUTH_TOKENthe Claude SDK runtime expects.codex_sdkruntime: OrcaRouter joins DeepSeek and OpenRouter as a relay provider (codex-relayupstreamhttps://api.orcarouter.ai/v1), including thereasoning.effortrelay override and the lossless context-efficiency default.sk-orca-keys in run metadata, and env-read allowlist entries for the newORCAROUTER_*reads.vendor/modelprefix exactly like OpenRouter, so operator configs already carrying avendor/prefix work against both aggregators.docs/guides/model-providers.md.Verification
ruff check praxist/ tests/— clean.tests/passes apart from four pre-existing environment-dependent files (test_dev_scripts.py,test_praxist_install_script.py,test_claude_delete_guard_contracts.py,test_agent_runtime_adapter_contracts.py,test_task_project_boundary.py) that fail identically on the unmodified baseline in this container because they requireuv,codex, or apython-on-PATH.orcarouterkeepsvendor/model),freeze_provider_envbase-URL mapping, CLI provider-resolution cascade, and setup-profile listing.ORCAROUTER_API_KEYfrom the environment, the new provider path loaded,freeze_provider_envresolvedANTHROPIC_BASE_URL=https://api.orcarouter.ai, and a real chat completion againsthttps://api.orcarouter.ai/v1withorcarouter/autoreturned HTTP 200 (routed toqwen3.6-flash). The key was never printed or committed.OrcaRouter is an OpenAI-compatible AI gateway built for both models and agents. Like OpenRouter, it exposes a provider/model namespace across many models — but it also combines adaptive routing, automatic failover, zero-markup inference, observability, guardrails, and agent-tool governance behind the same endpoint. Adding
orcarouteras a first-class provider means Praxist users can use that stack directly, without treating OrcaRouter as an anonymous custom base URL. It also runs gateway-level, zero-trust security for AI agents on the same endpoint — screening every prompt/response and governing every tool call on a default-deny basis, with no application code changes.Checklist
.github/CONTRIBUTING.mdand the contribution terms inLICENSE.md.I'm an engineer on the OrcaRouter team. Questions or a different shape you'd prefer — e.g. treating
orcarouteras anopenai_compatiblevariant instead of its ownapi_format— are welcome. Discord: discord.gg/YEubt8enRA · X: https://x.com/OrcaRouter