Repository navigation
Conversation
Add approved design for reorganizing the repository's 13 Rust crates into core/ and infra/ group directories to reduce top-level clutter (22 → 14 dirs) and make the architectural hierarchy visible from the directory tree. Core (8): protocols, reasoning_parser, tool_parser, tokenizer, multimodal, kv_index, mcp, grpc_client Infra (5): auth, mesh, data_connector, wasm, workflow App: model_gateway stays at root Migration strategy: single atomic PR with git mv + path updates. Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
Detailed 9-task plan covering git mv, Cargo.toml path updates, CI workflow changes, release config updates, and shell script fixes. All file paths and line numbers audited against current main. Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
Move 13 Rust crates into architectural group directories: Core (8): protocols, reasoning_parser, tool_parser, tokenizer, multimodal, kv_index, mcp, grpc_client Infra (5): auth, mesh, data_connector, wasm, workflow model_gateway stays at root as the main application. What changed: - git mv 13 crate directories into core/ and infra/ - Root Cargo.toml: workspace members and dependency paths updated - Inter-crate Cargo.toml: relative paths in bindings/python, bindings/golang, clients/openapi-gen updated - CI workflows: benchmark-*.yml, nightly-benchmark.yml, pr-test-rust.yml, release-crates.yml, release-grpc.yml updated - Shell scripts: ci_install_vllm.sh, check_release_versions.sh updated - GitHub labeler: .github/labeler.yml paths updated Why: 22 top-level directories created visual clutter and obscured the architectural hierarchy. Grouping by role (core libs vs infra services vs application) makes the codebase navigable at a glance. No package name changes. No Rust source code changes. Zero functional impact — only directory layout and path references. Refs: docs/plans/2026-03-05-workspace-reorganization-design.md Signed-off-by: Simo Lin <linsimo.mark@gmail.com>
📝 WalkthroughWalkthroughThis PR reorganizes the workspace by moving 13 Rust crates into core/ (8 crates) and infra/ (5 crates) subdirectories, keeping model_gateway at root. Updates corresponding Cargo.toml workspace members, inter-crate dependency paths, GitHub Actions workflows, and CI configuration to reflect the new directory structure without modifying package names or APIs. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/benchmark-radix-tree.yml:
- Line 5: Replace the spaced bracket list for the YAML key "branches" with
compact bracket syntax: change occurrences of branches: [ main ] to branches:
[main] (also update the second occurrence noted) so the YAMLlint "brackets" rule
is satisfied.
In @.github/workflows/benchmark-tool-parser.yml:
- Line 13: Update the branches entry so bracket spacing follows YAMLlint rules:
locate the workflow key where the value is written as "branches: [ main ]" and
remove the extra spaces inside the square brackets (or switch to a multi-line
list) so it becomes "branches: [main]" (or a proper YAML list), ensuring the
brackets rule is satisfied; change the occurrence in the workflow definition
where "branches" is defined.
In `@docs/plans/2026-03-05-workspace-reorganization-design.md`:
- Around line 19-46: The fenced code block that shows the project tree (the
triple-backtick block beginning with "smg/") is missing a language identifier;
update the opening fence to include a language tag (e.g., use ```text) so
markdownlint is satisfied by modifying that specific fenced block in
docs/plans/2026-03-05-workspace-reorganization-design.md.
In `@docs/plans/2026-03-05-workspace-reorganization.md`:
- Line 63: Several fenced code blocks use "```toml" without surrounding blank
lines causing MD031 failures; for each fenced block (opening marker "```toml"
and its closing "```") add a blank line immediately before the opening fence and
a blank line immediately after the closing fence so the block is separated from
surrounding text—apply this change to every flagged block (e.g., the occurrences
starting with "```toml" and their matching "```" markers throughout the
document).
- Around line 129-131: Replace lowercase "github" with "GitHub" in the prose of
this document: update the three workflow path mentions
(.github/workflows/benchmark-tool-parser.yml,
.github/workflows/benchmark-tokenizer.yml,
.github/workflows/benchmark-radix-tree.yml) and any other occurrences in this
file (the additional instances noted in the review). Search the file for the
token "github" (case-sensitive) and change it to "GitHub" so capitalization is
consistent across the document.
- Line 13: The first task heading "Task 1: Move crate directories with git mv"
is using ### while the document's top-level is #, causing a heading level jump;
update that heading from "### Task 1: Move crate directories with git mv" to "##
Task 1: Move crate directories with git mv" (and verify subsequent task headings
use consistent levels) so heading increments follow the expected hierarchy.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: dec287d9-2def-435f-a641-74c3f3bfe294
⛔ Files ignored due to path filters (10)
core/multimodal/tests/fixtures/images/grayscale.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/large.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/odd_dims.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/small.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/square.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/tall.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/tiny.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/very_tall.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/very_wide.jpgis excluded by!**/*.jpgcore/multimodal/tests/fixtures/images/wide.jpgis excluded by!**/*.jpg
📒 Files selected for processing (290)
.github/labeler.yml.github/workflows/benchmark-radix-tree.yml.github/workflows/benchmark-tokenizer.yml.github/workflows/benchmark-tool-parser.yml.github/workflows/nightly-benchmark.yml.github/workflows/pr-test-rust.yml.github/workflows/release-crates.yml.github/workflows/release-grpc.ymlCargo.tomlbindings/golang/Cargo.tomlbindings/python/Cargo.tomlclients/openapi-gen/Cargo.tomlcore/grpc_client/Cargo.tomlcore/grpc_client/build.rscore/grpc_client/proto/common.protocore/grpc_client/proto/sglang_encoder.protocore/grpc_client/proto/sglang_scheduler.protocore/grpc_client/proto/trtllm_service.protocore/grpc_client/proto/vllm_engine.protocore/grpc_client/python/.gitignorecore/grpc_client/python/README.mdcore/grpc_client/python/pyproject.tomlcore/grpc_client/python/setup.pycore/grpc_client/python/smg_grpc_proto/__init__.pycore/grpc_client/python/smg_grpc_proto/protocore/grpc_client/src/lib.rscore/grpc_client/src/sglang_scheduler.rscore/grpc_client/src/tokenizer_bundle.rscore/grpc_client/src/trtllm_service.rscore/grpc_client/src/vllm_engine.rscore/kv_index/Cargo.tomlcore/kv_index/benches/throughput_bench.rscore/kv_index/src/common.rscore/kv_index/src/event_tree.rscore/kv_index/src/lib.rscore/kv_index/src/string_tree.rscore/kv_index/src/token_tree.rscore/mcp/Cargo.tomlcore/mcp/README.mdcore/mcp/src/annotations.rscore/mcp/src/approval/audit.rscore/mcp/src/approval/manager.rscore/mcp/src/approval/mod.rscore/mcp/src/approval/policy.rscore/mcp/src/core/config.rscore/mcp/src/core/handler.rscore/mcp/src/core/metrics.rscore/mcp/src/core/mod.rscore/mcp/src/core/oauth.rscore/mcp/src/core/orchestrator.rscore/mcp/src/core/pool.rscore/mcp/src/core/proxy.rscore/mcp/src/core/reconnect.rscore/mcp/src/core/session.rscore/mcp/src/error.rscore/mcp/src/inventory/index.rscore/mcp/src/inventory/mod.rscore/mcp/src/inventory/types.rscore/mcp/src/lib.rscore/mcp/src/responses_bridge.rscore/mcp/src/tenant.rscore/mcp/src/transform/mod.rscore/mcp/src/transform/transformer.rscore/mcp/src/transform/types.rscore/multimodal/Cargo.tomlcore/multimodal/scripts/generate_vision_golden.pycore/multimodal/src/error.rscore/multimodal/src/hasher.rscore/multimodal/src/lib.rscore/multimodal/src/media.rscore/multimodal/src/registry/llama4.rscore/multimodal/src/registry/llava.rscore/multimodal/src/registry/mod.rscore/multimodal/src/registry/phi3_v.rscore/multimodal/src/registry/qwen3_vl.rscore/multimodal/src/registry/qwen_vl.rscore/multimodal/src/registry/traits.rscore/multimodal/src/tracker.rscore/multimodal/src/types.rscore/multimodal/src/vision/image_processor.rscore/multimodal/src/vision/mod.rscore/multimodal/src/vision/preprocessor_config.rscore/multimodal/src/vision/processors/llama4_vision.rscore/multimodal/src/vision/processors/llava.rscore/multimodal/src/vision/processors/mod.rscore/multimodal/src/vision/processors/phi3_vision.rscore/multimodal/src/vision/processors/phi4_vision.rscore/multimodal/src/vision/processors/pixtral.rscore/multimodal/src/vision/processors/qwen2_vl.rscore/multimodal/src/vision/processors/qwen3_vl.rscore/multimodal/src/vision/processors/qwen_vl_base.rscore/multimodal/src/vision/transforms.rscore/multimodal/tests/multimodal_tracker_test.rscore/multimodal/tests/vision_golden_tests.rscore/protocols/Cargo.tomlcore/protocols/src/builders/chat/mod.rscore/protocols/src/builders/chat/response.rscore/protocols/src/builders/chat/stream_response.rscore/protocols/src/builders/mod.rscore/protocols/src/builders/realtime/client_event.rscore/protocols/src/builders/realtime/mod.rscore/protocols/src/builders/realtime/response.rscore/protocols/src/builders/realtime/server_event.rscore/protocols/src/builders/responses/mod.rscore/protocols/src/builders/responses/response.rscore/protocols/src/chat.rscore/protocols/src/classify.rscore/protocols/src/common.rscore/protocols/src/completion.rscore/protocols/src/embedding.rscore/protocols/src/event_types.rscore/protocols/src/generate.rscore/protocols/src/interactions.rscore/protocols/src/lib.rscore/protocols/src/messages.rscore/protocols/src/model_card.rscore/protocols/src/model_type.rscore/protocols/src/parser.rscore/protocols/src/realtime_conversation.rscore/protocols/src/realtime_events.rscore/protocols/src/realtime_response.rscore/protocols/src/realtime_session.rscore/protocols/src/rerank.rscore/protocols/src/responses.rscore/protocols/src/sampling_params.rscore/protocols/src/tokenize.rscore/protocols/src/validated.rscore/protocols/src/worker.rscore/reasoning_parser/Cargo.tomlcore/reasoning_parser/README.mdcore/reasoning_parser/src/README.mdcore/reasoning_parser/src/factory.rscore/reasoning_parser/src/lib.rscore/reasoning_parser/src/parsers/base.rscore/reasoning_parser/src/parsers/cohere_cmd.rscore/reasoning_parser/src/parsers/deepseek_r1.rscore/reasoning_parser/src/parsers/glm45.rscore/reasoning_parser/src/parsers/kimi.rscore/reasoning_parser/src/parsers/minimax.rscore/reasoning_parser/src/parsers/mod.rscore/reasoning_parser/src/parsers/nano_v3.rscore/reasoning_parser/src/parsers/qwen3.rscore/reasoning_parser/src/parsers/step3.rscore/reasoning_parser/src/traits.rscore/tokenizer/Cargo.tomlcore/tokenizer/README.mdcore/tokenizer/benches/stop_sequence_search.rscore/tokenizer/src/cache/fingerprint.rscore/tokenizer/src/cache/l0.rscore/tokenizer/src/cache/l1.rscore/tokenizer/src/cache/mod.rscore/tokenizer/src/chat_template.rscore/tokenizer/src/factory.rscore/tokenizer/src/hub.rscore/tokenizer/src/huggingface.rscore/tokenizer/src/lib.rscore/tokenizer/src/mock.rscore/tokenizer/src/registry.rscore/tokenizer/src/sequence.rscore/tokenizer/src/stop.rscore/tokenizer/src/stream.rscore/tokenizer/src/tests.rscore/tokenizer/src/tiktoken.rscore/tokenizer/src/traits.rscore/tokenizer/tests/chat_template_format_detection.rscore/tokenizer/tests/chat_template_integration.rscore/tokenizer/tests/chat_template_loading.rscore/tokenizer/tests/common/mod.rscore/tokenizer/tests/tiktoken_integration.rscore/tokenizer/tests/tokenizer_cache_correctness_test.rscore/tokenizer/tests/tokenizer_integration.rscore/tool_parser/Cargo.tomlcore/tool_parser/README.mdcore/tool_parser/src/errors.rscore/tool_parser/src/factory.rscore/tool_parser/src/lib.rscore/tool_parser/src/parsers/cohere.rscore/tool_parser/src/parsers/deepseek.rscore/tool_parser/src/parsers/glm4_moe.rscore/tool_parser/src/parsers/helpers.rscore/tool_parser/src/parsers/json.rscore/tool_parser/src/parsers/kimik2.rscore/tool_parser/src/parsers/llama.rscore/tool_parser/src/parsers/minimax_m2.rscore/tool_parser/src/parsers/mistral.rscore/tool_parser/src/parsers/mod.rscore/tool_parser/src/parsers/passthrough.rscore/tool_parser/src/parsers/pythonic.rscore/tool_parser/src/parsers/qwen.rscore/tool_parser/src/parsers/qwen_coder.rscore/tool_parser/src/parsers/step3.rscore/tool_parser/src/partial_json.rscore/tool_parser/src/tests.rscore/tool_parser/src/traits.rscore/tool_parser/src/types.rscore/tool_parser/tests/common/mod.rscore/tool_parser/tests/tool_parser_cohere.rscore/tool_parser/tests/tool_parser_deepseek.rscore/tool_parser/tests/tool_parser_edge_cases.rscore/tool_parser/tests/tool_parser_fallback.rscore/tool_parser/tests/tool_parser_glm47_moe.rscore/tool_parser/tests/tool_parser_glm4_moe.rscore/tool_parser/tests/tool_parser_json.rscore/tool_parser/tests/tool_parser_kimik2.rscore/tool_parser/tests/tool_parser_llama.rscore/tool_parser/tests/tool_parser_minimax_m2.rscore/tool_parser/tests/tool_parser_mistral.rscore/tool_parser/tests/tool_parser_mixed_edge_cases.rscore/tool_parser/tests/tool_parser_partial_json.rscore/tool_parser/tests/tool_parser_pythonic.rscore/tool_parser/tests/tool_parser_qwen.rscore/tool_parser/tests/tool_parser_qwen_coder.rscore/tool_parser/tests/tool_parser_step3.rsdocs/plans/2026-03-05-workspace-reorganization-design.mddocs/plans/2026-03-05-workspace-reorganization.mdinfra/auth/Cargo.tomlinfra/auth/src/audit.rsinfra/auth/src/config.rsinfra/auth/src/jwks.rsinfra/auth/src/jwt.rsinfra/auth/src/lib.rsinfra/auth/src/middleware.rsinfra/data_connector/Cargo.tomlinfra/data_connector/README.mdinfra/data_connector/src/common.rsinfra/data_connector/src/config.rsinfra/data_connector/src/context.rsinfra/data_connector/src/core.rsinfra/data_connector/src/factory.rsinfra/data_connector/src/hooked.rsinfra/data_connector/src/hooks.rsinfra/data_connector/src/lib.rsinfra/data_connector/src/memory.rsinfra/data_connector/src/noop.rsinfra/data_connector/src/oracle.rsinfra/data_connector/src/oracle_migrations.rsinfra/data_connector/src/postgres.rsinfra/data_connector/src/postgres_migrations.rsinfra/data_connector/src/redis.rsinfra/data_connector/src/schema.rsinfra/data_connector/src/versioning.rsinfra/mesh/Cargo.tomlinfra/mesh/build.rsinfra/mesh/src/README.mdinfra/mesh/src/consistent_hash.rsinfra/mesh/src/controller.rsinfra/mesh/src/crdt_kv/crdt.rsinfra/mesh/src/crdt_kv/kv_store.rsinfra/mesh/src/crdt_kv/mod.rsinfra/mesh/src/crdt_kv/operation.rsinfra/mesh/src/crdt_kv/replica.rsinfra/mesh/src/crdt_kv/tests.rsinfra/mesh/src/flow_control.rsinfra/mesh/src/incremental.rsinfra/mesh/src/lib.rsinfra/mesh/src/metrics.rsinfra/mesh/src/mtls.rsinfra/mesh/src/node_state_machine.rsinfra/mesh/src/partition.rsinfra/mesh/src/ping_server.rsinfra/mesh/src/proto/gossip.protoinfra/mesh/src/rate_limit_window.rsinfra/mesh/src/service.rsinfra/mesh/src/stores.rsinfra/mesh/src/sync.rsinfra/mesh/src/tests/comprehensive.rsinfra/mesh/src/tests/mod.rsinfra/mesh/src/tests/test_utils.rsinfra/mesh/src/topology.rsinfra/mesh/src/tree_ops.rsinfra/wasm/Cargo.tomlinfra/wasm/README.mdinfra/wasm/src/config.rsinfra/wasm/src/errors.rsinfra/wasm/src/interface/spec.witinfra/wasm/src/interface/storage/storage-hooks.witinfra/wasm/src/lib.rsinfra/wasm/src/module.rsinfra/wasm/src/module_manager.rsinfra/wasm/src/runtime.rsinfra/wasm/src/spec.rsinfra/wasm/src/storage_hook.rsinfra/wasm/src/storage_spec.rsinfra/wasm/src/types.rsinfra/wasm/tests/fixtures/build_fixtures.shinfra/wasm/tests/storage_hook_integration.rsinfra/workflow/Cargo.tomlinfra/workflow/README.mdinfra/workflow/src/definition.rsinfra/workflow/src/engine.rs
| @@ -5,18 +5,18 @@ on: | |||
| branches: [ main ] | |||
There was a problem hiding this comment.
Fix YAML list bracket spacing to satisfy YAMLlint.
branches: [ main ] violates the brackets rule (reported on Line 13). Use compact list syntax.
Proposed lint fix
- branches: [ main ]
+ branches: [main]
...
- branches: [ main ]
+ branches: [main]Also applies to: 13-13
🧰 Tools
🪛 YAMLlint (1.38.0)
[error] 5-5: too many spaces inside brackets
(brackets)
[error] 5-5: too many spaces inside brackets
(brackets)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/benchmark-radix-tree.yml at line 5, Replace the spaced
bracket list for the YAML key "branches" with compact bracket syntax: change
occurrences of branches: [ main ] to branches: [main] (also update the second
occurrence noted) so the YAMLlint "brackets" rule is satisfied.
| - '!core/tool_parser/**/*_test.rs' | ||
| - '!core/tool_parser/**/test_*.rs' | ||
| pull_request: | ||
| branches: [ main ] |
There was a problem hiding this comment.
Fix bracket spacing on branches to satisfy YAMLlint.
Line 13 currently uses [ main ], which violates the brackets rule.
Proposed fix
- branches: [ main ]
+ branches: [main]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| branches: [ main ] | |
| branches: [main] |
🧰 Tools
🪛 YAMLlint (1.38.0)
[error] 13-13: too many spaces inside brackets
(brackets)
[error] 13-13: too many spaces inside brackets
(brackets)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/benchmark-tool-parser.yml at line 13, Update the branches
entry so bracket spacing follows YAMLlint rules: locate the workflow key where
the value is written as "branches: [ main ]" and remove the extra spaces inside
the square brackets (or switch to a multi-line list) so it becomes "branches:
[main]" (or a proper YAML list), ensuring the brackets rule is satisfied; change
the occurrence in the workflow definition where "branches" is defined.
| ``` | ||
| smg/ | ||
| ├── core/ # Core library crates (8) | ||
| │ ├── protocols/ # openai-protocol | ||
| │ ├── reasoning_parser/ # reasoning-parser | ||
| │ ├── tool_parser/ # tool-parser | ||
| │ ├── tokenizer/ # llm-tokenizer | ||
| │ ├── multimodal/ # llm-multimodal | ||
| │ ├── kv_index/ # kv-index | ||
| │ ├── mcp/ # smg-mcp | ||
| │ └── grpc_client/ # smg-grpc-client | ||
| ├── infra/ # Infrastructure/service crates (5) | ||
| │ ├── auth/ # smg-auth | ||
| │ ├── mesh/ # smg-mesh | ||
| │ ├── data_connector/ # data-connector | ||
| │ ├── wasm/ # smg-wasm | ||
| │ └── workflow/ # wfaas | ||
| ├── model_gateway/ # Main application (stays at root) | ||
| ├── bindings/ # Language bindings (unchanged) | ||
| ├── clients/ # Client libraries (unchanged) | ||
| ├── e2e_test/ # E2E tests (unchanged) | ||
| ├── grpc_servicer/ # gRPC servicer (unchanged) | ||
| ├── docker/ # Docker configs (unchanged) | ||
| ├── docs/ # Documentation (unchanged) | ||
| ├── examples/ # Examples (unchanged) | ||
| ├── scripts/ # Scripts (unchanged) | ||
| └── Cargo.toml # Workspace root | ||
| ``` |
There was a problem hiding this comment.
Add a language identifier to the fenced code block.
Line 19 uses a plain triple-backtick fence; markdownlint expects a language tag.
Proposed fix
-```
+```text
smg/
├── core/ # Core library crates (8)
│ ├── protocols/ # openai-protocol
│ ├── reasoning_parser/ # reasoning-parser
│ ├── tool_parser/ # tool-parser
│ ├── tokenizer/ # llm-tokenizer
│ ├── multimodal/ # llm-multimodal
│ ├── kv_index/ # kv-index
│ ├── mcp/ # smg-mcp
│ └── grpc_client/ # smg-grpc-client
├── infra/ # Infrastructure/service crates (5)
│ ├── auth/ # smg-auth
│ ├── mesh/ # smg-mesh
│ ├── data_connector/ # data-connector
│ ├── wasm/ # smg-wasm
│ └── workflow/ # wfaas
├── model_gateway/ # Main application (stays at root)
├── bindings/ # Language bindings (unchanged)
├── clients/ # Client libraries (unchanged)
├── e2e_test/ # E2E tests (unchanged)
├── grpc_servicer/ # gRPC servicer (unchanged)
├── docker/ # Docker configs (unchanged)
├── docs/ # Documentation (unchanged)
├── examples/ # Examples (unchanged)
├── scripts/ # Scripts (unchanged)
└── Cargo.toml # Workspace root</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 19-19: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/plans/2026-03-05-workspace-reorganization-design.md` around lines 19 -
46, The fenced code block that shows the project tree (the triple-backtick block
beginning with "smg/") is missing a language identifier; update the opening
fence to include a language tag (e.g., use ```text) so markdownlint is satisfied
by modifying that specific fenced block in
docs/plans/2026-03-05-workspace-reorganization-design.md.
|
|
||
| --- | ||
|
|
||
| ### Task 1: Move crate directories with git mv |
There was a problem hiding this comment.
Fix heading level jump at the first task heading.
The file goes from # to ### directly, which violates markdown heading increment rules.
Suggested fix
-### Task 1: Move crate directories with git mv
+## Task 1: Move crate directories with git mv📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### Task 1: Move crate directories with git mv | |
| ## Task 1: Move crate directories with git mv |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 13-13: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/plans/2026-03-05-workspace-reorganization.md` at line 13, The first task
heading "Task 1: Move crate directories with git mv" is using ### while the
document's top-level is #, causing a heading level jump; update that heading
from "### Task 1: Move crate directories with git mv" to "## Task 1: Move crate
directories with git mv" (and verify subsequent task headings use consistent
levels) so heading increments follow the expected hierarchy.
| **Step 1: Update workspace members (line 2)** | ||
|
|
||
| Change: | ||
| ```toml |
There was a problem hiding this comment.
Add blank lines around fenced code blocks.
Multiple fenced blocks are missing required surrounding blank lines and trigger MD031.
Suggested pattern
Change:
+
```toml
members = ["model_gateway", ...]To:
Apply this same pattern to each flagged fenced block.
</details>
Also applies to: 68-68, 75-75, 136-136, 147-147, 157-157, 200-200, 212-212, 237-237, 259-259, 289-289, 322-322
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.21.0)</summary>
[warning] 63-63: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against the current code and only fix it if needed.
In @docs/plans/2026-03-05-workspace-reorganization.md at line 63, Several fenced
code blocks use "toml" without surrounding blank lines causing MD031 failures; for each fenced block (opening marker "toml" and its closing "") add a blank line immediately before the opening fence and a blank line immediately after the closing fence so the block is separated from surrounding text—apply this change to every flagged block (e.g., the occurrences starting with "toml" and their matching "```" markers throughout the document).
</details>
<!-- fingerprinting:phantom:poseidon:hawk -->
<!-- This is an auto-generated comment by CodeRabbit -->
| - Modify: `.github/workflows/benchmark-tool-parser.yml` (lines 8-11, 16-19) | ||
| - Modify: `.github/workflows/benchmark-tokenizer.yml` (lines 8-11, 16-19) | ||
| - Modify: `.github/workflows/benchmark-radix-tree.yml` (lines 8-11, 16-19) |
There was a problem hiding this comment.
Use “GitHub” capitalization consistently in prose.
These references use lowercase “github” in descriptive text; update to “GitHub” for correctness/style consistency.
Also applies to: 169-169, 195-195, 253-254, 355-355
🧰 Tools
🪛 LanguageTool
[uncategorized] ~129-~129: The official name of this software platform is spelled with a capital “H”.
Context: ...— benchmark files Files: - Modify: .github/workflows/benchmark-tool-parser.yml (l...
(GITHUB)
[uncategorized] ~130-~130: The official name of this software platform is spelled with a capital “H”.
Context: ...rser.yml(lines 8-11, 16-19) - Modify:.github/workflows/benchmark-tokenizer.yml` (lin...
(GITHUB)
[uncategorized] ~131-~131: The official name of this software platform is spelled with a capital “H”.
Context: ...izer.yml(lines 8-11, 16-19) - Modify:.github/workflows/benchmark-radix-tree.yml` (li...
(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/plans/2026-03-05-workspace-reorganization.md` around lines 129 - 131,
Replace lowercase "github" with "GitHub" in the prose of this document: update
the three workflow path mentions (.github/workflows/benchmark-tool-parser.yml,
.github/workflows/benchmark-tokenizer.yml,
.github/workflows/benchmark-radix-tree.yml) and any other occurrences in this
file (the additional instances noted in the review). Search the file for the
token "github" (case-sensitive) and change it to "GitHub" so capitalization is
consistent across the document.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 75e9825d20
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| run: | | ||
| source "$HOME/.cargo/env" | ||
| bash wasm/tests/fixtures/build_fixtures.sh | ||
| bash infra/wasm/tests/fixtures/build_fixtures.sh |
There was a problem hiding this comment.
Fix fixture builder path assumptions after moving wasm crate
This step now runs infra/wasm/tests/fixtures/build_fixtures.sh, but that script still computes REPO_ROOT with ../../.. and then builds guests from $REPO_ROOT/examples/wasm/...; after the move, ../../.. resolves to <repo>/infra, so it looks for infra/examples/wasm/* (which does not exist). On cache misses this causes fixture generation to fail, which blocks the wheel job and downstream E2E jobs that depend on the fixture artifact.
Useful? React with 👍 / 👎.
| with: | ||
| name: wasm-test-fixtures | ||
| path: wasm/tests/fixtures/ | ||
| path: infra/wasm/tests/fixtures/ |
There was a problem hiding this comment.
Align agentic E2E fixture download path with test hook path
Agentic responses tests still launch the gateway with --storage-hook-wasm-path wasm/tests/fixtures/storage_hook_passthrough.wasm (e2e_test/responses/test_storage_hooks.py), but this workflow now places the fixture under infra/wasm/tests/fixtures/. Since wasm/ no longer exists at repo root after this refactor, those storage-hook tests will fail to load the module unless the test path or download destination is updated.
Useful? React with 👍 / 👎.
Summary of ChangesHello, 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 project's directory structure by grouping Rust crates into Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe 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
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 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
|
There was a problem hiding this comment.
Code Review
This is a large but well-executed refactoring that significantly improves the workspace organization by grouping crates into core/ and infra/ directories. The changes are consistent, and all path updates in configuration files and scripts appear correct. I have one suggestion regarding a newly added documentation file.
Summary
Reorganize 13 Rust crates into
core/(8) andinfra/(5) group directories to reduce root-level clutter (22 → 14 directories) and make the architectural hierarchy visible from the directory tree.What changed
Directory moves (via
git mv— history preserved)Core (8 crates) — foundational libraries:
protocols/→core/protocols/reasoning_parser/→core/reasoning_parser/tool_parser/→core/tool_parser/tokenizer/→core/tokenizer/multimodal/→core/multimodal/kv_index/→core/kv_index/mcp/→core/mcp/grpc_client/→core/grpc_client/Infra (5 crates) — service-layer infrastructure:
auth/→infra/auth/mesh/→infra/mesh/data_connector/→infra/data_connector/wasm/→infra/wasm/workflow/→infra/workflow/Unchanged:
model_gateway/stays at root as the main application.Path updates
Cargo.toml: workspace members and[workspace.dependencies]pathsCargo.toml: relative paths inbindings/python,bindings/golang,clients/openapi-genbenchmark-*.yml,nightly-benchmark.yml,pr-test-rust.yml,release-crates.yml,release-grpc.yml.github/labeler.ymlpath globsscripts/ci_install_vllm.sh,scripts/check_release_versions.shWhat does NOT change
smg-mcp,openai-protocol, etc.) — unchanged.rsfile modificationsbindings/,clients/,docker/,docs/,examples/,scripts/,e2e_test/,grpc_servicer/— unchangedWhy
22 top-level directories created visual clutter and obscured the architectural hierarchy between core libraries, infrastructure services, and the main application. Grouping by role makes the codebase navigable at a glance.
Test plan
cargo check --workspacepassescargo test --workspace --lib— all tests passRefs:
docs/plans/2026-03-05-workspace-reorganization-design.mdSummary by CodeRabbit
Chores
Documentation