arcus-cli 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/PKG-INFO +44 -52
  2. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/README.md +43 -51
  3. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/pyproject.toml +1 -1
  4. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/uv.lock +1 -1
  5. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  6. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  7. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.github/workflows/ci.yml +0 -0
  8. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.github/workflows/release.yml +0 -0
  9. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.gitignore +0 -0
  10. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/.python-version +0 -0
  11. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/CONTRIBUTING.md +0 -0
  12. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/LICENSE +0 -0
  13. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/__init__.py +0 -0
  14. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/adapters/__init__.py +0 -0
  15. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/adapters/arc_adapter.py +0 -0
  16. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/cache/__init__.py +0 -0
  17. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/cache/benchmark.py +0 -0
  18. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/cache/semantic_cache.py +0 -0
  19. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/cli.py +0 -0
  20. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/config.py +0 -0
  21. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/embeddings.py +0 -0
  22. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/eval/__init__.py +0 -0
  23. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/eval/offline.py +0 -0
  24. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/eval/regret.py +0 -0
  25. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/quality/__init__.py +0 -0
  26. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/quality/gate.py +0 -0
  27. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/__init__.py +0 -0
  28. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/bandit.py +0 -0
  29. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/context.py +0 -0
  30. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/model_catalog.py +0 -0
  31. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/reward.py +0 -0
  32. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/routing/warm_start.py +0 -0
  33. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/storage/__init__.py +0 -0
  34. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/storage/db.py +0 -0
  35. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/src/arcus/storage/stats.py +0 -0
  36. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/adapters/test_arc_adapter.py +0 -0
  37. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/adapters/test_arc_adapter_live.py +0 -0
  38. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/cache/test_benchmark.py +0 -0
  39. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/cache/test_semantic_cache.py +0 -0
  40. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/eval/test_offline.py +0 -0
  41. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/eval/test_regret.py +0 -0
  42. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/quality/test_gate.py +0 -0
  43. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/routing/test_bandit.py +0 -0
  44. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/routing/test_context.py +0 -0
  45. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/routing/test_model_catalog.py +0 -0
  46. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/routing/test_reward.py +0 -0
  47. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/routing/test_warm_start.py +0 -0
  48. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/storage/test_db.py +0 -0
  49. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/storage/test_stats.py +0 -0
  50. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/test_cli.py +0 -0
  51. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/test_config.py +0 -0
  52. {arcus_cli-0.2.0 → arcus_cli-0.2.1}/tests/test_embeddings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: arcus-cli
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Adaptive routing, a quality gate, and a correctness-aware cache on top of Virginia Tech ARC's LLM API
5
5
  Project-URL: Homepage, https://github.com/ShakirFarhan/Arcus
6
6
  Project-URL: Repository, https://github.com/ShakirFarhan/Arcus
@@ -147,16 +147,16 @@ anything that's no longer live, rather than routing to a model
147
147
  guaranteed to fail. Local history logged under a since-renamed model id
148
148
  is skipped the same way when the bandit's state gets rebuilt.
149
149
 
150
- Optionally, code, math, and long-document questions can also route
151
- across ARC's `-thinking-*` reasoning-effort model variants, not just
152
- the base four (`arcus config set enable_reasoning_variants true`,
153
- default off). Everyday questions stay on the fast base four either way.
154
- **This is built and unit tested but hasn't been run against a real ARC
155
- key from this environment**, ARC's docs list these as separate catalog
156
- model ids rather than a parameter on the base id, the same pattern
157
- already confirmed for web search's legacy-tool-calling variants below,
158
- but that specific assumption is unverified. Ask a code or math question
159
- after turning it on and confirm it actually answers before trusting it.
150
+ Optionally, code, math, and long-document questions can route across
151
+ ARC's `-thinking-*` reasoning-effort model variants too
152
+ (`arcus config set enable_reasoning_variants true`, default off).
153
+ Everyday questions stay on the fast base four either way. This is unit
154
+ tested but hasn't run against a real ARC key from this environment.
155
+ ARC's docs list these as separate catalog ids rather than a parameter
156
+ on the base model, the same pattern already confirmed for web search's
157
+ legacy-tool-calling variants below, but that's unverified here. Ask a
158
+ code or math question after turning it on and confirm it actually
159
+ answers before trusting it.
160
160
 
161
161
  ### Quality gate
162
162
 
@@ -438,47 +438,39 @@ on a handful of rows isn't a reliable comparison yet.
438
438
 
439
439
  ## Status
440
440
 
441
- Everything described above is implemented and working: the ARC adapter,
442
- context classification, all three bandit algorithms with propensity
443
- tracking, the reward function, the quality gate (including rate-limit
444
- backoff and VPN-restriction handling), the semantic cache and its
445
- benchmark, the CLI (ask command with a manual `--model` override, chat
446
- mode with inline attachments and transcript export, image input,
447
- document Q&A, web search, a config command, first-run wizard, error
448
- piping, stats, models, and offline eval), and the offline evaluation +
449
- regret benchmarking layer.
450
-
451
- Verified live against a real ARC key: all four models respond correctly
452
- (`tests/adapters/test_arc_adapter_live.py`), a full end-to-end
453
- `arcus "..."` run exercises the whole pipeline (context classification,
454
- cache miss, bandit routing, a real ARC call, the quality gate, logging,
455
- and caching the result) against real traffic, and image input, document
456
- Q&A, and web search have each been run against real responses too, not
457
- just unit tested. Test suite: 273 passing with a key set (269 plus 4
458
- live-only tests), 4 skipped without one.
459
-
460
- The one exception: reasoning-effort variant routing
461
- (`enable_reasoning_variants`) is unit tested against a fake adapter only,
462
- not yet confirmed against a real ARC key, and defaults off for exactly
463
- that reason. See "Adaptive routing" above.
464
-
465
- Worth knowing: ARC's models are reasoning models under the hood, they
466
- write to a hidden `reasoning` field before `content`, so a small
467
- `max_tokens` budget can get entirely spent on reasoning before any real
468
- answer comes out. The CLI itself never sets `max_tokens`, so normal
469
- usage isn't affected, ARC's server-side default leaves plenty of room,
470
- this only matters if you're calling the adapter directly with a tight
471
- budget of your own.
472
-
473
- What's still open:
474
-
475
- - Real logged usage is still thin (a handful of manual runs). `arcus
476
- eval` runs the comparison today, it's just not resting on enough
477
- data yet to trust the numbers, it says so when that's the case rather
478
- than presenting a false-confidence table.
479
- - Reasoning-effort variant routing needs a live-key run to confirm ARC
480
- actually serves the `-thinking-*` ids the way its docs describe,
481
- before it's safe to turn on by default.
441
+ Everything above is built and working, adapter, context classification,
442
+ all three bandit algorithms, the reward function, the quality gate, the
443
+ semantic cache, the offline eval / regret code. The CLI covers all of
444
+ it: asking directly (with an optional `--model` override), chat with
445
+ inline attachments and transcript export, image/doc/web modes, config,
446
+ stats, and eval.
447
+
448
+ Live-tested against a real ARC key: all four models answer correctly
449
+ (`tests/adapters/test_arc_adapter_live.py`), and a full `arcus "..."`
450
+ run has gone through the real pipeline end to end, classification,
451
+ cache miss, routing, an actual ARC call, the quality gate, logging,
452
+ caching. Image input, document Q&A, and web search have each gotten a
453
+ real run too. Test suite: 273 passing with a key set (269 + 4
454
+ live-only), 4 skipped without one.
455
+
456
+ Exception: reasoning-effort variant routing (`enable_reasoning_variants`)
457
+ has only run against a fake adapter so far, which is why it defaults
458
+ off. See "Adaptive routing" above.
459
+
460
+ ARC's models are reasoning models under the hood, they write to a
461
+ hidden `reasoning` field before `content`, so a tight `max_tokens`
462
+ budget can get eaten up before any real answer shows up. The CLI never
463
+ sets `max_tokens` itself, so this doesn't affect normal usage, it only
464
+ matters if you're calling the adapter directly with your own tight
465
+ budget.
466
+
467
+ Still open:
468
+
469
+ - Real logged usage is thin (a handful of manual runs). `arcus eval`
470
+ runs today, it just doesn't have enough data yet, and says so
471
+ instead of faking confidence.
472
+ - Reasoning-effort routing needs a live-key run before it's safe to
473
+ default on.
482
474
 
483
475
  ## Security & privacy
484
476
 
@@ -117,16 +117,16 @@ anything that's no longer live, rather than routing to a model
117
117
  guaranteed to fail. Local history logged under a since-renamed model id
118
118
  is skipped the same way when the bandit's state gets rebuilt.
119
119
 
120
- Optionally, code, math, and long-document questions can also route
121
- across ARC's `-thinking-*` reasoning-effort model variants, not just
122
- the base four (`arcus config set enable_reasoning_variants true`,
123
- default off). Everyday questions stay on the fast base four either way.
124
- **This is built and unit tested but hasn't been run against a real ARC
125
- key from this environment**, ARC's docs list these as separate catalog
126
- model ids rather than a parameter on the base id, the same pattern
127
- already confirmed for web search's legacy-tool-calling variants below,
128
- but that specific assumption is unverified. Ask a code or math question
129
- after turning it on and confirm it actually answers before trusting it.
120
+ Optionally, code, math, and long-document questions can route across
121
+ ARC's `-thinking-*` reasoning-effort model variants too
122
+ (`arcus config set enable_reasoning_variants true`, default off).
123
+ Everyday questions stay on the fast base four either way. This is unit
124
+ tested but hasn't run against a real ARC key from this environment.
125
+ ARC's docs list these as separate catalog ids rather than a parameter
126
+ on the base model, the same pattern already confirmed for web search's
127
+ legacy-tool-calling variants below, but that's unverified here. Ask a
128
+ code or math question after turning it on and confirm it actually
129
+ answers before trusting it.
130
130
 
131
131
  ### Quality gate
132
132
 
@@ -408,47 +408,39 @@ on a handful of rows isn't a reliable comparison yet.
408
408
 
409
409
  ## Status
410
410
 
411
- Everything described above is implemented and working: the ARC adapter,
412
- context classification, all three bandit algorithms with propensity
413
- tracking, the reward function, the quality gate (including rate-limit
414
- backoff and VPN-restriction handling), the semantic cache and its
415
- benchmark, the CLI (ask command with a manual `--model` override, chat
416
- mode with inline attachments and transcript export, image input,
417
- document Q&A, web search, a config command, first-run wizard, error
418
- piping, stats, models, and offline eval), and the offline evaluation +
419
- regret benchmarking layer.
420
-
421
- Verified live against a real ARC key: all four models respond correctly
422
- (`tests/adapters/test_arc_adapter_live.py`), a full end-to-end
423
- `arcus "..."` run exercises the whole pipeline (context classification,
424
- cache miss, bandit routing, a real ARC call, the quality gate, logging,
425
- and caching the result) against real traffic, and image input, document
426
- Q&A, and web search have each been run against real responses too, not
427
- just unit tested. Test suite: 273 passing with a key set (269 plus 4
428
- live-only tests), 4 skipped without one.
429
-
430
- The one exception: reasoning-effort variant routing
431
- (`enable_reasoning_variants`) is unit tested against a fake adapter only,
432
- not yet confirmed against a real ARC key, and defaults off for exactly
433
- that reason. See "Adaptive routing" above.
434
-
435
- Worth knowing: ARC's models are reasoning models under the hood, they
436
- write to a hidden `reasoning` field before `content`, so a small
437
- `max_tokens` budget can get entirely spent on reasoning before any real
438
- answer comes out. The CLI itself never sets `max_tokens`, so normal
439
- usage isn't affected, ARC's server-side default leaves plenty of room,
440
- this only matters if you're calling the adapter directly with a tight
441
- budget of your own.
442
-
443
- What's still open:
444
-
445
- - Real logged usage is still thin (a handful of manual runs). `arcus
446
- eval` runs the comparison today, it's just not resting on enough
447
- data yet to trust the numbers, it says so when that's the case rather
448
- than presenting a false-confidence table.
449
- - Reasoning-effort variant routing needs a live-key run to confirm ARC
450
- actually serves the `-thinking-*` ids the way its docs describe,
451
- before it's safe to turn on by default.
411
+ Everything above is built and working, adapter, context classification,
412
+ all three bandit algorithms, the reward function, the quality gate, the
413
+ semantic cache, the offline eval / regret code. The CLI covers all of
414
+ it: asking directly (with an optional `--model` override), chat with
415
+ inline attachments and transcript export, image/doc/web modes, config,
416
+ stats, and eval.
417
+
418
+ Live-tested against a real ARC key: all four models answer correctly
419
+ (`tests/adapters/test_arc_adapter_live.py`), and a full `arcus "..."`
420
+ run has gone through the real pipeline end to end, classification,
421
+ cache miss, routing, an actual ARC call, the quality gate, logging,
422
+ caching. Image input, document Q&A, and web search have each gotten a
423
+ real run too. Test suite: 273 passing with a key set (269 + 4
424
+ live-only), 4 skipped without one.
425
+
426
+ Exception: reasoning-effort variant routing (`enable_reasoning_variants`)
427
+ has only run against a fake adapter so far, which is why it defaults
428
+ off. See "Adaptive routing" above.
429
+
430
+ ARC's models are reasoning models under the hood, they write to a
431
+ hidden `reasoning` field before `content`, so a tight `max_tokens`
432
+ budget can get eaten up before any real answer shows up. The CLI never
433
+ sets `max_tokens` itself, so this doesn't affect normal usage, it only
434
+ matters if you're calling the adapter directly with your own tight
435
+ budget.
436
+
437
+ Still open:
438
+
439
+ - Real logged usage is thin (a handful of manual runs). `arcus eval`
440
+ runs today, it just doesn't have enough data yet, and says so
441
+ instead of faking confidence.
442
+ - Reasoning-effort routing needs a live-key run before it's safe to
443
+ default on.
452
444
 
453
445
  ## Security & privacy
454
446
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arcus-cli"
3
- version = "0.2.0"
3
+ version = "0.2.1"
4
4
  description = "Adaptive routing, a quality gate, and a correctness-aware cache on top of Virginia Tech ARC's LLM API"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -34,7 +34,7 @@ wheels = [
34
34
 
35
35
  [[package]]
36
36
  name = "arcus-cli"
37
- version = "0.2.0"
37
+ version = "0.2.1"
38
38
  source = { editable = "." }
39
39
  dependencies = [
40
40
  { name = "openai" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes