Commit Graph

66 Commits

Author SHA1 Message Date
Yan Ru Pei f08729ae15
feat: python bindings for the entire KvPushRouter + per-request router configs (#2658) 2025-08-25 22:27:10 +00:00
nachiketb-nvidia 3036e60b1e
feat: add gpt oss reasoning parser through harmony (#2656)
- couple of refactors
- added a new dependency, openai-harmony
- implemented the gpt oss parser
2025-08-25 17:13:38 +00:00
Ziqi Fan b658ba6139
feat: enable dynamo metrics on KVBM (#2626) 2025-08-22 19:58:05 +00:00
Graham King 49958435eb
chore: Remove async-openai-macros (#2554) 2025-08-20 11:33:10 -07:00
Yan Ru Pei d319abf3a3
feat: upload/download rust structs directly through NATs object store (#2540) 2025-08-20 17:17:21 +00:00
Dmitry Tokarev 9a02188531
chore: Bumped Dynamo version to 0.4.1 (#2545) 2025-08-19 21:55:37 -04:00
Ryan Olson 07cfc3a11b
feat: kvbm + connector (#2258)
Signed-off-by: Ryan Olson <rolson@nvidia.com>
Co-authored-by: Olga Andreeva <oandreeva@nvidia.com>
Co-authored-by: Ziqi Fan <ziqif@nvidia.com>
Co-authored-by: John Thompson <jothomson@nvidia.com>
Co-authored-by: Richard Huo <rihuo@nvidia.com>
Co-authored-by: Zicheng Ma <zichengm@nvidia.com>
2025-08-19 12:36:53 -07:00
Ryan Olson a33033b7f6
feat: task scheduler (#2406)
Signed-off-by: Ryan Olson <ryanolson@users.noreply.github.com>
2025-08-19 12:35:31 -06:00
Graham King a4bbe49228
feat(http): TLS support (#2492) 2025-08-18 16:06:29 -04:00
Keiven C 0444217339
fix: replace metrics callback with background scraping to prevent tim… (#2480)
Co-authored-by: Keiven Chang <keivenchang@users.noreply.github.com>
2025-08-18 12:38:50 -07:00
Dan Aloni c12c25787f
fix: upgrade cudarc to 0.17.1 (#2341)
Signed-off-by: Dan Aloni <dan.aloni@vastdata.com>
Co-authored-by: Tushar Sharma <tusharma@nvidia.com>
2025-08-13 15:45:08 -04:00
Yan Ru Pei 5166a3dd44
feat: Router replicas with state-sharing (#2264) 2025-08-07 22:57:57 +00:00
Neelay Shah bd4fe1a7d1
feat: cross process instrumentation (#2243)
Signed-off-by: Neelay Shah <neelays@nvidia.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Olga Andreeva <124622579+oandreeva-nv@users.noreply.github.com>
2025-08-07 15:32:48 +00:00
Graham King dbe48a1d2b
chore: Bump mistral.rs, llama.cpp and tokenizers deps (#2338) 2025-08-06 16:23:54 -04:00
Dan Aloni b2aa504b47
fix: upgrade axum to 0.8 and etcd-client to 0.16 (#2317)
Signed-off-by: Dan Aloni <dan.aloni@vastdata.com>
2025-08-06 18:25:49 +00:00
Anant Sharma 625578c3bb
chore: update nixl version to 0.4.1 (#2221) 2025-07-31 17:46:21 -04:00
Dmitry Tokarev 4c90b1b924
chore: Version bump to 0.4.0 (#2179) 2025-07-30 02:07:31 +00:00
Paul Hendricks 66b7d2c75d
fix: updates versions and adds ahashmap to BPE (#2072) 2025-07-23 20:27:18 +00:00
Graham King 182d3b5dc7
chore(bindings): Remove mistralrs / llama.cpp (#1970) 2025-07-16 16:12:40 -04:00
Graham King aba60996f2
perf(router): Remove lock from router hot path (#1963) 2025-07-16 12:26:32 -04:00
Anant Sharma d975761b8b
chore: update nixl to 0.4.0 release (#1860) (#1886) 2025-07-11 12:45:44 -04:00
Tushar Sharma 1704b126f3
build: Revert "chore: update nixl to 0.4.0 release" (#1880) 2025-07-10 23:30:28 +00:00
Anant Sharma 5fa4cddab9
chore: update nixl to 0.4.0 release (#1860) 2025-07-10 17:08:34 -04:00
ZichengMa ece76a6201
feat: Build DistributedRuntime-level HTTP server with /health /metrics (#1656) 2025-07-08 22:49:28 +00:00
Graham King 2bf27924a1
feat(python): Python bindings for the Dynamo CLI tools (#1799) 2025-07-08 21:40:36 +00:00
Anant Sharma c4935b3497
chore: update versions for 0.3.2 release (#1793) 2025-07-07 17:21:02 -04:00
Anant Sharma a9241b61f0
chore: update nixl to latest 0.3.1 commit (#1762) 2025-07-03 15:31:47 -07:00
Graham King 4ab476174a
chore(engines): Upgrade mistralrs to 0.6.0 (#1767) 2025-07-03 12:45:58 -07:00
Graham King 92f06b0e7f
chore(dynamo-run): Refactor to library (#1687)
Move much of what was in the `dynamo-run` crate into `dynamo-llm` so that everyone can use it.

Example usage:

1. Create a `LocalModel`:

```
    let local_model = LocalModelBuilder::default()
	.model_path("Qwen/Qwen3-0.6B")
	.http_port(8080)
	.build().await?;
```

2. Make an engine:

```
    let engine_config = EngineConfig::StaticFull {
	engine: dynamo_engine_mistralrs::make_engine(&local_model).await?,
	model: Box::new(local_model),
    };
```

3. Connect it to an input and run it

```
    dynamo_llm::entrypoint::input::run_input(Input::Http, runtime, engine_config).await?;
```

For https://github.com/ai-dynamo/dynamo/issues/1647

Code Rabbit summary, thanks:
  * Introduced a flexible builder pattern for local model configuration, allowing advanced customization and easier initialization.
  * Added new input modes and unified input handling, supporting interactive chat, HTTP server, batch file, and distributed endpoint modes.
  * Centralized engine configuration and routing, enabling more extensible and maintainable engine management.
  * Simplified and modularized the codebase by moving input and engine logic into dedicated modules.
  * Replaced direct model construction with an asynchronous builder for improved clarity and extensibility.
  * Streamlined configuration and validation for flags and router settings.
  * Added validation to prevent incompatible input and output combinations in endpoint and dynamic modes.
2025-06-30 21:06:24 +00:00
Paul Hendricks 82eae1fdf5
refactor: Upgrade async-openai (#1693) 2025-06-30 13:35:10 -04:00
jthomson04 250ed7334b
fix: Fix NIXL 0.3.1 build (#1561) 2025-06-17 14:30:10 -07:00
Yan Ru Pei 13a99b7f76
feat: Standalone Router (#1409)
Signed-off-by: PeaBrane <yanrpei@gmail.com>
Signed-off-by: Yan Ru Pei <yanrpei@gmail.com>
Signed-off-by: jain-ria <riajain@NVIDIA.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: jain-ria <riajain@NVIDIA.com>
2025-06-14 19:02:31 +00:00
Anant Sharma 99e67e607a
chore: update dynamo and nixl versions for 0.3.1 (#1517) 2025-06-13 21:13:43 +00:00
Anant Sharma 9d9a1d9b74
chore: update dynamo and nixl versions for 0.3.0 (#1240) 2025-05-29 17:30:17 +00:00
Alec 0df6d462d7
feat: add KV Event Publishing to vLLM v1 (#1181) 2025-05-29 07:56:49 -07:00
Graham King 0a1d1fbe3d
feat(dynamo-llm): Remove bring-your-own-engine (#1216)
It was removed from the docs in 0.2.1 and replaced with writing a [standalone Python engine](https://github.com/ai-dynamo/dynamo/blob/main/docs/guides/dynamo_run.md#writing-your-own-engine-in-python).

Also remove the associated `dynamo-run` feature `python`.

Releasing this in 0.3.0 will resolve #784 and #1109.
2025-05-28 18:52:27 +00:00
Ryan Olson 31ff23704b
feat: adding arena allocator for storage objects (#1178) 2025-05-23 08:41:42 -06:00
jthomson04 74221fd716
feat: Add support for SSD offloading in block manager (#1115) 2025-05-19 15:35:00 -07:00
Jacky 437cae0ad0
feat: KV Block Manager Python bindings (#1022) 2025-05-19 12:33:41 -04:00
Ryan Olson 4564a38711
feat: kv block manager (#965) 2025-05-09 21:05:24 +00:00
Harrison Saturley-Hall e9cb035ac7
chore: bump versions and NIXL dependencies for 0.2.1 (#1012) 2025-05-09 15:35:01 +00:00
wxsm b2e401bcae
feat: allow adding auth to etcd (#980)
Allow both password or TLS auth, if none of these is provided fallback to no auth

Closes #657
2025-05-09 08:36:41 -04:00
Graham King ceaeba3e38
feat: Qwen3, Gemma3 and Llama4 support (#1002)
. New mistralrs and llamacpp version
. mistralrs: Handle Gemma 3 and Llama 4 as vision models
. Update the dynamo-run docs to use Qwen 3
. Our pre-processor now supports Llama 4's newer multi-modal `config.json`
. Upgrade minijinja to handle Qwen 3's prompt template

For Llama 4 we'll need to limit the max seq len. vllm says:
> To serve at least one request with the models's max seq len (10485760), (240.00 GiB KV cache is needed,...

I was able to run Llama 4 with llamacpp and a quantized GGUF, with Dynamo doing the pre-processing.
2025-05-08 18:18:40 -04:00
Graham King 99cd9d85a9
feat: dynamo-run <-> python interop (#934)
Adding this to a Python script makes it register on the network so that `dynamo-run` can discover it and send it requests:
```
from dynamo.llm import register_llm

MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
await register_llm(endpoint, MODEL, 3)
```

Full vllm example, with pre-processing in dynamo:
- `dynamo-run in=text out=dyn://dynamo.backend.generate`
- `cd lib/bindings/python/examples/hello_world`
- `python server_vllm.py`

This builds on top of the work to move pre-processor to ingress side. It means we can decouple Rust and Python using NATS as the bus.

The `register_llm` call does this:

- Download the model from HF if necessary
- Load the model deployment card from the HF folder or extract from GGUF
- Push the tokenizer config etc into NATS object store so ingress can access it from a different machine
- Publish the model deployment card to ETCD
2025-05-05 20:49:19 -04:00
Graham King 2d2a102727
chore(dynamo-llm): Move the pre-processor to ingress side (#903)
Part of https://github.com/ai-dynamo/dynamo/issues/743
2025-05-01 19:55:10 +00:00
Graham King a1a10365a7
chore: Split PushRouter from Client (#817)
In a distributed system we don't know if the remote workers need pre-processing done ingress-side or not. Previously Client required us to decide this before discovering the remote endpoints, which was fine because pre-processing was worker-side.

As part of moving pre-processing back to ingress-side we need to split this into two steps:
- Client discovers the endpoints, and (later PR) will fetch their Model Deployment Card.
- PushRouter will use the Model Deployment Card to decide if they need pre-processing or not, which affects the types of the generic parameters.

Part of #743
2025-04-29 14:39:56 +00:00
Harrison Saturley-Hall 0715d4691f
chore: bump NIXL version and package versions (#836)
Signed-off-by: Harrison Saturley-Hall <454891+saturley-hall@users.noreply.github.com>
2025-04-25 19:24:38 -04:00
Graham King d346782c7c
chore: Publish Model Deployment Card to NATS (#799)
This will allow an ingress-side pre-processor to see it without needing a model checkout.

Currently pre-processing is done in the worker, which has access to the model deployment card ("MDC") files (`config.json`, `tokenizer.json` and `tokenizer_config.json`) locally. We want to move the pre-processor to the ingress side to support KV routing. That requires ingress side (i.e the HTTP server), on a different machine than the worker to be able to see those three files.

To support that this PR makes the worker upload the contents of those files to the NATS object store, and publishes the MDC with those NATS urls to the key-value store. 

The key-value store has an interface so any store (nats, etcd, redis, etc) can be supported. Implementations for memory and NATS are provided.

Fetching the MDC from the store, doing pre-processing ingress side, and publishing a card backed by a GGUF, are all for a later commit.

Part of #743
2025-04-25 08:52:59 -04:00
Anant Sharma fa7ee14c2a chore: update versions to 0.1.1 (#552) 2025-04-09 09:50:30 -04:00
Ryan Olson 84985d3f1d refactor: migrate engines to standalone crates (#453)
Moved all of `lib/llm/src/engines` to their own crates as e.g. `lib/engines/mistralrs`. This will allow publishing of the `dynamo-llm` crate as it won't have any github dependencies.

The only engines in dynamo-llm will be the demo `echo` ones.

Co-authored-by: Graham King <grahamk@nvidia.com>
2025-04-03 21:53:54 +00:00