Skip to content

refactor(core): consolidate DPAwareWorker into BasicWorker - #434

Merged
slin1237 merged 2 commits into
mainfrom
dp-worker
Feb 16, 2026
Merged

slin1237 merged 2 commits into
mainfrom
dp-worker

Conversation

@slin1237

@slin1237 slin1237 commented Feb 16, 2026 •

Copy link
Copy Markdown
Member

Summary

Consolidates DPAwareWorker into BasicWorker by making DP-awareness optional fields instead of a separate wrapper struct, and removes duplicated DP logic from the HTTP router. Net -280 lines.

What changed

File Change
worker.rs Added 3 optional fields (dp_rank, dp_size, dp_base_url) to BasicWorker. Overrode 6 Worker trait methods inline. Deleted DPAwareWorker struct + full Worker impl (~147 lines). Removed normalised_url() (superseded by base_url()).
worker_builder.rs Added dp_config(rank, size) to BasicWorkerBuilder — captures current URL as base, formats url@rank. Deleted DPAwareWorkerBuilder + 16 passthrough setters (~112 lines).
mod.rs Removed DPAwareWorkerBuilder from exports.
create_worker.rs DPAwareWorkerBuilder::new(url, rank, size) → BasicWorkerBuilder::new(url).dp_config(rank, size)
update_worker_properties.rs Eliminated separate DP/non-DP builder branches → single BasicWorkerBuilder path with conditional .dp_config().
router.rs Removed dp_aware field, extract_dp_rank(), worker_base_url(). send_typed_request now takes &dyn Worker and uses prepare_request()/endpoint_url() unconditionally — router is fully DP-agnostic.

Why

DPAwareWorker was pure boilerplate: ~250 lines delegating every Worker trait method to an inner BasicWorker, plus a separate builder duplicating 16 setter methods. The HTTP router also re-implemented DP logic (URL parsing, body injection) that the Worker trait already provides — with an existing TODO (rui): Better accommodate to the Worker abstraction.

Three optional fields on BasicWorker provide the same behavior with zero delegation overhead.

How

DP-awareness is opt-in via BasicWorkerBuilder::dp_config(rank, size). Non-DP workers have None for all three fields, so trait defaults apply (is_dp_aware()=false, base_url()=url(), prepare_request()=passthrough) with zero overhead. The router uses a single code path through prepare_request() and endpoint_url() for all workers.

What stays unchanged

  • RouterConfig.dp_aware config flag — still used for worker creation/discovery decisions
  • find_workers_by_url() prefix matching — still needed for worker lookup/removal
  • WorkerRemovalRequest.dp_aware, WorkerUpdateWorkflowData.dp_aware — lifecycle plumbing
  • DiscoverDPInfoStep — checks config to decide whether to query DP info

Test plan

  • cargo check --all-targets --all-features — pass
  • cargo test -p smg -- worker — all 92 worker tests pass (12 DP tests rewritten)
  • cargo clippy -p smg --all-targets --all-features -- -D warnings — zero warnings
  • grep -r "DPAwareWorker" — zero remaining references

Summary by CodeRabbit

  • Refactor

    • Consolidated DP-aware behavior into a single BasicWorker type and removed the separate DPAwareWorker public API.
    • Added optional dp_config(rank, size) to BasicWorkerBuilder and exposed DP fields on BasicWorker.
    • Simplified router and request flow to use the Worker abstraction and unified DP handling.
  • Breaking Changes

    • DPAwareWorker and its builder removed; use BasicWorkerBuilder with dp_config(...) instead.

@github-actions github-actions Bot added the model-gateway Model gateway crate changes label Feb 16, 2026
@coderabbitai

coderabbitai Bot commented Feb 16, 2026 •

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉


📝 Walkthrough

Walkthrough

Consolidates DP-aware behavior into BasicWorker/BasicWorkerBuilder: removes DPAwareWorker and DPAwareWorkerBuilder, adds dp_config(rank,size) and DP fields on BasicWorker, and updates router and worker construction paths to use the unified builder and Worker trait methods.

Changes

Cohort / File(s) Summary
Core public exports
model_gateway/src/core/mod.rs
Removed public re-export of DPAwareWorkerBuilder.
Worker builder & spec
model_gateway/src/core/worker_builder.rs
Removed DPAwareWorkerBuilder; added dp_config(rank,size) and internal fields (dp_rank, dp_size, dp_base_url) to BasicWorkerBuilder; propagate DP fields into built BasicWorker.
Worker implementation
model_gateway/src/core/worker.rs
Removed DPAwareWorker type; added dp_rank, dp_size, dp_base_url to BasicWorker; extended Worker impl with is_dp_aware, base_url, dp_rank, dp_size, prepare_request, and endpoint_url; adjusted health checks and Debug output.
Worker creation / update steps
model_gateway/src/core/steps/worker/local/create_worker.rs, model_gateway/src/core/steps/worker/local/update_worker_properties.rs
Replaced DPAwareWorkerBuilder usage with BasicWorkerBuilder + conditional .dp_config(...); imports and builder chains updated; per-worker post-build property application preserved.
HTTP routing
model_gateway/src/routers/http/router.rs
Removed Router.dp_aware; changed request flow to use &dyn Worker (e.g., send_typed_request(worker: &dyn Worker)), call worker.prepare_request(...), use worker.base_url()/endpoint_url() for URLs; removed manual DP-rank JSON mutation and extract_dp_rank.
Tests / scaffolding
.../tests, various test files under the changed modules
Updated tests to use BasicWorkerBuilder::dp_config(...) and to assert DP fields/URLs on BasicWorker; removed references to DPAwareWorker and dp_aware router initialization.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant Client as Client
participant Router as Router
participant WorkerObj as Worker (BasicWorker)
participant HTTP as External Worker HTTP
Client->>Router: route_typed_request(...)
Router->>WorkerObj: select_worker()
Router->>WorkerObj: worker.prepare_request(json)
WorkerObj-->>Router: prepared_json
Router->>HTTP: send HTTP request to worker.endpoint_url(route) with prepared_json
HTTP-->>Router: response
Router-->>Client: response

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • CatherineSue
  • key4ng

Poem

🐰
I stitched two builders into one bright tunic,
DP ranks tucked snug, no longer cryptic,
A hop, a trait, requests now prepare—
Unified workers prance with flair! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (15 files):

⚔️ model_gateway/src/core/mod.rs (content)
⚔️ model_gateway/src/core/steps/worker/local/create_worker.rs (content)
⚔️ model_gateway/src/core/steps/worker/local/update_worker_properties.rs (content)
⚔️ model_gateway/src/core/worker.rs (content)
⚔️ model_gateway/src/core/worker_builder.rs (content)
⚔️ model_gateway/src/routers/anthropic/context.rs (content)
⚔️ model_gateway/src/routers/anthropic/mod.rs (content)
⚔️ model_gateway/src/routers/anthropic/models.rs (content)
⚔️ model_gateway/src/routers/anthropic/router.rs (content)
⚔️ model_gateway/src/routers/anthropic/utils.rs (content)
⚔️ model_gateway/src/routers/factory.rs (content)
⚔️ model_gateway/src/routers/http/router.rs (content)
⚔️ model_gateway/src/routers/mcp_utils.rs (content)
⚔️ model_gateway/src/server.rs (content)
⚔️ protocols/src/messages.rs (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main refactoring effort: consolidating the separate DPAwareWorker type into BasicWorker with optional DP fields.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dp-worker
⚔️ Resolve merge conflicts (beta)
  • Auto-commit resolved conflicts to branch dp-worker
  • Create stacked PR with resolved conflicts
  • Post resolved changes as copyable diffs in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @slin1237, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the worker management system by consolidating data-parallel (DP) awareness directly into the BasicWorker and its builder. The primary goal was to eliminate redundant code and simplify the architecture, particularly by removing the DPAwareWorker wrapper and its associated builder. This change streamlines worker creation and interaction, making the system more modular and easier to extend. The HTTP router also benefits from this simplification, as it no longer needs to contain specific DP logic, instead relying on the unified Worker trait interface.

Highlights

  • Consolidated DPAwareWorker: The DPAwareWorker struct has been removed, integrating its functionality directly into BasicWorker using optional fields for DP-awareness.
  • Simplified Worker Builder: The DPAwareWorkerBuilder has been eliminated, and BasicWorkerBuilder now includes a dp_config method to handle data-parallel worker creation.
  • DP-Agnostic HTTP Router: The HTTP router has been refactored to remove duplicated DP logic, making it fully agnostic to data-parallel specifics by leveraging the Worker trait's prepare_request() and endpoint_url() methods.
  • Reduced Codebase: This refactoring resulted in a net reduction of approximately 280 lines of code, improving maintainability and reducing boilerplate.
Changelog
  • model_gateway/src/core/mod.rs
    • Removed the export of DPAwareWorkerBuilder.
  • model_gateway/src/core/steps/worker/local/create_worker.rs
    • Updated worker creation logic to use BasicWorkerBuilder::dp_config instead of the removed DPAwareWorkerBuilder.
  • model_gateway/src/core/steps/worker/local/update_worker_properties.rs
    • Refactored worker property update logic to use a single BasicWorkerBuilder path, conditionally applying DP configuration.
  • model_gateway/src/core/worker.rs
    • Added optional dp_rank, dp_size, and dp_base_url fields to the BasicWorker struct.
    • Removed the normalised_url() helper function.
    • Implemented is_dp_aware, base_url, dp_rank, dp_size, prepare_request, and endpoint_url methods directly within the BasicWorker's Worker trait implementation.
    • Deleted the DPAwareWorker struct and its entire Worker trait implementation.
    • Adjusted the BasicWorker debug formatter to conditionally display DP-related fields.
    • Updated the http_health_check method to use self.base_url().
  • model_gateway/src/core/worker_builder.rs
    • Removed the import of DPAwareWorker.
    • Added optional dp_rank, dp_size, and dp_base_url fields to BasicWorkerBuilder.
    • Introduced a dp_config method to BasicWorkerBuilder for configuring data-parallel workers.
    • Removed the DPAwareWorkerBuilder struct and its associated methods.
    • Updated the BasicWorkerBuilder::build method to correctly set the new DP-related fields.
    • Modified test cases to use the new BasicWorkerBuilder::dp_config for DP-aware worker creation.
  • model_gateway/src/routers/http/router.rs
    • Removed the dp_aware field from the Router struct.
    • Deleted the worker_base_url and extract_dp_rank helper functions.
    • Refactored send_typed_request to be DP-agnostic, utilizing worker.prepare_request() and worker.endpoint_url() for all request preparations and URL formatting.
    • Removed a debug! log statement related to modified request bodies.
Activity
  • No human activity detected on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@mergify

mergify Bot commented Feb 16, 2026

Copy link
Copy Markdown
Contributor

Hi @slin1237, the branch dp-worker does not follow our naming convention.

Please use one of the following formats:

  • <type>/<description> — e.g. feat/add-auth, fix/null-pointer
  • <username>/<description> — e.g. changsu/fix-routing

Allowed types: feat, fix, chore, docs, refactor, test, ci, perf

Note: We will bypass this check for existing PRs during the grace period, but PRs with non-conforming branch names will be auto-closed in the future. Please follow the naming convention for all new branches.

@mergify

mergify Bot commented Feb 16, 2026

Copy link
Copy Markdown
Contributor

Hi @slin1237, the DCO sign-off check has failed. All commits must include a Signed-off-by line.

To fix existing commits:

# Sign off the last N commits (replace N with the number of unsigned commits)
git rebase HEAD~N --signoff
git push --force-with-lease

To sign off future commits automatically:

  • Use git commit -s every time, or
  • VSCode: enable Git: Always Sign Off in Settings
  • PyCharm: enable Sign-off commit in the Commit tool window

Delete DPAwareWorker and DPAwareWorkerBuilder, moving DP-awareness into
BasicWorker as three optional fields (dp_rank, dp_size, dp_base_url).

What changed:
- worker.rs: Added optional dp_rank/dp_size/dp_base_url fields to
  BasicWorker. Overrode 6 Worker trait methods (is_dp_aware, base_url,
  dp_rank, dp_size, prepare_request, endpoint_url) inline. Deleted
  DPAwareWorker struct and its full Worker impl (~147 lines). Removed
  normalised_url() in favor of base_url(). Updated Debug impl and all
  DP tests.
- worker_builder.rs: Added dp_config(rank, size) to BasicWorkerBuilder
  which captures the current URL as base, then formats url@rank. Deleted
  DPAwareWorkerBuilder and its 16 passthrough setter methods (~112 lines).
  Updated builder tests.
- mod.rs: Removed DPAwareWorkerBuilder from public exports.
- create_worker.rs: Switched from DPAwareWorkerBuilder::new() to
  BasicWorkerBuilder::new().dp_config().
- update_worker_properties.rs: Eliminated separate DP/non-DP builder
  branches into a single BasicWorkerBuilder path with conditional
  dp_config() call.
- router.rs: Removed dp_aware field, extract_dp_rank(), and
  worker_base_url() helper. Refactored send_typed_request to accept
  &dyn Worker and use prepare_request()/endpoint_url() unconditionally,
  making the router fully DP-agnostic. route_simple_request now uses
  worker.base_url() directly.

Why: DPAwareWorker was pure boilerplate — ~250 lines of delegation that
added no behavior beyond what three optional fields provide. The router
also duplicated DP logic (URL parsing, body injection) that the Worker
trait already abstracts, marked with a TODO to fix. This consolidation
removes all duplication and makes the router DP-agnostic.

How: DP-awareness is now opt-in via BasicWorkerBuilder::dp_config().
Non-DP workers have None for all three fields, so all trait defaults
(is_dp_aware=false, base_url=url, prepare_request=passthrough) apply
with zero overhead. The router uses a single code path through
prepare_request() and endpoint_url() for all workers.

Signed-off-by: Simo Lin <simo.lin@oracle.com>

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This is an excellent refactoring that significantly simplifies the codebase by consolidating DPAwareWorker into BasicWorker. The removal of boilerplate and duplicated logic in the HTTP router is a great improvement for maintainability. The changes are well-structured and the new dp_config builder pattern is clean. I have a minor suggestion to further improve code quality and safety, but overall this is a very solid pull request.

async fn prepare_request(&self, mut req: serde_json::Value) -> WorkerResult<serde_json::Value> {
if let Some(rank) = self.dp_rank {
if let Some(map) = req.as_object_mut() {
map.insert("data_parallel_rank".to_string(), serde_json::json!(rank));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The key "data_parallel_rank" is hardcoded here. It was previously defined as a const in router.rs. It would be good practice to define it as a const at the module level (e.g., const DP_RANK_KEY: &str = "data_parallel_rank";) and reuse it here. This avoids magic strings and improves maintainability.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@model_gateway/src/core/steps/worker/local/update_worker_properties.rs`:
- Around line 88-92: The DP-aware branch silently masks broken invariants by
using unwrap_or for dp_rank()/dp_size(); replace the fallbacks with expect()
calls so a missing value fails fast (e.g., call worker.dp_rank().expect("dp_rank
must be Some when is_dp_aware() is true") and similarly for dp_size()) before
passing to builder.dp_config, or if the fallback behavior is intentional, add a
short comment next to the worker.is_dp_aware() check explaining why default
values 0 and 1 are safe and desired.

When is_dp_aware() is true, dp_rank and dp_size are guaranteed Some by
construction. Replace silent fallbacks (0, 1) with expect() to fail
fast on invariant violations instead of masking bugs.

Signed-off-by: Simo Lin <simo.lin@oracle.com>
@slin1237
slin1237 merged commit bf2db31 into main Feb 16, 2026
24 of 25 checks passed
@slin1237
slin1237 deleted the dp-worker branch February 16, 2026 06:14
slin1237 added a commit that referenced this pull request Feb 16, 2026
…_type

Move the three data-parallel identity fields (dp_rank, dp_size,
dp_base_url) from BasicWorker to WorkerSpec in the protocols crate.
These are config/identity fields set at construction and never mutated,
so they belong alongside other worker identity in WorkerSpec.

What changed:
- protocols/src/worker.rs: added dp_base_url, dp_rank, dp_size to
  WorkerSpec with serde(default, skip_serializing_if) for backwards
  compatibility
- model_gateway/src/core/worker.rs: replaced 6 hardcoded DP trait
  defaults with implementations reading from self.metadata().spec;
  removed 3 DP fields and 6 method overrides from BasicWorker;
  simplified Debug impl; removed default_model_type from WorkerMetadata
  and inlined ModelType::LLM in supports_endpoint() fallback; updated
  2 test struct literals
- model_gateway/src/core/worker_builder.rs: removed 3 DP fields from
  builder struct and all 3 constructors; dp_config() now writes to
  self.spec.*; removed default_model_type from build(); removed unused
  ModelType import
- bindings/golang/src/policy.rs: removed default_model_type from
  WorkerMetadata construction and ModelType from imports

Why: after consolidating DPAwareWorker into BasicWorker (#434), the DP
fields were still on BasicWorker alongside runtime state. Moving them
to WorkerSpec makes DP info visible in GET /workers API responses (via
WorkerInfo's serde(flatten) on spec), gives any future Worker
implementor DP support for free via trait defaults, and removes ~30
lines of duplicated overrides.

How: DP fields use Option<T> with serde(default) so old clients that
don't send these fields get None (backwards compatible). The Worker
trait defaults now read from metadata().spec instead of returning
hardcoded None/false. default_model_type was always ModelType::LLM at
all 4 construction sites so it was inlined.
slin1237 added a commit that referenced this pull request Feb 16, 2026
…_type

Move the three data-parallel identity fields (dp_rank, dp_size,
dp_base_url) from BasicWorker to WorkerSpec in the protocols crate.
These are config/identity fields set at construction and never mutated,
so they belong alongside other worker identity in WorkerSpec.

What changed:
- protocols/src/worker.rs: added dp_base_url, dp_rank, dp_size to
  WorkerSpec with serde(default, skip_serializing_if) for backwards
  compatibility
- model_gateway/src/core/worker.rs: replaced 6 hardcoded DP trait
  defaults with implementations reading from self.metadata().spec;
  removed 3 DP fields and 6 method overrides from BasicWorker;
  simplified Debug impl; removed default_model_type from WorkerMetadata
  and inlined ModelType::LLM in supports_endpoint() fallback; updated
  2 test struct literals
- model_gateway/src/core/worker_builder.rs: removed 3 DP fields from
  builder struct and all 3 constructors; dp_config() now writes to
  self.spec.*; removed default_model_type from build(); removed unused
  ModelType import
- bindings/golang/src/policy.rs: removed default_model_type from
  WorkerMetadata construction and ModelType from imports

Why: after consolidating DPAwareWorker into BasicWorker (#434), the DP
fields were still on BasicWorker alongside runtime state. Moving them
to WorkerSpec makes DP info visible in GET /workers API responses (via
WorkerInfo's serde(flatten) on spec), gives any future Worker
implementor DP support for free via trait defaults, and removes ~30
lines of duplicated overrides.

How: DP fields use Option<T> with serde(default) so old clients that
don't send these fields get None (backwards compatible). The Worker
trait defaults now read from metadata().spec instead of returning
hardcoded None/false. default_model_type was always ModelType::LLM at
all 4 construction sites so it was inlined.

Signed-off-by: Simo Lin <simo.lin@oracle.com>
slin1237 added a commit that referenced this pull request Feb 16, 2026
…_type

Move the three data-parallel identity fields (dp_rank, dp_size,
dp_base_url) from BasicWorker to WorkerSpec in the protocols crate.
These are config/identity fields set at construction and never mutated,
so they belong alongside other worker identity in WorkerSpec.

What changed:
- protocols/src/worker.rs: added dp_base_url, dp_rank, dp_size to
  WorkerSpec with serde(default, skip_serializing_if) for backwards
  compatibility
- model_gateway/src/core/worker.rs: replaced 6 hardcoded DP trait
  defaults with implementations reading from self.metadata().spec;
  removed 3 DP fields and 6 method overrides from BasicWorker;
  simplified Debug impl; removed default_model_type from WorkerMetadata
  and inlined ModelType::LLM in supports_endpoint() fallback; updated
  2 test struct literals
- model_gateway/src/core/worker_builder.rs: removed 3 DP fields from
  builder struct and all 3 constructors; dp_config() now writes to
  self.spec.*; removed default_model_type from build(); removed unused
  ModelType import
- bindings/golang/src/policy.rs: removed default_model_type from
  WorkerMetadata construction and ModelType from imports

Why: after consolidating DPAwareWorker into BasicWorker (#434), the DP
fields were still on BasicWorker alongside runtime state. Moving them
to WorkerSpec makes DP info visible in GET /workers API responses (via
WorkerInfo's serde(flatten) on spec), gives any future Worker
implementor DP support for free via trait defaults, and removes ~30
lines of duplicated overrides.

How: DP fields use Option<T> with serde(default) so old clients that
don't send these fields get None (backwards compatible). The Worker
trait defaults now read from metadata().spec instead of returning
hardcoded None/false. default_model_type was always ModelType::LLM at
all 4 construction sites so it was inlined.

Signed-off-by: Simo Lin <simo.lin@oracle.com>
ppraneth pushed a commit that referenced this pull request Feb 18, 2026
Signed-off-by: Simo Lin <simo.lin@oracle.com>
Signed-off-by: ppraneth <pranethparuchuri@gmail.com>
@mergify

mergify Bot commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

Hi @slin1237, the branch dp-worker does not follow our naming convention.

Please use one of the following formats:

  • <type>/<description> — e.g. feat/add-auth, fix/null-pointer, dependabot/cargo/pyo3-0.28.1
  • <username>/<description> — e.g. changsu/fix-routing

Allowed types: feat, fix, chore, docs, refactor, test, ci, perf

Note: PRs with non-conforming branch names will be auto-closed. Please follow the naming convention for all branches.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

model-gateway Model gateway crate changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant