lmcache-cli 0.4.5.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lmcache/__init__.py +84 -0
- lmcache/_version.py +24 -0
- lmcache/cli/__init__.py +1 -0
- lmcache/cli/commands/__init__.py +34 -0
- lmcache/cli/commands/base.py +157 -0
- lmcache/cli/commands/bench/__init__.py +557 -0
- lmcache/cli/commands/bench/engine_bench/__init__.py +1 -0
- lmcache/cli/commands/bench/engine_bench/config.py +245 -0
- lmcache/cli/commands/bench/engine_bench/interactive/__init__.py +274 -0
- lmcache/cli/commands/bench/engine_bench/interactive/config.json +10 -0
- lmcache/cli/commands/bench/engine_bench/interactive/schema.py +352 -0
- lmcache/cli/commands/bench/engine_bench/interactive/state.py +327 -0
- lmcache/cli/commands/bench/engine_bench/interactive/terminal.py +291 -0
- lmcache/cli/commands/bench/engine_bench/progress.py +145 -0
- lmcache/cli/commands/bench/engine_bench/request_sender.py +232 -0
- lmcache/cli/commands/bench/engine_bench/stats.py +275 -0
- lmcache/cli/commands/bench/engine_bench/workloads/__init__.py +153 -0
- lmcache/cli/commands/bench/engine_bench/workloads/base.py +122 -0
- lmcache/cli/commands/bench/engine_bench/workloads/long_doc_permutator.py +435 -0
- lmcache/cli/commands/bench/engine_bench/workloads/long_doc_qa.py +281 -0
- lmcache/cli/commands/bench/engine_bench/workloads/multi_round_chat.py +337 -0
- lmcache/cli/commands/bench/engine_bench/workloads/random_prefill.py +178 -0
- lmcache/cli/commands/describe.py +310 -0
- lmcache/cli/commands/kvcache.py +133 -0
- lmcache/cli/commands/mock.py +75 -0
- lmcache/cli/commands/ping.py +113 -0
- lmcache/cli/commands/query/__init__.py +155 -0
- lmcache/cli/commands/query/prompt.py +134 -0
- lmcache/cli/commands/query/request.py +357 -0
- lmcache/cli/commands/server.py +99 -0
- lmcache/cli/commands/tool/__init__.py +63 -0
- lmcache/cli/commands/tool/cache_simulator.py +113 -0
- lmcache/cli/commands/trace/__init__.py +505 -0
- lmcache/cli/commands/trace/dispatch.py +249 -0
- lmcache/cli/commands/trace/driver.py +372 -0
- lmcache/cli/commands/trace/stats.py +289 -0
- lmcache/cli/documents/lmcache.txt +11 -0
- lmcache/cli/main.py +42 -0
- lmcache/cli/metrics/__init__.py +29 -0
- lmcache/cli/metrics/formatter.py +171 -0
- lmcache/cli/metrics/handler.py +94 -0
- lmcache/cli/metrics/metrics.py +161 -0
- lmcache/cli/metrics/section.py +77 -0
- lmcache/connections.py +173 -0
- lmcache/integration/__init__.py +2 -0
- lmcache/integration/base_service_factory.py +165 -0
- lmcache/integration/request_telemetry/__init__.py +1 -0
- lmcache/integration/request_telemetry/base.py +51 -0
- lmcache/integration/request_telemetry/factory.py +113 -0
- lmcache/integration/request_telemetry/fastapi.py +109 -0
- lmcache/integration/request_telemetry/noop.py +35 -0
- lmcache/integration/sglang/__init__.py +2 -0
- lmcache/integration/sglang/sglang_adapter.py +326 -0
- lmcache/integration/sglang/utils.py +39 -0
- lmcache/integration/vllm/__init__.py +1 -0
- lmcache/integration/vllm/lmcache_connector_v1.py +213 -0
- lmcache/integration/vllm/lmcache_connector_v1_085.py +150 -0
- lmcache/integration/vllm/lmcache_mp_connector_0180.py +1072 -0
- lmcache/integration/vllm/tests/test_mm_hash_utils.py +112 -0
- lmcache/integration/vllm/utils.py +433 -0
- lmcache/integration/vllm/vllm_multi_process_adapter.py +1090 -0
- lmcache/integration/vllm/vllm_service_factory.py +339 -0
- lmcache/integration/vllm/vllm_v1_adapter.py +1713 -0
- lmcache/logging.py +107 -0
- lmcache/native_storage_ops.pyi +230 -0
- lmcache/non_cuda_equivalents.py +1424 -0
- lmcache/observability.py +1958 -0
- lmcache/storage_backend/serde/__init__.py +1 -0
- lmcache/storage_backend/serde/cachegen_basics.py +210 -0
- lmcache/storage_backend/serde/cachegen_decoder.py +207 -0
- lmcache/storage_backend/serde/cachegen_encoder.py +394 -0
- lmcache/storage_backend/serde/serde.py +75 -0
- lmcache/tools/__init__.py +1 -0
- lmcache/tools/cache_simulator/README.md +392 -0
- lmcache/tools/cache_simulator/__init__.py +1 -0
- lmcache/tools/cache_simulator/docs/simulate_example.png +0 -0
- lmcache/tools/cache_simulator/docs/sweep_example.png +0 -0
- lmcache/tools/cache_simulator/gen_bench_dataset.py +360 -0
- lmcache/tools/cache_simulator/lru_cache.py +124 -0
- lmcache/tools/cache_simulator/plot_hit_rate.py +231 -0
- lmcache/tools/cache_simulator/simulator.py +795 -0
- lmcache/tools/controller_benchmark/README.md +161 -0
- lmcache/tools/controller_benchmark/__init__.py +1 -0
- lmcache/tools/controller_benchmark/__main__.py +331 -0
- lmcache/tools/controller_benchmark/benchmark.py +660 -0
- lmcache/tools/controller_benchmark/config.py +44 -0
- lmcache/tools/controller_benchmark/constants.py +10 -0
- lmcache/tools/controller_benchmark/handlers/__init__.py +46 -0
- lmcache/tools/controller_benchmark/handlers/admit.py +52 -0
- lmcache/tools/controller_benchmark/handlers/base.py +47 -0
- lmcache/tools/controller_benchmark/handlers/deregister.py +49 -0
- lmcache/tools/controller_benchmark/handlers/evict.py +52 -0
- lmcache/tools/controller_benchmark/handlers/heartbeat.py +56 -0
- lmcache/tools/controller_benchmark/handlers/p2p_lookup.py +47 -0
- lmcache/tools/controller_benchmark/handlers/register.py +56 -0
- lmcache/tools/mp_status_viewer/__init__.py +1 -0
- lmcache/tools/mp_status_viewer/__main__.py +95 -0
- lmcache/usage_context.py +417 -0
- lmcache/utils.py +665 -0
- lmcache/v1/__init__.py +2 -0
- lmcache/v1/api_server/__init__.py +2 -0
- lmcache/v1/api_server/__main__.py +537 -0
- lmcache/v1/basic_check.py +112 -0
- lmcache/v1/cache_controller/__init__.py +9 -0
- lmcache/v1/cache_controller/commands/__init__.py +15 -0
- lmcache/v1/cache_controller/commands/base.py +35 -0
- lmcache/v1/cache_controller/commands/full_sync.py +49 -0
- lmcache/v1/cache_controller/config.py +176 -0
- lmcache/v1/cache_controller/controller_manager.py +535 -0
- lmcache/v1/cache_controller/controllers/__init__.py +11 -0
- lmcache/v1/cache_controller/controllers/full_sync_tracker.py +473 -0
- lmcache/v1/cache_controller/controllers/kv_controller.py +439 -0
- lmcache/v1/cache_controller/controllers/registration_controller.py +282 -0
- lmcache/v1/cache_controller/executor.py +463 -0
- lmcache/v1/cache_controller/frontend/static/css/style.css +201 -0
- lmcache/v1/cache_controller/frontend/static/img/logo.png +0 -0
- lmcache/v1/cache_controller/frontend/static/index.html +234 -0
- lmcache/v1/cache_controller/frontend/static/js/controller_app.js +660 -0
- lmcache/v1/cache_controller/full_sync_sender.py +475 -0
- lmcache/v1/cache_controller/locks.py +149 -0
- lmcache/v1/cache_controller/message.py +828 -0
- lmcache/v1/cache_controller/observability.py +208 -0
- lmcache/v1/cache_controller/utils.py +679 -0
- lmcache/v1/cache_controller/worker.py +665 -0
- lmcache/v1/cache_engine.py +2058 -0
- lmcache/v1/cache_interface.py +19 -0
- lmcache/v1/check/__init__.py +74 -0
- lmcache/v1/check/check_mode_gen.py +86 -0
- lmcache/v1/check/check_mode_test_l2_adapter.py +284 -0
- lmcache/v1/check/check_mode_test_remote.py +155 -0
- lmcache/v1/check/check_mode_test_storage_manager.py +142 -0
- lmcache/v1/check/utils.py +571 -0
- lmcache/v1/compute/__init__.py +2 -0
- lmcache/v1/compute/attention/__init__.py +0 -0
- lmcache/v1/compute/attention/abstract.py +39 -0
- lmcache/v1/compute/attention/flash_attn.py +129 -0
- lmcache/v1/compute/attention/flash_infer_sparse.py +284 -0
- lmcache/v1/compute/attention/metadata.py +85 -0
- lmcache/v1/compute/attention/utils.py +14 -0
- lmcache/v1/compute/blend/__init__.py +7 -0
- lmcache/v1/compute/blend/blender.py +168 -0
- lmcache/v1/compute/blend/metadata.py +34 -0
- lmcache/v1/compute/blend/utils.py +63 -0
- lmcache/v1/compute/models/__init__.py +0 -0
- lmcache/v1/compute/models/base.py +141 -0
- lmcache/v1/compute/models/llama.py +9 -0
- lmcache/v1/compute/models/qwen3.py +24 -0
- lmcache/v1/compute/models/utils.py +68 -0
- lmcache/v1/compute/positional_encoding.py +199 -0
- lmcache/v1/config.py +848 -0
- lmcache/v1/config_base.py +848 -0
- lmcache/v1/distributed/api.py +248 -0
- lmcache/v1/distributed/config.py +321 -0
- lmcache/v1/distributed/error.py +64 -0
- lmcache/v1/distributed/eviction.py +192 -0
- lmcache/v1/distributed/eviction_policy/__init__.py +21 -0
- lmcache/v1/distributed/eviction_policy/factory.py +27 -0
- lmcache/v1/distributed/eviction_policy/lru.py +244 -0
- lmcache/v1/distributed/eviction_policy/noop.py +50 -0
- lmcache/v1/distributed/internal_api.py +170 -0
- lmcache/v1/distributed/l1_manager.py +835 -0
- lmcache/v1/distributed/l2_adapters/__init__.py +67 -0
- lmcache/v1/distributed/l2_adapters/base.py +360 -0
- lmcache/v1/distributed/l2_adapters/config.py +385 -0
- lmcache/v1/distributed/l2_adapters/factory.py +205 -0
- lmcache/v1/distributed/l2_adapters/fs_l2_adapter.py +747 -0
- lmcache/v1/distributed/l2_adapters/fs_native_l2_adapter.py +167 -0
- lmcache/v1/distributed/l2_adapters/mock_l2_adapter.py +516 -0
- lmcache/v1/distributed/l2_adapters/mooncake_store_l2_adapter.py +135 -0
- lmcache/v1/distributed/l2_adapters/native_connector_l2_adapter.py +468 -0
- lmcache/v1/distributed/l2_adapters/native_plugin_l2_adapter.py +199 -0
- lmcache/v1/distributed/l2_adapters/nixl_store_dynamic_l2_adapter.py +831 -0
- lmcache/v1/distributed/l2_adapters/nixl_store_l2_adapter.py +983 -0
- lmcache/v1/distributed/l2_adapters/plugin_l2_adapter.py +210 -0
- lmcache/v1/distributed/l2_adapters/resp_l2_adapter.py +176 -0
- lmcache/v1/distributed/memory_manager.py +179 -0
- lmcache/v1/distributed/storage_controller.py +39 -0
- lmcache/v1/distributed/storage_controllers/__init__.py +43 -0
- lmcache/v1/distributed/storage_controllers/eviction_controller.py +242 -0
- lmcache/v1/distributed/storage_controllers/prefetch_controller.py +830 -0
- lmcache/v1/distributed/storage_controllers/prefetch_policy.py +193 -0
- lmcache/v1/distributed/storage_controllers/store_controller.py +452 -0
- lmcache/v1/distributed/storage_controllers/store_policy.py +213 -0
- lmcache/v1/distributed/storage_manager.py +532 -0
- lmcache/v1/event_manager.py +145 -0
- lmcache/v1/exceptions/__init__.py +16 -0
- lmcache/v1/gpu_connector/__init__.py +126 -0
- lmcache/v1/gpu_connector/gpu_connectors.py +1906 -0
- lmcache/v1/gpu_connector/gpu_ops.py +85 -0
- lmcache/v1/gpu_connector/hpu_connector.py +326 -0
- lmcache/v1/gpu_connector/mock_gpu_connector.py +67 -0
- lmcache/v1/gpu_connector/utils.py +890 -0
- lmcache/v1/gpu_connector/xpu_connectors.py +916 -0
- lmcache/v1/health_monitor/__init__.py +1 -0
- lmcache/v1/health_monitor/base.py +587 -0
- lmcache/v1/health_monitor/checks/__init__.py +1 -0
- lmcache/v1/health_monitor/checks/remote_backend_check.py +304 -0
- lmcache/v1/health_monitor/constants.py +36 -0
- lmcache/v1/internal_api_server/__init__.py +0 -0
- lmcache/v1/internal_api_server/api_registry.py +59 -0
- lmcache/v1/internal_api_server/api_server.py +120 -0
- lmcache/v1/internal_api_server/common/__init__.py +1 -0
- lmcache/v1/internal_api_server/common/env_api.py +22 -0
- lmcache/v1/internal_api_server/common/loglevel_api.py +57 -0
- lmcache/v1/internal_api_server/common/metrics_api.py +29 -0
- lmcache/v1/internal_api_server/common/periodic_thread_api.py +138 -0
- lmcache/v1/internal_api_server/common/run_script_api.py +73 -0
- lmcache/v1/internal_api_server/common/thread_api.py +63 -0
- lmcache/v1/internal_api_server/controller/__init__.py +1 -0
- lmcache/v1/internal_api_server/controller/key_stats_api.py +81 -0
- lmcache/v1/internal_api_server/controller/worker_info_api.py +136 -0
- lmcache/v1/internal_api_server/utils.py +43 -0
- lmcache/v1/internal_api_server/vllm/__init__.py +1 -0
- lmcache/v1/internal_api_server/vllm/backend_api.py +221 -0
- lmcache/v1/internal_api_server/vllm/bypass_api.py +204 -0
- lmcache/v1/internal_api_server/vllm/cache_api.py +895 -0
- lmcache/v1/internal_api_server/vllm/chunk_statistics_api.py +141 -0
- lmcache/v1/internal_api_server/vllm/conf_api.py +147 -0
- lmcache/v1/internal_api_server/vllm/freeze_api.py +172 -0
- lmcache/v1/internal_api_server/vllm/hot_cache_api.py +184 -0
- lmcache/v1/internal_api_server/vllm/inference_api.py +65 -0
- lmcache/v1/internal_api_server/vllm/load_fs_chunks_api.py +320 -0
- lmcache/v1/internal_api_server/vllm/lookup_api.py +145 -0
- lmcache/v1/internal_api_server/vllm/version_api.py +25 -0
- lmcache/v1/kv_layer_groups.py +267 -0
- lmcache/v1/lazy_memory_allocator.py +284 -0
- lmcache/v1/lookup_client/__init__.py +25 -0
- lmcache/v1/lookup_client/abstract_client.py +77 -0
- lmcache/v1/lookup_client/async_lookup_message.py +50 -0
- lmcache/v1/lookup_client/chunk_statistics_lookup_client.py +200 -0
- lmcache/v1/lookup_client/factory.py +251 -0
- lmcache/v1/lookup_client/hit_limit_lookup_client.py +86 -0
- lmcache/v1/lookup_client/lmcache_async_lookup_client.py +407 -0
- lmcache/v1/lookup_client/lmcache_lookup_client.py +285 -0
- lmcache/v1/lookup_client/lmcache_lookup_client_bypass.py +99 -0
- lmcache/v1/lookup_client/mooncake_lookup_client.py +87 -0
- lmcache/v1/lookup_client/record_strategies/__init__.py +77 -0
- lmcache/v1/lookup_client/record_strategies/base.py +327 -0
- lmcache/v1/lookup_client/record_strategies/file_hash.py +130 -0
- lmcache/v1/lookup_client/record_strategies/memory_bloom_filter.py +81 -0
- lmcache/v1/manager.py +539 -0
- lmcache/v1/memory_management.py +2619 -0
- lmcache/v1/metadata.py +114 -0
- lmcache/v1/mp_observability/AGENTS.override.md +21 -0
- lmcache/v1/mp_observability/README.md +204 -0
- lmcache/v1/mp_observability/config.py +340 -0
- lmcache/v1/mp_observability/event.py +100 -0
- lmcache/v1/mp_observability/event_bus.py +313 -0
- lmcache/v1/mp_observability/otel_init.py +145 -0
- lmcache/v1/mp_observability/subscribers/__init__.py +28 -0
- lmcache/v1/mp_observability/subscribers/logging/__init__.py +19 -0
- lmcache/v1/mp_observability/subscribers/logging/l1.py +56 -0
- lmcache/v1/mp_observability/subscribers/logging/l2.py +73 -0
- lmcache/v1/mp_observability/subscribers/logging/lookup_hash.py +209 -0
- lmcache/v1/mp_observability/subscribers/logging/mp_server.py +90 -0
- lmcache/v1/mp_observability/subscribers/logging/sm.py +59 -0
- lmcache/v1/mp_observability/subscribers/metrics/__init__.py +20 -0
- lmcache/v1/mp_observability/subscribers/metrics/l0_lifecycle.py +290 -0
- lmcache/v1/mp_observability/subscribers/metrics/l1.py +55 -0
- lmcache/v1/mp_observability/subscribers/metrics/l1_lifecycle.py +166 -0
- lmcache/v1/mp_observability/subscribers/metrics/l2.py +121 -0
- lmcache/v1/mp_observability/subscribers/metrics/sm.py +69 -0
- lmcache/v1/mp_observability/subscribers/tracing/__init__.py +12 -0
- lmcache/v1/mp_observability/subscribers/tracing/mp_server.py +333 -0
- lmcache/v1/mp_observability/subscribers/tracing/span_registry.py +148 -0
- lmcache/v1/mp_observability/trace/__init__.py +50 -0
- lmcache/v1/mp_observability/trace/codecs.py +255 -0
- lmcache/v1/mp_observability/trace/decorator.py +147 -0
- lmcache/v1/mp_observability/trace/format.py +132 -0
- lmcache/v1/mp_observability/trace/lifecycle.py +83 -0
- lmcache/v1/mp_observability/trace/reader.py +167 -0
- lmcache/v1/mp_observability/trace/recorder.py +300 -0
- lmcache/v1/multiprocess/__init__.py +0 -0
- lmcache/v1/multiprocess/affinity_pool.py +102 -0
- lmcache/v1/multiprocess/blend_server_v2.py +891 -0
- lmcache/v1/multiprocess/config.py +253 -0
- lmcache/v1/multiprocess/custom_types.py +281 -0
- lmcache/v1/multiprocess/futures.py +194 -0
- lmcache/v1/multiprocess/gpu_context.py +511 -0
- lmcache/v1/multiprocess/http_server.py +235 -0
- lmcache/v1/multiprocess/mp_runtime_plugin_launcher.py +130 -0
- lmcache/v1/multiprocess/mq.py +732 -0
- lmcache/v1/multiprocess/protocol.py +86 -0
- lmcache/v1/multiprocess/protocols/README.md +213 -0
- lmcache/v1/multiprocess/protocols/__init__.py +127 -0
- lmcache/v1/multiprocess/protocols/base.py +89 -0
- lmcache/v1/multiprocess/protocols/blend.py +109 -0
- lmcache/v1/multiprocess/protocols/blend_v2.py +57 -0
- lmcache/v1/multiprocess/protocols/controller.py +53 -0
- lmcache/v1/multiprocess/protocols/debug.py +34 -0
- lmcache/v1/multiprocess/protocols/engine.py +146 -0
- lmcache/v1/multiprocess/protocols/observability.py +39 -0
- lmcache/v1/multiprocess/server.py +1134 -0
- lmcache/v1/multiprocess/session.py +190 -0
- lmcache/v1/multiprocess/token_hasher.py +441 -0
- lmcache/v1/offload_server/__init__.py +17 -0
- lmcache/v1/offload_server/abstract_server.py +37 -0
- lmcache/v1/offload_server/message.py +30 -0
- lmcache/v1/offload_server/zmq_server.py +122 -0
- lmcache/v1/periodic_thread.py +579 -0
- lmcache/v1/pin_monitor.py +246 -0
- lmcache/v1/plugin/__init__.py +0 -0
- lmcache/v1/plugin/runtime_plugin_launcher.py +211 -0
- lmcache/v1/protocol.py +317 -0
- lmcache/v1/rpc/__init__.py +17 -0
- lmcache/v1/rpc/transport.py +105 -0
- lmcache/v1/rpc/zmq_transport.py +213 -0
- lmcache/v1/rpc_utils.py +165 -0
- lmcache/v1/server/__init__.py +2 -0
- lmcache/v1/server/__main__.py +170 -0
- lmcache/v1/server/storage_backend/__init__.py +21 -0
- lmcache/v1/server/storage_backend/abstract_backend.py +80 -0
- lmcache/v1/server/storage_backend/local_backend.py +75 -0
- lmcache/v1/server/utils.py +21 -0
- lmcache/v1/standalone/__init__.py +1 -0
- lmcache/v1/standalone/__main__.py +583 -0
- lmcache/v1/standalone/manager.py +80 -0
- lmcache/v1/standalone/standalone_service_factory.py +86 -0
- lmcache/v1/storage_backend/__init__.py +313 -0
- lmcache/v1/storage_backend/abstract_backend.py +445 -0
- lmcache/v1/storage_backend/audit_backend.py +233 -0
- lmcache/v1/storage_backend/batched_message_sender.py +222 -0
- lmcache/v1/storage_backend/cache_policy/__init__.py +45 -0
- lmcache/v1/storage_backend/cache_policy/base_policy.py +87 -0
- lmcache/v1/storage_backend/cache_policy/fifo.py +58 -0
- lmcache/v1/storage_backend/cache_policy/lfu.py +105 -0
- lmcache/v1/storage_backend/cache_policy/lru.py +81 -0
- lmcache/v1/storage_backend/cache_policy/mru.py +61 -0
- lmcache/v1/storage_backend/connector/__init__.py +443 -0
- lmcache/v1/storage_backend/connector/audit_adapter.py +77 -0
- lmcache/v1/storage_backend/connector/audit_connector.py +320 -0
- lmcache/v1/storage_backend/connector/base_connector.py +379 -0
- lmcache/v1/storage_backend/connector/blackhole_adapter.py +21 -0
- lmcache/v1/storage_backend/connector/blackhole_connector.py +37 -0
- lmcache/v1/storage_backend/connector/eic_adapter.py +31 -0
- lmcache/v1/storage_backend/connector/eic_connector.py +757 -0
- lmcache/v1/storage_backend/connector/external_adapter.py +79 -0
- lmcache/v1/storage_backend/connector/fs_adapter.py +51 -0
- lmcache/v1/storage_backend/connector/fs_connector.py +403 -0
- lmcache/v1/storage_backend/connector/infinistore_adapter.py +56 -0
- lmcache/v1/storage_backend/connector/infinistore_connector.py +177 -0
- lmcache/v1/storage_backend/connector/instrumented_connector.py +219 -0
- lmcache/v1/storage_backend/connector/lm_adapter.py +31 -0
- lmcache/v1/storage_backend/connector/lm_connector.py +176 -0
- lmcache/v1/storage_backend/connector/mock_adapter.py +57 -0
- lmcache/v1/storage_backend/connector/mock_connector.py +349 -0
- lmcache/v1/storage_backend/connector/mooncakestore_adapter.py +43 -0
- lmcache/v1/storage_backend/connector/mooncakestore_connector.py +614 -0
- lmcache/v1/storage_backend/connector/redis_adapter.py +181 -0
- lmcache/v1/storage_backend/connector/redis_connector.py +828 -0
- lmcache/v1/storage_backend/connector/s3_adapter.py +59 -0
- lmcache/v1/storage_backend/connector/s3_connector.py +699 -0
- lmcache/v1/storage_backend/connector/sagemaker_hyperpod_adapter.py +233 -0
- lmcache/v1/storage_backend/connector/sagemaker_hyperpod_connector.py +987 -0
- lmcache/v1/storage_backend/connector/valkey_adapter.py +114 -0
- lmcache/v1/storage_backend/connector/valkey_connector.py +627 -0
- lmcache/v1/storage_backend/gds_backend.py +1199 -0
- lmcache/v1/storage_backend/job_executor/__init__.py +0 -0
- lmcache/v1/storage_backend/job_executor/base_executor.py +34 -0
- lmcache/v1/storage_backend/job_executor/pq_executor.py +235 -0
- lmcache/v1/storage_backend/local_cpu_backend.py +810 -0
- lmcache/v1/storage_backend/local_disk_backend.py +656 -0
- lmcache/v1/storage_backend/maru_backend.py +734 -0
- lmcache/v1/storage_backend/naive_serde/__init__.py +50 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_basics.py +133 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_decoder.py +135 -0
- lmcache/v1/storage_backend/naive_serde/cachegen_encoder.py +83 -0
- lmcache/v1/storage_backend/naive_serde/kivi_serde.py +22 -0
- lmcache/v1/storage_backend/naive_serde/naive_serde.py +18 -0
- lmcache/v1/storage_backend/naive_serde/serde.py +37 -0
- lmcache/v1/storage_backend/native_clients/connector_client_base.py +165 -0
- lmcache/v1/storage_backend/native_clients/resp_client.py +35 -0
- lmcache/v1/storage_backend/nixl_storage_backend.py +1400 -0
- lmcache/v1/storage_backend/p2p_backend.py +788 -0
- lmcache/v1/storage_backend/path_sharder.py +117 -0
- lmcache/v1/storage_backend/pd_backend.py +646 -0
- lmcache/v1/storage_backend/plugins/dax_backend.py +1443 -0
- lmcache/v1/storage_backend/plugins/rust_raw_block_backend.py +1361 -0
- lmcache/v1/storage_backend/remote_backend.py +624 -0
- lmcache/v1/storage_backend/resp_client.py +227 -0
- lmcache/v1/storage_backend/storage_backend_listener.py +19 -0
- lmcache/v1/storage_backend/storage_manager.py +1352 -0
- lmcache/v1/system_detection.py +110 -0
- lmcache/v1/token_database.py +551 -0
- lmcache/v1/transfer_channel/__init__.py +83 -0
- lmcache/v1/transfer_channel/abstract.py +285 -0
- lmcache/v1/transfer_channel/mock_memory_channel.py +156 -0
- lmcache/v1/transfer_channel/nixl_channel.py +639 -0
- lmcache/v1/transfer_channel/py_socket_channel.py +260 -0
- lmcache/v1/transfer_channel/transfer_utils.py +63 -0
- lmcache/v1/utils/__init__.py +1 -0
- lmcache/v1/utils/bloom_filter.py +109 -0
- lmcache/v1/utils/cache_utils.py +125 -0
- lmcache_cli-0.4.5.dev0.dist-info/METADATA +185 -0
- lmcache_cli-0.4.5.dev0.dist-info/RECORD +399 -0
- lmcache_cli-0.4.5.dev0.dist-info/WHEEL +5 -0
- lmcache_cli-0.4.5.dev0.dist-info/entry_points.txt +2 -0
- lmcache_cli-0.4.5.dev0.dist-info/licenses/LICENSE +201 -0
- lmcache_cli-0.4.5.dev0.dist-info/top_level.txt +1 -0
lmcache/logging.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Standard
|
|
3
|
+
from logging import Logger
|
|
4
|
+
import logging
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def build_format(color):
|
|
9
|
+
reset = "\x1b[0m"
|
|
10
|
+
underline = "\x1b[3m"
|
|
11
|
+
return (
|
|
12
|
+
f"{color}[%(asctime)s] LMCache %(levelname)s:{reset} %(message)s "
|
|
13
|
+
f"{underline}(%(filename)s:%(lineno)d:%(name)s){reset}"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CustomFormatter(logging.Formatter):
|
|
18
|
+
grey = "\x1b[1m"
|
|
19
|
+
green = "\x1b[32;20m"
|
|
20
|
+
yellow = "\x1b[33;20m"
|
|
21
|
+
red = "\x1b[31;20m"
|
|
22
|
+
bold_red = "\x1b[31;1m"
|
|
23
|
+
reset = "\x1b[0m"
|
|
24
|
+
|
|
25
|
+
FORMATS = {
|
|
26
|
+
logging.DEBUG: build_format(grey),
|
|
27
|
+
logging.INFO: build_format(green),
|
|
28
|
+
logging.WARNING: build_format(yellow),
|
|
29
|
+
logging.ERROR: build_format(red),
|
|
30
|
+
logging.CRITICAL: build_format(bold_red),
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
def format(self, record):
|
|
34
|
+
log_fmt = self.FORMATS.get(record.levelno)
|
|
35
|
+
formatter = logging.Formatter(log_fmt)
|
|
36
|
+
return formatter.format(record)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def get_log_level() -> int:
|
|
40
|
+
"""
|
|
41
|
+
Try to read LMCACHE_LOG_LEVEL from environment variables.
|
|
42
|
+
Could be:
|
|
43
|
+
- DEBUG
|
|
44
|
+
- INFO
|
|
45
|
+
- WARNING
|
|
46
|
+
- ERROR
|
|
47
|
+
- CRITICAL
|
|
48
|
+
|
|
49
|
+
If not found, defaults to INFO.
|
|
50
|
+
"""
|
|
51
|
+
log_level = os.getenv("LMCACHE_LOG_LEVEL", "INFO").upper()
|
|
52
|
+
return getattr(logging, log_level, logging.INFO)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def init_logger(name: str) -> Logger:
|
|
56
|
+
# Get the logger
|
|
57
|
+
logger = logging.getLogger(name)
|
|
58
|
+
|
|
59
|
+
# Clear any existing handlers
|
|
60
|
+
logger.handlers.clear()
|
|
61
|
+
|
|
62
|
+
# Prevent propagation to parent loggers
|
|
63
|
+
logger.propagate = False
|
|
64
|
+
|
|
65
|
+
# Add our custom handler
|
|
66
|
+
log_level = get_log_level()
|
|
67
|
+
ch = logging.StreamHandler()
|
|
68
|
+
ch.setLevel(log_level)
|
|
69
|
+
ch.setFormatter(CustomFormatter())
|
|
70
|
+
logger.addHandler(ch)
|
|
71
|
+
|
|
72
|
+
# OTel log forwarding (no-op if opentelemetry is not installed or
|
|
73
|
+
# no LoggerProvider has been configured at startup)
|
|
74
|
+
try:
|
|
75
|
+
# Third Party
|
|
76
|
+
from opentelemetry.sdk._logs import LoggingHandler
|
|
77
|
+
|
|
78
|
+
logger.addHandler(LoggingHandler(level=log_level))
|
|
79
|
+
except ImportError:
|
|
80
|
+
pass
|
|
81
|
+
|
|
82
|
+
logger.setLevel(log_level)
|
|
83
|
+
return logger
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if __name__ == "__main__":
|
|
87
|
+
logger = init_logger(__name__)
|
|
88
|
+
logger.debug("Debug message")
|
|
89
|
+
logger.info("Info message")
|
|
90
|
+
logger.warning("Warning message")
|
|
91
|
+
logger.error("Error message")
|
|
92
|
+
logger.critical("Critical message")
|
|
93
|
+
|
|
94
|
+
# import logging
|
|
95
|
+
# from logging import Logger
|
|
96
|
+
#
|
|
97
|
+
# logging.basicConfig(
|
|
98
|
+
# format="\033[33m%(levelname)s LMCache: \033[0m%(message)s "
|
|
99
|
+
# "[%(asctime)s] -- %(pathname)s:%(lineno)d",
|
|
100
|
+
# level=logging.INFO,
|
|
101
|
+
# )
|
|
102
|
+
#
|
|
103
|
+
#
|
|
104
|
+
# def init_logger(name: str) -> Logger:
|
|
105
|
+
# logger = logging.getLogger(name)
|
|
106
|
+
# logger.setLevel(logging.DEBUG)
|
|
107
|
+
# return logger
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Stub for the native_storage_ops C++ extension (implemented in csrc/storage_manager/).
|
|
3
|
+
|
|
4
|
+
"""Native storage operations for LMCache."""
|
|
5
|
+
|
|
6
|
+
# Standard
|
|
7
|
+
from typing import Any, Set, overload
|
|
8
|
+
|
|
9
|
+
class TTLLock:
|
|
10
|
+
"""
|
|
11
|
+
A thread-safe lock with TTL (Time-To-Live) support.
|
|
12
|
+
|
|
13
|
+
The lock maintains a counter that can be incremented (lock) and decremented
|
|
14
|
+
(unlock). If the TTL expires, the lock is considered unlocked regardless
|
|
15
|
+
of the counter value.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, ttl_second: int = 300) -> None:
|
|
19
|
+
"""
|
|
20
|
+
Construct a TTLLock with the specified TTL duration in seconds.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
ttl_second: TTL duration in seconds. Default is 300.
|
|
24
|
+
"""
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
def lock(self) -> None:
|
|
28
|
+
"""
|
|
29
|
+
Increment the lock counter by 1 and update the TTL.
|
|
30
|
+
If the previous TTL has expired, reset counter to 1.
|
|
31
|
+
"""
|
|
32
|
+
...
|
|
33
|
+
|
|
34
|
+
def unlock(self) -> None:
|
|
35
|
+
"""Decrement the lock counter by 1 (minimum 0)."""
|
|
36
|
+
...
|
|
37
|
+
|
|
38
|
+
def is_locked(self) -> bool:
|
|
39
|
+
"""
|
|
40
|
+
Check if the lock is held (counter > 0 and TTL not expired).
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
True if the lock is held, False otherwise.
|
|
44
|
+
"""
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
def reset(self) -> None:
|
|
48
|
+
"""Reset the lock to initial state (counter = 0, TTL expired)."""
|
|
49
|
+
...
|
|
50
|
+
|
|
51
|
+
class Bitmap:
|
|
52
|
+
"""
|
|
53
|
+
A bitmap for tracking the state of L2 storage operation results.
|
|
54
|
+
|
|
55
|
+
Each bit represents the success or failure of a key.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
@overload
|
|
59
|
+
def __init__(self, size: int) -> None:
|
|
60
|
+
"""
|
|
61
|
+
Construct a Bitmap with the specified number of bits.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
size: The number of bits in the bitmap.
|
|
65
|
+
"""
|
|
66
|
+
...
|
|
67
|
+
@overload
|
|
68
|
+
def __init__(self, size: int, prefix_bits: int) -> None:
|
|
69
|
+
"""
|
|
70
|
+
Construct a Bitmap with the specified number of bits and prefix.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
size: The number of bits in the bitmap.
|
|
74
|
+
prefix_bits: The first N bits are set to 1.
|
|
75
|
+
"""
|
|
76
|
+
...
|
|
77
|
+
|
|
78
|
+
def set(self, index: int) -> None:
|
|
79
|
+
"""Set the bit at the specified index to 1."""
|
|
80
|
+
...
|
|
81
|
+
|
|
82
|
+
def clear(self, index: int) -> None:
|
|
83
|
+
"""Clear the bit at the specified index to 0."""
|
|
84
|
+
...
|
|
85
|
+
|
|
86
|
+
def test(self, index: int) -> bool:
|
|
87
|
+
"""
|
|
88
|
+
Test the bit at the specified index.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
True if the bit is set to 1, False otherwise.
|
|
92
|
+
"""
|
|
93
|
+
...
|
|
94
|
+
|
|
95
|
+
def popcount(self) -> int:
|
|
96
|
+
"""Return the number of bits set to 1."""
|
|
97
|
+
...
|
|
98
|
+
|
|
99
|
+
def count_leading_zeros(self) -> int:
|
|
100
|
+
"""Return the number of leading zeros."""
|
|
101
|
+
...
|
|
102
|
+
|
|
103
|
+
def count_leading_ones(self) -> int:
|
|
104
|
+
"""Return the number of leading ones."""
|
|
105
|
+
...
|
|
106
|
+
|
|
107
|
+
def __and__(self, other: Bitmap) -> Bitmap:
|
|
108
|
+
"""
|
|
109
|
+
Bitwise AND with another bitmap.
|
|
110
|
+
If sizes differ, the result is truncated to the smaller size.
|
|
111
|
+
"""
|
|
112
|
+
...
|
|
113
|
+
|
|
114
|
+
def __invert__(self) -> Bitmap:
|
|
115
|
+
"""Bitwise NOT (flip all bits)."""
|
|
116
|
+
...
|
|
117
|
+
|
|
118
|
+
def __or__(self, other: Bitmap) -> Bitmap:
|
|
119
|
+
"""
|
|
120
|
+
Bitwise OR with another bitmap.
|
|
121
|
+
If sizes differ, the result is truncated to the smaller size.
|
|
122
|
+
"""
|
|
123
|
+
...
|
|
124
|
+
|
|
125
|
+
def get_indices_list(self) -> list[int]:
|
|
126
|
+
"""Return a list of indices where the bit is set to 1, in ascending order."""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
def get_indices_set(self) -> Set[int]:
|
|
130
|
+
"""Return a set of indices where the bit is set to 1."""
|
|
131
|
+
...
|
|
132
|
+
|
|
133
|
+
def gather(self, items: list[Any]) -> list[Any]:
|
|
134
|
+
"""
|
|
135
|
+
Return elements from items at indices where the bit is set to 1.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
items: A list of objects. Length should match the bitmap size.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
A list of objects from items at positions where the bitmap bit is 1.
|
|
142
|
+
"""
|
|
143
|
+
...
|
|
144
|
+
|
|
145
|
+
def __repr__(self) -> str:
|
|
146
|
+
"""String representation: '1' for set bits, '0' for clear bits."""
|
|
147
|
+
...
|
|
148
|
+
|
|
149
|
+
class ParallelPatternMatcher:
|
|
150
|
+
"""
|
|
151
|
+
Pattern matcher for integer vectors.
|
|
152
|
+
|
|
153
|
+
This class performs pattern matching on a vector of integers.
|
|
154
|
+
It finds all positions where a given pattern occurs in the input data.
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
def __init__(self, pattern: list[int]) -> None:
|
|
158
|
+
"""
|
|
159
|
+
Construct a ParallelPatternMatcher with the specified pattern.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
pattern: The pattern to search for. Must not be empty.
|
|
163
|
+
|
|
164
|
+
Raises:
|
|
165
|
+
ValueError: If pattern is empty.
|
|
166
|
+
"""
|
|
167
|
+
...
|
|
168
|
+
|
|
169
|
+
def match(self, data: list[int]) -> list[int]:
|
|
170
|
+
"""
|
|
171
|
+
Match the pattern in the given data.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
data: The data to search in.
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
A sorted list of positions where the pattern starts.
|
|
178
|
+
Returns an empty list if no matches are found.
|
|
179
|
+
"""
|
|
180
|
+
...
|
|
181
|
+
|
|
182
|
+
class RangePatternMatcher:
|
|
183
|
+
"""
|
|
184
|
+
Range pattern matcher for integer vectors.
|
|
185
|
+
|
|
186
|
+
This class performs range pattern matching on a vector of integers.
|
|
187
|
+
It finds ranges that start with a start pattern and end with an end pattern.
|
|
188
|
+
When multiple end patterns exist after a start pattern, it matches the first
|
|
189
|
+
one (minimal range).
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
def __init__(self, start_pattern: list[int], end_pattern: list[int]) -> None:
|
|
193
|
+
"""
|
|
194
|
+
Construct a RangePatternMatcher with start and end patterns.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
start_pattern: The pattern marking the start of a range.
|
|
198
|
+
end_pattern: The pattern marking the end of a range.
|
|
199
|
+
|
|
200
|
+
Raises:
|
|
201
|
+
ValueError: If either pattern is empty or has more than 5 elements.
|
|
202
|
+
"""
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
def match(self, data: list[int]) -> list[tuple[int, int]]:
|
|
206
|
+
"""
|
|
207
|
+
Match ranges in the given data.
|
|
208
|
+
|
|
209
|
+
Finds all ranges that start with the start pattern and end with the end
|
|
210
|
+
pattern. When multiple end patterns exist after a start pattern, matches
|
|
211
|
+
the first one (minimal range).
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
data: The data to search in.
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
A list of (start_pos, end_pos) tuples where:
|
|
218
|
+
- start_pos is the beginning index of the start pattern
|
|
219
|
+
- end_pos is the exclusive index after the end pattern
|
|
220
|
+
Returns an empty list if no ranges are found.
|
|
221
|
+
|
|
222
|
+
Example:
|
|
223
|
+
>>> start = [1, 2]
|
|
224
|
+
>>> end = [3, 4]
|
|
225
|
+
>>> matcher = RangePatternMatcher(start, end)
|
|
226
|
+
>>> data = [1, 2, 0, 3, 4, 0, 3, 4, 1, 2, 0, 0, 3, 4]
|
|
227
|
+
>>> matcher.match(data)
|
|
228
|
+
[(0, 5), (8, 14)]
|
|
229
|
+
"""
|
|
230
|
+
...
|