// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 use clap::Parser; use dynamo_kv_router::standalone_indexer::{self, IndexerConfig}; #[derive(Parser)] #[command(name = "dynamo-kv-indexer", about = "Standalone KV cache indexer")] struct Cli { /// KV cache block size for initial workers registered via --workers #[arg(long)] block_size: Option, /// HTTP server port #[arg(long, default_value_t = 8090)] port: u16, /// Number of indexer threads (1 = single-threaded KvIndexer, >1 = ThreadPoolIndexer) #[arg(long, default_value_t = 4)] threads: usize, /// Initial workers as "worker_id[:dp_rank]=zmq_address,..." (e.g. "1=tcp://host:5557,1:1=tcp://host:5558") #[arg(long)] workers: Option, /// Model name for initial workers registered via --workers #[arg(long, default_value = "default")] model_name: String, /// Tenant ID for initial workers registered via --workers #[arg(long, default_value = "default")] tenant_id: String, /// Comma-separated peer URLs for P2P recovery (e.g. "http://host1:8090,http://host2:8091") #[arg(long)] peers: Option, } #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::fmt() .with_env_filter( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), ) .init(); let cli = Cli::parse(); standalone_indexer::run_server(IndexerConfig { block_size: cli.block_size, port: cli.port, threads: cli.threads, workers: cli.workers, model_name: cli.model_name, tenant_id: cli.tenant_id, peers: cli.peers, }) .await }