A local-first private AI assistant for everyday use. Runs on-device models with encrypted P2P sync, and supports sharing chats publicly on ATProto.
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: Integrate DSRs for automatic SYSTEM prompt optimization (#45) (#61)

* feat: add zero-shot Modelfile prompt optimization using DSRs and synthetic data generation

* feat: add LLM-based evaluation judge and fix Modelfile system prompt persistence in tilekit

* feat: optimize for cost with heuristic metric and improve early prompt validation

* fix: address Modelfile parsing resilience and CLI error handling feedback

* fix: fail fast on malformed training data files to prevent silent fallback

* feat: add correctness signal to optimization metric via ground-truth similarity

* fix: upgrade Modelfile persistence to triple-quotes and implement fail-fast generation

* refactor: move optimize module to tilekit, consolidate add_system to allow overwrite, add metric tests

* fix: CI lint, simplify SYSTEM format, return Modelfile from optimize, add tests

* fix(cli): propagate errors in Optimize command instead of swallowing them

The Commands::Optimize branch was logging errors but returning Ok(()),
causing the process to exit with code 0 even on failure. Now uses ? to
propagate both commands::optimize errors and std::fs::write errors,
ensuring the process exits non-zero on failure.

authored by

Dex Devlon and committed by
GitHub
11a9a7fa 3d50a4e9

+2461 -31
+2030 -23
Cargo.lock
··· 9 9 checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 10 10 11 11 [[package]] 12 + name = "ahash" 13 + version = "0.8.12" 14 + source = "registry+https://github.com/rust-lang/crates.io-index" 15 + checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 16 + dependencies = [ 17 + "cfg-if", 18 + "const-random", 19 + "getrandom 0.3.4", 20 + "once_cell", 21 + "version_check", 22 + "zerocopy", 23 + ] 24 + 25 + [[package]] 26 + name = "aho-corasick" 27 + version = "1.1.4" 28 + source = "registry+https://github.com/rust-lang/crates.io-index" 29 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 30 + dependencies = [ 31 + "memchr", 32 + ] 33 + 34 + [[package]] 35 + name = "alloc-no-stdlib" 36 + version = "2.0.4" 37 + source = "registry+https://github.com/rust-lang/crates.io-index" 38 + checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 39 + 40 + [[package]] 41 + name = "alloc-stdlib" 42 + version = "0.2.2" 43 + source = "registry+https://github.com/rust-lang/crates.io-index" 44 + checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 45 + dependencies = [ 46 + "alloc-no-stdlib", 47 + ] 48 + 49 + [[package]] 50 + name = "allocator-api2" 51 + version = "0.2.21" 52 + source = "registry+https://github.com/rust-lang/crates.io-index" 53 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 54 + 55 + [[package]] 56 + name = "android_system_properties" 57 + version = "0.1.5" 58 + source = "registry+https://github.com/rust-lang/crates.io-index" 59 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 60 + dependencies = [ 61 + "libc", 62 + ] 63 + 64 + [[package]] 12 65 name = "anstream" 13 66 version = "0.6.21" 14 67 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 65 118 checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 66 119 67 120 [[package]] 121 + name = "arc-swap" 122 + version = "1.8.0" 123 + source = "registry+https://github.com/rust-lang/crates.io-index" 124 + checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" 125 + dependencies = [ 126 + "rustversion", 127 + ] 128 + 129 + [[package]] 130 + name = "arrow" 131 + version = "56.2.0" 132 + source = "registry+https://github.com/rust-lang/crates.io-index" 133 + checksum = "6e833808ff2d94ed40d9379848a950d995043c7fb3e81a30b383f4c6033821cc" 134 + dependencies = [ 135 + "arrow-arith", 136 + "arrow-array", 137 + "arrow-buffer", 138 + "arrow-cast", 139 + "arrow-csv", 140 + "arrow-data", 141 + "arrow-ipc", 142 + "arrow-json", 143 + "arrow-ord", 144 + "arrow-row", 145 + "arrow-schema", 146 + "arrow-select", 147 + "arrow-string", 148 + ] 149 + 150 + [[package]] 151 + name = "arrow-arith" 152 + version = "56.2.0" 153 + source = "registry+https://github.com/rust-lang/crates.io-index" 154 + checksum = "ad08897b81588f60ba983e3ca39bda2b179bdd84dced378e7df81a5313802ef8" 155 + dependencies = [ 156 + "arrow-array", 157 + "arrow-buffer", 158 + "arrow-data", 159 + "arrow-schema", 160 + "chrono", 161 + "num", 162 + ] 163 + 164 + [[package]] 165 + name = "arrow-array" 166 + version = "56.2.0" 167 + source = "registry+https://github.com/rust-lang/crates.io-index" 168 + checksum = "8548ca7c070d8db9ce7aa43f37393e4bfcf3f2d3681df278490772fd1673d08d" 169 + dependencies = [ 170 + "ahash", 171 + "arrow-buffer", 172 + "arrow-data", 173 + "arrow-schema", 174 + "chrono", 175 + "half", 176 + "hashbrown 0.16.1", 177 + "num", 178 + ] 179 + 180 + [[package]] 181 + name = "arrow-buffer" 182 + version = "56.2.0" 183 + source = "registry+https://github.com/rust-lang/crates.io-index" 184 + checksum = "e003216336f70446457e280807a73899dd822feaf02087d31febca1363e2fccc" 185 + dependencies = [ 186 + "bytes", 187 + "half", 188 + "num", 189 + ] 190 + 191 + [[package]] 192 + name = "arrow-cast" 193 + version = "56.2.0" 194 + source = "registry+https://github.com/rust-lang/crates.io-index" 195 + checksum = "919418a0681298d3a77d1a315f625916cb5678ad0d74b9c60108eb15fd083023" 196 + dependencies = [ 197 + "arrow-array", 198 + "arrow-buffer", 199 + "arrow-data", 200 + "arrow-schema", 201 + "arrow-select", 202 + "atoi", 203 + "base64", 204 + "chrono", 205 + "half", 206 + "lexical-core", 207 + "num", 208 + "ryu", 209 + ] 210 + 211 + [[package]] 212 + name = "arrow-csv" 213 + version = "56.2.0" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "bfa9bf02705b5cf762b6f764c65f04ae9082c7cfc4e96e0c33548ee3f67012eb" 216 + dependencies = [ 217 + "arrow-array", 218 + "arrow-cast", 219 + "arrow-schema", 220 + "chrono", 221 + "csv", 222 + "csv-core", 223 + "regex", 224 + ] 225 + 226 + [[package]] 227 + name = "arrow-data" 228 + version = "56.2.0" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "a5c64fff1d142f833d78897a772f2e5b55b36cb3e6320376f0961ab0db7bd6d0" 231 + dependencies = [ 232 + "arrow-buffer", 233 + "arrow-schema", 234 + "half", 235 + "num", 236 + ] 237 + 238 + [[package]] 239 + name = "arrow-ipc" 240 + version = "56.2.0" 241 + source = "registry+https://github.com/rust-lang/crates.io-index" 242 + checksum = "1d3594dcddccc7f20fd069bc8e9828ce37220372680ff638c5e00dea427d88f5" 243 + dependencies = [ 244 + "arrow-array", 245 + "arrow-buffer", 246 + "arrow-data", 247 + "arrow-schema", 248 + "arrow-select", 249 + "flatbuffers", 250 + ] 251 + 252 + [[package]] 253 + name = "arrow-json" 254 + version = "56.2.0" 255 + source = "registry+https://github.com/rust-lang/crates.io-index" 256 + checksum = "88cf36502b64a127dc659e3b305f1d993a544eab0d48cce704424e62074dc04b" 257 + dependencies = [ 258 + "arrow-array", 259 + "arrow-buffer", 260 + "arrow-cast", 261 + "arrow-data", 262 + "arrow-schema", 263 + "chrono", 264 + "half", 265 + "indexmap", 266 + "lexical-core", 267 + "memchr", 268 + "num", 269 + "serde", 270 + "serde_json", 271 + "simdutf8", 272 + ] 273 + 274 + [[package]] 275 + name = "arrow-ord" 276 + version = "56.2.0" 277 + source = "registry+https://github.com/rust-lang/crates.io-index" 278 + checksum = "3c8f82583eb4f8d84d4ee55fd1cb306720cddead7596edce95b50ee418edf66f" 279 + dependencies = [ 280 + "arrow-array", 281 + "arrow-buffer", 282 + "arrow-data", 283 + "arrow-schema", 284 + "arrow-select", 285 + ] 286 + 287 + [[package]] 288 + name = "arrow-row" 289 + version = "56.2.0" 290 + source = "registry+https://github.com/rust-lang/crates.io-index" 291 + checksum = "9d07ba24522229d9085031df6b94605e0f4b26e099fb7cdeec37abd941a73753" 292 + dependencies = [ 293 + "arrow-array", 294 + "arrow-buffer", 295 + "arrow-data", 296 + "arrow-schema", 297 + "half", 298 + ] 299 + 300 + [[package]] 301 + name = "arrow-schema" 302 + version = "56.2.0" 303 + source = "registry+https://github.com/rust-lang/crates.io-index" 304 + checksum = "b3aa9e59c611ebc291c28582077ef25c97f1975383f1479b12f3b9ffee2ffabe" 305 + 306 + [[package]] 307 + name = "arrow-select" 308 + version = "56.2.0" 309 + source = "registry+https://github.com/rust-lang/crates.io-index" 310 + checksum = "8c41dbbd1e97bfcaee4fcb30e29105fb2c75e4d82ae4de70b792a5d3f66b2e7a" 311 + dependencies = [ 312 + "ahash", 313 + "arrow-array", 314 + "arrow-buffer", 315 + "arrow-data", 316 + "arrow-schema", 317 + "num", 318 + ] 319 + 320 + [[package]] 321 + name = "arrow-string" 322 + version = "56.2.0" 323 + source = "registry+https://github.com/rust-lang/crates.io-index" 324 + checksum = "53f5183c150fbc619eede22b861ea7c0eebed8eaac0333eaa7f6da5205fd504d" 325 + dependencies = [ 326 + "arrow-array", 327 + "arrow-buffer", 328 + "arrow-data", 329 + "arrow-schema", 330 + "arrow-select", 331 + "memchr", 332 + "num", 333 + "regex", 334 + "regex-syntax", 335 + ] 336 + 337 + [[package]] 338 + name = "as-any" 339 + version = "0.3.2" 340 + source = "registry+https://github.com/rust-lang/crates.io-index" 341 + checksum = "b0f477b951e452a0b6b4a10b53ccd569042d1d01729b519e02074a9c0958a063" 342 + 343 + [[package]] 344 + name = "async-channel" 345 + version = "2.5.0" 346 + source = "registry+https://github.com/rust-lang/crates.io-index" 347 + checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 348 + dependencies = [ 349 + "concurrent-queue", 350 + "event-listener-strategy", 351 + "futures-core", 352 + "pin-project-lite", 353 + ] 354 + 355 + [[package]] 356 + name = "async-stream" 357 + version = "0.3.6" 358 + source = "registry+https://github.com/rust-lang/crates.io-index" 359 + checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 360 + dependencies = [ 361 + "async-stream-impl", 362 + "futures-core", 363 + "pin-project-lite", 364 + ] 365 + 366 + [[package]] 367 + name = "async-stream-impl" 368 + version = "0.3.6" 369 + source = "registry+https://github.com/rust-lang/crates.io-index" 370 + checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 371 + dependencies = [ 372 + "proc-macro2", 373 + "quote", 374 + "syn 2.0.113", 375 + ] 376 + 377 + [[package]] 378 + name = "async-task" 379 + version = "4.7.1" 380 + source = "registry+https://github.com/rust-lang/crates.io-index" 381 + checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 382 + 383 + [[package]] 384 + name = "async-trait" 385 + version = "0.1.89" 386 + source = "registry+https://github.com/rust-lang/crates.io-index" 387 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 388 + dependencies = [ 389 + "proc-macro2", 390 + "quote", 391 + "syn 2.0.113", 392 + ] 393 + 394 + [[package]] 395 + name = "atoi" 396 + version = "2.0.0" 397 + source = "registry+https://github.com/rust-lang/crates.io-index" 398 + checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 399 + dependencies = [ 400 + "num-traits", 401 + ] 402 + 403 + [[package]] 68 404 name = "atomic-waker" 69 405 version = "1.1.2" 70 406 source = "registry+https://github.com/rust-lang/crates.io-index" 71 407 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 72 408 73 409 [[package]] 410 + name = "autocfg" 411 + version = "1.5.0" 412 + source = "registry+https://github.com/rust-lang/crates.io-index" 413 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 414 + 415 + [[package]] 74 416 name = "base64" 75 417 version = "0.22.1" 76 418 source = "registry+https://github.com/rust-lang/crates.io-index" 77 419 checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 78 420 79 421 [[package]] 422 + name = "bincode" 423 + version = "1.3.3" 424 + source = "registry+https://github.com/rust-lang/crates.io-index" 425 + checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 426 + dependencies = [ 427 + "serde", 428 + ] 429 + 430 + [[package]] 80 431 name = "bitflags" 81 432 version = "2.10.0" 82 433 source = "registry+https://github.com/rust-lang/crates.io-index" 83 434 checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 84 435 85 436 [[package]] 437 + name = "bon" 438 + version = "3.8.2" 439 + source = "registry+https://github.com/rust-lang/crates.io-index" 440 + checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" 441 + dependencies = [ 442 + "bon-macros", 443 + "rustversion", 444 + ] 445 + 446 + [[package]] 447 + name = "bon-macros" 448 + version = "3.8.2" 449 + source = "registry+https://github.com/rust-lang/crates.io-index" 450 + checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" 451 + dependencies = [ 452 + "darling 0.23.0", 453 + "ident_case", 454 + "prettyplease", 455 + "proc-macro2", 456 + "quote", 457 + "rustversion", 458 + "syn 2.0.113", 459 + ] 460 + 461 + [[package]] 462 + name = "brotli" 463 + version = "8.0.2" 464 + source = "registry+https://github.com/rust-lang/crates.io-index" 465 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 466 + dependencies = [ 467 + "alloc-no-stdlib", 468 + "alloc-stdlib", 469 + "brotli-decompressor", 470 + ] 471 + 472 + [[package]] 473 + name = "brotli-decompressor" 474 + version = "5.0.0" 475 + source = "registry+https://github.com/rust-lang/crates.io-index" 476 + checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" 477 + dependencies = [ 478 + "alloc-no-stdlib", 479 + "alloc-stdlib", 480 + ] 481 + 482 + [[package]] 86 483 name = "bumpalo" 87 484 version = "3.19.1" 88 485 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 107 504 checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" 108 505 dependencies = [ 109 506 "find-msvc-tools", 507 + "jobserver", 508 + "libc", 110 509 "shlex", 111 510 ] 112 511 ··· 123 522 checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 124 523 125 524 [[package]] 525 + name = "chrono" 526 + version = "0.4.42" 527 + source = "registry+https://github.com/rust-lang/crates.io-index" 528 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 529 + dependencies = [ 530 + "iana-time-zone", 531 + "num-traits", 532 + "windows-link", 533 + ] 534 + 535 + [[package]] 126 536 name = "clap" 127 537 version = "4.5.54" 128 538 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 141 551 "anstream", 142 552 "anstyle", 143 553 "clap_lex", 144 - "strsim", 554 + "strsim 0.11.1", 145 555 ] 146 556 147 557 [[package]] ··· 153 563 "heck", 154 564 "proc-macro2", 155 565 "quote", 156 - "syn", 566 + "syn 2.0.113", 157 567 ] 158 568 159 569 [[package]] ··· 172 582 ] 173 583 174 584 [[package]] 585 + name = "cmsketch" 586 + version = "0.2.4" 587 + source = "registry+https://github.com/rust-lang/crates.io-index" 588 + checksum = "d7ee2cfacbd29706479902b06d75ad8f1362900836aa32799eabc7e004bfd854" 589 + 590 + [[package]] 175 591 name = "colorchoice" 176 592 version = "1.0.4" 177 593 source = "registry+https://github.com/rust-lang/crates.io-index" 178 594 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 179 595 180 596 [[package]] 597 + name = "concurrent-queue" 598 + version = "2.5.0" 599 + source = "registry+https://github.com/rust-lang/crates.io-index" 600 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 601 + dependencies = [ 602 + "crossbeam-utils", 603 + ] 604 + 605 + [[package]] 181 606 name = "console" 182 607 version = "0.15.11" 183 608 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 191 616 ] 192 617 193 618 [[package]] 619 + name = "const-random" 620 + version = "0.1.18" 621 + source = "registry+https://github.com/rust-lang/crates.io-index" 622 + checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" 623 + dependencies = [ 624 + "const-random-macro", 625 + ] 626 + 627 + [[package]] 628 + name = "const-random-macro" 629 + version = "0.1.16" 630 + source = "registry+https://github.com/rust-lang/crates.io-index" 631 + checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" 632 + dependencies = [ 633 + "getrandom 0.2.16", 634 + "once_cell", 635 + "tiny-keccak", 636 + ] 637 + 638 + [[package]] 194 639 name = "core-foundation" 195 640 version = "0.9.4" 196 641 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 207 652 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 208 653 209 654 [[package]] 655 + name = "core_affinity" 656 + version = "0.8.3" 657 + source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" 659 + dependencies = [ 660 + "libc", 661 + "num_cpus", 662 + "winapi", 663 + ] 664 + 665 + [[package]] 210 666 name = "crc32fast" 211 667 version = "1.5.0" 212 668 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 216 672 ] 217 673 218 674 [[package]] 675 + name = "crossbeam-deque" 676 + version = "0.8.6" 677 + source = "registry+https://github.com/rust-lang/crates.io-index" 678 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 679 + dependencies = [ 680 + "crossbeam-epoch", 681 + "crossbeam-utils", 682 + ] 683 + 684 + [[package]] 685 + name = "crossbeam-epoch" 686 + version = "0.9.18" 687 + source = "registry+https://github.com/rust-lang/crates.io-index" 688 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 689 + dependencies = [ 690 + "crossbeam-utils", 691 + ] 692 + 693 + [[package]] 694 + name = "crossbeam-utils" 695 + version = "0.8.21" 696 + source = "registry+https://github.com/rust-lang/crates.io-index" 697 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 698 + 699 + [[package]] 700 + name = "crunchy" 701 + version = "0.2.4" 702 + source = "registry+https://github.com/rust-lang/crates.io-index" 703 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 704 + 705 + [[package]] 706 + name = "csv" 707 + version = "1.4.0" 708 + source = "registry+https://github.com/rust-lang/crates.io-index" 709 + checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" 710 + dependencies = [ 711 + "csv-core", 712 + "itoa", 713 + "ryu", 714 + "serde_core", 715 + ] 716 + 717 + [[package]] 718 + name = "csv-core" 719 + version = "0.1.13" 720 + source = "registry+https://github.com/rust-lang/crates.io-index" 721 + checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" 722 + dependencies = [ 723 + "memchr", 724 + ] 725 + 726 + [[package]] 727 + name = "darling" 728 + version = "0.14.4" 729 + source = "registry+https://github.com/rust-lang/crates.io-index" 730 + checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" 731 + dependencies = [ 732 + "darling_core 0.14.4", 733 + "darling_macro 0.14.4", 734 + ] 735 + 736 + [[package]] 737 + name = "darling" 738 + version = "0.23.0" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" 741 + dependencies = [ 742 + "darling_core 0.23.0", 743 + "darling_macro 0.23.0", 744 + ] 745 + 746 + [[package]] 747 + name = "darling_core" 748 + version = "0.14.4" 749 + source = "registry+https://github.com/rust-lang/crates.io-index" 750 + checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" 751 + dependencies = [ 752 + "fnv", 753 + "ident_case", 754 + "proc-macro2", 755 + "quote", 756 + "strsim 0.10.0", 757 + "syn 1.0.109", 758 + ] 759 + 760 + [[package]] 761 + name = "darling_core" 762 + version = "0.23.0" 763 + source = "registry+https://github.com/rust-lang/crates.io-index" 764 + checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" 765 + dependencies = [ 766 + "ident_case", 767 + "proc-macro2", 768 + "quote", 769 + "strsim 0.11.1", 770 + "syn 2.0.113", 771 + ] 772 + 773 + [[package]] 774 + name = "darling_macro" 775 + version = "0.14.4" 776 + source = "registry+https://github.com/rust-lang/crates.io-index" 777 + checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" 778 + dependencies = [ 779 + "darling_core 0.14.4", 780 + "quote", 781 + "syn 1.0.109", 782 + ] 783 + 784 + [[package]] 785 + name = "darling_macro" 786 + version = "0.23.0" 787 + source = "registry+https://github.com/rust-lang/crates.io-index" 788 + checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" 789 + dependencies = [ 790 + "darling_core 0.23.0", 791 + "quote", 792 + "syn 2.0.113", 793 + ] 794 + 795 + [[package]] 219 796 name = "dirs" 220 797 version = "6.0.0" 221 798 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 244 821 dependencies = [ 245 822 "proc-macro2", 246 823 "quote", 247 - "syn", 824 + "syn 2.0.113", 248 825 ] 249 826 250 827 [[package]] 828 + name = "downcast-rs" 829 + version = "1.2.1" 830 + source = "registry+https://github.com/rust-lang/crates.io-index" 831 + checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 832 + 833 + [[package]] 834 + name = "dspy-rs" 835 + version = "0.7.3" 836 + source = "registry+https://github.com/rust-lang/crates.io-index" 837 + checksum = "969a8d429908d989e1f8229d3965a96c28a132870f2d7b336fcb60a20beb3623" 838 + dependencies = [ 839 + "anyhow", 840 + "arrow", 841 + "async-trait", 842 + "bon", 843 + "csv", 844 + "dsrs_macros", 845 + "enum_dispatch", 846 + "foyer", 847 + "futures", 848 + "hf-hub", 849 + "indexmap", 850 + "kdam", 851 + "parquet", 852 + "rand 0.8.5", 853 + "rayon", 854 + "regex", 855 + "reqwest", 856 + "rig-core", 857 + "rstest", 858 + "schemars", 859 + "serde", 860 + "serde_json", 861 + "tempfile", 862 + "tokio", 863 + ] 864 + 865 + [[package]] 866 + name = "dsrs_macros" 867 + version = "0.7.2" 868 + source = "registry+https://github.com/rust-lang/crates.io-index" 869 + checksum = "210ab5a55bd4b091b7929538746d0e2368df327c1322298e48e6e52bac6b20f6" 870 + dependencies = [ 871 + "anyhow", 872 + "indexmap", 873 + "proc-macro2", 874 + "quote", 875 + "schemars", 876 + "serde", 877 + "serde_json", 878 + "syn 2.0.113", 879 + ] 880 + 881 + [[package]] 882 + name = "dyn-clone" 883 + version = "1.0.20" 884 + source = "registry+https://github.com/rust-lang/crates.io-index" 885 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 886 + 887 + [[package]] 888 + name = "either" 889 + version = "1.15.0" 890 + source = "registry+https://github.com/rust-lang/crates.io-index" 891 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 892 + 893 + [[package]] 251 894 name = "encode_unicode" 252 895 version = "1.0.0" 253 896 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 269 912 checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" 270 913 271 914 [[package]] 915 + name = "enum_dispatch" 916 + version = "0.3.13" 917 + source = "registry+https://github.com/rust-lang/crates.io-index" 918 + checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" 919 + dependencies = [ 920 + "once_cell", 921 + "proc-macro2", 922 + "quote", 923 + "syn 2.0.113", 924 + ] 925 + 926 + [[package]] 272 927 name = "equivalent" 273 928 version = "1.0.2" 274 929 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 291 946 checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 292 947 293 948 [[package]] 949 + name = "event-listener" 950 + version = "5.4.1" 951 + source = "registry+https://github.com/rust-lang/crates.io-index" 952 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 953 + dependencies = [ 954 + "concurrent-queue", 955 + "parking", 956 + "pin-project-lite", 957 + ] 958 + 959 + [[package]] 960 + name = "event-listener-strategy" 961 + version = "0.5.4" 962 + source = "registry+https://github.com/rust-lang/crates.io-index" 963 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 964 + dependencies = [ 965 + "event-listener", 966 + "pin-project-lite", 967 + ] 968 + 969 + [[package]] 970 + name = "eventsource-stream" 971 + version = "0.2.3" 972 + source = "registry+https://github.com/rust-lang/crates.io-index" 973 + checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" 974 + dependencies = [ 975 + "futures-core", 976 + "nom 7.1.3", 977 + "pin-project-lite", 978 + ] 979 + 980 + [[package]] 981 + name = "fastant" 982 + version = "0.1.11" 983 + source = "registry+https://github.com/rust-lang/crates.io-index" 984 + checksum = "2e825441bfb2d831c47c97d05821552db8832479f44c571b97fededbf0099c07" 985 + dependencies = [ 986 + "small_ctor", 987 + "web-time", 988 + ] 989 + 990 + [[package]] 294 991 name = "fastrand" 295 992 version = "2.3.0" 296 993 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 314 1011 checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" 315 1012 316 1013 [[package]] 1014 + name = "flatbuffers" 1015 + version = "25.12.19" 1016 + source = "registry+https://github.com/rust-lang/crates.io-index" 1017 + checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" 1018 + dependencies = [ 1019 + "bitflags", 1020 + "rustc_version", 1021 + ] 1022 + 1023 + [[package]] 317 1024 name = "flate2" 318 1025 version = "1.1.5" 319 1026 source = "registry+https://github.com/rust-lang/crates.io-index" 320 1027 checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 321 1028 dependencies = [ 322 1029 "crc32fast", 1030 + "libz-rs-sys", 323 1031 "miniz_oxide", 324 1032 ] 325 1033 326 1034 [[package]] 1035 + name = "flume" 1036 + version = "0.11.1" 1037 + source = "registry+https://github.com/rust-lang/crates.io-index" 1038 + checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 1039 + dependencies = [ 1040 + "futures-core", 1041 + "futures-sink", 1042 + "nanorand", 1043 + "spin", 1044 + ] 1045 + 1046 + [[package]] 327 1047 name = "fnv" 328 1048 version = "1.0.7" 329 1049 source = "registry+https://github.com/rust-lang/crates.io-index" 330 1050 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1051 + 1052 + [[package]] 1053 + name = "foldhash" 1054 + version = "0.1.5" 1055 + source = "registry+https://github.com/rust-lang/crates.io-index" 1056 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 331 1057 332 1058 [[package]] 333 1059 name = "foreign-types" ··· 354 1080 ] 355 1081 356 1082 [[package]] 1083 + name = "foyer" 1084 + version = "0.20.1" 1085 + source = "registry+https://github.com/rust-lang/crates.io-index" 1086 + checksum = "50b7b23bdff0e7fecbef83438ce9389c352743ea0b8bda44fabca354f21b19a9" 1087 + dependencies = [ 1088 + "equivalent", 1089 + "foyer-common", 1090 + "foyer-memory", 1091 + "foyer-storage", 1092 + "madsim-tokio", 1093 + "mixtrics", 1094 + "pin-project", 1095 + "serde", 1096 + "thiserror 2.0.17", 1097 + "tokio", 1098 + "tracing", 1099 + ] 1100 + 1101 + [[package]] 1102 + name = "foyer-common" 1103 + version = "0.20.1" 1104 + source = "registry+https://github.com/rust-lang/crates.io-index" 1105 + checksum = "1a72f40b0c110e4233f46df0589bf1b2b3b5ed04e4cf504a582374d7548c9c05" 1106 + dependencies = [ 1107 + "bincode", 1108 + "bytes", 1109 + "cfg-if", 1110 + "itertools", 1111 + "madsim-tokio", 1112 + "mixtrics", 1113 + "parking_lot", 1114 + "pin-project", 1115 + "serde", 1116 + "thiserror 2.0.17", 1117 + "tokio", 1118 + "twox-hash", 1119 + ] 1120 + 1121 + [[package]] 1122 + name = "foyer-intrusive-collections" 1123 + version = "0.10.0-dev" 1124 + source = "registry+https://github.com/rust-lang/crates.io-index" 1125 + checksum = "6e4fee46bea69e0596130e3210e65d3424e0ac1e6df3bde6636304bdf1ca4a3b" 1126 + dependencies = [ 1127 + "memoffset", 1128 + ] 1129 + 1130 + [[package]] 1131 + name = "foyer-memory" 1132 + version = "0.20.1" 1133 + source = "registry+https://github.com/rust-lang/crates.io-index" 1134 + checksum = "6b1b23cefdcd78b4d729679d75bb6fb96a57f7dd94f141dcc373a2db1c04fbaa" 1135 + dependencies = [ 1136 + "arc-swap", 1137 + "bitflags", 1138 + "cmsketch", 1139 + "equivalent", 1140 + "foyer-common", 1141 + "foyer-intrusive-collections", 1142 + "hashbrown 0.15.5", 1143 + "itertools", 1144 + "madsim-tokio", 1145 + "mixtrics", 1146 + "parking_lot", 1147 + "pin-project", 1148 + "serde", 1149 + "thiserror 2.0.17", 1150 + "tokio", 1151 + "tracing", 1152 + ] 1153 + 1154 + [[package]] 1155 + name = "foyer-storage" 1156 + version = "0.20.1" 1157 + source = "registry+https://github.com/rust-lang/crates.io-index" 1158 + checksum = "f1ea5872e0073e3c37bec0aa99923f03bcec3951a056c77cfdfcc8001a370f9a" 1159 + dependencies = [ 1160 + "allocator-api2", 1161 + "anyhow", 1162 + "bytes", 1163 + "core_affinity", 1164 + "equivalent", 1165 + "fastant", 1166 + "flume", 1167 + "foyer-common", 1168 + "foyer-memory", 1169 + "fs4", 1170 + "futures-core", 1171 + "futures-util", 1172 + "hashbrown 0.15.5", 1173 + "io-uring", 1174 + "itertools", 1175 + "libc", 1176 + "lz4", 1177 + "madsim-tokio", 1178 + "parking_lot", 1179 + "pin-project", 1180 + "rand 0.9.2", 1181 + "serde", 1182 + "thiserror 2.0.17", 1183 + "tokio", 1184 + "tracing", 1185 + "twox-hash", 1186 + "zstd", 1187 + ] 1188 + 1189 + [[package]] 1190 + name = "fs4" 1191 + version = "0.13.1" 1192 + source = "registry+https://github.com/rust-lang/crates.io-index" 1193 + checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" 1194 + dependencies = [ 1195 + "rustix", 1196 + "windows-sys 0.59.0", 1197 + ] 1198 + 1199 + [[package]] 357 1200 name = "futures" 358 1201 version = "0.3.31" 359 1202 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 409 1252 dependencies = [ 410 1253 "proc-macro2", 411 1254 "quote", 412 - "syn", 1255 + "syn 2.0.113", 413 1256 ] 414 1257 415 1258 [[package]] ··· 425 1268 checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 426 1269 427 1270 [[package]] 1271 + name = "futures-timer" 1272 + version = "3.0.3" 1273 + source = "registry+https://github.com/rust-lang/crates.io-index" 1274 + checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" 1275 + 1276 + [[package]] 428 1277 name = "futures-util" 429 1278 version = "0.3.31" 430 1279 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 449 1298 checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 450 1299 dependencies = [ 451 1300 "cfg-if", 1301 + "js-sys", 452 1302 "libc", 453 1303 "wasi", 1304 + "wasm-bindgen", 454 1305 ] 455 1306 456 1307 [[package]] ··· 466 1317 ] 467 1318 468 1319 [[package]] 1320 + name = "glob" 1321 + version = "0.3.3" 1322 + source = "registry+https://github.com/rust-lang/crates.io-index" 1323 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1324 + 1325 + [[package]] 469 1326 name = "h2" 470 1327 version = "0.4.12" 471 1328 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 485 1342 ] 486 1343 487 1344 [[package]] 1345 + name = "half" 1346 + version = "2.7.1" 1347 + source = "registry+https://github.com/rust-lang/crates.io-index" 1348 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1349 + dependencies = [ 1350 + "cfg-if", 1351 + "crunchy", 1352 + "num-traits", 1353 + "zerocopy", 1354 + ] 1355 + 1356 + [[package]] 1357 + name = "hashbrown" 1358 + version = "0.15.5" 1359 + source = "registry+https://github.com/rust-lang/crates.io-index" 1360 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1361 + dependencies = [ 1362 + "allocator-api2", 1363 + "equivalent", 1364 + "foldhash", 1365 + ] 1366 + 1367 + [[package]] 488 1368 name = "hashbrown" 489 1369 version = "0.16.1" 490 1370 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 516 1396 "log", 517 1397 "native-tls", 518 1398 "num_cpus", 519 - "rand", 1399 + "rand 0.9.2", 520 1400 "reqwest", 521 1401 "serde", 522 1402 "serde_json", 523 - "thiserror", 1403 + "thiserror 2.0.17", 524 1404 "tokio", 525 1405 "ureq", 526 1406 "windows-sys 0.60.2", ··· 655 1535 ] 656 1536 657 1537 [[package]] 1538 + name = "iana-time-zone" 1539 + version = "0.1.64" 1540 + source = "registry+https://github.com/rust-lang/crates.io-index" 1541 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1542 + dependencies = [ 1543 + "android_system_properties", 1544 + "core-foundation-sys", 1545 + "iana-time-zone-haiku", 1546 + "js-sys", 1547 + "log", 1548 + "wasm-bindgen", 1549 + "windows-core", 1550 + ] 1551 + 1552 + [[package]] 1553 + name = "iana-time-zone-haiku" 1554 + version = "0.1.2" 1555 + source = "registry+https://github.com/rust-lang/crates.io-index" 1556 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1557 + dependencies = [ 1558 + "cc", 1559 + ] 1560 + 1561 + [[package]] 658 1562 name = "icu_collections" 659 1563 version = "2.1.1" 660 1564 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 736 1640 ] 737 1641 738 1642 [[package]] 1643 + name = "ident_case" 1644 + version = "1.0.1" 1645 + source = "registry+https://github.com/rust-lang/crates.io-index" 1646 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1647 + 1648 + [[package]] 739 1649 name = "idna" 740 1650 version = "1.1.0" 741 1651 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 763 1673 checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" 764 1674 dependencies = [ 765 1675 "equivalent", 766 - "hashbrown", 1676 + "hashbrown 0.16.1", 767 1677 ] 768 1678 769 1679 [[package]] ··· 780 1690 ] 781 1691 782 1692 [[package]] 1693 + name = "integer-encoding" 1694 + version = "3.0.4" 1695 + source = "registry+https://github.com/rust-lang/crates.io-index" 1696 + checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" 1697 + 1698 + [[package]] 1699 + name = "io-uring" 1700 + version = "0.7.11" 1701 + source = "registry+https://github.com/rust-lang/crates.io-index" 1702 + checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" 1703 + dependencies = [ 1704 + "bitflags", 1705 + "cfg-if", 1706 + "libc", 1707 + ] 1708 + 1709 + [[package]] 783 1710 name = "ipnet" 784 1711 version = "2.11.0" 785 1712 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 802 1729 checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 803 1730 804 1731 [[package]] 1732 + name = "itertools" 1733 + version = "0.14.0" 1734 + source = "registry+https://github.com/rust-lang/crates.io-index" 1735 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1736 + dependencies = [ 1737 + "either", 1738 + ] 1739 + 1740 + [[package]] 805 1741 name = "itoa" 806 1742 version = "1.0.17" 807 1743 source = "registry+https://github.com/rust-lang/crates.io-index" 808 1744 checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 809 1745 810 1746 [[package]] 1747 + name = "jobserver" 1748 + version = "0.1.34" 1749 + source = "registry+https://github.com/rust-lang/crates.io-index" 1750 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 1751 + dependencies = [ 1752 + "getrandom 0.3.4", 1753 + "libc", 1754 + ] 1755 + 1756 + [[package]] 811 1757 name = "js-sys" 812 1758 version = "0.3.83" 813 1759 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 818 1764 ] 819 1765 820 1766 [[package]] 1767 + name = "kdam" 1768 + version = "0.6.4" 1769 + source = "registry+https://github.com/rust-lang/crates.io-index" 1770 + checksum = "d847be338ef16a13f97637c062d97fb52ebe0ff3b77fa18456d5ed366317e4f7" 1771 + dependencies = [ 1772 + "terminal_size", 1773 + "windows-sys 0.61.2", 1774 + ] 1775 + 1776 + [[package]] 1777 + name = "lazy_static" 1778 + version = "1.5.0" 1779 + source = "registry+https://github.com/rust-lang/crates.io-index" 1780 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1781 + 1782 + [[package]] 1783 + name = "lexical-core" 1784 + version = "1.0.6" 1785 + source = "registry+https://github.com/rust-lang/crates.io-index" 1786 + checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" 1787 + dependencies = [ 1788 + "lexical-parse-float", 1789 + "lexical-parse-integer", 1790 + "lexical-util", 1791 + "lexical-write-float", 1792 + "lexical-write-integer", 1793 + ] 1794 + 1795 + [[package]] 1796 + name = "lexical-parse-float" 1797 + version = "1.0.6" 1798 + source = "registry+https://github.com/rust-lang/crates.io-index" 1799 + checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" 1800 + dependencies = [ 1801 + "lexical-parse-integer", 1802 + "lexical-util", 1803 + ] 1804 + 1805 + [[package]] 1806 + name = "lexical-parse-integer" 1807 + version = "1.0.6" 1808 + source = "registry+https://github.com/rust-lang/crates.io-index" 1809 + checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" 1810 + dependencies = [ 1811 + "lexical-util", 1812 + ] 1813 + 1814 + [[package]] 1815 + name = "lexical-util" 1816 + version = "1.0.7" 1817 + source = "registry+https://github.com/rust-lang/crates.io-index" 1818 + checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" 1819 + 1820 + [[package]] 1821 + name = "lexical-write-float" 1822 + version = "1.0.6" 1823 + source = "registry+https://github.com/rust-lang/crates.io-index" 1824 + checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" 1825 + dependencies = [ 1826 + "lexical-util", 1827 + "lexical-write-integer", 1828 + ] 1829 + 1830 + [[package]] 1831 + name = "lexical-write-integer" 1832 + version = "1.0.6" 1833 + source = "registry+https://github.com/rust-lang/crates.io-index" 1834 + checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" 1835 + dependencies = [ 1836 + "lexical-util", 1837 + ] 1838 + 1839 + [[package]] 821 1840 name = "libc" 822 1841 version = "0.2.179" 823 1842 source = "registry+https://github.com/rust-lang/crates.io-index" 824 1843 checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" 825 1844 826 1845 [[package]] 1846 + name = "libm" 1847 + version = "0.2.15" 1848 + source = "registry+https://github.com/rust-lang/crates.io-index" 1849 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1850 + 1851 + [[package]] 827 1852 name = "libredox" 828 1853 version = "0.1.12" 829 1854 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 834 1859 ] 835 1860 836 1861 [[package]] 1862 + name = "libz-rs-sys" 1863 + version = "0.5.5" 1864 + source = "registry+https://github.com/rust-lang/crates.io-index" 1865 + checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" 1866 + dependencies = [ 1867 + "zlib-rs", 1868 + ] 1869 + 1870 + [[package]] 837 1871 name = "linux-raw-sys" 838 1872 version = "0.11.0" 839 1873 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 846 1880 checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 847 1881 848 1882 [[package]] 1883 + name = "lock_api" 1884 + version = "0.4.14" 1885 + source = "registry+https://github.com/rust-lang/crates.io-index" 1886 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1887 + dependencies = [ 1888 + "scopeguard", 1889 + ] 1890 + 1891 + [[package]] 849 1892 name = "log" 850 1893 version = "0.4.29" 851 1894 source = "registry+https://github.com/rust-lang/crates.io-index" 852 1895 checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 853 1896 854 1897 [[package]] 1898 + name = "lz4" 1899 + version = "1.28.1" 1900 + source = "registry+https://github.com/rust-lang/crates.io-index" 1901 + checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" 1902 + dependencies = [ 1903 + "lz4-sys", 1904 + ] 1905 + 1906 + [[package]] 1907 + name = "lz4-sys" 1908 + version = "1.11.1+lz4-1.10.0" 1909 + source = "registry+https://github.com/rust-lang/crates.io-index" 1910 + checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" 1911 + dependencies = [ 1912 + "cc", 1913 + "libc", 1914 + ] 1915 + 1916 + [[package]] 1917 + name = "lz4_flex" 1918 + version = "0.11.5" 1919 + source = "registry+https://github.com/rust-lang/crates.io-index" 1920 + checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" 1921 + dependencies = [ 1922 + "twox-hash", 1923 + ] 1924 + 1925 + [[package]] 1926 + name = "madsim" 1927 + version = "0.2.34" 1928 + source = "registry+https://github.com/rust-lang/crates.io-index" 1929 + checksum = "18351aac4194337d6ea9ffbd25b3d1540ecc0754142af1bff5ba7392d1f6f771" 1930 + dependencies = [ 1931 + "ahash", 1932 + "async-channel", 1933 + "async-stream", 1934 + "async-task", 1935 + "bincode", 1936 + "bytes", 1937 + "downcast-rs", 1938 + "errno", 1939 + "futures-util", 1940 + "lazy_static", 1941 + "libc", 1942 + "madsim-macros", 1943 + "naive-timer", 1944 + "panic-message", 1945 + "rand 0.8.5", 1946 + "rand_xoshiro", 1947 + "rustversion", 1948 + "serde", 1949 + "spin", 1950 + "tokio", 1951 + "tokio-util", 1952 + "toml", 1953 + "tracing", 1954 + "tracing-subscriber", 1955 + ] 1956 + 1957 + [[package]] 1958 + name = "madsim-macros" 1959 + version = "0.2.12" 1960 + source = "registry+https://github.com/rust-lang/crates.io-index" 1961 + checksum = "f3d248e97b1a48826a12c3828d921e8548e714394bf17274dd0a93910dc946e1" 1962 + dependencies = [ 1963 + "darling 0.14.4", 1964 + "proc-macro2", 1965 + "quote", 1966 + "syn 1.0.109", 1967 + ] 1968 + 1969 + [[package]] 1970 + name = "madsim-tokio" 1971 + version = "0.2.30" 1972 + source = "registry+https://github.com/rust-lang/crates.io-index" 1973 + checksum = "7d3eb2acc57c82d21d699119b859e2df70a91dbdb84734885a1e72be83bdecb5" 1974 + dependencies = [ 1975 + "madsim", 1976 + "spin", 1977 + "tokio", 1978 + ] 1979 + 1980 + [[package]] 855 1981 name = "memchr" 856 1982 version = "2.7.6" 857 1983 source = "registry+https://github.com/rust-lang/crates.io-index" 858 1984 checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 859 1985 860 1986 [[package]] 1987 + name = "memoffset" 1988 + version = "0.9.1" 1989 + source = "registry+https://github.com/rust-lang/crates.io-index" 1990 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1991 + dependencies = [ 1992 + "autocfg", 1993 + ] 1994 + 1995 + [[package]] 861 1996 name = "mime" 862 1997 version = "0.3.17" 863 1998 source = "registry+https://github.com/rust-lang/crates.io-index" 864 1999 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 865 2000 866 2001 [[package]] 2002 + name = "mime_guess" 2003 + version = "2.0.5" 2004 + source = "registry+https://github.com/rust-lang/crates.io-index" 2005 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2006 + dependencies = [ 2007 + "mime", 2008 + "unicase", 2009 + ] 2010 + 2011 + [[package]] 2012 + name = "minimal-lexical" 2013 + version = "0.2.1" 2014 + source = "registry+https://github.com/rust-lang/crates.io-index" 2015 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2016 + 2017 + [[package]] 867 2018 name = "miniz_oxide" 868 2019 version = "0.8.9" 869 2020 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 885 2036 ] 886 2037 887 2038 [[package]] 2039 + name = "mixtrics" 2040 + version = "0.2.3" 2041 + source = "registry+https://github.com/rust-lang/crates.io-index" 2042 + checksum = "fb252c728b9d77c6ef9103f0c81524fa0a3d3b161d0a936295d7fbeff6e04c11" 2043 + dependencies = [ 2044 + "itertools", 2045 + "parking_lot", 2046 + ] 2047 + 2048 + [[package]] 2049 + name = "naive-timer" 2050 + version = "0.2.0" 2051 + source = "registry+https://github.com/rust-lang/crates.io-index" 2052 + checksum = "034a0ad7deebf0c2abcf2435950a6666c3c15ea9d8fad0c0f48efa8a7f843fed" 2053 + 2054 + [[package]] 2055 + name = "nanorand" 2056 + version = "0.7.0" 2057 + source = "registry+https://github.com/rust-lang/crates.io-index" 2058 + checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 2059 + dependencies = [ 2060 + "getrandom 0.2.16", 2061 + ] 2062 + 2063 + [[package]] 888 2064 name = "native-tls" 889 2065 version = "0.2.14" 890 2066 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 924 2100 925 2101 [[package]] 926 2102 name = "nom" 2103 + version = "7.1.3" 2104 + source = "registry+https://github.com/rust-lang/crates.io-index" 2105 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2106 + dependencies = [ 2107 + "memchr", 2108 + "minimal-lexical", 2109 + ] 2110 + 2111 + [[package]] 2112 + name = "nom" 927 2113 version = "8.0.0" 928 2114 source = "registry+https://github.com/rust-lang/crates.io-index" 929 2115 checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" ··· 932 2118 ] 933 2119 934 2120 [[package]] 2121 + name = "nu-ansi-term" 2122 + version = "0.50.3" 2123 + source = "registry+https://github.com/rust-lang/crates.io-index" 2124 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2125 + dependencies = [ 2126 + "windows-sys 0.61.2", 2127 + ] 2128 + 2129 + [[package]] 2130 + name = "num" 2131 + version = "0.4.3" 2132 + source = "registry+https://github.com/rust-lang/crates.io-index" 2133 + checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" 2134 + dependencies = [ 2135 + "num-bigint", 2136 + "num-complex", 2137 + "num-integer", 2138 + "num-iter", 2139 + "num-rational", 2140 + "num-traits", 2141 + ] 2142 + 2143 + [[package]] 2144 + name = "num-bigint" 2145 + version = "0.4.6" 2146 + source = "registry+https://github.com/rust-lang/crates.io-index" 2147 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 2148 + dependencies = [ 2149 + "num-integer", 2150 + "num-traits", 2151 + ] 2152 + 2153 + [[package]] 2154 + name = "num-complex" 2155 + version = "0.4.6" 2156 + source = "registry+https://github.com/rust-lang/crates.io-index" 2157 + checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" 2158 + dependencies = [ 2159 + "num-traits", 2160 + ] 2161 + 2162 + [[package]] 2163 + name = "num-integer" 2164 + version = "0.1.46" 2165 + source = "registry+https://github.com/rust-lang/crates.io-index" 2166 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2167 + dependencies = [ 2168 + "num-traits", 2169 + ] 2170 + 2171 + [[package]] 2172 + name = "num-iter" 2173 + version = "0.1.45" 2174 + source = "registry+https://github.com/rust-lang/crates.io-index" 2175 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2176 + dependencies = [ 2177 + "autocfg", 2178 + "num-integer", 2179 + "num-traits", 2180 + ] 2181 + 2182 + [[package]] 2183 + name = "num-rational" 2184 + version = "0.4.2" 2185 + source = "registry+https://github.com/rust-lang/crates.io-index" 2186 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 2187 + dependencies = [ 2188 + "num-bigint", 2189 + "num-integer", 2190 + "num-traits", 2191 + ] 2192 + 2193 + [[package]] 2194 + name = "num-traits" 2195 + version = "0.2.19" 2196 + source = "registry+https://github.com/rust-lang/crates.io-index" 2197 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2198 + dependencies = [ 2199 + "autocfg", 2200 + "libm", 2201 + ] 2202 + 2203 + [[package]] 935 2204 name = "num_cpus" 936 2205 version = "1.17.0" 937 2206 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 982 2251 dependencies = [ 983 2252 "proc-macro2", 984 2253 "quote", 985 - "syn", 2254 + "syn 2.0.113", 986 2255 ] 987 2256 988 2257 [[package]] ··· 1010 2279 checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 1011 2280 1012 2281 [[package]] 2282 + name = "ordered-float" 2283 + version = "2.10.1" 2284 + source = "registry+https://github.com/rust-lang/crates.io-index" 2285 + checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" 2286 + dependencies = [ 2287 + "num-traits", 2288 + ] 2289 + 2290 + [[package]] 2291 + name = "ordered-float" 2292 + version = "5.1.0" 2293 + source = "registry+https://github.com/rust-lang/crates.io-index" 2294 + checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" 2295 + dependencies = [ 2296 + "num-traits", 2297 + ] 2298 + 2299 + [[package]] 1013 2300 name = "owo-colors" 1014 2301 version = "4.2.3" 1015 2302 source = "registry+https://github.com/rust-lang/crates.io-index" 1016 2303 checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" 1017 2304 1018 2305 [[package]] 2306 + name = "panic-message" 2307 + version = "0.3.0" 2308 + source = "registry+https://github.com/rust-lang/crates.io-index" 2309 + checksum = "384e52fd8fbd4cbe3c317e8216260c21a0f9134de108cea8a4dd4e7e152c472d" 2310 + 2311 + [[package]] 2312 + name = "parking" 2313 + version = "2.2.1" 2314 + source = "registry+https://github.com/rust-lang/crates.io-index" 2315 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2316 + 2317 + [[package]] 2318 + name = "parking_lot" 2319 + version = "0.12.5" 2320 + source = "registry+https://github.com/rust-lang/crates.io-index" 2321 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2322 + dependencies = [ 2323 + "lock_api", 2324 + "parking_lot_core", 2325 + ] 2326 + 2327 + [[package]] 2328 + name = "parking_lot_core" 2329 + version = "0.9.12" 2330 + source = "registry+https://github.com/rust-lang/crates.io-index" 2331 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2332 + dependencies = [ 2333 + "cfg-if", 2334 + "libc", 2335 + "redox_syscall", 2336 + "smallvec", 2337 + "windows-link", 2338 + ] 2339 + 2340 + [[package]] 2341 + name = "parquet" 2342 + version = "56.2.0" 2343 + source = "registry+https://github.com/rust-lang/crates.io-index" 2344 + checksum = "f0dbd48ad52d7dccf8ea1b90a3ddbfaea4f69878dd7683e51c507d4bc52b5b27" 2345 + dependencies = [ 2346 + "ahash", 2347 + "arrow-array", 2348 + "arrow-buffer", 2349 + "arrow-cast", 2350 + "arrow-data", 2351 + "arrow-ipc", 2352 + "arrow-schema", 2353 + "arrow-select", 2354 + "base64", 2355 + "brotli", 2356 + "bytes", 2357 + "chrono", 2358 + "flate2", 2359 + "half", 2360 + "hashbrown 0.16.1", 2361 + "lz4_flex", 2362 + "num", 2363 + "num-bigint", 2364 + "paste", 2365 + "seq-macro", 2366 + "simdutf8", 2367 + "snap", 2368 + "thrift", 2369 + "twox-hash", 2370 + "zstd", 2371 + ] 2372 + 2373 + [[package]] 2374 + name = "paste" 2375 + version = "1.0.15" 2376 + source = "registry+https://github.com/rust-lang/crates.io-index" 2377 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2378 + 2379 + [[package]] 1019 2380 name = "percent-encoding" 1020 2381 version = "2.3.2" 1021 2382 source = "registry+https://github.com/rust-lang/crates.io-index" 1022 2383 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 1023 2384 1024 2385 [[package]] 2386 + name = "pin-project" 2387 + version = "1.1.10" 2388 + source = "registry+https://github.com/rust-lang/crates.io-index" 2389 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2390 + dependencies = [ 2391 + "pin-project-internal", 2392 + ] 2393 + 2394 + [[package]] 2395 + name = "pin-project-internal" 2396 + version = "1.1.10" 2397 + source = "registry+https://github.com/rust-lang/crates.io-index" 2398 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2399 + dependencies = [ 2400 + "proc-macro2", 2401 + "quote", 2402 + "syn 2.0.113", 2403 + ] 2404 + 2405 + [[package]] 1025 2406 name = "pin-project-lite" 1026 2407 version = "0.2.16" 1027 2408 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1064 2445 ] 1065 2446 1066 2447 [[package]] 2448 + name = "prettyplease" 2449 + version = "0.2.37" 2450 + source = "registry+https://github.com/rust-lang/crates.io-index" 2451 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2452 + dependencies = [ 2453 + "proc-macro2", 2454 + "syn 2.0.113", 2455 + ] 2456 + 2457 + [[package]] 2458 + name = "proc-macro-crate" 2459 + version = "3.4.0" 2460 + source = "registry+https://github.com/rust-lang/crates.io-index" 2461 + checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 2462 + dependencies = [ 2463 + "toml_edit", 2464 + ] 2465 + 2466 + [[package]] 1067 2467 name = "proc-macro2" 1068 2468 version = "1.0.104" 1069 2469 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1099 2499 1100 2500 [[package]] 1101 2501 name = "rand" 2502 + version = "0.8.5" 2503 + source = "registry+https://github.com/rust-lang/crates.io-index" 2504 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2505 + dependencies = [ 2506 + "libc", 2507 + "rand_chacha 0.3.1", 2508 + "rand_core 0.6.4", 2509 + ] 2510 + 2511 + [[package]] 2512 + name = "rand" 1102 2513 version = "0.9.2" 1103 2514 source = "registry+https://github.com/rust-lang/crates.io-index" 1104 2515 checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 1105 2516 dependencies = [ 1106 - "rand_chacha", 1107 - "rand_core", 2517 + "rand_chacha 0.9.0", 2518 + "rand_core 0.9.3", 2519 + ] 2520 + 2521 + [[package]] 2522 + name = "rand_chacha" 2523 + version = "0.3.1" 2524 + source = "registry+https://github.com/rust-lang/crates.io-index" 2525 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2526 + dependencies = [ 2527 + "ppv-lite86", 2528 + "rand_core 0.6.4", 1108 2529 ] 1109 2530 1110 2531 [[package]] ··· 1114 2535 checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1115 2536 dependencies = [ 1116 2537 "ppv-lite86", 1117 - "rand_core", 2538 + "rand_core 0.9.3", 2539 + ] 2540 + 2541 + [[package]] 2542 + name = "rand_core" 2543 + version = "0.6.4" 2544 + source = "registry+https://github.com/rust-lang/crates.io-index" 2545 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2546 + dependencies = [ 2547 + "getrandom 0.2.16", 1118 2548 ] 1119 2549 1120 2550 [[package]] ··· 1127 2557 ] 1128 2558 1129 2559 [[package]] 2560 + name = "rand_xoshiro" 2561 + version = "0.6.0" 2562 + source = "registry+https://github.com/rust-lang/crates.io-index" 2563 + checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 2564 + dependencies = [ 2565 + "rand_core 0.6.4", 2566 + ] 2567 + 2568 + [[package]] 2569 + name = "rayon" 2570 + version = "1.11.0" 2571 + source = "registry+https://github.com/rust-lang/crates.io-index" 2572 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 2573 + dependencies = [ 2574 + "either", 2575 + "rayon-core", 2576 + ] 2577 + 2578 + [[package]] 2579 + name = "rayon-core" 2580 + version = "1.13.0" 2581 + source = "registry+https://github.com/rust-lang/crates.io-index" 2582 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 2583 + dependencies = [ 2584 + "crossbeam-deque", 2585 + "crossbeam-utils", 2586 + ] 2587 + 2588 + [[package]] 2589 + name = "redox_syscall" 2590 + version = "0.5.18" 2591 + source = "registry+https://github.com/rust-lang/crates.io-index" 2592 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2593 + dependencies = [ 2594 + "bitflags", 2595 + ] 2596 + 2597 + [[package]] 1130 2598 name = "redox_users" 1131 2599 version = "0.5.2" 1132 2600 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1134 2602 dependencies = [ 1135 2603 "getrandom 0.2.16", 1136 2604 "libredox", 1137 - "thiserror", 2605 + "thiserror 2.0.17", 1138 2606 ] 1139 2607 1140 2608 [[package]] 2609 + name = "ref-cast" 2610 + version = "1.0.25" 2611 + source = "registry+https://github.com/rust-lang/crates.io-index" 2612 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 2613 + dependencies = [ 2614 + "ref-cast-impl", 2615 + ] 2616 + 2617 + [[package]] 2618 + name = "ref-cast-impl" 2619 + version = "1.0.25" 2620 + source = "registry+https://github.com/rust-lang/crates.io-index" 2621 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 2622 + dependencies = [ 2623 + "proc-macro2", 2624 + "quote", 2625 + "syn 2.0.113", 2626 + ] 2627 + 2628 + [[package]] 2629 + name = "regex" 2630 + version = "1.12.2" 2631 + source = "registry+https://github.com/rust-lang/crates.io-index" 2632 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 2633 + dependencies = [ 2634 + "aho-corasick", 2635 + "memchr", 2636 + "regex-automata", 2637 + "regex-syntax", 2638 + ] 2639 + 2640 + [[package]] 2641 + name = "regex-automata" 2642 + version = "0.4.13" 2643 + source = "registry+https://github.com/rust-lang/crates.io-index" 2644 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 2645 + dependencies = [ 2646 + "aho-corasick", 2647 + "memchr", 2648 + "regex-syntax", 2649 + ] 2650 + 2651 + [[package]] 2652 + name = "regex-syntax" 2653 + version = "0.8.8" 2654 + source = "registry+https://github.com/rust-lang/crates.io-index" 2655 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 2656 + 2657 + [[package]] 2658 + name = "relative-path" 2659 + version = "1.9.3" 2660 + source = "registry+https://github.com/rust-lang/crates.io-index" 2661 + checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" 2662 + 2663 + [[package]] 1141 2664 name = "reqwest" 1142 2665 version = "0.12.28" 1143 2666 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1160 2683 "js-sys", 1161 2684 "log", 1162 2685 "mime", 2686 + "mime_guess", 1163 2687 "native-tls", 1164 2688 "percent-encoding", 1165 2689 "pin-project-lite", ··· 1182 2706 ] 1183 2707 1184 2708 [[package]] 2709 + name = "reqwest-eventsource" 2710 + version = "0.6.0" 2711 + source = "registry+https://github.com/rust-lang/crates.io-index" 2712 + checksum = "632c55746dbb44275691640e7b40c907c16a2dc1a5842aa98aaec90da6ec6bde" 2713 + dependencies = [ 2714 + "eventsource-stream", 2715 + "futures-core", 2716 + "futures-timer", 2717 + "mime", 2718 + "nom 7.1.3", 2719 + "pin-project-lite", 2720 + "reqwest", 2721 + "thiserror 1.0.69", 2722 + ] 2723 + 2724 + [[package]] 2725 + name = "rig-core" 2726 + version = "0.22.0" 2727 + source = "registry+https://github.com/rust-lang/crates.io-index" 2728 + checksum = "136b8115983df35be2c9b176c50c8a793886411e7b5ee8767b8c9cfd25e0ea90" 2729 + dependencies = [ 2730 + "as-any", 2731 + "async-stream", 2732 + "base64", 2733 + "bytes", 2734 + "futures", 2735 + "glob", 2736 + "http", 2737 + "mime_guess", 2738 + "ordered-float 5.1.0", 2739 + "reqwest", 2740 + "reqwest-eventsource", 2741 + "schemars", 2742 + "serde", 2743 + "serde_json", 2744 + "thiserror 2.0.17", 2745 + "tokio", 2746 + "tracing", 2747 + "tracing-futures", 2748 + "url", 2749 + ] 2750 + 2751 + [[package]] 1185 2752 name = "ring" 1186 2753 version = "0.17.14" 1187 2754 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1196 2763 ] 1197 2764 1198 2765 [[package]] 2766 + name = "rstest" 2767 + version = "0.25.0" 2768 + source = "registry+https://github.com/rust-lang/crates.io-index" 2769 + checksum = "6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d" 2770 + dependencies = [ 2771 + "futures-timer", 2772 + "futures-util", 2773 + "rstest_macros", 2774 + "rustc_version", 2775 + ] 2776 + 2777 + [[package]] 2778 + name = "rstest_macros" 2779 + version = "0.25.0" 2780 + source = "registry+https://github.com/rust-lang/crates.io-index" 2781 + checksum = "1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746" 2782 + dependencies = [ 2783 + "cfg-if", 2784 + "glob", 2785 + "proc-macro-crate", 2786 + "proc-macro2", 2787 + "quote", 2788 + "regex", 2789 + "relative-path", 2790 + "rustc_version", 2791 + "syn 2.0.113", 2792 + "unicode-ident", 2793 + ] 2794 + 2795 + [[package]] 2796 + name = "rustc_version" 2797 + version = "0.4.1" 2798 + source = "registry+https://github.com/rust-lang/crates.io-index" 2799 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2800 + dependencies = [ 2801 + "semver", 2802 + ] 2803 + 2804 + [[package]] 1199 2805 name = "rustix" 1200 2806 version = "1.1.3" 1201 2807 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1287 2893 ] 1288 2894 1289 2895 [[package]] 2896 + name = "schemars" 2897 + version = "1.2.0" 2898 + source = "registry+https://github.com/rust-lang/crates.io-index" 2899 + checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" 2900 + dependencies = [ 2901 + "dyn-clone", 2902 + "ref-cast", 2903 + "schemars_derive", 2904 + "serde", 2905 + "serde_json", 2906 + ] 2907 + 2908 + [[package]] 2909 + name = "schemars_derive" 2910 + version = "1.2.0" 2911 + source = "registry+https://github.com/rust-lang/crates.io-index" 2912 + checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" 2913 + dependencies = [ 2914 + "proc-macro2", 2915 + "quote", 2916 + "serde_derive_internals", 2917 + "syn 2.0.113", 2918 + ] 2919 + 2920 + [[package]] 2921 + name = "scopeguard" 2922 + version = "1.2.0" 2923 + source = "registry+https://github.com/rust-lang/crates.io-index" 2924 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2925 + 2926 + [[package]] 1290 2927 name = "security-framework" 1291 2928 version = "2.11.1" 1292 2929 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1310 2947 ] 1311 2948 1312 2949 [[package]] 2950 + name = "semver" 2951 + version = "1.0.27" 2952 + source = "registry+https://github.com/rust-lang/crates.io-index" 2953 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 2954 + 2955 + [[package]] 2956 + name = "seq-macro" 2957 + version = "0.3.6" 2958 + source = "registry+https://github.com/rust-lang/crates.io-index" 2959 + checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" 2960 + 2961 + [[package]] 1313 2962 name = "serde" 1314 2963 version = "1.0.228" 1315 2964 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1336 2985 dependencies = [ 1337 2986 "proc-macro2", 1338 2987 "quote", 1339 - "syn", 2988 + "syn 2.0.113", 2989 + ] 2990 + 2991 + [[package]] 2992 + name = "serde_derive_internals" 2993 + version = "0.29.1" 2994 + source = "registry+https://github.com/rust-lang/crates.io-index" 2995 + checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" 2996 + dependencies = [ 2997 + "proc-macro2", 2998 + "quote", 2999 + "syn 2.0.113", 1340 3000 ] 1341 3001 1342 3002 [[package]] ··· 1345 3005 source = "registry+https://github.com/rust-lang/crates.io-index" 1346 3006 checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" 1347 3007 dependencies = [ 3008 + "indexmap", 1348 3009 "itoa", 1349 3010 "memchr", 1350 3011 "serde", ··· 1353 3014 ] 1354 3015 1355 3016 [[package]] 3017 + name = "serde_spanned" 3018 + version = "1.0.4" 3019 + source = "registry+https://github.com/rust-lang/crates.io-index" 3020 + checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" 3021 + dependencies = [ 3022 + "serde_core", 3023 + ] 3024 + 3025 + [[package]] 1356 3026 name = "serde_urlencoded" 1357 3027 version = "0.7.1" 1358 3028 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1365 3035 ] 1366 3036 1367 3037 [[package]] 3038 + name = "sharded-slab" 3039 + version = "0.1.7" 3040 + source = "registry+https://github.com/rust-lang/crates.io-index" 3041 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3042 + dependencies = [ 3043 + "lazy_static", 3044 + ] 3045 + 3046 + [[package]] 1368 3047 name = "shlex" 1369 3048 version = "1.3.0" 1370 3049 source = "registry+https://github.com/rust-lang/crates.io-index" 1371 3050 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1372 3051 1373 3052 [[package]] 3053 + name = "signal-hook-registry" 3054 + version = "1.4.8" 3055 + source = "registry+https://github.com/rust-lang/crates.io-index" 3056 + checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" 3057 + dependencies = [ 3058 + "errno", 3059 + "libc", 3060 + ] 3061 + 3062 + [[package]] 1374 3063 name = "simd-adler32" 1375 3064 version = "0.3.8" 1376 3065 source = "registry+https://github.com/rust-lang/crates.io-index" 1377 3066 checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 1378 3067 1379 3068 [[package]] 3069 + name = "simdutf8" 3070 + version = "0.1.5" 3071 + source = "registry+https://github.com/rust-lang/crates.io-index" 3072 + checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 3073 + 3074 + [[package]] 1380 3075 name = "slab" 1381 3076 version = "0.4.11" 1382 3077 source = "registry+https://github.com/rust-lang/crates.io-index" 1383 3078 checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 1384 3079 1385 3080 [[package]] 3081 + name = "small_ctor" 3082 + version = "0.1.2" 3083 + source = "registry+https://github.com/rust-lang/crates.io-index" 3084 + checksum = "88414a5ca1f85d82cc34471e975f0f74f6aa54c40f062efa42c0080e7f763f81" 3085 + 3086 + [[package]] 1386 3087 name = "smallvec" 1387 3088 version = "1.15.1" 1388 3089 source = "registry+https://github.com/rust-lang/crates.io-index" 1389 3090 checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 3091 + 3092 + [[package]] 3093 + name = "snap" 3094 + version = "1.1.1" 3095 + source = "registry+https://github.com/rust-lang/crates.io-index" 3096 + checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" 1390 3097 1391 3098 [[package]] 1392 3099 name = "socket2" ··· 1410 3117 ] 1411 3118 1412 3119 [[package]] 3120 + name = "spin" 3121 + version = "0.9.8" 3122 + source = "registry+https://github.com/rust-lang/crates.io-index" 3123 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3124 + dependencies = [ 3125 + "lock_api", 3126 + ] 3127 + 3128 + [[package]] 1413 3129 name = "stable_deref_trait" 1414 3130 version = "1.2.1" 1415 3131 source = "registry+https://github.com/rust-lang/crates.io-index" 1416 3132 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 3133 + 3134 + [[package]] 3135 + name = "strsim" 3136 + version = "0.10.0" 3137 + source = "registry+https://github.com/rust-lang/crates.io-index" 3138 + checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1417 3139 1418 3140 [[package]] 1419 3141 name = "strsim" ··· 1429 3151 1430 3152 [[package]] 1431 3153 name = "syn" 3154 + version = "1.0.109" 3155 + source = "registry+https://github.com/rust-lang/crates.io-index" 3156 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3157 + dependencies = [ 3158 + "proc-macro2", 3159 + "quote", 3160 + "unicode-ident", 3161 + ] 3162 + 3163 + [[package]] 3164 + name = "syn" 1432 3165 version = "2.0.113" 1433 3166 source = "registry+https://github.com/rust-lang/crates.io-index" 1434 3167 checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" ··· 1455 3188 dependencies = [ 1456 3189 "proc-macro2", 1457 3190 "quote", 1458 - "syn", 3191 + "syn 2.0.113", 1459 3192 ] 1460 3193 1461 3194 [[package]] ··· 1493 3226 ] 1494 3227 1495 3228 [[package]] 3229 + name = "terminal_size" 3230 + version = "0.4.3" 3231 + source = "registry+https://github.com/rust-lang/crates.io-index" 3232 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 3233 + dependencies = [ 3234 + "rustix", 3235 + "windows-sys 0.60.2", 3236 + ] 3237 + 3238 + [[package]] 3239 + name = "thiserror" 3240 + version = "1.0.69" 3241 + source = "registry+https://github.com/rust-lang/crates.io-index" 3242 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3243 + dependencies = [ 3244 + "thiserror-impl 1.0.69", 3245 + ] 3246 + 3247 + [[package]] 1496 3248 name = "thiserror" 1497 3249 version = "2.0.17" 1498 3250 source = "registry+https://github.com/rust-lang/crates.io-index" 1499 3251 checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 1500 3252 dependencies = [ 1501 - "thiserror-impl", 3253 + "thiserror-impl 2.0.17", 3254 + ] 3255 + 3256 + [[package]] 3257 + name = "thiserror-impl" 3258 + version = "1.0.69" 3259 + source = "registry+https://github.com/rust-lang/crates.io-index" 3260 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3261 + dependencies = [ 3262 + "proc-macro2", 3263 + "quote", 3264 + "syn 2.0.113", 1502 3265 ] 1503 3266 1504 3267 [[package]] ··· 1509 3272 dependencies = [ 1510 3273 "proc-macro2", 1511 3274 "quote", 1512 - "syn", 3275 + "syn 2.0.113", 3276 + ] 3277 + 3278 + [[package]] 3279 + name = "thread_local" 3280 + version = "1.1.9" 3281 + source = "registry+https://github.com/rust-lang/crates.io-index" 3282 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 3283 + dependencies = [ 3284 + "cfg-if", 3285 + ] 3286 + 3287 + [[package]] 3288 + name = "thrift" 3289 + version = "0.17.0" 3290 + source = "registry+https://github.com/rust-lang/crates.io-index" 3291 + checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" 3292 + dependencies = [ 3293 + "byteorder", 3294 + "integer-encoding", 3295 + "ordered-float 2.10.1", 1513 3296 ] 1514 3297 1515 3298 [[package]] 1516 3299 name = "tilekit" 1517 3300 version = "0.1.0" 1518 3301 dependencies = [ 1519 - "nom", 3302 + "anyhow", 3303 + "bon", 3304 + "dspy-rs", 3305 + "indexmap", 3306 + "nom 8.0.0", 3307 + "serde", 3308 + "serde_json", 3309 + "tokio", 1520 3310 ] 1521 3311 1522 3312 [[package]] ··· 1537 3327 ] 1538 3328 1539 3329 [[package]] 3330 + name = "tiny-keccak" 3331 + version = "2.0.2" 3332 + source = "registry+https://github.com/rust-lang/crates.io-index" 3333 + checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 3334 + dependencies = [ 3335 + "crunchy", 3336 + ] 3337 + 3338 + [[package]] 1540 3339 name = "tinystr" 1541 3340 version = "0.8.2" 1542 3341 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1555 3354 "bytes", 1556 3355 "libc", 1557 3356 "mio", 3357 + "parking_lot", 1558 3358 "pin-project-lite", 3359 + "signal-hook-registry", 1559 3360 "socket2", 1560 3361 "tokio-macros", 1561 3362 "windows-sys 0.61.2", ··· 1569 3370 dependencies = [ 1570 3371 "proc-macro2", 1571 3372 "quote", 1572 - "syn", 3373 + "syn 2.0.113", 1573 3374 ] 1574 3375 1575 3376 [[package]] ··· 1606 3407 ] 1607 3408 1608 3409 [[package]] 3410 + name = "toml" 3411 + version = "0.9.11+spec-1.1.0" 3412 + source = "registry+https://github.com/rust-lang/crates.io-index" 3413 + checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" 3414 + dependencies = [ 3415 + "indexmap", 3416 + "serde_core", 3417 + "serde_spanned", 3418 + "toml_datetime", 3419 + "toml_parser", 3420 + "toml_writer", 3421 + "winnow", 3422 + ] 3423 + 3424 + [[package]] 3425 + name = "toml_datetime" 3426 + version = "0.7.5+spec-1.1.0" 3427 + source = "registry+https://github.com/rust-lang/crates.io-index" 3428 + checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" 3429 + dependencies = [ 3430 + "serde_core", 3431 + ] 3432 + 3433 + [[package]] 3434 + name = "toml_edit" 3435 + version = "0.23.10+spec-1.0.0" 3436 + source = "registry+https://github.com/rust-lang/crates.io-index" 3437 + checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" 3438 + dependencies = [ 3439 + "indexmap", 3440 + "toml_datetime", 3441 + "toml_parser", 3442 + "winnow", 3443 + ] 3444 + 3445 + [[package]] 3446 + name = "toml_parser" 3447 + version = "1.0.6+spec-1.1.0" 3448 + source = "registry+https://github.com/rust-lang/crates.io-index" 3449 + checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" 3450 + dependencies = [ 3451 + "winnow", 3452 + ] 3453 + 3454 + [[package]] 3455 + name = "toml_writer" 3456 + version = "1.0.6+spec-1.1.0" 3457 + source = "registry+https://github.com/rust-lang/crates.io-index" 3458 + checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" 3459 + 3460 + [[package]] 1609 3461 name = "tower" 1610 3462 version = "0.5.2" 1611 3463 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1657 3509 checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 1658 3510 dependencies = [ 1659 3511 "pin-project-lite", 3512 + "tracing-attributes", 1660 3513 "tracing-core", 1661 3514 ] 1662 3515 1663 3516 [[package]] 3517 + name = "tracing-attributes" 3518 + version = "0.1.31" 3519 + source = "registry+https://github.com/rust-lang/crates.io-index" 3520 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 3521 + dependencies = [ 3522 + "proc-macro2", 3523 + "quote", 3524 + "syn 2.0.113", 3525 + ] 3526 + 3527 + [[package]] 1664 3528 name = "tracing-core" 1665 3529 version = "0.1.36" 1666 3530 source = "registry+https://github.com/rust-lang/crates.io-index" 1667 3531 checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 1668 3532 dependencies = [ 1669 3533 "once_cell", 3534 + "valuable", 3535 + ] 3536 + 3537 + [[package]] 3538 + name = "tracing-futures" 3539 + version = "0.2.5" 3540 + source = "registry+https://github.com/rust-lang/crates.io-index" 3541 + checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 3542 + dependencies = [ 3543 + "futures", 3544 + "futures-task", 3545 + "pin-project", 3546 + "tracing", 3547 + ] 3548 + 3549 + [[package]] 3550 + name = "tracing-log" 3551 + version = "0.2.0" 3552 + source = "registry+https://github.com/rust-lang/crates.io-index" 3553 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3554 + dependencies = [ 3555 + "log", 3556 + "once_cell", 3557 + "tracing-core", 3558 + ] 3559 + 3560 + [[package]] 3561 + name = "tracing-subscriber" 3562 + version = "0.3.22" 3563 + source = "registry+https://github.com/rust-lang/crates.io-index" 3564 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 3565 + dependencies = [ 3566 + "nu-ansi-term", 3567 + "sharded-slab", 3568 + "smallvec", 3569 + "thread_local", 3570 + "tracing-core", 3571 + "tracing-log", 1670 3572 ] 1671 3573 1672 3574 [[package]] ··· 1674 3576 version = "0.2.5" 1675 3577 source = "registry+https://github.com/rust-lang/crates.io-index" 1676 3578 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3579 + 3580 + [[package]] 3581 + name = "twox-hash" 3582 + version = "2.1.2" 3583 + source = "registry+https://github.com/rust-lang/crates.io-index" 3584 + checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" 3585 + dependencies = [ 3586 + "rand 0.9.2", 3587 + ] 3588 + 3589 + [[package]] 3590 + name = "unicase" 3591 + version = "2.9.0" 3592 + source = "registry+https://github.com/rust-lang/crates.io-index" 3593 + checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" 1677 3594 1678 3595 [[package]] 1679 3596 name = "unicode-ident" ··· 1744 3661 checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1745 3662 1746 3663 [[package]] 3664 + name = "valuable" 3665 + version = "0.1.1" 3666 + source = "registry+https://github.com/rust-lang/crates.io-index" 3667 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3668 + 3669 + [[package]] 1747 3670 name = "vcpkg" 1748 3671 version = "0.2.15" 1749 3672 source = "registry+https://github.com/rust-lang/crates.io-index" 1750 3673 checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3674 + 3675 + [[package]] 3676 + name = "version_check" 3677 + version = "0.9.5" 3678 + source = "registry+https://github.com/rust-lang/crates.io-index" 3679 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1751 3680 1752 3681 [[package]] 1753 3682 name = "want" ··· 1818 3747 "bumpalo", 1819 3748 "proc-macro2", 1820 3749 "quote", 1821 - "syn", 3750 + "syn 2.0.113", 1822 3751 "wasm-bindgen-shared", 1823 3752 ] 1824 3753 ··· 1905 3834 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1906 3835 1907 3836 [[package]] 3837 + name = "windows-core" 3838 + version = "0.62.2" 3839 + source = "registry+https://github.com/rust-lang/crates.io-index" 3840 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 3841 + dependencies = [ 3842 + "windows-implement", 3843 + "windows-interface", 3844 + "windows-link", 3845 + "windows-result", 3846 + "windows-strings", 3847 + ] 3848 + 3849 + [[package]] 3850 + name = "windows-implement" 3851 + version = "0.60.2" 3852 + source = "registry+https://github.com/rust-lang/crates.io-index" 3853 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3854 + dependencies = [ 3855 + "proc-macro2", 3856 + "quote", 3857 + "syn 2.0.113", 3858 + ] 3859 + 3860 + [[package]] 3861 + name = "windows-interface" 3862 + version = "0.59.3" 3863 + source = "registry+https://github.com/rust-lang/crates.io-index" 3864 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3865 + dependencies = [ 3866 + "proc-macro2", 3867 + "quote", 3868 + "syn 2.0.113", 3869 + ] 3870 + 3871 + [[package]] 1908 3872 name = "windows-link" 1909 3873 version = "0.2.1" 1910 3874 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2105 4069 checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 2106 4070 2107 4071 [[package]] 4072 + name = "winnow" 4073 + version = "0.7.14" 4074 + source = "registry+https://github.com/rust-lang/crates.io-index" 4075 + checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" 4076 + dependencies = [ 4077 + "memchr", 4078 + ] 4079 + 4080 + [[package]] 2108 4081 name = "wit-bindgen" 2109 4082 version = "0.46.0" 2110 4083 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2135 4108 dependencies = [ 2136 4109 "proc-macro2", 2137 4110 "quote", 2138 - "syn", 4111 + "syn 2.0.113", 2139 4112 "synstructure", 2140 4113 ] 2141 4114 ··· 2156 4129 dependencies = [ 2157 4130 "proc-macro2", 2158 4131 "quote", 2159 - "syn", 4132 + "syn 2.0.113", 2160 4133 ] 2161 4134 2162 4135 [[package]] ··· 2176 4149 dependencies = [ 2177 4150 "proc-macro2", 2178 4151 "quote", 2179 - "syn", 4152 + "syn 2.0.113", 2180 4153 "synstructure", 2181 4154 ] 2182 4155 ··· 2216 4189 dependencies = [ 2217 4190 "proc-macro2", 2218 4191 "quote", 2219 - "syn", 4192 + "syn 2.0.113", 2220 4193 ] 2221 4194 2222 4195 [[package]] 4196 + name = "zlib-rs" 4197 + version = "0.5.5" 4198 + source = "registry+https://github.com/rust-lang/crates.io-index" 4199 + checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" 4200 + 4201 + [[package]] 2223 4202 name = "zmij" 2224 4203 version = "1.0.10" 2225 4204 source = "registry+https://github.com/rust-lang/crates.io-index" 2226 4205 checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" 4206 + 4207 + [[package]] 4208 + name = "zstd" 4209 + version = "0.13.3" 4210 + source = "registry+https://github.com/rust-lang/crates.io-index" 4211 + checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" 4212 + dependencies = [ 4213 + "zstd-safe", 4214 + ] 4215 + 4216 + [[package]] 4217 + name = "zstd-safe" 4218 + version = "7.2.4" 4219 + source = "registry+https://github.com/rust-lang/crates.io-index" 4220 + checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" 4221 + dependencies = [ 4222 + "zstd-sys", 4223 + ] 4224 + 4225 + [[package]] 4226 + name = "zstd-sys" 4227 + version = "2.0.16+zstd.1.5.7" 4228 + source = "registry+https://github.com/rust-lang/crates.io-index" 4229 + checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" 4230 + dependencies = [ 4231 + "cc", 4232 + "pkg-config", 4233 + ]
+7
tilekit/Cargo.toml
··· 5 5 6 6 [dependencies] 7 7 nom = "8" 8 + serde = { version = "1.0", features = ["derive"] } 9 + serde_json = "1.0" 10 + anyhow = "1.0" 11 + tokio = { version = "1" , features = ["macros", "rt-multi-thread"]} 12 + dspy-rs = "0.7.3" 13 + bon = "3.7.0" 14 + indexmap = "2.2.0"
+1
tilekit/src/lib.rs
··· 1 1 pub mod modelfile; 2 + pub mod optimize;
+14 -8
tilekit/src/modelfile.rs
··· 167 167 } 168 168 169 169 pub fn add_system(&mut self, value: &str) -> Result<(), String> { 170 - if self.system.is_some() { 171 - let error = "Modelfile can only have one SYSTEM instruction".to_owned(); 172 - self.errors.push(error.clone()); 170 + self.system = Some(value.to_owned()); 171 + let formatted = format!("SYSTEM {}", value); 173 172 174 - self.data.push(format!("SYSTEM {}", value)); 175 - Err(error) 176 - } else { 177 - self.system = Some(value.to_owned()); 178 - Ok(()) 173 + // Find and replace or add to data 174 + let mut found = false; 175 + for line in self.data.iter_mut() { 176 + if line.to_uppercase().starts_with("SYSTEM") { 177 + *line = formatted.clone(); 178 + found = true; 179 + break; 180 + } 179 181 } 182 + if !found { 183 + self.data.push(formatted); 184 + } 185 + Ok(()) 180 186 } 181 187 182 188 pub fn add_comment(&mut self, value: &str) -> Result<(), String> {
+370
tilekit/src/optimize.rs
··· 1 + use crate::modelfile::Modelfile; 2 + use bon::Builder; 3 + use dspy_rs::{ 4 + COPRO, ChatAdapter, Evaluator, Example, LM, MetaSignature, Module, Optimizable, Optimizer, 5 + Predict, Prediction, Predictor, Signature, configure, example, 6 + }; 7 + use indexmap::IndexMap; 8 + use serde::Deserialize; 9 + use std::collections::HashSet; 10 + use std::fs; 11 + 12 + #[derive(Debug, Deserialize)] 13 + struct TrainingExample { 14 + input: String, 15 + output: String, 16 + } 17 + 18 + #[Signature] 19 + pub struct SystemPromptSignature { 20 + /// Act as a task-specific assistant based on the instructions provided. 21 + #[input] 22 + pub user_input: String, 23 + #[output] 24 + pub ai_response: String, 25 + } 26 + 27 + #[Signature] 28 + pub struct SyntheticDataSignature { 29 + /// You are a data generator. Given a SYSTEM prompt, generate a JSON array of 5 diverse and representative training examples. 30 + /// Each example must be a JSON object with EXACTLY two fields: "input" (the user's query) and "output" (the expected AI response). 31 + #[input] 32 + pub system_prompt: String, 33 + #[output] 34 + /// A JSON array like: [{"input": "...", "output": "..."}, ...] 35 + pub synthetic_data: String, 36 + } 37 + 38 + #[derive(Builder)] 39 + pub struct PromptOptimizerModule { 40 + #[builder(default = Predict::new(SystemPromptSignature::new()))] 41 + pub predictor: Predict, 42 + } 43 + 44 + impl Module for PromptOptimizerModule { 45 + async fn forward(&self, inputs: Example) -> anyhow::Result<Prediction> { 46 + self.predictor.forward(inputs).await 47 + } 48 + } 49 + 50 + impl Optimizable for PromptOptimizerModule { 51 + fn parameters(&mut self) -> IndexMap<String, &mut dyn Optimizable> { 52 + let mut params: IndexMap<String, &mut dyn Optimizable> = IndexMap::new(); 53 + params.insert("predictor".to_string(), &mut self.predictor); 54 + params 55 + } 56 + } 57 + 58 + impl Evaluator for PromptOptimizerModule { 59 + async fn metric(&self, example: &Example, prediction: &Prediction) -> f32 { 60 + let ai_response_field = prediction.get("ai_response", None); 61 + let ai_response = ai_response_field.as_str().unwrap_or(""); 62 + 63 + let ground_truth_field = example.get("ai_response", None); 64 + let ground_truth = ground_truth_field.as_str().unwrap_or(""); 65 + 66 + let mut score = 0.0; 67 + 68 + // 1. Correctness Signal: Similarity to ground truth (Dice coefficient) 69 + if !ground_truth.is_empty() { 70 + let pred_tokens: HashSet<_> = ai_response.split_whitespace().collect(); 71 + let gt_tokens: HashSet<_> = ground_truth.split_whitespace().collect(); 72 + 73 + if !pred_tokens.is_empty() && !gt_tokens.is_empty() { 74 + let intersection = pred_tokens.intersection(&gt_tokens).count(); 75 + let similarity = 76 + 2.0 * (intersection as f32) / ((pred_tokens.len() + gt_tokens.len()) as f32); 77 + 78 + // Boost for exact match 79 + if ai_response.trim() == ground_truth.trim() { 80 + score += 0.5; 81 + } else { 82 + score += similarity * 0.4; 83 + } 84 + } 85 + } 86 + 87 + // 2. Formatting & Persona Heuristics (weighted lower now that we have ground truth) 88 + 89 + // Reward non-empty responses 90 + if !ai_response.is_empty() { 91 + score += 0.1; 92 + } 93 + 94 + // Reward reasonable length 95 + let len = ai_response.len(); 96 + if len > 50 && len < 1000 { 97 + score += 0.1; 98 + } 99 + 100 + // Reward structure (presence of newlines or bullet points often indicate better prompts/responses) 101 + if ai_response.contains('\n') || ai_response.contains('-') || ai_response.contains('*') { 102 + score += 0.1; 103 + } 104 + 105 + // Reward persona-like language 106 + let lower = ai_response.to_lowercase(); 107 + if lower.contains("you are") || lower.contains("act as") || lower.contains("assistant") { 108 + score += 0.2; 109 + } 110 + 111 + score 112 + } 113 + } 114 + 115 + pub async fn optimize( 116 + modelfile_path: String, 117 + data_path: Option<String>, 118 + model: String, 119 + ) -> Result<Modelfile, String> { 120 + println!("Optimizing Modelfile: {}", modelfile_path); 121 + 122 + // 1. Read Modelfile 123 + let content = fs::read_to_string(&modelfile_path) 124 + .map_err(|e| format!("Error reading Modelfile: {}", e))?; 125 + 126 + let mut modelfile: Modelfile = content 127 + .parse() 128 + .map_err(|e| format!("Error parsing Modelfile: {}", e))?; 129 + 130 + let system_prompt = modelfile.system.clone().unwrap_or_default(); 131 + if system_prompt.trim().is_empty() { 132 + return Err( 133 + "Error: The Modelfile has an empty SYSTEM prompt. Optimization requires a starting prompt to understand the task objective.".to_string() 134 + ); 135 + } 136 + println!("Current SYSTEM prompt: \"{}\"", system_prompt); 137 + 138 + // 2. Configure DSRs 139 + let lm = LM::builder().model(model).build().await.map_err(|e| { 140 + format!( 141 + "Error configuring LM: {}. Make sure appropriate API keys are set.", 142 + e 143 + ) 144 + })?; 145 + 146 + configure(lm, ChatAdapter); 147 + 148 + // 3. Load or Generate Training Data 149 + let examples = if let Some(path) = data_path { 150 + println!("Loading training data from: {}", path); 151 + let content = fs::read_to_string(&path) 152 + .map_err(|e| format!("Error reading data file {}: {}", path, e))?; 153 + 154 + let data: Vec<TrainingExample> = serde_json::from_str(&content) 155 + .map_err(|e| format!("Error parsing data file {}: {}", path, e))?; 156 + 157 + data.into_iter() 158 + .map(|e| { 159 + example! { 160 + "user_input": "input" => e.input, 161 + "ai_response": "output" => e.output, 162 + } 163 + }) 164 + .collect() 165 + } else { 166 + println!("No training data provided. Generating synthetic examples..."); 167 + generate_synthetic_examples(&system_prompt) 168 + .await 169 + .map_err(|e| format!("Failed to generate synthetic examples: {}", e))? 170 + }; 171 + 172 + if examples.is_empty() { 173 + return Err("No training examples available. Cannot optimize effectively.".to_string()); 174 + } 175 + 176 + // 4. Run COPRO Optimizer 177 + println!( 178 + "Running COPRO optimizer with {} examples...", 179 + examples.len() 180 + ); 181 + 182 + let mut sig = SystemPromptSignature::new(); 183 + sig.update_instruction(system_prompt.clone()).map_err(|e| { 184 + format!( 185 + "Error setting initial system prompt: {}. Prompt: \"{}\"", 186 + e, system_prompt 187 + ) 188 + })?; 189 + 190 + let mut module = PromptOptimizerModule::builder() 191 + .predictor(Predict::new(sig)) 192 + .build(); 193 + 194 + let optimizer = COPRO::builder().breadth(5).depth(2).build(); 195 + 196 + optimizer 197 + .compile(&mut module, examples) 198 + .await 199 + .map_err(|e| format!("Optimization failed: {}", e))?; 200 + 201 + let optimized_instructions = module.predictor.get_signature().instruction(); 202 + println!("Optimization complete!"); 203 + println!("New SYSTEM prompt: \n{}", optimized_instructions); 204 + 205 + // 5. Update Modelfile 206 + let _ = modelfile.add_system(&optimized_instructions); 207 + 208 + Ok(modelfile) 209 + } 210 + 211 + async fn generate_synthetic_examples(system_prompt: &str) -> anyhow::Result<Vec<Example>> { 212 + let predictor = Predict::new(SyntheticDataSignature::new()); 213 + let input = example! { 214 + "system_prompt": "input" => system_prompt.to_string(), 215 + }; 216 + 217 + let prediction = predictor.forward(input).await?; 218 + let field = prediction.get("synthetic_data", None); 219 + let synthetic_json = field.as_str().unwrap_or(""); 220 + 221 + // Clean up potential markdown formatting 222 + let clean_json = synthetic_json 223 + .trim() 224 + .trim_start_matches("```json") 225 + .trim_start_matches("```") 226 + .trim_end_matches("```") 227 + .trim(); 228 + 229 + let data: Vec<TrainingExample> = serde_json::from_str(clean_json)?; 230 + 231 + Ok(data 232 + .into_iter() 233 + .map(|e| { 234 + example! { 235 + "user_input": "input" => e.input, 236 + "ai_response": "output" => e.output, 237 + } 238 + }) 239 + .collect()) 240 + } 241 + 242 + #[cfg(test)] 243 + mod tests { 244 + use super::*; 245 + use dspy_rs::{LmUsage, Prediction}; 246 + use std::collections::HashMap; 247 + 248 + #[tokio::test] 249 + async fn test_metric_exact_match() { 250 + let module = PromptOptimizerModule::builder().build(); 251 + let example = example! { 252 + "ai_response" : "output" => "Hello world", 253 + }; 254 + let mut data = HashMap::new(); 255 + data.insert("ai_response".to_string(), "Hello world".into()); 256 + let prediction = Prediction::new(data, LmUsage::default()); 257 + 258 + let score = module.metric(&example, &prediction).await; 259 + assert!(score >= 0.6); 260 + } 261 + 262 + #[tokio::test] 263 + async fn test_metric_no_match() { 264 + let module = PromptOptimizerModule::builder().build(); 265 + let example = example! { 266 + "ai_response" : "output" => "Hello world", 267 + }; 268 + let mut data = HashMap::new(); 269 + data.insert("ai_response".to_string(), "Goodbye universe".into()); 270 + let prediction = Prediction::new(data, LmUsage::default()); 271 + 272 + let score = module.metric(&example, &prediction).await; 273 + assert!(score <= 0.2); 274 + } 275 + 276 + #[tokio::test] 277 + async fn test_metric_persona() { 278 + let module = PromptOptimizerModule::builder().build(); 279 + let example = example! { 280 + "ai_response" : "output" => "Hello", 281 + }; 282 + let mut data = HashMap::new(); 283 + data.insert("ai_response".to_string(), "Act as an assistant".into()); 284 + let prediction = Prediction::new(data, LmUsage::default()); 285 + 286 + let score = module.metric(&example, &prediction).await; 287 + assert!(score >= 0.3); 288 + } 289 + 290 + #[tokio::test] 291 + async fn test_metric_empty_response() { 292 + let module = PromptOptimizerModule::builder().build(); 293 + let example = example! { 294 + "ai_response" : "output" => "Hello world", 295 + }; 296 + let mut data = HashMap::new(); 297 + data.insert("ai_response".to_string(), "".into()); 298 + let prediction = Prediction::new(data, LmUsage::default()); 299 + 300 + let score = module.metric(&example, &prediction).await; 301 + assert!(score == 0.0); 302 + } 303 + 304 + #[tokio::test] 305 + async fn test_metric_partial_match() { 306 + let module = PromptOptimizerModule::builder().build(); 307 + let example = example! { 308 + "ai_response" : "output" => "Hello world how are you", 309 + }; 310 + let mut data = HashMap::new(); 311 + data.insert("ai_response".to_string(), "Hello world".into()); 312 + let prediction = Prediction::new(data, LmUsage::default()); 313 + 314 + let score = module.metric(&example, &prediction).await; 315 + // Partial match should score between 0 and exact match 316 + assert!(score > 0.0 && score < 0.6); 317 + } 318 + 319 + #[tokio::test] 320 + async fn test_metric_structure_bonus() { 321 + let module = PromptOptimizerModule::builder().build(); 322 + let example = example! { 323 + "ai_response" : "output" => "test", 324 + }; 325 + let mut data = HashMap::new(); 326 + data.insert( 327 + "ai_response".to_string(), 328 + "Line 1\nLine 2\n- bullet point".into(), 329 + ); 330 + let prediction = Prediction::new(data, LmUsage::default()); 331 + 332 + let score = module.metric(&example, &prediction).await; 333 + // Should get structure bonus for newlines and bullet points 334 + assert!(score >= 0.2); 335 + } 336 + 337 + #[tokio::test] 338 + async fn test_optimize_missing_file() { 339 + let result = optimize( 340 + "nonexistent_file.modelfile".to_string(), 341 + None, 342 + "openai:gpt-4o-mini".to_string(), 343 + ) 344 + .await; 345 + 346 + assert!(result.is_err()); 347 + assert!(result.unwrap_err().contains("Error reading Modelfile")); 348 + } 349 + 350 + #[tokio::test] 351 + async fn test_optimize_empty_system_prompt() { 352 + // Create a temp file with no system prompt 353 + let temp_dir = std::env::temp_dir(); 354 + let temp_file = temp_dir.join("test_empty_system.modelfile"); 355 + std::fs::write(&temp_file, "FROM llama3.2\n").unwrap(); 356 + 357 + let result = optimize( 358 + temp_file.to_string_lossy().to_string(), 359 + None, 360 + "openai:gpt-4o-mini".to_string(), 361 + ) 362 + .await; 363 + 364 + // Cleanup 365 + let _ = std::fs::remove_file(&temp_file); 366 + 367 + assert!(result.is_err()); 368 + assert!(result.unwrap_err().contains("empty SYSTEM prompt")); 369 + } 370 + }
+14
tiles/fixtures/optimize_data.json
··· 1 + [ 2 + { 3 + "input": "Summarize this article: [long text about climate change]", 4 + "output": "The article discusses the impact of climate change on biodiversity and suggests mitigation strategies like reforestation." 5 + }, 6 + { 7 + "input": "Write a python function to sort a list", 8 + "output": "def sort_list(l): return sorted(l)" 9 + }, 10 + { 11 + "input": "What is the capital of Japan?", 12 + "output": "The capital of Japan is Tokyo." 13 + } 14 + ]
+2
tiles/src/commands/mod.rs
··· 5 5 use tiles::utils::config::set_memory_path; 6 6 use tiles::{core::health, runtime::RunArgs}; 7 7 8 + pub use tilekit::optimize::optimize; 9 + 8 10 pub async fn run(runtime: &Runtime, run_args: RunArgs) { 9 11 runtime.run(run_args).await; 10 12 }
+23
tiles/src/main.rs
··· 30 30 31 31 /// start or stop the daemon server 32 32 Server(ServerArgs), 33 + 34 + /// Optimize the SYSTEM prompt in a Modelfile 35 + Optimize { 36 + /// Path to the Modelfile to optimize 37 + modelfile_path: String, 38 + 39 + /// Path to the training data (JSON) 40 + #[arg(short, long)] 41 + data: Option<String>, 42 + 43 + /// Model to use for optimization (e.g., openai:gpt-4o-mini, ollama:llama3) 44 + #[arg(long, default_value = "openai:gpt-4o-mini")] 45 + model: String, 46 + }, 33 47 } 34 48 35 49 #[derive(Debug, Args)] ··· 98 112 Commands::Memory(memory) => match memory.command { 99 113 MemoryCommands::SetPath { path } => commands::set_memory(path.as_str()), 100 114 }, 115 + Commands::Optimize { 116 + modelfile_path, 117 + data, 118 + model, 119 + } => { 120 + let modelfile = commands::optimize(modelfile_path.clone(), data, model).await?; 121 + std::fs::write(&modelfile_path, modelfile.to_string())?; 122 + println!("Successfully updated {}", modelfile_path); 123 + } 101 124 } 102 125 Ok(()) 103 126 }