From a463d7dc4548f95ee150ae12d5f6759bfb8510c1 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Sat, 7 Mar 2026 22:53:02 -0800 Subject: [PATCH 1/4] refactor: move library crates into crates/ directory Move 13 library crates (auth, data_connector, grpc_client, kv_index, mcp, mesh, multimodal, protocols, reasoning_parser, tokenizer, tool_parser, wasm, workflow) from repo root into crates/ subdirectory. Update all path references in: - Root Cargo.toml workspace members and dependency paths - bindings/python, bindings/golang, clients/openapi-gen Cargo.toml - 7 CI workflows (path triggers, cache keys, proto copy paths) - Scripts (check_release_versions.sh, ci_install_vllm.sh) - Documentation (development.md, grpc_servicer/DEVELOPMENT.md) This follows standard Rust workspace conventions and reduces root-level clutter from 18+ directories to a cleaner layout. Signed-off-by: Chang Su --- .github/workflows/benchmark-radix-tree.yml | 16 +++--- .github/workflows/benchmark-tokenizer.yml | 16 +++--- .github/workflows/benchmark-tool-parser.yml | 16 +++--- .github/workflows/nightly-benchmark.yml | 2 +- .github/workflows/pr-test-rust.yml | 46 +++++++++--------- .github/workflows/release-crates.yml | 26 +++++----- .github/workflows/release-grpc.yml | 16 +++--- Cargo.toml | 28 +++++------ bindings/golang/Cargo.toml | 4 +- bindings/python/Cargo.toml | 4 +- clients/openapi-gen/Cargo.toml | 2 +- {auth => crates/auth}/Cargo.toml | 0 {auth => crates/auth}/src/audit.rs | 0 {auth => crates/auth}/src/config.rs | 0 {auth => crates/auth}/src/jwks.rs | 0 {auth => crates/auth}/src/jwt.rs | 0 {auth => crates/auth}/src/lib.rs | 0 {auth => crates/auth}/src/middleware.rs | 0 .../data_connector}/Cargo.toml | 0 .../data_connector}/README.md | 0 .../data_connector}/src/common.rs | 0 .../data_connector}/src/config.rs | 0 .../data_connector}/src/context.rs | 0 .../data_connector}/src/core.rs | 0 .../data_connector}/src/factory.rs | 0 .../data_connector}/src/hooked.rs | 0 .../data_connector}/src/hooks.rs | 0 .../data_connector}/src/lib.rs | 0 .../data_connector}/src/memory.rs | 0 .../data_connector}/src/noop.rs | 0 .../data_connector}/src/oracle.rs | 0 .../data_connector}/src/oracle_migrations.rs | 0 .../data_connector}/src/postgres.rs | 0 .../src/postgres_migrations.rs | 0 .../data_connector}/src/redis.rs | 0 .../data_connector}/src/schema.rs | 0 .../data_connector}/src/versioning.rs | 0 .../grpc_client}/Cargo.toml | 0 {grpc_client => crates/grpc_client}/build.rs | 0 .../grpc_client}/proto/common.proto | 0 .../grpc_client}/proto/sglang_encoder.proto | 0 .../grpc_client}/proto/sglang_scheduler.proto | 0 .../grpc_client}/proto/trtllm_service.proto | 0 .../grpc_client}/proto/vllm_engine.proto | 0 .../grpc_client}/python/.gitignore | 0 .../grpc_client}/python/README.md | 0 .../grpc_client}/python/pyproject.toml | 0 .../grpc_client}/python/setup.py | 0 .../python/smg_grpc_proto/__init__.py | 0 .../grpc_client}/python/smg_grpc_proto/proto | 0 .../grpc_client}/src/lib.rs | 0 .../grpc_client}/src/sglang_scheduler.rs | 0 .../grpc_client}/src/tokenizer_bundle.rs | 0 .../grpc_client}/src/trtllm_service.rs | 0 .../grpc_client}/src/vllm_engine.rs | 0 {kv_index => crates/kv_index}/Cargo.toml | 0 .../kv_index}/benches/throughput_bench.rs | 0 {kv_index => crates/kv_index}/src/common.rs | 0 .../kv_index}/src/event_tree.rs | 0 {kv_index => crates/kv_index}/src/lib.rs | 0 .../kv_index}/src/string_tree.rs | 0 .../kv_index}/src/token_tree.rs | 0 {mcp => crates/mcp}/Cargo.toml | 0 {mcp => crates/mcp}/README.md | 0 {mcp => crates/mcp}/src/annotations.rs | 0 {mcp => crates/mcp}/src/approval/audit.rs | 0 {mcp => crates/mcp}/src/approval/manager.rs | 0 {mcp => crates/mcp}/src/approval/mod.rs | 0 {mcp => crates/mcp}/src/approval/policy.rs | 0 {mcp => crates/mcp}/src/core/config.rs | 0 {mcp => crates/mcp}/src/core/handler.rs | 0 {mcp => crates/mcp}/src/core/metrics.rs | 0 {mcp => crates/mcp}/src/core/mod.rs | 0 {mcp => crates/mcp}/src/core/oauth.rs | 0 {mcp => crates/mcp}/src/core/orchestrator.rs | 0 {mcp => crates/mcp}/src/core/pool.rs | 0 {mcp => crates/mcp}/src/core/proxy.rs | 0 {mcp => crates/mcp}/src/core/reconnect.rs | 0 {mcp => crates/mcp}/src/core/session.rs | 0 {mcp => crates/mcp}/src/error.rs | 0 {mcp => crates/mcp}/src/inventory/index.rs | 0 {mcp => crates/mcp}/src/inventory/mod.rs | 0 {mcp => crates/mcp}/src/inventory/types.rs | 0 {mcp => crates/mcp}/src/lib.rs | 0 {mcp => crates/mcp}/src/responses_bridge.rs | 0 {mcp => crates/mcp}/src/tenant.rs | 0 {mcp => crates/mcp}/src/transform/mod.rs | 0 .../mcp}/src/transform/transformer.rs | 0 {mcp => crates/mcp}/src/transform/types.rs | 0 {mesh => crates/mesh}/Cargo.toml | 0 {mesh => crates/mesh}/build.rs | 0 {mesh => crates/mesh}/src/README.md | 0 {mesh => crates/mesh}/src/consistent_hash.rs | 0 {mesh => crates/mesh}/src/controller.rs | 0 {mesh => crates/mesh}/src/crdt_kv/crdt.rs | 0 {mesh => crates/mesh}/src/crdt_kv/kv_store.rs | 0 {mesh => crates/mesh}/src/crdt_kv/mod.rs | 0 .../mesh}/src/crdt_kv/operation.rs | 0 {mesh => crates/mesh}/src/crdt_kv/replica.rs | 0 {mesh => crates/mesh}/src/crdt_kv/tests.rs | 0 {mesh => crates/mesh}/src/flow_control.rs | 0 {mesh => crates/mesh}/src/incremental.rs | 0 {mesh => crates/mesh}/src/lib.rs | 0 {mesh => crates/mesh}/src/metrics.rs | 0 {mesh => crates/mesh}/src/mtls.rs | 0 .../mesh}/src/node_state_machine.rs | 0 {mesh => crates/mesh}/src/partition.rs | 0 {mesh => crates/mesh}/src/ping_server.rs | 0 {mesh => crates/mesh}/src/proto/gossip.proto | 0 .../mesh}/src/rate_limit_window.rs | 0 {mesh => crates/mesh}/src/service.rs | 0 {mesh => crates/mesh}/src/stores.rs | 0 {mesh => crates/mesh}/src/sync.rs | 0 .../mesh}/src/tests/comprehensive.rs | 0 {mesh => crates/mesh}/src/tests/mod.rs | 0 {mesh => crates/mesh}/src/tests/test_utils.rs | 0 {mesh => crates/mesh}/src/topology.rs | 0 {mesh => crates/mesh}/src/tree_ops.rs | 0 {multimodal => crates/multimodal}/Cargo.toml | 0 .../scripts/generate_vision_golden.py | 0 .../multimodal}/src/error.rs | 0 .../multimodal}/src/hasher.rs | 0 {multimodal => crates/multimodal}/src/lib.rs | 0 .../multimodal}/src/media.rs | 0 .../multimodal}/src/registry/llama4.rs | 0 .../multimodal}/src/registry/llava.rs | 0 .../multimodal}/src/registry/mod.rs | 0 .../multimodal}/src/registry/phi3_v.rs | 0 .../multimodal}/src/registry/qwen3_vl.rs | 0 .../multimodal}/src/registry/qwen_vl.rs | 0 .../multimodal}/src/registry/traits.rs | 0 .../multimodal}/src/tracker.rs | 0 .../multimodal}/src/types.rs | 0 .../multimodal}/src/vision/image_processor.rs | 0 .../multimodal}/src/vision/mod.rs | 0 .../src/vision/preprocessor_config.rs | 0 .../src/vision/processors/llama4_vision.rs | 0 .../src/vision/processors/llava.rs | 0 .../multimodal}/src/vision/processors/mod.rs | 0 .../src/vision/processors/phi3_vision.rs | 0 .../src/vision/processors/phi4_vision.rs | 0 .../src/vision/processors/pixtral.rs | 0 .../src/vision/processors/qwen2_vl.rs | 0 .../src/vision/processors/qwen3_vl.rs | 0 .../src/vision/processors/qwen_vl_base.rs | 0 .../multimodal}/src/vision/transforms.rs | 0 .../tests/fixtures/images/grayscale.jpg | Bin .../tests/fixtures/images/large.jpg | Bin .../tests/fixtures/images/odd_dims.jpg | Bin .../tests/fixtures/images/small.jpg | Bin .../tests/fixtures/images/square.jpg | Bin .../tests/fixtures/images/tall.jpg | Bin .../tests/fixtures/images/tiny.jpg | Bin .../tests/fixtures/images/very_tall.jpg | Bin .../tests/fixtures/images/very_wide.jpg | Bin .../tests/fixtures/images/wide.jpg | Bin .../tests/multimodal_tracker_test.rs | 0 .../multimodal}/tests/vision_golden_tests.rs | 0 {protocols => crates/protocols}/Cargo.toml | 0 .../protocols}/src/builders/chat/mod.rs | 0 .../protocols}/src/builders/chat/response.rs | 0 .../src/builders/chat/stream_response.rs | 0 .../protocols}/src/builders/mod.rs | 0 .../src/builders/realtime/client_event.rs | 0 .../protocols}/src/builders/realtime/mod.rs | 0 .../src/builders/realtime/response.rs | 0 .../src/builders/realtime/server_event.rs | 0 .../protocols}/src/builders/responses/mod.rs | 0 .../src/builders/responses/response.rs | 0 {protocols => crates/protocols}/src/chat.rs | 0 .../protocols}/src/classify.rs | 0 {protocols => crates/protocols}/src/common.rs | 0 .../protocols}/src/completion.rs | 0 .../protocols}/src/embedding.rs | 0 .../protocols}/src/event_types.rs | 0 .../protocols}/src/generate.rs | 0 .../protocols}/src/interactions.rs | 0 {protocols => crates/protocols}/src/lib.rs | 0 .../protocols}/src/messages.rs | 0 .../protocols}/src/model_card.rs | 0 .../protocols}/src/model_type.rs | 0 {protocols => crates/protocols}/src/parser.rs | 0 .../protocols}/src/realtime_conversation.rs | 0 .../protocols}/src/realtime_events.rs | 0 .../protocols}/src/realtime_response.rs | 0 .../protocols}/src/realtime_session.rs | 0 {protocols => crates/protocols}/src/rerank.rs | 0 .../protocols}/src/responses.rs | 0 .../protocols}/src/sampling_params.rs | 0 .../protocols}/src/tokenize.rs | 0 .../protocols}/src/validated.rs | 0 {protocols => crates/protocols}/src/worker.rs | 0 .../reasoning_parser}/Cargo.toml | 0 .../reasoning_parser}/README.md | 0 .../reasoning_parser}/src/README.md | 0 .../reasoning_parser}/src/factory.rs | 0 .../reasoning_parser}/src/lib.rs | 0 .../reasoning_parser}/src/parsers/base.rs | 0 .../src/parsers/cohere_cmd.rs | 0 .../src/parsers/deepseek_r1.rs | 0 .../reasoning_parser}/src/parsers/glm45.rs | 0 .../reasoning_parser}/src/parsers/kimi.rs | 0 .../reasoning_parser}/src/parsers/minimax.rs | 0 .../reasoning_parser}/src/parsers/mod.rs | 0 .../reasoning_parser}/src/parsers/nano_v3.rs | 0 .../reasoning_parser}/src/parsers/qwen3.rs | 0 .../reasoning_parser}/src/parsers/step3.rs | 0 .../reasoning_parser}/src/traits.rs | 0 {tokenizer => crates/tokenizer}/Cargo.toml | 0 {tokenizer => crates/tokenizer}/README.md | 0 .../benches/stop_sequence_search.rs | 0 .../tokenizer}/src/cache/fingerprint.rs | 0 .../tokenizer}/src/cache/l0.rs | 0 .../tokenizer}/src/cache/l1.rs | 0 .../tokenizer}/src/cache/mod.rs | 0 .../tokenizer}/src/chat_template.rs | 0 .../tokenizer}/src/factory.rs | 0 {tokenizer => crates/tokenizer}/src/hub.rs | 0 .../tokenizer}/src/huggingface.rs | 0 {tokenizer => crates/tokenizer}/src/lib.rs | 0 {tokenizer => crates/tokenizer}/src/mock.rs | 0 .../tokenizer}/src/registry.rs | 0 .../tokenizer}/src/sequence.rs | 0 {tokenizer => crates/tokenizer}/src/stop.rs | 0 {tokenizer => crates/tokenizer}/src/stream.rs | 0 {tokenizer => crates/tokenizer}/src/tests.rs | 0 .../tokenizer}/src/tiktoken.rs | 0 {tokenizer => crates/tokenizer}/src/traits.rs | 0 .../tests/chat_template_format_detection.rs | 0 .../tests/chat_template_integration.rs | 0 .../tokenizer}/tests/chat_template_loading.rs | 0 .../tokenizer}/tests/common/mod.rs | 0 .../tokenizer}/tests/tiktoken_integration.rs | 0 .../tests/tokenizer_cache_correctness_test.rs | 0 .../tokenizer}/tests/tokenizer_integration.rs | 0 .../tool_parser}/Cargo.toml | 0 {tool_parser => crates/tool_parser}/README.md | 0 .../tool_parser}/src/errors.rs | 0 .../tool_parser}/src/factory.rs | 0 .../tool_parser}/src/lib.rs | 0 .../tool_parser}/src/parsers/cohere.rs | 0 .../tool_parser}/src/parsers/deepseek.rs | 0 .../tool_parser}/src/parsers/glm4_moe.rs | 0 .../tool_parser}/src/parsers/helpers.rs | 0 .../tool_parser}/src/parsers/json.rs | 0 .../tool_parser}/src/parsers/kimik2.rs | 0 .../tool_parser}/src/parsers/llama.rs | 0 .../tool_parser}/src/parsers/minimax_m2.rs | 0 .../tool_parser}/src/parsers/mistral.rs | 0 .../tool_parser}/src/parsers/mod.rs | 0 .../tool_parser}/src/parsers/passthrough.rs | 0 .../tool_parser}/src/parsers/pythonic.rs | 0 .../tool_parser}/src/parsers/qwen.rs | 0 .../tool_parser}/src/parsers/qwen_coder.rs | 0 .../tool_parser}/src/parsers/step3.rs | 0 .../tool_parser}/src/partial_json.rs | 0 .../tool_parser}/src/tests.rs | 0 .../tool_parser}/src/traits.rs | 0 .../tool_parser}/src/types.rs | 0 .../tool_parser}/tests/common/mod.rs | 0 .../tool_parser}/tests/tool_parser_cohere.rs | 0 .../tests/tool_parser_deepseek.rs | 0 .../tests/tool_parser_edge_cases.rs | 0 .../tests/tool_parser_fallback.rs | 0 .../tests/tool_parser_glm47_moe.rs | 0 .../tests/tool_parser_glm4_moe.rs | 0 .../tool_parser}/tests/tool_parser_json.rs | 0 .../tool_parser}/tests/tool_parser_kimik2.rs | 0 .../tool_parser}/tests/tool_parser_llama.rs | 0 .../tests/tool_parser_minimax_m2.rs | 0 .../tool_parser}/tests/tool_parser_mistral.rs | 0 .../tests/tool_parser_mixed_edge_cases.rs | 0 .../tests/tool_parser_partial_json.rs | 0 .../tests/tool_parser_pythonic.rs | 0 .../tool_parser}/tests/tool_parser_qwen.rs | 0 .../tests/tool_parser_qwen_coder.rs | 0 .../tool_parser}/tests/tool_parser_step3.rs | 0 {wasm => crates/wasm}/Cargo.toml | 0 {wasm => crates/wasm}/README.md | 0 {wasm => crates/wasm}/src/config.rs | 0 {wasm => crates/wasm}/src/errors.rs | 0 {wasm => crates/wasm}/src/interface/spec.wit | 0 .../src/interface/storage/storage-hooks.wit | 0 {wasm => crates/wasm}/src/lib.rs | 0 {wasm => crates/wasm}/src/module.rs | 0 {wasm => crates/wasm}/src/module_manager.rs | 0 {wasm => crates/wasm}/src/runtime.rs | 0 {wasm => crates/wasm}/src/spec.rs | 0 {wasm => crates/wasm}/src/storage_hook.rs | 0 {wasm => crates/wasm}/src/storage_spec.rs | 0 {wasm => crates/wasm}/src/types.rs | 0 .../wasm}/tests/fixtures/build_fixtures.sh | 0 .../wasm}/tests/storage_hook_integration.rs | 0 {workflow => crates/workflow}/Cargo.toml | 0 {workflow => crates/workflow}/README.md | 0 .../workflow}/src/definition.rs | 0 {workflow => crates/workflow}/src/engine.rs | 0 {workflow => crates/workflow}/src/event.rs | 0 {workflow => crates/workflow}/src/executor.rs | 0 {workflow => crates/workflow}/src/lib.rs | 0 {workflow => crates/workflow}/src/state.rs | 0 {workflow => crates/workflow}/src/types.rs | 0 .../workflow}/tests/workflow_test.rs | 0 docs/contributing/development.md | 30 +++++++----- grpc_servicer/DEVELOPMENT.md | 8 +-- scripts/check_release_versions.sh | 28 +++++------ scripts/ci_install_vllm.sh | 2 +- 307 files changed, 124 insertions(+), 120 deletions(-) rename {auth => crates/auth}/Cargo.toml (100%) rename {auth => crates/auth}/src/audit.rs (100%) rename {auth => crates/auth}/src/config.rs (100%) rename {auth => crates/auth}/src/jwks.rs (100%) rename {auth => crates/auth}/src/jwt.rs (100%) rename {auth => crates/auth}/src/lib.rs (100%) rename {auth => crates/auth}/src/middleware.rs (100%) rename {data_connector => crates/data_connector}/Cargo.toml (100%) rename {data_connector => crates/data_connector}/README.md (100%) rename {data_connector => crates/data_connector}/src/common.rs (100%) rename {data_connector => crates/data_connector}/src/config.rs (100%) rename {data_connector => crates/data_connector}/src/context.rs (100%) rename {data_connector => crates/data_connector}/src/core.rs (100%) rename {data_connector => crates/data_connector}/src/factory.rs (100%) rename {data_connector => crates/data_connector}/src/hooked.rs (100%) rename {data_connector => crates/data_connector}/src/hooks.rs (100%) rename {data_connector => crates/data_connector}/src/lib.rs (100%) rename {data_connector => crates/data_connector}/src/memory.rs (100%) rename {data_connector => crates/data_connector}/src/noop.rs (100%) rename {data_connector => crates/data_connector}/src/oracle.rs (100%) rename {data_connector => crates/data_connector}/src/oracle_migrations.rs (100%) rename {data_connector => crates/data_connector}/src/postgres.rs (100%) rename {data_connector => crates/data_connector}/src/postgres_migrations.rs (100%) rename {data_connector => crates/data_connector}/src/redis.rs (100%) rename {data_connector => crates/data_connector}/src/schema.rs (100%) rename {data_connector => crates/data_connector}/src/versioning.rs (100%) rename {grpc_client => crates/grpc_client}/Cargo.toml (100%) rename {grpc_client => crates/grpc_client}/build.rs (100%) rename {grpc_client => crates/grpc_client}/proto/common.proto (100%) rename {grpc_client => crates/grpc_client}/proto/sglang_encoder.proto (100%) rename {grpc_client => crates/grpc_client}/proto/sglang_scheduler.proto (100%) rename {grpc_client => crates/grpc_client}/proto/trtllm_service.proto (100%) rename {grpc_client => crates/grpc_client}/proto/vllm_engine.proto (100%) rename {grpc_client => crates/grpc_client}/python/.gitignore (100%) rename {grpc_client => crates/grpc_client}/python/README.md (100%) rename {grpc_client => crates/grpc_client}/python/pyproject.toml (100%) rename {grpc_client => crates/grpc_client}/python/setup.py (100%) rename {grpc_client => crates/grpc_client}/python/smg_grpc_proto/__init__.py (100%) rename {grpc_client => crates/grpc_client}/python/smg_grpc_proto/proto (100%) rename {grpc_client => crates/grpc_client}/src/lib.rs (100%) rename {grpc_client => crates/grpc_client}/src/sglang_scheduler.rs (100%) rename {grpc_client => crates/grpc_client}/src/tokenizer_bundle.rs (100%) rename {grpc_client => crates/grpc_client}/src/trtllm_service.rs (100%) rename {grpc_client => crates/grpc_client}/src/vllm_engine.rs (100%) rename {kv_index => crates/kv_index}/Cargo.toml (100%) rename {kv_index => crates/kv_index}/benches/throughput_bench.rs (100%) rename {kv_index => crates/kv_index}/src/common.rs (100%) rename {kv_index => crates/kv_index}/src/event_tree.rs (100%) rename {kv_index => crates/kv_index}/src/lib.rs (100%) rename {kv_index => crates/kv_index}/src/string_tree.rs (100%) rename {kv_index => crates/kv_index}/src/token_tree.rs (100%) rename {mcp => crates/mcp}/Cargo.toml (100%) rename {mcp => crates/mcp}/README.md (100%) rename {mcp => crates/mcp}/src/annotations.rs (100%) rename {mcp => crates/mcp}/src/approval/audit.rs (100%) rename {mcp => crates/mcp}/src/approval/manager.rs (100%) rename {mcp => crates/mcp}/src/approval/mod.rs (100%) rename {mcp => crates/mcp}/src/approval/policy.rs (100%) rename {mcp => crates/mcp}/src/core/config.rs (100%) rename {mcp => crates/mcp}/src/core/handler.rs (100%) rename {mcp => crates/mcp}/src/core/metrics.rs (100%) rename {mcp => crates/mcp}/src/core/mod.rs (100%) rename {mcp => crates/mcp}/src/core/oauth.rs (100%) rename {mcp => crates/mcp}/src/core/orchestrator.rs (100%) rename {mcp => crates/mcp}/src/core/pool.rs (100%) rename {mcp => crates/mcp}/src/core/proxy.rs (100%) rename {mcp => crates/mcp}/src/core/reconnect.rs (100%) rename {mcp => crates/mcp}/src/core/session.rs (100%) rename {mcp => crates/mcp}/src/error.rs (100%) rename {mcp => crates/mcp}/src/inventory/index.rs (100%) rename {mcp => crates/mcp}/src/inventory/mod.rs (100%) rename {mcp => crates/mcp}/src/inventory/types.rs (100%) rename {mcp => crates/mcp}/src/lib.rs (100%) rename {mcp => crates/mcp}/src/responses_bridge.rs (100%) rename {mcp => crates/mcp}/src/tenant.rs (100%) rename {mcp => crates/mcp}/src/transform/mod.rs (100%) rename {mcp => crates/mcp}/src/transform/transformer.rs (100%) rename {mcp => crates/mcp}/src/transform/types.rs (100%) rename {mesh => crates/mesh}/Cargo.toml (100%) rename {mesh => crates/mesh}/build.rs (100%) rename {mesh => crates/mesh}/src/README.md (100%) rename {mesh => crates/mesh}/src/consistent_hash.rs (100%) rename {mesh => crates/mesh}/src/controller.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/crdt.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/kv_store.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/mod.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/operation.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/replica.rs (100%) rename {mesh => crates/mesh}/src/crdt_kv/tests.rs (100%) rename {mesh => crates/mesh}/src/flow_control.rs (100%) rename {mesh => crates/mesh}/src/incremental.rs (100%) rename {mesh => crates/mesh}/src/lib.rs (100%) rename {mesh => crates/mesh}/src/metrics.rs (100%) rename {mesh => crates/mesh}/src/mtls.rs (100%) rename {mesh => crates/mesh}/src/node_state_machine.rs (100%) rename {mesh => crates/mesh}/src/partition.rs (100%) rename {mesh => crates/mesh}/src/ping_server.rs (100%) rename {mesh => crates/mesh}/src/proto/gossip.proto (100%) rename {mesh => crates/mesh}/src/rate_limit_window.rs (100%) rename {mesh => crates/mesh}/src/service.rs (100%) rename {mesh => crates/mesh}/src/stores.rs (100%) rename {mesh => crates/mesh}/src/sync.rs (100%) rename {mesh => crates/mesh}/src/tests/comprehensive.rs (100%) rename {mesh => crates/mesh}/src/tests/mod.rs (100%) rename {mesh => crates/mesh}/src/tests/test_utils.rs (100%) rename {mesh => crates/mesh}/src/topology.rs (100%) rename {mesh => crates/mesh}/src/tree_ops.rs (100%) rename {multimodal => crates/multimodal}/Cargo.toml (100%) rename {multimodal => crates/multimodal}/scripts/generate_vision_golden.py (100%) rename {multimodal => crates/multimodal}/src/error.rs (100%) rename {multimodal => crates/multimodal}/src/hasher.rs (100%) rename {multimodal => crates/multimodal}/src/lib.rs (100%) rename {multimodal => crates/multimodal}/src/media.rs (100%) rename {multimodal => crates/multimodal}/src/registry/llama4.rs (100%) rename {multimodal => crates/multimodal}/src/registry/llava.rs (100%) rename {multimodal => crates/multimodal}/src/registry/mod.rs (100%) rename {multimodal => crates/multimodal}/src/registry/phi3_v.rs (100%) rename {multimodal => crates/multimodal}/src/registry/qwen3_vl.rs (100%) rename {multimodal => crates/multimodal}/src/registry/qwen_vl.rs (100%) rename {multimodal => crates/multimodal}/src/registry/traits.rs (100%) rename {multimodal => crates/multimodal}/src/tracker.rs (100%) rename {multimodal => crates/multimodal}/src/types.rs (100%) rename {multimodal => crates/multimodal}/src/vision/image_processor.rs (100%) rename {multimodal => crates/multimodal}/src/vision/mod.rs (100%) rename {multimodal => crates/multimodal}/src/vision/preprocessor_config.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/llama4_vision.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/llava.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/mod.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/phi3_vision.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/phi4_vision.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/pixtral.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/qwen2_vl.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/qwen3_vl.rs (100%) rename {multimodal => crates/multimodal}/src/vision/processors/qwen_vl_base.rs (100%) rename {multimodal => crates/multimodal}/src/vision/transforms.rs (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/grayscale.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/large.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/odd_dims.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/small.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/square.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/tall.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/tiny.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/very_tall.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/very_wide.jpg (100%) rename {multimodal => crates/multimodal}/tests/fixtures/images/wide.jpg (100%) rename {multimodal => crates/multimodal}/tests/multimodal_tracker_test.rs (100%) rename {multimodal => crates/multimodal}/tests/vision_golden_tests.rs (100%) rename {protocols => crates/protocols}/Cargo.toml (100%) rename {protocols => crates/protocols}/src/builders/chat/mod.rs (100%) rename {protocols => crates/protocols}/src/builders/chat/response.rs (100%) rename {protocols => crates/protocols}/src/builders/chat/stream_response.rs (100%) rename {protocols => crates/protocols}/src/builders/mod.rs (100%) rename {protocols => crates/protocols}/src/builders/realtime/client_event.rs (100%) rename {protocols => crates/protocols}/src/builders/realtime/mod.rs (100%) rename {protocols => crates/protocols}/src/builders/realtime/response.rs (100%) rename {protocols => crates/protocols}/src/builders/realtime/server_event.rs (100%) rename {protocols => crates/protocols}/src/builders/responses/mod.rs (100%) rename {protocols => crates/protocols}/src/builders/responses/response.rs (100%) rename {protocols => crates/protocols}/src/chat.rs (100%) rename {protocols => crates/protocols}/src/classify.rs (100%) rename {protocols => crates/protocols}/src/common.rs (100%) rename {protocols => crates/protocols}/src/completion.rs (100%) rename {protocols => crates/protocols}/src/embedding.rs (100%) rename {protocols => crates/protocols}/src/event_types.rs (100%) rename {protocols => crates/protocols}/src/generate.rs (100%) rename {protocols => crates/protocols}/src/interactions.rs (100%) rename {protocols => crates/protocols}/src/lib.rs (100%) rename {protocols => crates/protocols}/src/messages.rs (100%) rename {protocols => crates/protocols}/src/model_card.rs (100%) rename {protocols => crates/protocols}/src/model_type.rs (100%) rename {protocols => crates/protocols}/src/parser.rs (100%) rename {protocols => crates/protocols}/src/realtime_conversation.rs (100%) rename {protocols => crates/protocols}/src/realtime_events.rs (100%) rename {protocols => crates/protocols}/src/realtime_response.rs (100%) rename {protocols => crates/protocols}/src/realtime_session.rs (100%) rename {protocols => crates/protocols}/src/rerank.rs (100%) rename {protocols => crates/protocols}/src/responses.rs (100%) rename {protocols => crates/protocols}/src/sampling_params.rs (100%) rename {protocols => crates/protocols}/src/tokenize.rs (100%) rename {protocols => crates/protocols}/src/validated.rs (100%) rename {protocols => crates/protocols}/src/worker.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/Cargo.toml (100%) rename {reasoning_parser => crates/reasoning_parser}/README.md (100%) rename {reasoning_parser => crates/reasoning_parser}/src/README.md (100%) rename {reasoning_parser => crates/reasoning_parser}/src/factory.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/lib.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/base.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/cohere_cmd.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/deepseek_r1.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/glm45.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/kimi.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/minimax.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/mod.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/nano_v3.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/qwen3.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/parsers/step3.rs (100%) rename {reasoning_parser => crates/reasoning_parser}/src/traits.rs (100%) rename {tokenizer => crates/tokenizer}/Cargo.toml (100%) rename {tokenizer => crates/tokenizer}/README.md (100%) rename {tokenizer => crates/tokenizer}/benches/stop_sequence_search.rs (100%) rename {tokenizer => crates/tokenizer}/src/cache/fingerprint.rs (100%) rename {tokenizer => crates/tokenizer}/src/cache/l0.rs (100%) rename {tokenizer => crates/tokenizer}/src/cache/l1.rs (100%) rename {tokenizer => crates/tokenizer}/src/cache/mod.rs (100%) rename {tokenizer => crates/tokenizer}/src/chat_template.rs (100%) rename {tokenizer => crates/tokenizer}/src/factory.rs (100%) rename {tokenizer => crates/tokenizer}/src/hub.rs (100%) rename {tokenizer => crates/tokenizer}/src/huggingface.rs (100%) rename {tokenizer => crates/tokenizer}/src/lib.rs (100%) rename {tokenizer => crates/tokenizer}/src/mock.rs (100%) rename {tokenizer => crates/tokenizer}/src/registry.rs (100%) rename {tokenizer => crates/tokenizer}/src/sequence.rs (100%) rename {tokenizer => crates/tokenizer}/src/stop.rs (100%) rename {tokenizer => crates/tokenizer}/src/stream.rs (100%) rename {tokenizer => crates/tokenizer}/src/tests.rs (100%) rename {tokenizer => crates/tokenizer}/src/tiktoken.rs (100%) rename {tokenizer => crates/tokenizer}/src/traits.rs (100%) rename {tokenizer => crates/tokenizer}/tests/chat_template_format_detection.rs (100%) rename {tokenizer => crates/tokenizer}/tests/chat_template_integration.rs (100%) rename {tokenizer => crates/tokenizer}/tests/chat_template_loading.rs (100%) rename {tokenizer => crates/tokenizer}/tests/common/mod.rs (100%) rename {tokenizer => crates/tokenizer}/tests/tiktoken_integration.rs (100%) rename {tokenizer => crates/tokenizer}/tests/tokenizer_cache_correctness_test.rs (100%) rename {tokenizer => crates/tokenizer}/tests/tokenizer_integration.rs (100%) rename {tool_parser => crates/tool_parser}/Cargo.toml (100%) rename {tool_parser => crates/tool_parser}/README.md (100%) rename {tool_parser => crates/tool_parser}/src/errors.rs (100%) rename {tool_parser => crates/tool_parser}/src/factory.rs (100%) rename {tool_parser => crates/tool_parser}/src/lib.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/cohere.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/deepseek.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/glm4_moe.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/helpers.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/json.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/kimik2.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/llama.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/minimax_m2.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/mistral.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/mod.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/passthrough.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/pythonic.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/qwen.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/qwen_coder.rs (100%) rename {tool_parser => crates/tool_parser}/src/parsers/step3.rs (100%) rename {tool_parser => crates/tool_parser}/src/partial_json.rs (100%) rename {tool_parser => crates/tool_parser}/src/tests.rs (100%) rename {tool_parser => crates/tool_parser}/src/traits.rs (100%) rename {tool_parser => crates/tool_parser}/src/types.rs (100%) rename {tool_parser => crates/tool_parser}/tests/common/mod.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_cohere.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_deepseek.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_edge_cases.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_fallback.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_glm47_moe.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_glm4_moe.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_json.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_kimik2.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_llama.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_minimax_m2.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_mistral.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_mixed_edge_cases.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_partial_json.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_pythonic.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_qwen.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_qwen_coder.rs (100%) rename {tool_parser => crates/tool_parser}/tests/tool_parser_step3.rs (100%) rename {wasm => crates/wasm}/Cargo.toml (100%) rename {wasm => crates/wasm}/README.md (100%) rename {wasm => crates/wasm}/src/config.rs (100%) rename {wasm => crates/wasm}/src/errors.rs (100%) rename {wasm => crates/wasm}/src/interface/spec.wit (100%) rename {wasm => crates/wasm}/src/interface/storage/storage-hooks.wit (100%) rename {wasm => crates/wasm}/src/lib.rs (100%) rename {wasm => crates/wasm}/src/module.rs (100%) rename {wasm => crates/wasm}/src/module_manager.rs (100%) rename {wasm => crates/wasm}/src/runtime.rs (100%) rename {wasm => crates/wasm}/src/spec.rs (100%) rename {wasm => crates/wasm}/src/storage_hook.rs (100%) rename {wasm => crates/wasm}/src/storage_spec.rs (100%) rename {wasm => crates/wasm}/src/types.rs (100%) rename {wasm => crates/wasm}/tests/fixtures/build_fixtures.sh (100%) rename {wasm => crates/wasm}/tests/storage_hook_integration.rs (100%) rename {workflow => crates/workflow}/Cargo.toml (100%) rename {workflow => crates/workflow}/README.md (100%) rename {workflow => crates/workflow}/src/definition.rs (100%) rename {workflow => crates/workflow}/src/engine.rs (100%) rename {workflow => crates/workflow}/src/event.rs (100%) rename {workflow => crates/workflow}/src/executor.rs (100%) rename {workflow => crates/workflow}/src/lib.rs (100%) rename {workflow => crates/workflow}/src/state.rs (100%) rename {workflow => crates/workflow}/src/types.rs (100%) rename {workflow => crates/workflow}/tests/workflow_test.rs (100%) diff --git a/.github/workflows/benchmark-radix-tree.yml b/.github/workflows/benchmark-radix-tree.yml index cbafd696cb..8ea8086d89 100644 --- a/.github/workflows/benchmark-radix-tree.yml +++ b/.github/workflows/benchmark-radix-tree.yml @@ -5,18 +5,18 @@ on: branches: [ main ] paths: - 'model_gateway/benches/radix_tree_benchmark.rs' - - 'kv_index/**' - - '!kv_index/**/tests/**' - - '!kv_index/**/*_test.rs' - - '!kv_index/**/test_*.rs' + - 'crates/kv_index/**' + - '!crates/kv_index/**/tests/**' + - '!crates/kv_index/**/*_test.rs' + - '!crates/kv_index/**/test_*.rs' pull_request: branches: [ main ] paths: - 'model_gateway/benches/radix_tree_benchmark.rs' - - 'kv_index/**' - - '!kv_index/**/tests/**' - - '!kv_index/**/*_test.rs' - - '!kv_index/**/test_*.rs' + - 'crates/kv_index/**' + - '!crates/kv_index/**/tests/**' + - '!crates/kv_index/**/*_test.rs' + - '!crates/kv_index/**/test_*.rs' workflow_dispatch: schedule: - cron: '0 0 * * 0' diff --git a/.github/workflows/benchmark-tokenizer.yml b/.github/workflows/benchmark-tokenizer.yml index f1fa3d939c..c6ef0a491e 100644 --- a/.github/workflows/benchmark-tokenizer.yml +++ b/.github/workflows/benchmark-tokenizer.yml @@ -5,18 +5,18 @@ on: branches: [ main ] paths: - 'model_gateway/benches/tokenizer_benchmark.rs' - - 'tokenizer/**' - - '!tokenizer/**/tests/**' - - '!tokenizer/**/*_test.rs' - - '!tokenizer/**/test_*.rs' + - 'crates/tokenizer/**' + - '!crates/tokenizer/**/tests/**' + - '!crates/tokenizer/**/*_test.rs' + - '!crates/tokenizer/**/test_*.rs' pull_request: branches: [ main ] paths: - 'model_gateway/benches/tokenizer_benchmark.rs' - - 'tokenizer/**' - - '!tokenizer/**/tests/**' - - '!tokenizer/**/*_test.rs' - - '!tokenizer/**/test_*.rs' + - 'crates/tokenizer/**' + - '!crates/tokenizer/**/tests/**' + - '!crates/tokenizer/**/*_test.rs' + - '!crates/tokenizer/**/test_*.rs' workflow_dispatch: schedule: - cron: '0 0 * * 0' diff --git a/.github/workflows/benchmark-tool-parser.yml b/.github/workflows/benchmark-tool-parser.yml index db5a35ef84..5b4ddadec6 100644 --- a/.github/workflows/benchmark-tool-parser.yml +++ b/.github/workflows/benchmark-tool-parser.yml @@ -5,18 +5,18 @@ on: branches: [ main ] paths: - 'model_gateway/benches/tool_parser_benchmark.rs' - - 'tool_parser/**' - - '!tool_parser/**/tests/**' - - '!tool_parser/**/*_test.rs' - - '!tool_parser/**/test_*.rs' + - 'crates/tool_parser/**' + - '!crates/tool_parser/**/tests/**' + - '!crates/tool_parser/**/*_test.rs' + - '!crates/tool_parser/**/test_*.rs' pull_request: branches: [ main ] paths: - 'model_gateway/benches/tool_parser_benchmark.rs' - - 'tool_parser/**' - - '!tool_parser/**/tests/**' - - '!tool_parser/**/*_test.rs' - - '!tool_parser/**/test_*.rs' + - 'crates/tool_parser/**' + - '!crates/tool_parser/**/tests/**' + - '!crates/tool_parser/**/*_test.rs' + - '!crates/tool_parser/**/test_*.rs' workflow_dispatch: schedule: - cron: '0 0 * * 0' diff --git a/.github/workflows/nightly-benchmark.yml b/.github/workflows/nightly-benchmark.yml index cfb6786274..ab43996b38 100644 --- a/.github/workflows/nightly-benchmark.yml +++ b/.github/workflows/nightly-benchmark.yml @@ -48,7 +48,7 @@ jobs: path: | bindings/python/dist/*.whl clients/python/smg_client/types/_generated.py - key: nightly-wheel-${{ runner.os }}-${{ hashFiles('Cargo.lock', '**/Cargo.toml', 'auth/src/**', 'bindings/python/src/**', 'data_connector/src/**', 'grpc_client/src/**', 'kv_index/src/**', 'mcp/src/**', 'mesh/src/**', 'model_gateway/src/**', 'multimodal/src/**', 'protocols/src/**', 'reasoning_parser/src/**', 'tokenizer/src/**', 'tool_parser/src/**', 'wasm/src/**', 'workflow/src/**') }} + key: nightly-wheel-${{ runner.os }}-${{ hashFiles('Cargo.lock', '**/Cargo.toml', 'crates/auth/src/**', 'bindings/python/src/**', 'crates/data_connector/src/**', 'crates/grpc_client/src/**', 'crates/kv_index/src/**', 'crates/mcp/src/**', 'crates/mesh/src/**', 'model_gateway/src/**', 'crates/multimodal/src/**', 'crates/protocols/src/**', 'crates/reasoning_parser/src/**', 'crates/tokenizer/src/**', 'crates/tool_parser/src/**', 'crates/wasm/src/**', 'crates/workflow/src/**') }} restore-keys: | nightly-wheel-${{ runner.os }}- diff --git a/.github/workflows/pr-test-rust.yml b/.github/workflows/pr-test-rust.yml index 605ec3ba9e..7ca200f3fa 100644 --- a/.github/workflows/pr-test-rust.yml +++ b/.github/workflows/pr-test-rust.yml @@ -90,16 +90,16 @@ jobs: - name: Copy protos and build run: | - rm -f grpc_client/python/smg_grpc_proto/proto - mkdir -p grpc_client/python/smg_grpc_proto/proto - cp grpc_client/proto/*.proto grpc_client/python/smg_grpc_proto/proto/ + rm -f crates/grpc_client/python/smg_grpc_proto/proto + mkdir -p crates/grpc_client/python/smg_grpc_proto/proto + cp crates/grpc_client/proto/*.proto crates/grpc_client/python/smg_grpc_proto/proto/ pip install build grpcio-tools - rm -rf grpc_client/python/dist/ - cd grpc_client/python && python -m build + rm -rf crates/grpc_client/python/dist/ + cd crates/grpc_client/python && python -m build - name: Test import run: | - pip install grpc_client/python/dist/*.whl + pip install crates/grpc_client/python/dist/*.whl python -c "from smg_grpc_proto import sglang_scheduler_pb2; print('OK')" build-wheel: @@ -116,9 +116,9 @@ jobs: path: | bindings/python/dist/*.whl bindings/golang/target/release/libsmg_go.* - wasm/tests/fixtures/*.wasm + crates/wasm/tests/fixtures/*.wasm clients/python/smg_client/types/_generated.py - key: wheel-${{ runner.os }}-${{ hashFiles('Cargo.lock', '**/Cargo.toml', 'auth/src/**', 'bindings/python/src/**', 'data_connector/src/**', 'grpc_client/src/**', 'kv_index/src/**', 'mcp/src/**', 'mesh/src/**', 'model_gateway/src/**', 'multimodal/src/**', 'protocols/src/**', 'reasoning_parser/src/**', 'tokenizer/src/**', 'tool_parser/src/**', 'wasm/src/**', 'workflow/src/**', 'bindings/golang/src/**', 'examples/wasm/**') }} + key: wheel-${{ runner.os }}-${{ hashFiles('Cargo.lock', '**/Cargo.toml', 'crates/auth/src/**', 'bindings/python/src/**', 'crates/data_connector/src/**', 'crates/grpc_client/src/**', 'crates/kv_index/src/**', 'crates/mcp/src/**', 'crates/mesh/src/**', 'model_gateway/src/**', 'crates/multimodal/src/**', 'crates/protocols/src/**', 'crates/reasoning_parser/src/**', 'crates/tokenizer/src/**', 'crates/tool_parser/src/**', 'crates/wasm/src/**', 'crates/workflow/src/**', 'bindings/golang/src/**', 'examples/wasm/**') }} restore-keys: | wheel-${{ runner.os }}- @@ -157,7 +157,7 @@ jobs: if: steps.cache-wheel.outputs.cache-hit != 'true' run: | source "$HOME/.cargo/env" - bash wasm/tests/fixtures/build_fixtures.sh + bash crates/wasm/tests/fixtures/build_fixtures.sh - name: Upload wheel artifact uses: actions/upload-artifact@v7 @@ -184,7 +184,7 @@ jobs: uses: actions/upload-artifact@v7 with: name: wasm-test-fixtures - path: wasm/tests/fixtures/*.wasm + path: crates/wasm/tests/fixtures/*.wasm retention-days: 1 if-no-files-found: ignore @@ -250,7 +250,7 @@ jobs: - name: Build WASM test fixtures run: | source "$HOME/.cargo/env" - bash wasm/tests/fixtures/build_fixtures.sh + bash crates/wasm/tests/fixtures/build_fixtures.sh - name: Run lint run: | @@ -270,7 +270,7 @@ jobs: pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu pip install transformers pillow numpy scipy - python multimodal/scripts/generate_vision_golden.py + python crates/multimodal/scripts/generate_vision_golden.py - name: Run Rust tests timeout-minutes: 30 @@ -300,7 +300,7 @@ jobs: filters: | common: - 'model_gateway/**' - - 'protocols/**' + - 'crates/protocols/**' - 'bindings/**' - 'e2e_test/conftest.py' - 'e2e_test/infra/**' @@ -311,20 +311,20 @@ jobs: - 'scripts/ci_setup_python_venv.sh' - 'scripts/ci_install_sglang.sh' - 'scripts/ci_build_wheel.sh' - - 'tokenizer/**' - - 'tool_parser/**' + - 'crates/tokenizer/**' + - 'crates/tool_parser/**' chat-completions: - - 'reasoning_parser/**' - - 'multimodal/**' - - 'grpc_client/**' + - 'crates/reasoning_parser/**' + - 'crates/multimodal/**' + - 'crates/grpc_client/**' - 'grpc_servicer/**' - 'e2e_test/chat_completions/**' - 'e2e_test/router/test_pd_mmlu.py' - 'scripts/ci_install_vllm.sh' - 'scripts/ci_install_trtllm.sh' agentic: - - 'mcp/**' - - 'data_connector/**' + - 'crates/mcp/**' + - 'crates/data_connector/**' - 'e2e_test/responses/**' - 'e2e_test/messages/**' - 'scripts/ci_agentic_svc_deps.sh' @@ -388,7 +388,7 @@ jobs: uses: actions/download-artifact@v8 with: name: wasm-test-fixtures - path: wasm/tests/fixtures/ + path: crates/wasm/tests/fixtures/ continue-on-error: true - name: Download Python client types @@ -512,7 +512,7 @@ jobs: uses: actions/download-artifact@v8 with: name: wasm-test-fixtures - path: wasm/tests/fixtures/ + path: crates/wasm/tests/fixtures/ continue-on-error: true - name: Download Python client types @@ -588,7 +588,7 @@ jobs: uses: actions/download-artifact@v8 with: name: wasm-test-fixtures - path: wasm/tests/fixtures/ + path: crates/wasm/tests/fixtures/ continue-on-error: true - name: Download Python client types diff --git a/.github/workflows/release-crates.yml b/.github/workflows/release-crates.yml index b952bd3dec..8402339a69 100644 --- a/.github/workflows/release-crates.yml +++ b/.github/workflows/release-crates.yml @@ -22,21 +22,21 @@ jobs: matrix: include: - crate: openai-protocol - path: protocols + path: crates/protocols - crate: reasoning-parser - path: reasoning_parser + path: crates/reasoning_parser - crate: kv-index - path: kv_index + path: crates/kv_index - crate: data-connector - path: data_connector + path: crates/data_connector - crate: wfaas - path: workflow + path: crates/workflow - crate: smg-wasm - path: wasm + path: crates/wasm - crate: smg-auth - path: auth + path: crates/auth - crate: llm-tokenizer - path: tokenizer + path: crates/tokenizer steps: - uses: actions/checkout@v6 - uses: ./.github/actions/publish-crate @@ -54,15 +54,15 @@ jobs: matrix: include: - crate: tool-parser - path: tool_parser + path: crates/tool_parser - crate: smg-mcp - path: mcp + path: crates/mcp - crate: smg-grpc-client - path: grpc_client + path: crates/grpc_client - crate: llm-multimodal - path: multimodal + path: crates/multimodal - crate: smg-mesh - path: mesh + path: crates/mesh steps: - uses: actions/checkout@v6 - uses: ./.github/actions/publish-crate diff --git a/.github/workflows/release-grpc.yml b/.github/workflows/release-grpc.yml index d9a5ecef06..5069135dce 100644 --- a/.github/workflows/release-grpc.yml +++ b/.github/workflows/release-grpc.yml @@ -5,7 +5,7 @@ on: branches: - main paths: - - grpc_client/python/pyproject.toml + - crates/grpc_client/python/pyproject.toml - grpc_servicer/pyproject.toml workflow_dispatch: @@ -35,7 +35,7 @@ jobs: base="${{ github.event.before }}" head="${{ github.sha }}" changed="$(git diff --name-only "$base" "$head")" - proto=$(echo "$changed" | grep -q '^grpc_client/python/pyproject.toml$' && echo true || echo false) + proto=$(echo "$changed" | grep -q '^crates/grpc_client/python/pyproject.toml$' && echo true || echo false) servicer=$(echo "$changed" | grep -q '^grpc_servicer/pyproject.toml$' && echo true || echo false) echo "proto=$proto" >> "$GITHUB_OUTPUT" echo "servicer=$servicer" >> "$GITHUB_OUTPUT" @@ -60,20 +60,20 @@ jobs: - name: Copy proto files (replace symlink with real files) run: | - rm -f grpc_client/python/smg_grpc_proto/proto - mkdir -p grpc_client/python/smg_grpc_proto/proto - cp grpc_client/proto/*.proto grpc_client/python/smg_grpc_proto/proto/ + rm -f crates/grpc_client/python/smg_grpc_proto/proto + mkdir -p crates/grpc_client/python/smg_grpc_proto/proto + cp crates/grpc_client/proto/*.proto crates/grpc_client/python/smg_grpc_proto/proto/ - name: Build package - run: cd grpc_client/python && python -m build + run: cd crates/grpc_client/python && python -m build - name: Check package - run: twine check --strict grpc_client/python/dist/* + run: twine check --strict crates/grpc_client/python/dist/* - uses: actions/upload-artifact@v7 with: name: grpc-proto-dist - path: grpc_client/python/dist/ + path: crates/grpc_client/python/dist/ upload-proto: name: Upload proto to PyPI diff --git a/Cargo.toml b/Cargo.toml index bcc5704f29..18e1716c0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,22 +1,22 @@ [workspace] -members = ["model_gateway", "protocols", "reasoning_parser", "tool_parser", "workflow", "tokenizer", "auth", "mcp", "kv_index", "data_connector", "multimodal", "wasm", "mesh", "grpc_client", "bindings/python", "bindings/golang", "clients/rust", "clients/openapi-gen"] +members = ["model_gateway", "crates/protocols", "crates/reasoning_parser", "crates/tool_parser", "crates/workflow", "crates/tokenizer", "crates/auth", "crates/mcp", "crates/kv_index", "crates/data_connector", "crates/multimodal", "crates/wasm", "crates/mesh", "crates/grpc_client", "bindings/python", "bindings/golang", "clients/rust", "clients/openapi-gen"] resolver = "2" [workspace.dependencies] # Internal workspace crates -openai-protocol = { version = "1.2.0", path = "protocols" } -reasoning-parser = { version = "1.2.0", path = "reasoning_parser" } -tool-parser = { version = "1.1.1", path = "tool_parser" } -wfaas = { version = "1.0.2", path = "workflow" } -llm-tokenizer = { version = "1.2.0", path = "tokenizer" } -smg-auth = { version = "1.1.1", path = "auth" } -smg-mcp = { version = "2.1.0", path = "mcp" } -kv-index = { version = "1.0.1", path = "kv_index" } -smg-data-connector = { version = "2.0.0", path = "data_connector", package = "data-connector" } -llm-multimodal = { version = "1.2.0", path = "multimodal" } -smg-wasm = { version = "1.0.1", path = "wasm", package = "smg-wasm" } -smg-mesh = { version = "1.1.1", path = "mesh", package = "smg-mesh" } -smg-grpc-client = { version = "1.2.0", path = "grpc_client" } +openai-protocol = { version = "1.2.0", path = "crates/protocols" } +reasoning-parser = { version = "1.2.0", path = "crates/reasoning_parser" } +tool-parser = { version = "1.1.1", path = "crates/tool_parser" } +wfaas = { version = "1.0.2", path = "crates/workflow" } +llm-tokenizer = { version = "1.2.0", path = "crates/tokenizer" } +smg-auth = { version = "1.1.1", path = "crates/auth" } +smg-mcp = { version = "2.1.0", path = "crates/mcp" } +kv-index = { version = "1.0.1", path = "crates/kv_index" } +smg-data-connector = { version = "2.0.0", path = "crates/data_connector", package = "data-connector" } +llm-multimodal = { version = "1.2.0", path = "crates/multimodal" } +smg-wasm = { version = "1.0.1", path = "crates/wasm", package = "smg-wasm" } +smg-mesh = { version = "1.1.1", path = "crates/mesh", package = "smg-mesh" } +smg-grpc-client = { version = "1.2.0", path = "crates/grpc_client" } # Shared dependencies anyhow = "1.0" diff --git a/bindings/golang/Cargo.toml b/bindings/golang/Cargo.toml index b5512553e2..aef6edfdd8 100644 --- a/bindings/golang/Cargo.toml +++ b/bindings/golang/Cargo.toml @@ -28,10 +28,10 @@ default-features = true workspace = true [dependencies.llm-tokenizer] -path = "../../tokenizer" +path = "../../crates/tokenizer" [dependencies.tool-parser] -path = "../../tool_parser" +path = "../../crates/tool_parser" [dependencies.smg-grpc-client] workspace = true diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index 964f673f41..82111d6be6 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -18,10 +18,10 @@ path = "../../model_gateway" default-features = true [dependencies.smg-auth] -path = "../../auth" +path = "../../crates/auth" [dependencies.tool-parser] -path = "../../tool_parser" +path = "../../crates/tool_parser" [features] default = ["pyo3/extension-module"] diff --git a/clients/openapi-gen/Cargo.toml b/clients/openapi-gen/Cargo.toml index fd4fa56ddb..5b2a22edd7 100644 --- a/clients/openapi-gen/Cargo.toml +++ b/clients/openapi-gen/Cargo.toml @@ -7,7 +7,7 @@ publish = false [dependencies] anyhow = { workspace = true } -openai-protocol = { path = "../../protocols" } +openai-protocol = { path = "../../crates/protocols" } schemars = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } diff --git a/auth/Cargo.toml b/crates/auth/Cargo.toml similarity index 100% rename from auth/Cargo.toml rename to crates/auth/Cargo.toml diff --git a/auth/src/audit.rs b/crates/auth/src/audit.rs similarity index 100% rename from auth/src/audit.rs rename to crates/auth/src/audit.rs diff --git a/auth/src/config.rs b/crates/auth/src/config.rs similarity index 100% rename from auth/src/config.rs rename to crates/auth/src/config.rs diff --git a/auth/src/jwks.rs b/crates/auth/src/jwks.rs similarity index 100% rename from auth/src/jwks.rs rename to crates/auth/src/jwks.rs diff --git a/auth/src/jwt.rs b/crates/auth/src/jwt.rs similarity index 100% rename from auth/src/jwt.rs rename to crates/auth/src/jwt.rs diff --git a/auth/src/lib.rs b/crates/auth/src/lib.rs similarity index 100% rename from auth/src/lib.rs rename to crates/auth/src/lib.rs diff --git a/auth/src/middleware.rs b/crates/auth/src/middleware.rs similarity index 100% rename from auth/src/middleware.rs rename to crates/auth/src/middleware.rs diff --git a/data_connector/Cargo.toml b/crates/data_connector/Cargo.toml similarity index 100% rename from data_connector/Cargo.toml rename to crates/data_connector/Cargo.toml diff --git a/data_connector/README.md b/crates/data_connector/README.md similarity index 100% rename from data_connector/README.md rename to crates/data_connector/README.md diff --git a/data_connector/src/common.rs b/crates/data_connector/src/common.rs similarity index 100% rename from data_connector/src/common.rs rename to crates/data_connector/src/common.rs diff --git a/data_connector/src/config.rs b/crates/data_connector/src/config.rs similarity index 100% rename from data_connector/src/config.rs rename to crates/data_connector/src/config.rs diff --git a/data_connector/src/context.rs b/crates/data_connector/src/context.rs similarity index 100% rename from data_connector/src/context.rs rename to crates/data_connector/src/context.rs diff --git a/data_connector/src/core.rs b/crates/data_connector/src/core.rs similarity index 100% rename from data_connector/src/core.rs rename to crates/data_connector/src/core.rs diff --git a/data_connector/src/factory.rs b/crates/data_connector/src/factory.rs similarity index 100% rename from data_connector/src/factory.rs rename to crates/data_connector/src/factory.rs diff --git a/data_connector/src/hooked.rs b/crates/data_connector/src/hooked.rs similarity index 100% rename from data_connector/src/hooked.rs rename to crates/data_connector/src/hooked.rs diff --git a/data_connector/src/hooks.rs b/crates/data_connector/src/hooks.rs similarity index 100% rename from data_connector/src/hooks.rs rename to crates/data_connector/src/hooks.rs diff --git a/data_connector/src/lib.rs b/crates/data_connector/src/lib.rs similarity index 100% rename from data_connector/src/lib.rs rename to crates/data_connector/src/lib.rs diff --git a/data_connector/src/memory.rs b/crates/data_connector/src/memory.rs similarity index 100% rename from data_connector/src/memory.rs rename to crates/data_connector/src/memory.rs diff --git a/data_connector/src/noop.rs b/crates/data_connector/src/noop.rs similarity index 100% rename from data_connector/src/noop.rs rename to crates/data_connector/src/noop.rs diff --git a/data_connector/src/oracle.rs b/crates/data_connector/src/oracle.rs similarity index 100% rename from data_connector/src/oracle.rs rename to crates/data_connector/src/oracle.rs diff --git a/data_connector/src/oracle_migrations.rs b/crates/data_connector/src/oracle_migrations.rs similarity index 100% rename from data_connector/src/oracle_migrations.rs rename to crates/data_connector/src/oracle_migrations.rs diff --git a/data_connector/src/postgres.rs b/crates/data_connector/src/postgres.rs similarity index 100% rename from data_connector/src/postgres.rs rename to crates/data_connector/src/postgres.rs diff --git a/data_connector/src/postgres_migrations.rs b/crates/data_connector/src/postgres_migrations.rs similarity index 100% rename from data_connector/src/postgres_migrations.rs rename to crates/data_connector/src/postgres_migrations.rs diff --git a/data_connector/src/redis.rs b/crates/data_connector/src/redis.rs similarity index 100% rename from data_connector/src/redis.rs rename to crates/data_connector/src/redis.rs diff --git a/data_connector/src/schema.rs b/crates/data_connector/src/schema.rs similarity index 100% rename from data_connector/src/schema.rs rename to crates/data_connector/src/schema.rs diff --git a/data_connector/src/versioning.rs b/crates/data_connector/src/versioning.rs similarity index 100% rename from data_connector/src/versioning.rs rename to crates/data_connector/src/versioning.rs diff --git a/grpc_client/Cargo.toml b/crates/grpc_client/Cargo.toml similarity index 100% rename from grpc_client/Cargo.toml rename to crates/grpc_client/Cargo.toml diff --git a/grpc_client/build.rs b/crates/grpc_client/build.rs similarity index 100% rename from grpc_client/build.rs rename to crates/grpc_client/build.rs diff --git a/grpc_client/proto/common.proto b/crates/grpc_client/proto/common.proto similarity index 100% rename from grpc_client/proto/common.proto rename to crates/grpc_client/proto/common.proto diff --git a/grpc_client/proto/sglang_encoder.proto b/crates/grpc_client/proto/sglang_encoder.proto similarity index 100% rename from grpc_client/proto/sglang_encoder.proto rename to crates/grpc_client/proto/sglang_encoder.proto diff --git a/grpc_client/proto/sglang_scheduler.proto b/crates/grpc_client/proto/sglang_scheduler.proto similarity index 100% rename from grpc_client/proto/sglang_scheduler.proto rename to crates/grpc_client/proto/sglang_scheduler.proto diff --git a/grpc_client/proto/trtllm_service.proto b/crates/grpc_client/proto/trtllm_service.proto similarity index 100% rename from grpc_client/proto/trtllm_service.proto rename to crates/grpc_client/proto/trtllm_service.proto diff --git a/grpc_client/proto/vllm_engine.proto b/crates/grpc_client/proto/vllm_engine.proto similarity index 100% rename from grpc_client/proto/vllm_engine.proto rename to crates/grpc_client/proto/vllm_engine.proto diff --git a/grpc_client/python/.gitignore b/crates/grpc_client/python/.gitignore similarity index 100% rename from grpc_client/python/.gitignore rename to crates/grpc_client/python/.gitignore diff --git a/grpc_client/python/README.md b/crates/grpc_client/python/README.md similarity index 100% rename from grpc_client/python/README.md rename to crates/grpc_client/python/README.md diff --git a/grpc_client/python/pyproject.toml b/crates/grpc_client/python/pyproject.toml similarity index 100% rename from grpc_client/python/pyproject.toml rename to crates/grpc_client/python/pyproject.toml diff --git a/grpc_client/python/setup.py b/crates/grpc_client/python/setup.py similarity index 100% rename from grpc_client/python/setup.py rename to crates/grpc_client/python/setup.py diff --git a/grpc_client/python/smg_grpc_proto/__init__.py b/crates/grpc_client/python/smg_grpc_proto/__init__.py similarity index 100% rename from grpc_client/python/smg_grpc_proto/__init__.py rename to crates/grpc_client/python/smg_grpc_proto/__init__.py diff --git a/grpc_client/python/smg_grpc_proto/proto b/crates/grpc_client/python/smg_grpc_proto/proto similarity index 100% rename from grpc_client/python/smg_grpc_proto/proto rename to crates/grpc_client/python/smg_grpc_proto/proto diff --git a/grpc_client/src/lib.rs b/crates/grpc_client/src/lib.rs similarity index 100% rename from grpc_client/src/lib.rs rename to crates/grpc_client/src/lib.rs diff --git a/grpc_client/src/sglang_scheduler.rs b/crates/grpc_client/src/sglang_scheduler.rs similarity index 100% rename from grpc_client/src/sglang_scheduler.rs rename to crates/grpc_client/src/sglang_scheduler.rs diff --git a/grpc_client/src/tokenizer_bundle.rs b/crates/grpc_client/src/tokenizer_bundle.rs similarity index 100% rename from grpc_client/src/tokenizer_bundle.rs rename to crates/grpc_client/src/tokenizer_bundle.rs diff --git a/grpc_client/src/trtllm_service.rs b/crates/grpc_client/src/trtllm_service.rs similarity index 100% rename from grpc_client/src/trtllm_service.rs rename to crates/grpc_client/src/trtllm_service.rs diff --git a/grpc_client/src/vllm_engine.rs b/crates/grpc_client/src/vllm_engine.rs similarity index 100% rename from grpc_client/src/vllm_engine.rs rename to crates/grpc_client/src/vllm_engine.rs diff --git a/kv_index/Cargo.toml b/crates/kv_index/Cargo.toml similarity index 100% rename from kv_index/Cargo.toml rename to crates/kv_index/Cargo.toml diff --git a/kv_index/benches/throughput_bench.rs b/crates/kv_index/benches/throughput_bench.rs similarity index 100% rename from kv_index/benches/throughput_bench.rs rename to crates/kv_index/benches/throughput_bench.rs diff --git a/kv_index/src/common.rs b/crates/kv_index/src/common.rs similarity index 100% rename from kv_index/src/common.rs rename to crates/kv_index/src/common.rs diff --git a/kv_index/src/event_tree.rs b/crates/kv_index/src/event_tree.rs similarity index 100% rename from kv_index/src/event_tree.rs rename to crates/kv_index/src/event_tree.rs diff --git a/kv_index/src/lib.rs b/crates/kv_index/src/lib.rs similarity index 100% rename from kv_index/src/lib.rs rename to crates/kv_index/src/lib.rs diff --git a/kv_index/src/string_tree.rs b/crates/kv_index/src/string_tree.rs similarity index 100% rename from kv_index/src/string_tree.rs rename to crates/kv_index/src/string_tree.rs diff --git a/kv_index/src/token_tree.rs b/crates/kv_index/src/token_tree.rs similarity index 100% rename from kv_index/src/token_tree.rs rename to crates/kv_index/src/token_tree.rs diff --git a/mcp/Cargo.toml b/crates/mcp/Cargo.toml similarity index 100% rename from mcp/Cargo.toml rename to crates/mcp/Cargo.toml diff --git a/mcp/README.md b/crates/mcp/README.md similarity index 100% rename from mcp/README.md rename to crates/mcp/README.md diff --git a/mcp/src/annotations.rs b/crates/mcp/src/annotations.rs similarity index 100% rename from mcp/src/annotations.rs rename to crates/mcp/src/annotations.rs diff --git a/mcp/src/approval/audit.rs b/crates/mcp/src/approval/audit.rs similarity index 100% rename from mcp/src/approval/audit.rs rename to crates/mcp/src/approval/audit.rs diff --git a/mcp/src/approval/manager.rs b/crates/mcp/src/approval/manager.rs similarity index 100% rename from mcp/src/approval/manager.rs rename to crates/mcp/src/approval/manager.rs diff --git a/mcp/src/approval/mod.rs b/crates/mcp/src/approval/mod.rs similarity index 100% rename from mcp/src/approval/mod.rs rename to crates/mcp/src/approval/mod.rs diff --git a/mcp/src/approval/policy.rs b/crates/mcp/src/approval/policy.rs similarity index 100% rename from mcp/src/approval/policy.rs rename to crates/mcp/src/approval/policy.rs diff --git a/mcp/src/core/config.rs b/crates/mcp/src/core/config.rs similarity index 100% rename from mcp/src/core/config.rs rename to crates/mcp/src/core/config.rs diff --git a/mcp/src/core/handler.rs b/crates/mcp/src/core/handler.rs similarity index 100% rename from mcp/src/core/handler.rs rename to crates/mcp/src/core/handler.rs diff --git a/mcp/src/core/metrics.rs b/crates/mcp/src/core/metrics.rs similarity index 100% rename from mcp/src/core/metrics.rs rename to crates/mcp/src/core/metrics.rs diff --git a/mcp/src/core/mod.rs b/crates/mcp/src/core/mod.rs similarity index 100% rename from mcp/src/core/mod.rs rename to crates/mcp/src/core/mod.rs diff --git a/mcp/src/core/oauth.rs b/crates/mcp/src/core/oauth.rs similarity index 100% rename from mcp/src/core/oauth.rs rename to crates/mcp/src/core/oauth.rs diff --git a/mcp/src/core/orchestrator.rs b/crates/mcp/src/core/orchestrator.rs similarity index 100% rename from mcp/src/core/orchestrator.rs rename to crates/mcp/src/core/orchestrator.rs diff --git a/mcp/src/core/pool.rs b/crates/mcp/src/core/pool.rs similarity index 100% rename from mcp/src/core/pool.rs rename to crates/mcp/src/core/pool.rs diff --git a/mcp/src/core/proxy.rs b/crates/mcp/src/core/proxy.rs similarity index 100% rename from mcp/src/core/proxy.rs rename to crates/mcp/src/core/proxy.rs diff --git a/mcp/src/core/reconnect.rs b/crates/mcp/src/core/reconnect.rs similarity index 100% rename from mcp/src/core/reconnect.rs rename to crates/mcp/src/core/reconnect.rs diff --git a/mcp/src/core/session.rs b/crates/mcp/src/core/session.rs similarity index 100% rename from mcp/src/core/session.rs rename to crates/mcp/src/core/session.rs diff --git a/mcp/src/error.rs b/crates/mcp/src/error.rs similarity index 100% rename from mcp/src/error.rs rename to crates/mcp/src/error.rs diff --git a/mcp/src/inventory/index.rs b/crates/mcp/src/inventory/index.rs similarity index 100% rename from mcp/src/inventory/index.rs rename to crates/mcp/src/inventory/index.rs diff --git a/mcp/src/inventory/mod.rs b/crates/mcp/src/inventory/mod.rs similarity index 100% rename from mcp/src/inventory/mod.rs rename to crates/mcp/src/inventory/mod.rs diff --git a/mcp/src/inventory/types.rs b/crates/mcp/src/inventory/types.rs similarity index 100% rename from mcp/src/inventory/types.rs rename to crates/mcp/src/inventory/types.rs diff --git a/mcp/src/lib.rs b/crates/mcp/src/lib.rs similarity index 100% rename from mcp/src/lib.rs rename to crates/mcp/src/lib.rs diff --git a/mcp/src/responses_bridge.rs b/crates/mcp/src/responses_bridge.rs similarity index 100% rename from mcp/src/responses_bridge.rs rename to crates/mcp/src/responses_bridge.rs diff --git a/mcp/src/tenant.rs b/crates/mcp/src/tenant.rs similarity index 100% rename from mcp/src/tenant.rs rename to crates/mcp/src/tenant.rs diff --git a/mcp/src/transform/mod.rs b/crates/mcp/src/transform/mod.rs similarity index 100% rename from mcp/src/transform/mod.rs rename to crates/mcp/src/transform/mod.rs diff --git a/mcp/src/transform/transformer.rs b/crates/mcp/src/transform/transformer.rs similarity index 100% rename from mcp/src/transform/transformer.rs rename to crates/mcp/src/transform/transformer.rs diff --git a/mcp/src/transform/types.rs b/crates/mcp/src/transform/types.rs similarity index 100% rename from mcp/src/transform/types.rs rename to crates/mcp/src/transform/types.rs diff --git a/mesh/Cargo.toml b/crates/mesh/Cargo.toml similarity index 100% rename from mesh/Cargo.toml rename to crates/mesh/Cargo.toml diff --git a/mesh/build.rs b/crates/mesh/build.rs similarity index 100% rename from mesh/build.rs rename to crates/mesh/build.rs diff --git a/mesh/src/README.md b/crates/mesh/src/README.md similarity index 100% rename from mesh/src/README.md rename to crates/mesh/src/README.md diff --git a/mesh/src/consistent_hash.rs b/crates/mesh/src/consistent_hash.rs similarity index 100% rename from mesh/src/consistent_hash.rs rename to crates/mesh/src/consistent_hash.rs diff --git a/mesh/src/controller.rs b/crates/mesh/src/controller.rs similarity index 100% rename from mesh/src/controller.rs rename to crates/mesh/src/controller.rs diff --git a/mesh/src/crdt_kv/crdt.rs b/crates/mesh/src/crdt_kv/crdt.rs similarity index 100% rename from mesh/src/crdt_kv/crdt.rs rename to crates/mesh/src/crdt_kv/crdt.rs diff --git a/mesh/src/crdt_kv/kv_store.rs b/crates/mesh/src/crdt_kv/kv_store.rs similarity index 100% rename from mesh/src/crdt_kv/kv_store.rs rename to crates/mesh/src/crdt_kv/kv_store.rs diff --git a/mesh/src/crdt_kv/mod.rs b/crates/mesh/src/crdt_kv/mod.rs similarity index 100% rename from mesh/src/crdt_kv/mod.rs rename to crates/mesh/src/crdt_kv/mod.rs diff --git a/mesh/src/crdt_kv/operation.rs b/crates/mesh/src/crdt_kv/operation.rs similarity index 100% rename from mesh/src/crdt_kv/operation.rs rename to crates/mesh/src/crdt_kv/operation.rs diff --git a/mesh/src/crdt_kv/replica.rs b/crates/mesh/src/crdt_kv/replica.rs similarity index 100% rename from mesh/src/crdt_kv/replica.rs rename to crates/mesh/src/crdt_kv/replica.rs diff --git a/mesh/src/crdt_kv/tests.rs b/crates/mesh/src/crdt_kv/tests.rs similarity index 100% rename from mesh/src/crdt_kv/tests.rs rename to crates/mesh/src/crdt_kv/tests.rs diff --git a/mesh/src/flow_control.rs b/crates/mesh/src/flow_control.rs similarity index 100% rename from mesh/src/flow_control.rs rename to crates/mesh/src/flow_control.rs diff --git a/mesh/src/incremental.rs b/crates/mesh/src/incremental.rs similarity index 100% rename from mesh/src/incremental.rs rename to crates/mesh/src/incremental.rs diff --git a/mesh/src/lib.rs b/crates/mesh/src/lib.rs similarity index 100% rename from mesh/src/lib.rs rename to crates/mesh/src/lib.rs diff --git a/mesh/src/metrics.rs b/crates/mesh/src/metrics.rs similarity index 100% rename from mesh/src/metrics.rs rename to crates/mesh/src/metrics.rs diff --git a/mesh/src/mtls.rs b/crates/mesh/src/mtls.rs similarity index 100% rename from mesh/src/mtls.rs rename to crates/mesh/src/mtls.rs diff --git a/mesh/src/node_state_machine.rs b/crates/mesh/src/node_state_machine.rs similarity index 100% rename from mesh/src/node_state_machine.rs rename to crates/mesh/src/node_state_machine.rs diff --git a/mesh/src/partition.rs b/crates/mesh/src/partition.rs similarity index 100% rename from mesh/src/partition.rs rename to crates/mesh/src/partition.rs diff --git a/mesh/src/ping_server.rs b/crates/mesh/src/ping_server.rs similarity index 100% rename from mesh/src/ping_server.rs rename to crates/mesh/src/ping_server.rs diff --git a/mesh/src/proto/gossip.proto b/crates/mesh/src/proto/gossip.proto similarity index 100% rename from mesh/src/proto/gossip.proto rename to crates/mesh/src/proto/gossip.proto diff --git a/mesh/src/rate_limit_window.rs b/crates/mesh/src/rate_limit_window.rs similarity index 100% rename from mesh/src/rate_limit_window.rs rename to crates/mesh/src/rate_limit_window.rs diff --git a/mesh/src/service.rs b/crates/mesh/src/service.rs similarity index 100% rename from mesh/src/service.rs rename to crates/mesh/src/service.rs diff --git a/mesh/src/stores.rs b/crates/mesh/src/stores.rs similarity index 100% rename from mesh/src/stores.rs rename to crates/mesh/src/stores.rs diff --git a/mesh/src/sync.rs b/crates/mesh/src/sync.rs similarity index 100% rename from mesh/src/sync.rs rename to crates/mesh/src/sync.rs diff --git a/mesh/src/tests/comprehensive.rs b/crates/mesh/src/tests/comprehensive.rs similarity index 100% rename from mesh/src/tests/comprehensive.rs rename to crates/mesh/src/tests/comprehensive.rs diff --git a/mesh/src/tests/mod.rs b/crates/mesh/src/tests/mod.rs similarity index 100% rename from mesh/src/tests/mod.rs rename to crates/mesh/src/tests/mod.rs diff --git a/mesh/src/tests/test_utils.rs b/crates/mesh/src/tests/test_utils.rs similarity index 100% rename from mesh/src/tests/test_utils.rs rename to crates/mesh/src/tests/test_utils.rs diff --git a/mesh/src/topology.rs b/crates/mesh/src/topology.rs similarity index 100% rename from mesh/src/topology.rs rename to crates/mesh/src/topology.rs diff --git a/mesh/src/tree_ops.rs b/crates/mesh/src/tree_ops.rs similarity index 100% rename from mesh/src/tree_ops.rs rename to crates/mesh/src/tree_ops.rs diff --git a/multimodal/Cargo.toml b/crates/multimodal/Cargo.toml similarity index 100% rename from multimodal/Cargo.toml rename to crates/multimodal/Cargo.toml diff --git a/multimodal/scripts/generate_vision_golden.py b/crates/multimodal/scripts/generate_vision_golden.py similarity index 100% rename from multimodal/scripts/generate_vision_golden.py rename to crates/multimodal/scripts/generate_vision_golden.py diff --git a/multimodal/src/error.rs b/crates/multimodal/src/error.rs similarity index 100% rename from multimodal/src/error.rs rename to crates/multimodal/src/error.rs diff --git a/multimodal/src/hasher.rs b/crates/multimodal/src/hasher.rs similarity index 100% rename from multimodal/src/hasher.rs rename to crates/multimodal/src/hasher.rs diff --git a/multimodal/src/lib.rs b/crates/multimodal/src/lib.rs similarity index 100% rename from multimodal/src/lib.rs rename to crates/multimodal/src/lib.rs diff --git a/multimodal/src/media.rs b/crates/multimodal/src/media.rs similarity index 100% rename from multimodal/src/media.rs rename to crates/multimodal/src/media.rs diff --git a/multimodal/src/registry/llama4.rs b/crates/multimodal/src/registry/llama4.rs similarity index 100% rename from multimodal/src/registry/llama4.rs rename to crates/multimodal/src/registry/llama4.rs diff --git a/multimodal/src/registry/llava.rs b/crates/multimodal/src/registry/llava.rs similarity index 100% rename from multimodal/src/registry/llava.rs rename to crates/multimodal/src/registry/llava.rs diff --git a/multimodal/src/registry/mod.rs b/crates/multimodal/src/registry/mod.rs similarity index 100% rename from multimodal/src/registry/mod.rs rename to crates/multimodal/src/registry/mod.rs diff --git a/multimodal/src/registry/phi3_v.rs b/crates/multimodal/src/registry/phi3_v.rs similarity index 100% rename from multimodal/src/registry/phi3_v.rs rename to crates/multimodal/src/registry/phi3_v.rs diff --git a/multimodal/src/registry/qwen3_vl.rs b/crates/multimodal/src/registry/qwen3_vl.rs similarity index 100% rename from multimodal/src/registry/qwen3_vl.rs rename to crates/multimodal/src/registry/qwen3_vl.rs diff --git a/multimodal/src/registry/qwen_vl.rs b/crates/multimodal/src/registry/qwen_vl.rs similarity index 100% rename from multimodal/src/registry/qwen_vl.rs rename to crates/multimodal/src/registry/qwen_vl.rs diff --git a/multimodal/src/registry/traits.rs b/crates/multimodal/src/registry/traits.rs similarity index 100% rename from multimodal/src/registry/traits.rs rename to crates/multimodal/src/registry/traits.rs diff --git a/multimodal/src/tracker.rs b/crates/multimodal/src/tracker.rs similarity index 100% rename from multimodal/src/tracker.rs rename to crates/multimodal/src/tracker.rs diff --git a/multimodal/src/types.rs b/crates/multimodal/src/types.rs similarity index 100% rename from multimodal/src/types.rs rename to crates/multimodal/src/types.rs diff --git a/multimodal/src/vision/image_processor.rs b/crates/multimodal/src/vision/image_processor.rs similarity index 100% rename from multimodal/src/vision/image_processor.rs rename to crates/multimodal/src/vision/image_processor.rs diff --git a/multimodal/src/vision/mod.rs b/crates/multimodal/src/vision/mod.rs similarity index 100% rename from multimodal/src/vision/mod.rs rename to crates/multimodal/src/vision/mod.rs diff --git a/multimodal/src/vision/preprocessor_config.rs b/crates/multimodal/src/vision/preprocessor_config.rs similarity index 100% rename from multimodal/src/vision/preprocessor_config.rs rename to crates/multimodal/src/vision/preprocessor_config.rs diff --git a/multimodal/src/vision/processors/llama4_vision.rs b/crates/multimodal/src/vision/processors/llama4_vision.rs similarity index 100% rename from multimodal/src/vision/processors/llama4_vision.rs rename to crates/multimodal/src/vision/processors/llama4_vision.rs diff --git a/multimodal/src/vision/processors/llava.rs b/crates/multimodal/src/vision/processors/llava.rs similarity index 100% rename from multimodal/src/vision/processors/llava.rs rename to crates/multimodal/src/vision/processors/llava.rs diff --git a/multimodal/src/vision/processors/mod.rs b/crates/multimodal/src/vision/processors/mod.rs similarity index 100% rename from multimodal/src/vision/processors/mod.rs rename to crates/multimodal/src/vision/processors/mod.rs diff --git a/multimodal/src/vision/processors/phi3_vision.rs b/crates/multimodal/src/vision/processors/phi3_vision.rs similarity index 100% rename from multimodal/src/vision/processors/phi3_vision.rs rename to crates/multimodal/src/vision/processors/phi3_vision.rs diff --git a/multimodal/src/vision/processors/phi4_vision.rs b/crates/multimodal/src/vision/processors/phi4_vision.rs similarity index 100% rename from multimodal/src/vision/processors/phi4_vision.rs rename to crates/multimodal/src/vision/processors/phi4_vision.rs diff --git a/multimodal/src/vision/processors/pixtral.rs b/crates/multimodal/src/vision/processors/pixtral.rs similarity index 100% rename from multimodal/src/vision/processors/pixtral.rs rename to crates/multimodal/src/vision/processors/pixtral.rs diff --git a/multimodal/src/vision/processors/qwen2_vl.rs b/crates/multimodal/src/vision/processors/qwen2_vl.rs similarity index 100% rename from multimodal/src/vision/processors/qwen2_vl.rs rename to crates/multimodal/src/vision/processors/qwen2_vl.rs diff --git a/multimodal/src/vision/processors/qwen3_vl.rs b/crates/multimodal/src/vision/processors/qwen3_vl.rs similarity index 100% rename from multimodal/src/vision/processors/qwen3_vl.rs rename to crates/multimodal/src/vision/processors/qwen3_vl.rs diff --git a/multimodal/src/vision/processors/qwen_vl_base.rs b/crates/multimodal/src/vision/processors/qwen_vl_base.rs similarity index 100% rename from multimodal/src/vision/processors/qwen_vl_base.rs rename to crates/multimodal/src/vision/processors/qwen_vl_base.rs diff --git a/multimodal/src/vision/transforms.rs b/crates/multimodal/src/vision/transforms.rs similarity index 100% rename from multimodal/src/vision/transforms.rs rename to crates/multimodal/src/vision/transforms.rs diff --git a/multimodal/tests/fixtures/images/grayscale.jpg b/crates/multimodal/tests/fixtures/images/grayscale.jpg similarity index 100% rename from multimodal/tests/fixtures/images/grayscale.jpg rename to crates/multimodal/tests/fixtures/images/grayscale.jpg diff --git a/multimodal/tests/fixtures/images/large.jpg b/crates/multimodal/tests/fixtures/images/large.jpg similarity index 100% rename from multimodal/tests/fixtures/images/large.jpg rename to crates/multimodal/tests/fixtures/images/large.jpg diff --git a/multimodal/tests/fixtures/images/odd_dims.jpg b/crates/multimodal/tests/fixtures/images/odd_dims.jpg similarity index 100% rename from multimodal/tests/fixtures/images/odd_dims.jpg rename to crates/multimodal/tests/fixtures/images/odd_dims.jpg diff --git a/multimodal/tests/fixtures/images/small.jpg b/crates/multimodal/tests/fixtures/images/small.jpg similarity index 100% rename from multimodal/tests/fixtures/images/small.jpg rename to crates/multimodal/tests/fixtures/images/small.jpg diff --git a/multimodal/tests/fixtures/images/square.jpg b/crates/multimodal/tests/fixtures/images/square.jpg similarity index 100% rename from multimodal/tests/fixtures/images/square.jpg rename to crates/multimodal/tests/fixtures/images/square.jpg diff --git a/multimodal/tests/fixtures/images/tall.jpg b/crates/multimodal/tests/fixtures/images/tall.jpg similarity index 100% rename from multimodal/tests/fixtures/images/tall.jpg rename to crates/multimodal/tests/fixtures/images/tall.jpg diff --git a/multimodal/tests/fixtures/images/tiny.jpg b/crates/multimodal/tests/fixtures/images/tiny.jpg similarity index 100% rename from multimodal/tests/fixtures/images/tiny.jpg rename to crates/multimodal/tests/fixtures/images/tiny.jpg diff --git a/multimodal/tests/fixtures/images/very_tall.jpg b/crates/multimodal/tests/fixtures/images/very_tall.jpg similarity index 100% rename from multimodal/tests/fixtures/images/very_tall.jpg rename to crates/multimodal/tests/fixtures/images/very_tall.jpg diff --git a/multimodal/tests/fixtures/images/very_wide.jpg b/crates/multimodal/tests/fixtures/images/very_wide.jpg similarity index 100% rename from multimodal/tests/fixtures/images/very_wide.jpg rename to crates/multimodal/tests/fixtures/images/very_wide.jpg diff --git a/multimodal/tests/fixtures/images/wide.jpg b/crates/multimodal/tests/fixtures/images/wide.jpg similarity index 100% rename from multimodal/tests/fixtures/images/wide.jpg rename to crates/multimodal/tests/fixtures/images/wide.jpg diff --git a/multimodal/tests/multimodal_tracker_test.rs b/crates/multimodal/tests/multimodal_tracker_test.rs similarity index 100% rename from multimodal/tests/multimodal_tracker_test.rs rename to crates/multimodal/tests/multimodal_tracker_test.rs diff --git a/multimodal/tests/vision_golden_tests.rs b/crates/multimodal/tests/vision_golden_tests.rs similarity index 100% rename from multimodal/tests/vision_golden_tests.rs rename to crates/multimodal/tests/vision_golden_tests.rs diff --git a/protocols/Cargo.toml b/crates/protocols/Cargo.toml similarity index 100% rename from protocols/Cargo.toml rename to crates/protocols/Cargo.toml diff --git a/protocols/src/builders/chat/mod.rs b/crates/protocols/src/builders/chat/mod.rs similarity index 100% rename from protocols/src/builders/chat/mod.rs rename to crates/protocols/src/builders/chat/mod.rs diff --git a/protocols/src/builders/chat/response.rs b/crates/protocols/src/builders/chat/response.rs similarity index 100% rename from protocols/src/builders/chat/response.rs rename to crates/protocols/src/builders/chat/response.rs diff --git a/protocols/src/builders/chat/stream_response.rs b/crates/protocols/src/builders/chat/stream_response.rs similarity index 100% rename from protocols/src/builders/chat/stream_response.rs rename to crates/protocols/src/builders/chat/stream_response.rs diff --git a/protocols/src/builders/mod.rs b/crates/protocols/src/builders/mod.rs similarity index 100% rename from protocols/src/builders/mod.rs rename to crates/protocols/src/builders/mod.rs diff --git a/protocols/src/builders/realtime/client_event.rs b/crates/protocols/src/builders/realtime/client_event.rs similarity index 100% rename from protocols/src/builders/realtime/client_event.rs rename to crates/protocols/src/builders/realtime/client_event.rs diff --git a/protocols/src/builders/realtime/mod.rs b/crates/protocols/src/builders/realtime/mod.rs similarity index 100% rename from protocols/src/builders/realtime/mod.rs rename to crates/protocols/src/builders/realtime/mod.rs diff --git a/protocols/src/builders/realtime/response.rs b/crates/protocols/src/builders/realtime/response.rs similarity index 100% rename from protocols/src/builders/realtime/response.rs rename to crates/protocols/src/builders/realtime/response.rs diff --git a/protocols/src/builders/realtime/server_event.rs b/crates/protocols/src/builders/realtime/server_event.rs similarity index 100% rename from protocols/src/builders/realtime/server_event.rs rename to crates/protocols/src/builders/realtime/server_event.rs diff --git a/protocols/src/builders/responses/mod.rs b/crates/protocols/src/builders/responses/mod.rs similarity index 100% rename from protocols/src/builders/responses/mod.rs rename to crates/protocols/src/builders/responses/mod.rs diff --git a/protocols/src/builders/responses/response.rs b/crates/protocols/src/builders/responses/response.rs similarity index 100% rename from protocols/src/builders/responses/response.rs rename to crates/protocols/src/builders/responses/response.rs diff --git a/protocols/src/chat.rs b/crates/protocols/src/chat.rs similarity index 100% rename from protocols/src/chat.rs rename to crates/protocols/src/chat.rs diff --git a/protocols/src/classify.rs b/crates/protocols/src/classify.rs similarity index 100% rename from protocols/src/classify.rs rename to crates/protocols/src/classify.rs diff --git a/protocols/src/common.rs b/crates/protocols/src/common.rs similarity index 100% rename from protocols/src/common.rs rename to crates/protocols/src/common.rs diff --git a/protocols/src/completion.rs b/crates/protocols/src/completion.rs similarity index 100% rename from protocols/src/completion.rs rename to crates/protocols/src/completion.rs diff --git a/protocols/src/embedding.rs b/crates/protocols/src/embedding.rs similarity index 100% rename from protocols/src/embedding.rs rename to crates/protocols/src/embedding.rs diff --git a/protocols/src/event_types.rs b/crates/protocols/src/event_types.rs similarity index 100% rename from protocols/src/event_types.rs rename to crates/protocols/src/event_types.rs diff --git a/protocols/src/generate.rs b/crates/protocols/src/generate.rs similarity index 100% rename from protocols/src/generate.rs rename to crates/protocols/src/generate.rs diff --git a/protocols/src/interactions.rs b/crates/protocols/src/interactions.rs similarity index 100% rename from protocols/src/interactions.rs rename to crates/protocols/src/interactions.rs diff --git a/protocols/src/lib.rs b/crates/protocols/src/lib.rs similarity index 100% rename from protocols/src/lib.rs rename to crates/protocols/src/lib.rs diff --git a/protocols/src/messages.rs b/crates/protocols/src/messages.rs similarity index 100% rename from protocols/src/messages.rs rename to crates/protocols/src/messages.rs diff --git a/protocols/src/model_card.rs b/crates/protocols/src/model_card.rs similarity index 100% rename from protocols/src/model_card.rs rename to crates/protocols/src/model_card.rs diff --git a/protocols/src/model_type.rs b/crates/protocols/src/model_type.rs similarity index 100% rename from protocols/src/model_type.rs rename to crates/protocols/src/model_type.rs diff --git a/protocols/src/parser.rs b/crates/protocols/src/parser.rs similarity index 100% rename from protocols/src/parser.rs rename to crates/protocols/src/parser.rs diff --git a/protocols/src/realtime_conversation.rs b/crates/protocols/src/realtime_conversation.rs similarity index 100% rename from protocols/src/realtime_conversation.rs rename to crates/protocols/src/realtime_conversation.rs diff --git a/protocols/src/realtime_events.rs b/crates/protocols/src/realtime_events.rs similarity index 100% rename from protocols/src/realtime_events.rs rename to crates/protocols/src/realtime_events.rs diff --git a/protocols/src/realtime_response.rs b/crates/protocols/src/realtime_response.rs similarity index 100% rename from protocols/src/realtime_response.rs rename to crates/protocols/src/realtime_response.rs diff --git a/protocols/src/realtime_session.rs b/crates/protocols/src/realtime_session.rs similarity index 100% rename from protocols/src/realtime_session.rs rename to crates/protocols/src/realtime_session.rs diff --git a/protocols/src/rerank.rs b/crates/protocols/src/rerank.rs similarity index 100% rename from protocols/src/rerank.rs rename to crates/protocols/src/rerank.rs diff --git a/protocols/src/responses.rs b/crates/protocols/src/responses.rs similarity index 100% rename from protocols/src/responses.rs rename to crates/protocols/src/responses.rs diff --git a/protocols/src/sampling_params.rs b/crates/protocols/src/sampling_params.rs similarity index 100% rename from protocols/src/sampling_params.rs rename to crates/protocols/src/sampling_params.rs diff --git a/protocols/src/tokenize.rs b/crates/protocols/src/tokenize.rs similarity index 100% rename from protocols/src/tokenize.rs rename to crates/protocols/src/tokenize.rs diff --git a/protocols/src/validated.rs b/crates/protocols/src/validated.rs similarity index 100% rename from protocols/src/validated.rs rename to crates/protocols/src/validated.rs diff --git a/protocols/src/worker.rs b/crates/protocols/src/worker.rs similarity index 100% rename from protocols/src/worker.rs rename to crates/protocols/src/worker.rs diff --git a/reasoning_parser/Cargo.toml b/crates/reasoning_parser/Cargo.toml similarity index 100% rename from reasoning_parser/Cargo.toml rename to crates/reasoning_parser/Cargo.toml diff --git a/reasoning_parser/README.md b/crates/reasoning_parser/README.md similarity index 100% rename from reasoning_parser/README.md rename to crates/reasoning_parser/README.md diff --git a/reasoning_parser/src/README.md b/crates/reasoning_parser/src/README.md similarity index 100% rename from reasoning_parser/src/README.md rename to crates/reasoning_parser/src/README.md diff --git a/reasoning_parser/src/factory.rs b/crates/reasoning_parser/src/factory.rs similarity index 100% rename from reasoning_parser/src/factory.rs rename to crates/reasoning_parser/src/factory.rs diff --git a/reasoning_parser/src/lib.rs b/crates/reasoning_parser/src/lib.rs similarity index 100% rename from reasoning_parser/src/lib.rs rename to crates/reasoning_parser/src/lib.rs diff --git a/reasoning_parser/src/parsers/base.rs b/crates/reasoning_parser/src/parsers/base.rs similarity index 100% rename from reasoning_parser/src/parsers/base.rs rename to crates/reasoning_parser/src/parsers/base.rs diff --git a/reasoning_parser/src/parsers/cohere_cmd.rs b/crates/reasoning_parser/src/parsers/cohere_cmd.rs similarity index 100% rename from reasoning_parser/src/parsers/cohere_cmd.rs rename to crates/reasoning_parser/src/parsers/cohere_cmd.rs diff --git a/reasoning_parser/src/parsers/deepseek_r1.rs b/crates/reasoning_parser/src/parsers/deepseek_r1.rs similarity index 100% rename from reasoning_parser/src/parsers/deepseek_r1.rs rename to crates/reasoning_parser/src/parsers/deepseek_r1.rs diff --git a/reasoning_parser/src/parsers/glm45.rs b/crates/reasoning_parser/src/parsers/glm45.rs similarity index 100% rename from reasoning_parser/src/parsers/glm45.rs rename to crates/reasoning_parser/src/parsers/glm45.rs diff --git a/reasoning_parser/src/parsers/kimi.rs b/crates/reasoning_parser/src/parsers/kimi.rs similarity index 100% rename from reasoning_parser/src/parsers/kimi.rs rename to crates/reasoning_parser/src/parsers/kimi.rs diff --git a/reasoning_parser/src/parsers/minimax.rs b/crates/reasoning_parser/src/parsers/minimax.rs similarity index 100% rename from reasoning_parser/src/parsers/minimax.rs rename to crates/reasoning_parser/src/parsers/minimax.rs diff --git a/reasoning_parser/src/parsers/mod.rs b/crates/reasoning_parser/src/parsers/mod.rs similarity index 100% rename from reasoning_parser/src/parsers/mod.rs rename to crates/reasoning_parser/src/parsers/mod.rs diff --git a/reasoning_parser/src/parsers/nano_v3.rs b/crates/reasoning_parser/src/parsers/nano_v3.rs similarity index 100% rename from reasoning_parser/src/parsers/nano_v3.rs rename to crates/reasoning_parser/src/parsers/nano_v3.rs diff --git a/reasoning_parser/src/parsers/qwen3.rs b/crates/reasoning_parser/src/parsers/qwen3.rs similarity index 100% rename from reasoning_parser/src/parsers/qwen3.rs rename to crates/reasoning_parser/src/parsers/qwen3.rs diff --git a/reasoning_parser/src/parsers/step3.rs b/crates/reasoning_parser/src/parsers/step3.rs similarity index 100% rename from reasoning_parser/src/parsers/step3.rs rename to crates/reasoning_parser/src/parsers/step3.rs diff --git a/reasoning_parser/src/traits.rs b/crates/reasoning_parser/src/traits.rs similarity index 100% rename from reasoning_parser/src/traits.rs rename to crates/reasoning_parser/src/traits.rs diff --git a/tokenizer/Cargo.toml b/crates/tokenizer/Cargo.toml similarity index 100% rename from tokenizer/Cargo.toml rename to crates/tokenizer/Cargo.toml diff --git a/tokenizer/README.md b/crates/tokenizer/README.md similarity index 100% rename from tokenizer/README.md rename to crates/tokenizer/README.md diff --git a/tokenizer/benches/stop_sequence_search.rs b/crates/tokenizer/benches/stop_sequence_search.rs similarity index 100% rename from tokenizer/benches/stop_sequence_search.rs rename to crates/tokenizer/benches/stop_sequence_search.rs diff --git a/tokenizer/src/cache/fingerprint.rs b/crates/tokenizer/src/cache/fingerprint.rs similarity index 100% rename from tokenizer/src/cache/fingerprint.rs rename to crates/tokenizer/src/cache/fingerprint.rs diff --git a/tokenizer/src/cache/l0.rs b/crates/tokenizer/src/cache/l0.rs similarity index 100% rename from tokenizer/src/cache/l0.rs rename to crates/tokenizer/src/cache/l0.rs diff --git a/tokenizer/src/cache/l1.rs b/crates/tokenizer/src/cache/l1.rs similarity index 100% rename from tokenizer/src/cache/l1.rs rename to crates/tokenizer/src/cache/l1.rs diff --git a/tokenizer/src/cache/mod.rs b/crates/tokenizer/src/cache/mod.rs similarity index 100% rename from tokenizer/src/cache/mod.rs rename to crates/tokenizer/src/cache/mod.rs diff --git a/tokenizer/src/chat_template.rs b/crates/tokenizer/src/chat_template.rs similarity index 100% rename from tokenizer/src/chat_template.rs rename to crates/tokenizer/src/chat_template.rs diff --git a/tokenizer/src/factory.rs b/crates/tokenizer/src/factory.rs similarity index 100% rename from tokenizer/src/factory.rs rename to crates/tokenizer/src/factory.rs diff --git a/tokenizer/src/hub.rs b/crates/tokenizer/src/hub.rs similarity index 100% rename from tokenizer/src/hub.rs rename to crates/tokenizer/src/hub.rs diff --git a/tokenizer/src/huggingface.rs b/crates/tokenizer/src/huggingface.rs similarity index 100% rename from tokenizer/src/huggingface.rs rename to crates/tokenizer/src/huggingface.rs diff --git a/tokenizer/src/lib.rs b/crates/tokenizer/src/lib.rs similarity index 100% rename from tokenizer/src/lib.rs rename to crates/tokenizer/src/lib.rs diff --git a/tokenizer/src/mock.rs b/crates/tokenizer/src/mock.rs similarity index 100% rename from tokenizer/src/mock.rs rename to crates/tokenizer/src/mock.rs diff --git a/tokenizer/src/registry.rs b/crates/tokenizer/src/registry.rs similarity index 100% rename from tokenizer/src/registry.rs rename to crates/tokenizer/src/registry.rs diff --git a/tokenizer/src/sequence.rs b/crates/tokenizer/src/sequence.rs similarity index 100% rename from tokenizer/src/sequence.rs rename to crates/tokenizer/src/sequence.rs diff --git a/tokenizer/src/stop.rs b/crates/tokenizer/src/stop.rs similarity index 100% rename from tokenizer/src/stop.rs rename to crates/tokenizer/src/stop.rs diff --git a/tokenizer/src/stream.rs b/crates/tokenizer/src/stream.rs similarity index 100% rename from tokenizer/src/stream.rs rename to crates/tokenizer/src/stream.rs diff --git a/tokenizer/src/tests.rs b/crates/tokenizer/src/tests.rs similarity index 100% rename from tokenizer/src/tests.rs rename to crates/tokenizer/src/tests.rs diff --git a/tokenizer/src/tiktoken.rs b/crates/tokenizer/src/tiktoken.rs similarity index 100% rename from tokenizer/src/tiktoken.rs rename to crates/tokenizer/src/tiktoken.rs diff --git a/tokenizer/src/traits.rs b/crates/tokenizer/src/traits.rs similarity index 100% rename from tokenizer/src/traits.rs rename to crates/tokenizer/src/traits.rs diff --git a/tokenizer/tests/chat_template_format_detection.rs b/crates/tokenizer/tests/chat_template_format_detection.rs similarity index 100% rename from tokenizer/tests/chat_template_format_detection.rs rename to crates/tokenizer/tests/chat_template_format_detection.rs diff --git a/tokenizer/tests/chat_template_integration.rs b/crates/tokenizer/tests/chat_template_integration.rs similarity index 100% rename from tokenizer/tests/chat_template_integration.rs rename to crates/tokenizer/tests/chat_template_integration.rs diff --git a/tokenizer/tests/chat_template_loading.rs b/crates/tokenizer/tests/chat_template_loading.rs similarity index 100% rename from tokenizer/tests/chat_template_loading.rs rename to crates/tokenizer/tests/chat_template_loading.rs diff --git a/tokenizer/tests/common/mod.rs b/crates/tokenizer/tests/common/mod.rs similarity index 100% rename from tokenizer/tests/common/mod.rs rename to crates/tokenizer/tests/common/mod.rs diff --git a/tokenizer/tests/tiktoken_integration.rs b/crates/tokenizer/tests/tiktoken_integration.rs similarity index 100% rename from tokenizer/tests/tiktoken_integration.rs rename to crates/tokenizer/tests/tiktoken_integration.rs diff --git a/tokenizer/tests/tokenizer_cache_correctness_test.rs b/crates/tokenizer/tests/tokenizer_cache_correctness_test.rs similarity index 100% rename from tokenizer/tests/tokenizer_cache_correctness_test.rs rename to crates/tokenizer/tests/tokenizer_cache_correctness_test.rs diff --git a/tokenizer/tests/tokenizer_integration.rs b/crates/tokenizer/tests/tokenizer_integration.rs similarity index 100% rename from tokenizer/tests/tokenizer_integration.rs rename to crates/tokenizer/tests/tokenizer_integration.rs diff --git a/tool_parser/Cargo.toml b/crates/tool_parser/Cargo.toml similarity index 100% rename from tool_parser/Cargo.toml rename to crates/tool_parser/Cargo.toml diff --git a/tool_parser/README.md b/crates/tool_parser/README.md similarity index 100% rename from tool_parser/README.md rename to crates/tool_parser/README.md diff --git a/tool_parser/src/errors.rs b/crates/tool_parser/src/errors.rs similarity index 100% rename from tool_parser/src/errors.rs rename to crates/tool_parser/src/errors.rs diff --git a/tool_parser/src/factory.rs b/crates/tool_parser/src/factory.rs similarity index 100% rename from tool_parser/src/factory.rs rename to crates/tool_parser/src/factory.rs diff --git a/tool_parser/src/lib.rs b/crates/tool_parser/src/lib.rs similarity index 100% rename from tool_parser/src/lib.rs rename to crates/tool_parser/src/lib.rs diff --git a/tool_parser/src/parsers/cohere.rs b/crates/tool_parser/src/parsers/cohere.rs similarity index 100% rename from tool_parser/src/parsers/cohere.rs rename to crates/tool_parser/src/parsers/cohere.rs diff --git a/tool_parser/src/parsers/deepseek.rs b/crates/tool_parser/src/parsers/deepseek.rs similarity index 100% rename from tool_parser/src/parsers/deepseek.rs rename to crates/tool_parser/src/parsers/deepseek.rs diff --git a/tool_parser/src/parsers/glm4_moe.rs b/crates/tool_parser/src/parsers/glm4_moe.rs similarity index 100% rename from tool_parser/src/parsers/glm4_moe.rs rename to crates/tool_parser/src/parsers/glm4_moe.rs diff --git a/tool_parser/src/parsers/helpers.rs b/crates/tool_parser/src/parsers/helpers.rs similarity index 100% rename from tool_parser/src/parsers/helpers.rs rename to crates/tool_parser/src/parsers/helpers.rs diff --git a/tool_parser/src/parsers/json.rs b/crates/tool_parser/src/parsers/json.rs similarity index 100% rename from tool_parser/src/parsers/json.rs rename to crates/tool_parser/src/parsers/json.rs diff --git a/tool_parser/src/parsers/kimik2.rs b/crates/tool_parser/src/parsers/kimik2.rs similarity index 100% rename from tool_parser/src/parsers/kimik2.rs rename to crates/tool_parser/src/parsers/kimik2.rs diff --git a/tool_parser/src/parsers/llama.rs b/crates/tool_parser/src/parsers/llama.rs similarity index 100% rename from tool_parser/src/parsers/llama.rs rename to crates/tool_parser/src/parsers/llama.rs diff --git a/tool_parser/src/parsers/minimax_m2.rs b/crates/tool_parser/src/parsers/minimax_m2.rs similarity index 100% rename from tool_parser/src/parsers/minimax_m2.rs rename to crates/tool_parser/src/parsers/minimax_m2.rs diff --git a/tool_parser/src/parsers/mistral.rs b/crates/tool_parser/src/parsers/mistral.rs similarity index 100% rename from tool_parser/src/parsers/mistral.rs rename to crates/tool_parser/src/parsers/mistral.rs diff --git a/tool_parser/src/parsers/mod.rs b/crates/tool_parser/src/parsers/mod.rs similarity index 100% rename from tool_parser/src/parsers/mod.rs rename to crates/tool_parser/src/parsers/mod.rs diff --git a/tool_parser/src/parsers/passthrough.rs b/crates/tool_parser/src/parsers/passthrough.rs similarity index 100% rename from tool_parser/src/parsers/passthrough.rs rename to crates/tool_parser/src/parsers/passthrough.rs diff --git a/tool_parser/src/parsers/pythonic.rs b/crates/tool_parser/src/parsers/pythonic.rs similarity index 100% rename from tool_parser/src/parsers/pythonic.rs rename to crates/tool_parser/src/parsers/pythonic.rs diff --git a/tool_parser/src/parsers/qwen.rs b/crates/tool_parser/src/parsers/qwen.rs similarity index 100% rename from tool_parser/src/parsers/qwen.rs rename to crates/tool_parser/src/parsers/qwen.rs diff --git a/tool_parser/src/parsers/qwen_coder.rs b/crates/tool_parser/src/parsers/qwen_coder.rs similarity index 100% rename from tool_parser/src/parsers/qwen_coder.rs rename to crates/tool_parser/src/parsers/qwen_coder.rs diff --git a/tool_parser/src/parsers/step3.rs b/crates/tool_parser/src/parsers/step3.rs similarity index 100% rename from tool_parser/src/parsers/step3.rs rename to crates/tool_parser/src/parsers/step3.rs diff --git a/tool_parser/src/partial_json.rs b/crates/tool_parser/src/partial_json.rs similarity index 100% rename from tool_parser/src/partial_json.rs rename to crates/tool_parser/src/partial_json.rs diff --git a/tool_parser/src/tests.rs b/crates/tool_parser/src/tests.rs similarity index 100% rename from tool_parser/src/tests.rs rename to crates/tool_parser/src/tests.rs diff --git a/tool_parser/src/traits.rs b/crates/tool_parser/src/traits.rs similarity index 100% rename from tool_parser/src/traits.rs rename to crates/tool_parser/src/traits.rs diff --git a/tool_parser/src/types.rs b/crates/tool_parser/src/types.rs similarity index 100% rename from tool_parser/src/types.rs rename to crates/tool_parser/src/types.rs diff --git a/tool_parser/tests/common/mod.rs b/crates/tool_parser/tests/common/mod.rs similarity index 100% rename from tool_parser/tests/common/mod.rs rename to crates/tool_parser/tests/common/mod.rs diff --git a/tool_parser/tests/tool_parser_cohere.rs b/crates/tool_parser/tests/tool_parser_cohere.rs similarity index 100% rename from tool_parser/tests/tool_parser_cohere.rs rename to crates/tool_parser/tests/tool_parser_cohere.rs diff --git a/tool_parser/tests/tool_parser_deepseek.rs b/crates/tool_parser/tests/tool_parser_deepseek.rs similarity index 100% rename from tool_parser/tests/tool_parser_deepseek.rs rename to crates/tool_parser/tests/tool_parser_deepseek.rs diff --git a/tool_parser/tests/tool_parser_edge_cases.rs b/crates/tool_parser/tests/tool_parser_edge_cases.rs similarity index 100% rename from tool_parser/tests/tool_parser_edge_cases.rs rename to crates/tool_parser/tests/tool_parser_edge_cases.rs diff --git a/tool_parser/tests/tool_parser_fallback.rs b/crates/tool_parser/tests/tool_parser_fallback.rs similarity index 100% rename from tool_parser/tests/tool_parser_fallback.rs rename to crates/tool_parser/tests/tool_parser_fallback.rs diff --git a/tool_parser/tests/tool_parser_glm47_moe.rs b/crates/tool_parser/tests/tool_parser_glm47_moe.rs similarity index 100% rename from tool_parser/tests/tool_parser_glm47_moe.rs rename to crates/tool_parser/tests/tool_parser_glm47_moe.rs diff --git a/tool_parser/tests/tool_parser_glm4_moe.rs b/crates/tool_parser/tests/tool_parser_glm4_moe.rs similarity index 100% rename from tool_parser/tests/tool_parser_glm4_moe.rs rename to crates/tool_parser/tests/tool_parser_glm4_moe.rs diff --git a/tool_parser/tests/tool_parser_json.rs b/crates/tool_parser/tests/tool_parser_json.rs similarity index 100% rename from tool_parser/tests/tool_parser_json.rs rename to crates/tool_parser/tests/tool_parser_json.rs diff --git a/tool_parser/tests/tool_parser_kimik2.rs b/crates/tool_parser/tests/tool_parser_kimik2.rs similarity index 100% rename from tool_parser/tests/tool_parser_kimik2.rs rename to crates/tool_parser/tests/tool_parser_kimik2.rs diff --git a/tool_parser/tests/tool_parser_llama.rs b/crates/tool_parser/tests/tool_parser_llama.rs similarity index 100% rename from tool_parser/tests/tool_parser_llama.rs rename to crates/tool_parser/tests/tool_parser_llama.rs diff --git a/tool_parser/tests/tool_parser_minimax_m2.rs b/crates/tool_parser/tests/tool_parser_minimax_m2.rs similarity index 100% rename from tool_parser/tests/tool_parser_minimax_m2.rs rename to crates/tool_parser/tests/tool_parser_minimax_m2.rs diff --git a/tool_parser/tests/tool_parser_mistral.rs b/crates/tool_parser/tests/tool_parser_mistral.rs similarity index 100% rename from tool_parser/tests/tool_parser_mistral.rs rename to crates/tool_parser/tests/tool_parser_mistral.rs diff --git a/tool_parser/tests/tool_parser_mixed_edge_cases.rs b/crates/tool_parser/tests/tool_parser_mixed_edge_cases.rs similarity index 100% rename from tool_parser/tests/tool_parser_mixed_edge_cases.rs rename to crates/tool_parser/tests/tool_parser_mixed_edge_cases.rs diff --git a/tool_parser/tests/tool_parser_partial_json.rs b/crates/tool_parser/tests/tool_parser_partial_json.rs similarity index 100% rename from tool_parser/tests/tool_parser_partial_json.rs rename to crates/tool_parser/tests/tool_parser_partial_json.rs diff --git a/tool_parser/tests/tool_parser_pythonic.rs b/crates/tool_parser/tests/tool_parser_pythonic.rs similarity index 100% rename from tool_parser/tests/tool_parser_pythonic.rs rename to crates/tool_parser/tests/tool_parser_pythonic.rs diff --git a/tool_parser/tests/tool_parser_qwen.rs b/crates/tool_parser/tests/tool_parser_qwen.rs similarity index 100% rename from tool_parser/tests/tool_parser_qwen.rs rename to crates/tool_parser/tests/tool_parser_qwen.rs diff --git a/tool_parser/tests/tool_parser_qwen_coder.rs b/crates/tool_parser/tests/tool_parser_qwen_coder.rs similarity index 100% rename from tool_parser/tests/tool_parser_qwen_coder.rs rename to crates/tool_parser/tests/tool_parser_qwen_coder.rs diff --git a/tool_parser/tests/tool_parser_step3.rs b/crates/tool_parser/tests/tool_parser_step3.rs similarity index 100% rename from tool_parser/tests/tool_parser_step3.rs rename to crates/tool_parser/tests/tool_parser_step3.rs diff --git a/wasm/Cargo.toml b/crates/wasm/Cargo.toml similarity index 100% rename from wasm/Cargo.toml rename to crates/wasm/Cargo.toml diff --git a/wasm/README.md b/crates/wasm/README.md similarity index 100% rename from wasm/README.md rename to crates/wasm/README.md diff --git a/wasm/src/config.rs b/crates/wasm/src/config.rs similarity index 100% rename from wasm/src/config.rs rename to crates/wasm/src/config.rs diff --git a/wasm/src/errors.rs b/crates/wasm/src/errors.rs similarity index 100% rename from wasm/src/errors.rs rename to crates/wasm/src/errors.rs diff --git a/wasm/src/interface/spec.wit b/crates/wasm/src/interface/spec.wit similarity index 100% rename from wasm/src/interface/spec.wit rename to crates/wasm/src/interface/spec.wit diff --git a/wasm/src/interface/storage/storage-hooks.wit b/crates/wasm/src/interface/storage/storage-hooks.wit similarity index 100% rename from wasm/src/interface/storage/storage-hooks.wit rename to crates/wasm/src/interface/storage/storage-hooks.wit diff --git a/wasm/src/lib.rs b/crates/wasm/src/lib.rs similarity index 100% rename from wasm/src/lib.rs rename to crates/wasm/src/lib.rs diff --git a/wasm/src/module.rs b/crates/wasm/src/module.rs similarity index 100% rename from wasm/src/module.rs rename to crates/wasm/src/module.rs diff --git a/wasm/src/module_manager.rs b/crates/wasm/src/module_manager.rs similarity index 100% rename from wasm/src/module_manager.rs rename to crates/wasm/src/module_manager.rs diff --git a/wasm/src/runtime.rs b/crates/wasm/src/runtime.rs similarity index 100% rename from wasm/src/runtime.rs rename to crates/wasm/src/runtime.rs diff --git a/wasm/src/spec.rs b/crates/wasm/src/spec.rs similarity index 100% rename from wasm/src/spec.rs rename to crates/wasm/src/spec.rs diff --git a/wasm/src/storage_hook.rs b/crates/wasm/src/storage_hook.rs similarity index 100% rename from wasm/src/storage_hook.rs rename to crates/wasm/src/storage_hook.rs diff --git a/wasm/src/storage_spec.rs b/crates/wasm/src/storage_spec.rs similarity index 100% rename from wasm/src/storage_spec.rs rename to crates/wasm/src/storage_spec.rs diff --git a/wasm/src/types.rs b/crates/wasm/src/types.rs similarity index 100% rename from wasm/src/types.rs rename to crates/wasm/src/types.rs diff --git a/wasm/tests/fixtures/build_fixtures.sh b/crates/wasm/tests/fixtures/build_fixtures.sh similarity index 100% rename from wasm/tests/fixtures/build_fixtures.sh rename to crates/wasm/tests/fixtures/build_fixtures.sh diff --git a/wasm/tests/storage_hook_integration.rs b/crates/wasm/tests/storage_hook_integration.rs similarity index 100% rename from wasm/tests/storage_hook_integration.rs rename to crates/wasm/tests/storage_hook_integration.rs diff --git a/workflow/Cargo.toml b/crates/workflow/Cargo.toml similarity index 100% rename from workflow/Cargo.toml rename to crates/workflow/Cargo.toml diff --git a/workflow/README.md b/crates/workflow/README.md similarity index 100% rename from workflow/README.md rename to crates/workflow/README.md diff --git a/workflow/src/definition.rs b/crates/workflow/src/definition.rs similarity index 100% rename from workflow/src/definition.rs rename to crates/workflow/src/definition.rs diff --git a/workflow/src/engine.rs b/crates/workflow/src/engine.rs similarity index 100% rename from workflow/src/engine.rs rename to crates/workflow/src/engine.rs diff --git a/workflow/src/event.rs b/crates/workflow/src/event.rs similarity index 100% rename from workflow/src/event.rs rename to crates/workflow/src/event.rs diff --git a/workflow/src/executor.rs b/crates/workflow/src/executor.rs similarity index 100% rename from workflow/src/executor.rs rename to crates/workflow/src/executor.rs diff --git a/workflow/src/lib.rs b/crates/workflow/src/lib.rs similarity index 100% rename from workflow/src/lib.rs rename to crates/workflow/src/lib.rs diff --git a/workflow/src/state.rs b/crates/workflow/src/state.rs similarity index 100% rename from workflow/src/state.rs rename to crates/workflow/src/state.rs diff --git a/workflow/src/types.rs b/crates/workflow/src/types.rs similarity index 100% rename from workflow/src/types.rs rename to crates/workflow/src/types.rs diff --git a/workflow/tests/workflow_test.rs b/crates/workflow/tests/workflow_test.rs similarity index 100% rename from workflow/tests/workflow_test.rs rename to crates/workflow/tests/workflow_test.rs diff --git a/docs/contributing/development.md b/docs/contributing/development.md index d9617a82c2..ab1b95cbb2 100644 --- a/docs/contributing/development.md +++ b/docs/contributing/development.md @@ -78,22 +78,26 @@ smg/ │ ├── benches/ # Benchmarks │ ├── tests/ # Integration tests │ └── Cargo.toml # Gateway package manifest -├── protocols/ # OpenAI protocol definitions -├── tokenizer/ # LLM tokenization -├── tool_parser/ # Tool call parsing -├── reasoning_parser/ # Reasoning extraction -├── mcp/ # MCP integration -├── auth/ # Authentication -├── mesh/ # HA mesh networking -├── wasm/ # WebAssembly plugins -├── grpc_client/ # gRPC client -├── data_connector/ # Storage backends -├── kv_index/ # KV cache indexing -├── multimodal/ # Multimodal support -├── workflow/ # Workflow automation +├── crates/ # Library crates +│ ├── auth/ # Authentication +│ ├── data_connector/ # Storage backends +│ ├── grpc_client/ # gRPC client +│ ├── kv_index/ # KV cache indexing +│ ├── mcp/ # MCP integration +│ ├── mesh/ # HA mesh networking +│ ├── multimodal/ # Multimodal support +│ ├── protocols/ # OpenAI protocol definitions +│ ├── reasoning_parser/ # Reasoning extraction +│ ├── tokenizer/ # LLM tokenization +│ ├── tool_parser/ # Tool call parsing +│ ├── wasm/ # WebAssembly plugins +│ └── workflow/ # Workflow automation ├── bindings/ │ ├── python/ # Python bindings │ └── golang/ # Go SDK +├── clients/ +│ ├── rust/ # Rust client library +│ └── openapi-gen/ # OpenAPI spec generator ├── docs/ # Documentation (MkDocs) ├── e2e_test/ # End-to-end tests ├── examples/ # Example configurations diff --git a/grpc_servicer/DEVELOPMENT.md b/grpc_servicer/DEVELOPMENT.md index a5d2d47a54..113ee061b4 100644 --- a/grpc_servicer/DEVELOPMENT.md +++ b/grpc_servicer/DEVELOPMENT.md @@ -5,7 +5,7 @@ Install both proto and servicer as editable packages: ```bash -pip install -e grpc_client/python/ +pip install -e crates/grpc_client/python/ pip install -e grpc_servicer/ ``` @@ -20,7 +20,7 @@ This is handled in `scripts/ci_install_vllm.sh`: ```bash uv pip install vllm -pip install -e grpc_client/python/ +pip install -e crates/grpc_client/python/ pip install -e grpc_servicer/ ``` @@ -39,14 +39,14 @@ Releases are triggered by version bumps in the respective `pyproject.toml` files ### Scenario 2: Changing only the proto 1. Make changes to proto files and regenerate stubs -2. Bump version in `grpc_client/python/pyproject.toml` +2. Bump version in `crates/grpc_client/python/pyproject.toml` 3. Open PR, CI tests pass 4. Merge to `main` — `release-grpc-proto.yml` fires, publishes to PyPI ### Scenario 3: Changing both proto and servicer (one PR) 1. Make all changes (proto + servicer) in a single PR -2. Bump versions in both `grpc_client/python/pyproject.toml` and `grpc_servicer/pyproject.toml` +2. Bump versions in both `crates/grpc_client/python/pyproject.toml` and `grpc_servicer/pyproject.toml` 3. Open PR, CI tests pass (both installed from source) 4. Merge to `main` — both release workflows trigger 5. `release-grpc-servicer.yml` waits for `release-grpc-proto.yml` to complete via `workflow_run` diff --git a/scripts/check_release_versions.sh b/scripts/check_release_versions.sh index 86d3f45c8e..b8a0732c8e 100755 --- a/scripts/check_release_versions.sh +++ b/scripts/check_release_versions.sh @@ -58,19 +58,19 @@ escape_version() { # Use "-" for the main gateway crate (no workspace dep entry). # --------------------------------------------------------------------------- CRATES=( - "openai-protocol|protocols|openai-protocol" - "reasoning-parser|reasoning_parser|reasoning-parser" - "tool-parser|tool_parser|tool-parser" - "wfaas|workflow|wfaas" - "llm-tokenizer|tokenizer|llm-tokenizer" - "smg-auth|auth|smg-auth" - "smg-mcp|mcp|smg-mcp" - "kv-index|kv_index|kv-index" - "data-connector|data_connector|smg-data-connector" - "llm-multimodal|multimodal|llm-multimodal" - "smg-wasm|wasm|smg-wasm" - "smg-mesh|mesh|smg-mesh" - "smg-grpc-client|grpc_client|smg-grpc-client" + "openai-protocol|crates/protocols|openai-protocol" + "reasoning-parser|crates/reasoning_parser|reasoning-parser" + "tool-parser|crates/tool_parser|tool-parser" + "wfaas|crates/workflow|wfaas" + "llm-tokenizer|crates/tokenizer|llm-tokenizer" + "smg-auth|crates/auth|smg-auth" + "smg-mcp|crates/mcp|smg-mcp" + "kv-index|crates/kv_index|kv-index" + "data-connector|crates/data_connector|smg-data-connector" + "llm-multimodal|crates/multimodal|llm-multimodal" + "smg-wasm|crates/wasm|smg-wasm" + "smg-mesh|crates/mesh|smg-mesh" + "smg-grpc-client|crates/grpc_client|smg-grpc-client" "smg|model_gateway|-" ) @@ -80,7 +80,7 @@ CRATES=( # version_file is relative to REPO_ROOT. # --------------------------------------------------------------------------- PYTHON_PACKAGES=( - "smg-grpc-proto|grpc_client/python|grpc_client/python/smg_grpc_proto/__init__.py" + "smg-grpc-proto|crates/grpc_client/python|crates/grpc_client/python/smg_grpc_proto/__init__.py" ) # --------------------------------------------------------------------------- diff --git a/scripts/ci_install_vllm.sh b/scripts/ci_install_vllm.sh index 09e8733824..f5e461913a 100755 --- a/scripts/ci_install_vllm.sh +++ b/scripts/ci_install_vllm.sh @@ -28,7 +28,7 @@ uv pip install nixl # Install gRPC packages from source (not PyPI) so PR changes are always tested echo "Installing smg-grpc-proto and smg-grpc-servicer from source..." -uv pip install -e grpc_client/python/ +uv pip install -e crates/grpc_client/python/ uv pip install -e grpc_servicer/ echo "vLLM installation complete" From 4d44546d37453c1872e472bed8f0e06011a0b8b4 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Sat, 7 Mar 2026 23:24:40 -0800 Subject: [PATCH 2/4] fix(wasm): update REPO_ROOT path in build_fixtures.sh after crate move Signed-off-by: Chang Su --- crates/wasm/tests/fixtures/build_fixtures.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/wasm/tests/fixtures/build_fixtures.sh b/crates/wasm/tests/fixtures/build_fixtures.sh index 4cd4af2878..2b4cb98808 100755 --- a/crates/wasm/tests/fixtures/build_fixtures.sh +++ b/crates/wasm/tests/fixtures/build_fixtures.sh @@ -9,8 +9,8 @@ set -e -REPO_ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -FIXTURES_DIR="$REPO_ROOT/wasm/tests/fixtures" +REPO_ROOT="$(cd "$(dirname "$0")/../../../.." && pwd)" +FIXTURES_DIR="$REPO_ROOT/crates/wasm/tests/fixtures" echo "Building WASM test fixtures..." From 963f80fa785dc0adcb2ae1d93b063e0dd4f18437 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Sun, 8 Mar 2026 00:27:52 -0800 Subject: [PATCH 3/4] fix(wasm,scripts): update WIT paths in examples and add legacy path fallback in version checker Signed-off-by: Chang Su --- examples/wasm/README.md | 2 +- examples/wasm/wasm-guest-auth/src/lib.rs | 2 +- examples/wasm/wasm-guest-logging/src/lib.rs | 2 +- examples/wasm/wasm-guest-ratelimit/src/lib.rs | 2 +- .../src/lib.rs | 2 +- .../wasm/wasm-guest-storage-hook/README.md | 2 +- .../wasm/wasm-guest-storage-hook/src/lib.rs | 2 +- scripts/check_release_versions.sh | 20 +++++++++++++++++-- 8 files changed, 25 insertions(+), 9 deletions(-) diff --git a/examples/wasm/README.md b/examples/wasm/README.md index 2ac4a50d9e..c2d29224c6 100644 --- a/examples/wasm/README.md +++ b/examples/wasm/README.md @@ -81,7 +81,7 @@ All examples require: - `wasm-tools`: `cargo install wasm-tools` - SMG running with WASM enabled (`--enable-wasm`) -**Storage hook examples** additionally require the storage hook WIT interface at `wasm/src/interface/storage/`. +**Storage hook examples** additionally require the storage hook WIT interface at `crates/wasm/src/interface/storage/`. ## Building All Examples diff --git a/examples/wasm/wasm-guest-auth/src/lib.rs b/examples/wasm/wasm-guest-auth/src/lib.rs index 75188babad..c4453cf5f3 100644 --- a/examples/wasm/wasm-guest-auth/src/lib.rs +++ b/examples/wasm/wasm-guest-auth/src/lib.rs @@ -7,7 +7,7 @@ //! - API Key authentication wit_bindgen::generate!({ - path: "../../../wasm/src/interface", + path: "../../../crates/wasm/src/interface", world: "smg", }); diff --git a/examples/wasm/wasm-guest-logging/src/lib.rs b/examples/wasm/wasm-guest-logging/src/lib.rs index cb577fc602..d61ccb334f 100644 --- a/examples/wasm/wasm-guest-logging/src/lib.rs +++ b/examples/wasm/wasm-guest-logging/src/lib.rs @@ -8,7 +8,7 @@ //! - Response status code conversion wit_bindgen::generate!({ - path: "../../../wasm/src/interface", + path: "../../../crates/wasm/src/interface", world: "smg", }); diff --git a/examples/wasm/wasm-guest-ratelimit/src/lib.rs b/examples/wasm/wasm-guest-ratelimit/src/lib.rs index f832111856..1e402e85a4 100644 --- a/examples/wasm/wasm-guest-ratelimit/src/lib.rs +++ b/examples/wasm/wasm-guest-ratelimit/src/lib.rs @@ -13,7 +13,7 @@ //! implementing rate limiting at the host/router level with shared state. wit_bindgen::generate!({ - path: "../../../wasm/src/interface", + path: "../../../crates/wasm/src/interface", world: "smg", }); diff --git a/examples/wasm/wasm-guest-storage-hook-passthrough/src/lib.rs b/examples/wasm/wasm-guest-storage-hook-passthrough/src/lib.rs index 3033c1b0b2..d7fb20e2ee 100644 --- a/examples/wasm/wasm-guest-storage-hook-passthrough/src/lib.rs +++ b/examples/wasm/wasm-guest-storage-hook-passthrough/src/lib.rs @@ -5,7 +5,7 @@ //! the hook pipeline is running. wit_bindgen::generate!({ - path: "../../../wasm/src/interface/storage", + path: "../../../crates/wasm/src/interface/storage", world: "storage-hook", }); diff --git a/examples/wasm/wasm-guest-storage-hook/README.md b/examples/wasm/wasm-guest-storage-hook/README.md index 0e94951199..6e8f92fdab 100644 --- a/examples/wasm/wasm-guest-storage-hook/README.md +++ b/examples/wasm/wasm-guest-storage-hook/README.md @@ -85,7 +85,7 @@ schema: ## WIT Interface -The storage hook world is defined in `wasm/src/interface/storage/storage-hooks.wit` and exports: +The storage hook world is defined in `crates/wasm/src/interface/storage/storage-hooks.wit` and exports: - `storage-hook-before`: Called before storage operations to provide extra columns or reject - `storage-hook-after`: Called after successful operations with the result and extra columns diff --git a/examples/wasm/wasm-guest-storage-hook/src/lib.rs b/examples/wasm/wasm-guest-storage-hook/src/lib.rs index 7639c796da..af63cd8069 100644 --- a/examples/wasm/wasm-guest-storage-hook/src/lib.rs +++ b/examples/wasm/wasm-guest-storage-hook/src/lib.rs @@ -7,7 +7,7 @@ //! - Passes through all other operations unchanged wit_bindgen::generate!({ - path: "../../../wasm/src/interface/storage", + path: "../../../crates/wasm/src/interface/storage", world: "storage-hook", }); diff --git a/scripts/check_release_versions.sh b/scripts/check_release_versions.sh index b8a0732c8e..bafabe0312 100755 --- a/scripts/check_release_versions.sh +++ b/scripts/check_release_versions.sh @@ -120,11 +120,19 @@ get_crate_version() { } # Extract version at a specific git ref (returns empty string if crate missing) +# Falls back to pre-crates-move path (e.g., crates/auth → auth) for older tags. get_crate_version_at_ref() { local path="$1" local ref="$2" local content - content=$(git show "$ref:$path/Cargo.toml" 2>/dev/null) || return 0 + content=$(git show "$ref:$path/Cargo.toml" 2>/dev/null) || { + # Fallback: try legacy path before crates/ directory move + if [[ "$path" == crates/* ]]; then + content=$(git show "$ref:${path#crates/}/Cargo.toml" 2>/dev/null) || return 0 + else + return 0 + fi + } if echo "$content" | grep -qE 'version\.workspace\s*=\s*true|version\s*=\s*\{\s*workspace\s*=\s*true'; then echo -e "${RED}ERROR: $path/Cargo.toml at $ref uses workspace versioning; this script expects explicit version strings.${NC}" >&2 exit 1 @@ -233,11 +241,19 @@ get_python_version() { } # Extract __version__ from a Python file at a specific git ref +# Falls back to pre-crates-move path (e.g., crates/X/... → X/...) for older tags. get_python_version_at_ref() { local file="$1" local ref="$2" local content - content=$(git show "$ref:$file" 2>/dev/null) || return 0 + content=$(git show "$ref:$file" 2>/dev/null) || { + # Fallback: try legacy path before crates/ directory move + if [[ "$file" == crates/* ]]; then + content=$(git show "$ref:${file#crates/}" 2>/dev/null) || return 0 + else + return 0 + fi + } echo "$content" | grep '__version__' | sed 's/.*"\(.*\)".*/\1/' } From 6e98d23d592e6ca04e8e5a045517c3bc90e6abbf Mon Sep 17 00:00:00 2001 From: Chang Su Date: Sun, 8 Mar 2026 01:07:37 -0800 Subject: [PATCH 4/4] fix: update remaining hardcoded paths for crates/ move (e2e, multimodal, pre-commit) Signed-off-by: Chang Su --- .pre-commit-config.yaml | 2 +- .../scripts/generate_vision_golden.py | 29 +++++----- .../multimodal/tests/vision_golden_tests.rs | 58 +++++++++++-------- e2e_test/responses/test_storage_hooks.py | 2 +- 4 files changed, 52 insertions(+), 39 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4ca7b457b1..ede9ad1c73 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,7 +31,7 @@ repos: src/proto/.*\.proto$| src/mesh/proto/.*\.proto$| src/tokenizer/chat_template\.rs| - multimodal/tests/fixtures/.*| + crates/multimodal/tests/fixtures/.*| target/.* )$ diff --git a/crates/multimodal/scripts/generate_vision_golden.py b/crates/multimodal/scripts/generate_vision_golden.py index 0ea960068a..a3f29a653f 100755 --- a/crates/multimodal/scripts/generate_vision_golden.py +++ b/crates/multimodal/scripts/generate_vision_golden.py @@ -6,13 +6,14 @@ Usage: # Generate all golden outputs - python multimodal/scripts/generate_vision_golden.py + python crates/multimodal/scripts/generate_vision_golden.py # Generate for specific model - python multimodal/scripts/generate_vision_golden.py --model llava + python crates/multimodal/scripts/generate_vision_golden.py --model llava # Use specific image - python multimodal/scripts/generate_vision_golden.py --image multimodal/tests/fixtures/images/square.jpg + python crates/multimodal/scripts/generate_vision_golden.py \ + --image crates/multimodal/tests/fixtures/images/square.jpg """ import argparse @@ -75,16 +76,16 @@ # Default test images DEFAULT_IMAGES = [ - "multimodal/tests/fixtures/images/square.jpg", - "multimodal/tests/fixtures/images/tall.jpg", - "multimodal/tests/fixtures/images/wide.jpg", - "multimodal/tests/fixtures/images/small.jpg", - "multimodal/tests/fixtures/images/tiny.jpg", - "multimodal/tests/fixtures/images/very_tall.jpg", - "multimodal/tests/fixtures/images/very_wide.jpg", - "multimodal/tests/fixtures/images/large.jpg", - "multimodal/tests/fixtures/images/odd_dims.jpg", - "multimodal/tests/fixtures/images/grayscale.jpg", + "crates/multimodal/tests/fixtures/images/square.jpg", + "crates/multimodal/tests/fixtures/images/tall.jpg", + "crates/multimodal/tests/fixtures/images/wide.jpg", + "crates/multimodal/tests/fixtures/images/small.jpg", + "crates/multimodal/tests/fixtures/images/tiny.jpg", + "crates/multimodal/tests/fixtures/images/very_tall.jpg", + "crates/multimodal/tests/fixtures/images/very_wide.jpg", + "crates/multimodal/tests/fixtures/images/large.jpg", + "crates/multimodal/tests/fixtures/images/odd_dims.jpg", + "crates/multimodal/tests/fixtures/images/grayscale.jpg", ] @@ -655,7 +656,7 @@ def main(): parser.add_argument( "--output-dir", "-o", - default="multimodal/tests/fixtures/golden", + default="crates/multimodal/tests/fixtures/golden", help="Output directory for golden files", ) args = parser.parse_args() diff --git a/crates/multimodal/tests/vision_golden_tests.rs b/crates/multimodal/tests/vision_golden_tests.rs index 53dc066a6b..cd6e500fee 100644 --- a/crates/multimodal/tests/vision_golden_tests.rs +++ b/crates/multimodal/tests/vision_golden_tests.rs @@ -11,7 +11,7 @@ //! //! To regenerate golden outputs: //! ```bash -//! python multimodal/scripts/generate_vision_golden.py +//! python crates/multimodal/scripts/generate_vision_golden.py //! ``` #![expect( @@ -128,13 +128,13 @@ fn load_golden_num_tokens(path: &Path) -> usize { /// * `mode` - Either "llava" (standard CLIP) or "llava_pad" (expand-to-square mode) /// * `image_name` - Name of the test image (e.g., "square", "tall", "wide", "small") fn run_golden_test(mode: &str, image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden").join(mode); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden").join(mode); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for {mode}/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py"); + eprintln!("Run: python crates/multimodal/scripts/generate_vision_golden.py"); return; } @@ -279,7 +279,7 @@ fn test_llava_pad_golden_grayscale() { #[test] fn test_llava_token_count() { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/llava"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/llava"); if !golden_dir.exists() { eprintln!("Golden test fixtures not found, skipping test"); @@ -326,13 +326,15 @@ fn load_golden_qwen2_vl_pixels(path: &Path) -> (Vec, (usize, usize)) { /// 2. num_tokens calculation is correct /// 3. Pixel values match after reshaping to patch format fn run_qwen2_vl_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/qwen2_vl"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/qwen2_vl"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for qwen2_vl/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model qwen2_vl"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model qwen2_vl" + ); return; } @@ -475,13 +477,15 @@ fn test_qwen2_vl_golden_grayscale() { /// - factor: 32 (vs 28) /// - normalization: [0.5, 0.5, 0.5] (vs CLIP) fn run_qwen3_vl_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/qwen3_vl"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/qwen3_vl"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for qwen3_vl/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model qwen3_vl"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model qwen3_vl" + ); return; } @@ -735,13 +739,15 @@ fn find_max_diff_location_5d( /// 3. num_img_tokens matches HuggingFace output /// 4. Pixel values match within tolerance fn run_phi3_vision_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/phi3_vision"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/phi3_vision"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for phi3_vision/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model phi3_vision"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model phi3_vision" + ); return; } @@ -936,13 +942,15 @@ fn load_phi4_image_sizes(path: &Path) -> Vec<(i64, i64)> { /// - Normalization: [0.5, 0.5, 0.5] (vs CLIP) /// - Default dynamic_hd: 36 (vs 16) fn run_phi4_vision_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/phi4_vision"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/phi4_vision"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for phi4_vision/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model phi4_vision"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model phi4_vision" + ); return; } @@ -1140,13 +1148,15 @@ fn load_llama4_pixels(path: &Path) -> (Vec, Vec) { /// - Normalization: [0.5, 0.5, 0.5] mean/std /// - Global tile added when num_tiles > 1 fn run_llama4_vision_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/llama4_vision"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/llama4_vision"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for llama4_vision/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model llama4_vision"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model llama4_vision" + ); return; } @@ -1323,13 +1333,15 @@ fn load_pixtral_image_sizes(path: &Path) -> Vec<(usize, usize)> { /// - Normalization: CLIP mean/std /// - No tiling - single output per image fn run_pixtral_golden_test(image_name: &str) { - let golden_dir = Path::new("multimodal/tests/fixtures/golden/pixtral"); + let golden_dir = Path::new("crates/multimodal/tests/fixtures/golden/pixtral"); let image_path = - Path::new("multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); + Path::new("crates/multimodal/tests/fixtures/images").join(format!("{image_name}.jpg")); if !golden_dir.exists() || !image_path.exists() { eprintln!("Golden test fixtures for pixtral/{image_name} not found, skipping test"); - eprintln!("Run: python multimodal/scripts/generate_vision_golden.py --model pixtral"); + eprintln!( + "Run: python crates/multimodal/scripts/generate_vision_golden.py --model pixtral" + ); return; } diff --git a/e2e_test/responses/test_storage_hooks.py b/e2e_test/responses/test_storage_hooks.py index 3671177a59..2735127998 100644 --- a/e2e_test/responses/test_storage_hooks.py +++ b/e2e_test/responses/test_storage_hooks.py @@ -19,7 +19,7 @@ logger = logging.getLogger(__name__) # Path relative to the workspace root (where the gateway binary runs) -PASSTHROUGH_HOOK_PATH = "wasm/tests/fixtures/storage_hook_passthrough.wasm" +PASSTHROUGH_HOOK_PATH = "crates/wasm/tests/fixtures/storage_hook_passthrough.wasm" @pytest.mark.gateway(extra_args=["--storage-hook-wasm-path", PASSTHROUGH_HOOK_PATH])