thinkless 0.3.0__tar.gz → 0.4.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 (118) hide show
  1. {thinkless-0.3.0 → thinkless-0.4.1}/CHANGELOG.md +40 -0
  2. {thinkless-0.3.0 → thinkless-0.4.1}/PKG-INFO +68 -52
  3. {thinkless-0.3.0 → thinkless-0.4.1}/README.md +59 -49
  4. thinkless-0.4.1/benchmarks/decisions/README.md +18 -0
  5. {thinkless-0.3.0 → thinkless-0.4.1}/pyproject.toml +16 -3
  6. thinkless-0.4.1/src/thinkless/_version.py +1 -0
  7. thinkless-0.4.1/src/thinkless/bench/decisions/__init__.py +35 -0
  8. thinkless-0.4.1/src/thinkless/bench/decisions/leaderboard.py +191 -0
  9. thinkless-0.4.1/src/thinkless/bench/decisions/run.py +292 -0
  10. thinkless-0.4.1/src/thinkless/bench/decisions/score.py +225 -0
  11. thinkless-0.4.1/src/thinkless/bench/decisions/tasks.json +535 -0
  12. thinkless-0.4.1/src/thinkless/bench/decisions/tasks.py +164 -0
  13. thinkless-0.4.1/src/thinkless/bench/decisions/verify.py +121 -0
  14. thinkless-0.4.1/src/thinkless/cli/decisions.py +199 -0
  15. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/cli/main.py +2 -0
  16. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/base.py +18 -1
  17. thinkless-0.4.1/tests/unit/test_decision_benchmark.py +259 -0
  18. thinkless-0.3.0/src/thinkless/_version.py +0 -1
  19. {thinkless-0.3.0 → thinkless-0.4.1}/.gitignore +0 -0
  20. {thinkless-0.3.0 → thinkless-0.4.1}/LICENSE +0 -0
  21. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/__init__.py +0 -0
  22. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/__main__.py +0 -0
  23. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/_hub.py +0 -0
  24. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/_json.py +0 -0
  25. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/__init__.py +0 -0
  26. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/intents.py +0 -0
  27. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/intents_report.py +0 -0
  28. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/metrics.py +0 -0
  29. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/report.py +0 -0
  30. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/bench/support.py +0 -0
  31. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/cli/__init__.py +0 -0
  32. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/cli/serve.py +0 -0
  33. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/cli/shadow.py +0 -0
  34. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/cli/traces.py +0 -0
  35. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/confidence.py +0 -0
  36. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/data/pricing.toml +0 -0
  37. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/data/viewer.html +0 -0
  38. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/decision.py +0 -0
  39. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/__init__.py +0 -0
  40. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/__init__.py +0 -0
  41. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/agent.py +0 -0
  42. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/data/calibration.jsonl +0 -0
  43. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/data/scenarios.jsonl +0 -0
  44. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/data/world.json +0 -0
  45. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/questions.py +0 -0
  46. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/stack.py +0 -0
  47. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/demo/support/world.py +0 -0
  48. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/engine.py +0 -0
  49. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/errors.py +0 -0
  50. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/integrations/__init__.py +0 -0
  51. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/integrations/_messages.py +0 -0
  52. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/integrations/core.py +0 -0
  53. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/integrations/langgraph.py +0 -0
  54. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/integrations/openai_agents.py +0 -0
  55. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/limits.py +0 -0
  56. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/__init__.py +0 -0
  57. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/anthropic.py +0 -0
  58. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/base.py +0 -0
  59. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/factory.py +0 -0
  60. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/local.py +0 -0
  61. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/openai_compat.py +0 -0
  62. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/openrouter.py +0 -0
  63. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/llm/scripted.py +0 -0
  64. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/logs.py +0 -0
  65. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/pricing.py +0 -0
  66. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/__init__.py +0 -0
  67. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/gliner.py +0 -0
  68. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/hf.py +0 -0
  69. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/laya.py +0 -0
  70. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/llm.py +0 -0
  71. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/rules.py +0 -0
  72. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/systemone.py +0 -0
  73. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/providers/wire.py +0 -0
  74. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/py.typed +0 -0
  75. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/questions.py +0 -0
  76. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/server/__init__.py +0 -0
  77. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/server/app.py +0 -0
  78. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/server/mcp.py +0 -0
  79. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/settings.py +0 -0
  80. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/shadow/__init__.py +0 -0
  81. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/shadow/compare.py +0 -0
  82. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/shadow/report.py +0 -0
  83. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/shadow/runner.py +0 -0
  84. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/__init__.py +0 -0
  85. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/console.py +0 -0
  86. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/export.py +0 -0
  87. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/otel.py +0 -0
  88. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/sinks.py +0 -0
  89. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/span.py +0 -0
  90. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/summary.py +0 -0
  91. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/tracer.py +0 -0
  92. {thinkless-0.3.0 → thinkless-0.4.1}/src/thinkless/tracing/viewer.py +0 -0
  93. {thinkless-0.3.0 → thinkless-0.4.1}/tests/__init__.py +0 -0
  94. {thinkless-0.3.0 → thinkless-0.4.1}/tests/conftest.py +0 -0
  95. {thinkless-0.3.0 → thinkless-0.4.1}/tests/local/__init__.py +0 -0
  96. {thinkless-0.3.0 → thinkless-0.4.1}/tests/local/test_local_models.py +0 -0
  97. {thinkless-0.3.0 → thinkless-0.4.1}/tests/network/__init__.py +0 -0
  98. {thinkless-0.3.0 → thinkless-0.4.1}/tests/network/test_openrouter_live.py +0 -0
  99. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/__init__.py +0 -0
  100. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_bench.py +0 -0
  101. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_cli_and_viewer.py +0 -0
  102. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_confidence.py +0 -0
  103. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_engine.py +0 -0
  104. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_hf_classifier.py +0 -0
  105. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_integrations.py +0 -0
  106. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_limits.py +0 -0
  107. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_llm_decider.py +0 -0
  108. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_openrouter.py +0 -0
  109. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_pricing_and_llm.py +0 -0
  110. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_questions.py +0 -0
  111. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_rules.py +0 -0
  112. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_server.py +0 -0
  113. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_shadow.py +0 -0
  114. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_support_demo.py +0 -0
  115. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_systemone.py +0 -0
  116. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_systemone_sdk_compat.py +0 -0
  117. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_trace_export.py +0 -0
  118. {thinkless-0.3.0 → thinkless-0.4.1}/tests/unit/test_tracing.py +0 -0
@@ -6,6 +6,46 @@ All notable changes are recorded here. The format follows
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.4.1 - 2026-09-25
10
+
11
+ Project and packaging updates; no change to the library's behavior.
12
+
13
+ ### Changed
14
+
15
+ - Package metadata: development status Beta, more keywords, and links to
16
+ Discussions, the decision benchmark leaderboard, release notes and funding.
17
+ - The README links to good first issues and Discussions and shows the docs,
18
+ leaderboard and OpenSSF Scorecard badges.
19
+ - The submission guide says submitters regenerate the leaderboard page in
20
+ their pull request; the release guide explains that release tags are
21
+ permanent.
22
+
23
+ ### Security
24
+
25
+ - Every GitHub Action in the workflows is pinned to a commit.
26
+ - An OpenSSF Scorecard workflow checks the repository's supply chain weekly.
27
+
28
+ ## 0.4.0 - 2026-09-25
29
+
30
+ The decision benchmark.
31
+
32
+ ### Added
33
+
34
+ - The decision benchmark 1.0 (`thinkless bench decisions`): eight public
35
+ tasks across the four question kinds (banking77, clinc150 with out of
36
+ scope, MASSIVE in five languages, MultiWOZ 2.2 conversations, jailbreaks,
37
+ Civil Comments toxicity, HelpSteer2 helpfulness ratings and WNUT 2017
38
+ entities), with frozen rows and published hashes, calibration rows from a
39
+ separate split, result files that hold every prediction, `verify` that
40
+ recomputes every metric, a generated leaderboard and open submissions.
41
+ Baselines for GLiNER 2.5, Laya, Qwen3-1.7B and Qwen 3.7 Flash.
42
+
43
+ ### Changed
44
+
45
+ - A list of chat messages now renders as `role: text` lines for providers
46
+ that read text, instead of one `key: value` line per field.
47
+ - README links to the documentation point at the documentation site.
48
+
9
49
  ## 0.3.0 - 2026-09-25
10
50
 
11
51
  Shadow mode, framework adapters, limits, a decision server and MCP tools.
@@ -1,18 +1,24 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: thinkless
3
- Version: 0.3.0
3
+ Version: 0.4.1
4
4
  Summary: The decision plane for AI agents. Rules and small calibrated models make the routine decisions, the LLM is reserved for the steps that need thought, and every step is traced.
5
5
  Project-URL: Homepage, https://github.com/inboxpraveen/ThinkLess
6
6
  Project-URL: Documentation, https://inboxpraveen.github.io/ThinkLess/
7
7
  Project-URL: Repository, https://github.com/inboxpraveen/ThinkLess
8
8
  Project-URL: Issues, https://github.com/inboxpraveen/ThinkLess/issues
9
+ Project-URL: Discussions, https://github.com/inboxpraveen/ThinkLess/discussions
9
10
  Project-URL: Changelog, https://github.com/inboxpraveen/ThinkLess/blob/main/CHANGELOG.md
11
+ Project-URL: Release notes, https://github.com/inboxpraveen/ThinkLess/releases
12
+ Project-URL: Decision benchmark, https://inboxpraveen.github.io/ThinkLess/decision-benchmark/leaderboard/
13
+ Project-URL: Funding, https://github.com/sponsors/inboxpraveen
10
14
  Author: Praveen Kumar
11
15
  License-Expression: Apache-2.0
12
16
  License-File: LICENSE
13
- Keywords: agents,classification,decision-models,gliner,jev,laya,llm,observability,routing,system-one,tracing
14
- Classifier: Development Status :: 3 - Alpha
17
+ Keywords: agents,ai-agents,benchmark,calibration,classification,decision-models,gliner,guardrails,jev,langgraph,laya,llm,llm-routing,mcp,observability,openai-agents,system-one,tracing
18
+ Classifier: Development Status :: 4 - Beta
19
+ Classifier: Framework :: Pydantic :: 2
15
20
  Classifier: Intended Audience :: Developers
21
+ Classifier: Intended Audience :: Information Technology
16
22
  Classifier: Intended Audience :: Science/Research
17
23
  Classifier: License :: OSI Approved :: Apache Software License
18
24
  Classifier: Operating System :: OS Independent
@@ -109,10 +115,13 @@ Description-Content-Type: text/markdown
109
115
 
110
116
  <p align="center">
111
117
  <a href="https://pypi.org/project/thinkless/"><img alt="PyPI" src="https://img.shields.io/pypi/v/thinkless.svg"></a>
118
+ <a href="https://pypi.org/project/thinkless/"><img alt="Python 3.10 to 3.13" src="https://img.shields.io/pypi/pyversions/thinkless.svg"></a>
112
119
  <a href="https://github.com/inboxpraveen/ThinkLess/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/inboxpraveen/ThinkLess/actions/workflows/ci.yml/badge.svg"></a>
120
+ <a href="https://inboxpraveen.github.io/ThinkLess/"><img alt="Docs" src="https://img.shields.io/badge/docs-inboxpraveen.github.io-blue.svg"></a>
121
+ <a href="https://inboxpraveen.github.io/ThinkLess/decision-benchmark/leaderboard/"><img alt="Decision benchmark" src="https://img.shields.io/badge/decision%20benchmark-leaderboard-brightgreen.svg"></a>
122
+ <a href="https://scorecard.dev/viewer/?uri=github.com/inboxpraveen/ThinkLess"><img alt="OpenSSF Scorecard" src="https://api.scorecard.dev/projects/github.com/inboxpraveen/ThinkLess/badge"></a>
123
+ <a href="https://github.com/inboxpraveen/ThinkLess/discussions"><img alt="Discussions" src="https://img.shields.io/github/discussions/inboxpraveen/ThinkLess.svg"></a>
113
124
  <a href="https://github.com/inboxpraveen/ThinkLess/blob/main/LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/license-Apache%202.0-blue.svg"></a>
114
- <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
115
- <a href="https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md"><img alt="Benchmarks" src="https://img.shields.io/badge/benchmarks-reproducible-brightgreen.svg"></a>
116
125
  </p>
117
126
 
118
127
  ThinkLess is an open-source decision plane for AI agents. The routine
@@ -159,7 +168,7 @@ if intent.is_("refund_duplicate_charge"): # only true when the answer is c
159
168
  Same agent, same 53 labeled support tickets, two decision planes: `llm` sends
160
169
  every decision to the LLM, `hybrid` asks rules, GLiNER and Laya first. Hosted
161
170
  models ran through OpenRouter, and the dollar figures are what OpenRouter
162
- billed ([full results](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md)):
171
+ billed ([full results](https://inboxpraveen.github.io/ThinkLess/benchmarks/)):
163
172
 
164
173
  | Fallback LLM | Success, `llm` | Success, `hybrid` | Billed per 1k tickets, `llm` | Billed per 1k tickets, `hybrid` | Decision time |
165
174
  |---|---:|---:|---:|---:|---:|
@@ -185,7 +194,7 @@ billed ([full results](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/
185
194
  validated on a separate calibration set first. The baseline is the
186
195
  strongest form of the LLM design: all six triage questions in one prompt.
187
196
  - The support set is 53 synthetic tickets: evidence of the mechanism and its
188
- failure modes, not a leaderboard. The [benchmarks page](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md)
197
+ failure modes, not a leaderboard. The [benchmarks page](https://inboxpraveen.github.io/ThinkLess/benchmarks/)
189
198
  lists the weak areas found and what was done about each.
190
199
 
191
200
  ## Quick start
@@ -263,11 +272,11 @@ intent = router(engine, INTENT, {"order_status": "tracking", "refund": "refunds"
263
272
  builder.add_conditional_edges(START, intent, intent.destinations)
264
273
  ```
265
274
 
266
- - [LangGraph](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/langgraph.md):
275
+ - [LangGraph](https://inboxpraveen.github.io/ThinkLess/integrations/langgraph/):
267
276
  routers, decision nodes and gated tools.
268
- - [OpenAI Agents SDK](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/openai-agents.md):
277
+ - [OpenAI Agents SDK](https://inboxpraveen.github.io/ThinkLess/integrations/openai-agents/):
269
278
  input guardrails, tool guardrails and routing to a specialist agent.
270
- - [Any framework](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/any-framework.md):
279
+ - [Any framework](https://inboxpraveen.github.io/ThinkLess/integrations/any-framework/):
271
280
  `route` and `gate` for Pydantic AI, a hand-written loop, or anything else.
272
281
 
273
282
  Before switching anything, measure it. Shadow mode runs ThinkLess next to your
@@ -288,10 +297,10 @@ def classify(message: str) -> str:
288
297
  thinkless shadow report shadow/intent.jsonl --volume 2000000
289
298
  ```
290
299
 
291
- The [migration guide](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/migration.md)
292
- walks through it, and the [FAQ](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/faq.md)
300
+ The [migration guide](https://inboxpraveen.github.io/ThinkLess/guides/migration/)
301
+ walks through it, and the [FAQ](https://inboxpraveen.github.io/ThinkLess/faq/)
293
302
  covers the common questions. To share one engine across services, run it as
294
- a [decision server or MCP tools](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/serving.md).
303
+ a [decision server or MCP tools](https://inboxpraveen.github.io/ThinkLess/guides/serving/).
295
304
 
296
305
  ## Try the demo agent
297
306
 
@@ -314,31 +323,31 @@ thinkless bench intents --dataset banking77
314
323
  **Typed questions.** `Choice`, `Score`, `YesNo` and `Extract` declare what you
315
324
  want to know and which answers are allowed. They follow the System One wire
316
325
  format, so the same question works on every provider.
317
- [Questions](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/questions.md)
326
+ [Questions](https://inboxpraveen.github.io/ThinkLess/concepts/questions/)
318
327
 
319
328
  **A confidence cascade.** Providers are tried cheapest first. Each gets one
320
329
  call with every open question it supports; answers that clear their threshold
321
330
  close, the rest move on. Unresolved questions come back `uncertain` with the
322
331
  best answer seen, and `decision.is_()` never matches an uncertain answer.
323
- [The cascade](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/cascade.md)
332
+ [The cascade](https://inboxpraveen.github.io/ThinkLess/concepts/cascade/)
324
333
 
325
334
  **One meaning of confidence.** Providers disagree about what "confidence"
326
335
  means (Laya and TypeSafe compute it differently), so a threshold of 0.8 would
327
336
  mean different things per backend. ThinkLess derives a single normalized
328
337
  confidence from each provider's probabilities.
329
- [Confidence](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/confidence.md)
338
+ [Confidence](https://inboxpraveen.github.io/ThinkLess/concepts/confidence/)
330
339
 
331
340
  **Thresholds from data.** `thinkless calibrate` sweeps thresholds on labeled
332
341
  examples and recommends the lowest one that meets your accuracy target, per
333
342
  question and per provider (`thresholds={"intent@gliner": 0.9}`).
334
- [Calibration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/calibration.md)
343
+ [Calibration](https://inboxpraveen.github.io/ThinkLess/guides/calibration/)
335
344
 
336
345
  **Traces for everything.** Decisions, provider attempts, generations, tool
337
346
  calls and rule checks are spans with W3C-compatible ids. Write JSONL audit
338
347
  files, export to any OpenTelemetry backend with GenAI semantic conventions, or
339
348
  open the self-contained HTML viewer. Content capture can be switched off
340
349
  without losing structure, timings or confidences.
341
- [Tracing](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/tracing.md)
350
+ [Tracing](https://inboxpraveen.github.io/ThinkLess/concepts/tracing/)
342
351
 
343
352
  ## Providers and backends
344
353
 
@@ -358,57 +367,64 @@ without losing structure, timings or confidences.
358
367
  | `OpenAICompatibleLLM` | OpenAI, Ollama, vLLM, LM Studio, llama.cpp, Groq |
359
368
  | `AnthropicLLM` | Claude, with server-side refusal fallbacks |
360
369
 
361
- Writing your own provider is one class. [Providers](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/providers.md),
362
- [LLM backends](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/llm-backends.md)
370
+ Writing your own provider is one class. [Providers](https://inboxpraveen.github.io/ThinkLess/guides/providers/),
371
+ [LLM backends](https://inboxpraveen.github.io/ThinkLess/guides/llm-backends/)
363
372
 
364
373
  ## Documentation
365
374
 
366
- - [Getting started](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/getting-started.md),
367
- [installation](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/installation.md)
368
- - Use it in your agent: [overview](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/index.md),
369
- [LangGraph](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/langgraph.md),
370
- [OpenAI Agents SDK](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/openai-agents.md),
371
- [any framework](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/any-framework.md),
372
- [migration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/migration.md),
373
- [shadow mode](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/shadow-mode.md),
374
- [FAQ](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/faq.md)
375
- - Concepts: [the four planes](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/planes.md),
376
- [questions](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/questions.md),
377
- [confidence](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/confidence.md),
378
- [the cascade](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/cascade.md),
379
- [tracing](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/tracing.md)
380
- - Guides: [the support agent](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/support-agent.md),
381
- [calibration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/calibration.md),
382
- [providers](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/providers.md),
383
- [LLM backends](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/llm-backends.md),
384
- [production](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/production.md),
385
- [serving](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/serving.md),
386
- [running a pilot](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/pilot.md),
387
- [troubleshooting](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/troubleshooting.md)
388
- - [Benchmarks](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md), [CLI reference](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/reference/cli.md),
389
- [Python API](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/reference/api.md), [roadmap](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/roadmap.md)
375
+ - [Getting started](https://inboxpraveen.github.io/ThinkLess/getting-started/),
376
+ [installation](https://inboxpraveen.github.io/ThinkLess/guides/installation/)
377
+ - Use it in your agent: [overview](https://inboxpraveen.github.io/ThinkLess/integrations/),
378
+ [LangGraph](https://inboxpraveen.github.io/ThinkLess/integrations/langgraph/),
379
+ [OpenAI Agents SDK](https://inboxpraveen.github.io/ThinkLess/integrations/openai-agents/),
380
+ [any framework](https://inboxpraveen.github.io/ThinkLess/integrations/any-framework/),
381
+ [migration](https://inboxpraveen.github.io/ThinkLess/guides/migration/),
382
+ [shadow mode](https://inboxpraveen.github.io/ThinkLess/guides/shadow-mode/),
383
+ [FAQ](https://inboxpraveen.github.io/ThinkLess/faq/)
384
+ - Concepts: [the four planes](https://inboxpraveen.github.io/ThinkLess/concepts/planes/),
385
+ [questions](https://inboxpraveen.github.io/ThinkLess/concepts/questions/),
386
+ [confidence](https://inboxpraveen.github.io/ThinkLess/concepts/confidence/),
387
+ [the cascade](https://inboxpraveen.github.io/ThinkLess/concepts/cascade/),
388
+ [tracing](https://inboxpraveen.github.io/ThinkLess/concepts/tracing/)
389
+ - Guides: [the support agent](https://inboxpraveen.github.io/ThinkLess/guides/support-agent/),
390
+ [calibration](https://inboxpraveen.github.io/ThinkLess/guides/calibration/),
391
+ [providers](https://inboxpraveen.github.io/ThinkLess/guides/providers/),
392
+ [LLM backends](https://inboxpraveen.github.io/ThinkLess/guides/llm-backends/),
393
+ [production](https://inboxpraveen.github.io/ThinkLess/guides/production/),
394
+ [serving](https://inboxpraveen.github.io/ThinkLess/guides/serving/),
395
+ [running a pilot](https://inboxpraveen.github.io/ThinkLess/guides/pilot/),
396
+ [troubleshooting](https://inboxpraveen.github.io/ThinkLess/guides/troubleshooting/)
397
+ - [Benchmarks](https://inboxpraveen.github.io/ThinkLess/benchmarks/), [CLI reference](https://inboxpraveen.github.io/ThinkLess/reference/cli/),
398
+ [Python API](https://inboxpraveen.github.io/ThinkLess/reference/api/), [roadmap](https://inboxpraveen.github.io/ThinkLess/roadmap/)
390
399
 
391
400
  ## Status
392
401
 
393
402
  ThinkLess is pre-1.0: the core API (questions, the engine, decisions and
394
403
  traces) is meant to stay stable, and providers, adapters and benchmarks will
395
- grow. Next up are a neutral benchmark for decision models, cross-request
396
- batching in the server, calibrated LLM confidence from log probabilities, and
397
- live Jev runs. See the [roadmap](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/roadmap.md).
404
+ grow. The [decision benchmark](https://inboxpraveen.github.io/ThinkLess/decision-benchmark/)
405
+ compares decision models on eight public tasks and is open to submissions.
406
+ Next up are more models on it, cross-request batching in the server, and
407
+ calibrated LLM confidence from log probabilities. See the [roadmap](https://inboxpraveen.github.io/ThinkLess/roadmap/).
398
408
 
399
409
  ## Contributing
400
410
 
401
411
  Issues, providers, benchmark runs on other hardware and models, and new demo
402
- scenarios are all welcome. Start with [CONTRIBUTING.md](https://github.com/inboxpraveen/ThinkLess/blob/main/CONTRIBUTING.md). The
403
- bar for changes that affect accuracy, latency or cost is evidence: a before
404
- and after from `thinkless bench` or `thinkless calibrate`.
412
+ scenarios are all welcome. Start with [CONTRIBUTING.md](https://github.com/inboxpraveen/ThinkLess/blob/main/CONTRIBUTING.md),
413
+ pick a [good first issue](https://github.com/inboxpraveen/ThinkLess/labels/good%20first%20issue),
414
+ or ask in [Discussions](https://github.com/inboxpraveen/ThinkLess/discussions).
415
+ The bar for changes that affect accuracy, latency or cost is evidence: a
416
+ before and after from `thinkless bench` or `thinkless calibrate`.
405
417
 
406
418
  ## Sponsoring
407
419
 
408
420
  If ThinkLess saves your team time or money, consider
409
421
  [sponsoring its development](https://github.com/sponsors/inboxpraveen).
410
- Sponsorship funds frontier-model benchmark runs, more providers and more
411
- demos.
422
+
423
+ Model vendors can sponsor runs of their models on the
424
+ [decision benchmark](https://inboxpraveen.github.io/ThinkLess/decision-benchmark/).
425
+ Sponsored runs are done by the maintainers and published as verified,
426
+ whatever the result: sponsorship buys runs, not rankings. Sponsorship also
427
+ funds more providers and more demos.
412
428
 
413
429
  ## Citing
414
430
 
@@ -4,10 +4,13 @@
4
4
 
5
5
  <p align="center">
6
6
  <a href="https://pypi.org/project/thinkless/"><img alt="PyPI" src="https://img.shields.io/pypi/v/thinkless.svg"></a>
7
+ <a href="https://pypi.org/project/thinkless/"><img alt="Python 3.10 to 3.13" src="https://img.shields.io/pypi/pyversions/thinkless.svg"></a>
7
8
  <a href="https://github.com/inboxpraveen/ThinkLess/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/inboxpraveen/ThinkLess/actions/workflows/ci.yml/badge.svg"></a>
9
+ <a href="https://inboxpraveen.github.io/ThinkLess/"><img alt="Docs" src="https://img.shields.io/badge/docs-inboxpraveen.github.io-blue.svg"></a>
10
+ <a href="https://inboxpraveen.github.io/ThinkLess/decision-benchmark/leaderboard/"><img alt="Decision benchmark" src="https://img.shields.io/badge/decision%20benchmark-leaderboard-brightgreen.svg"></a>
11
+ <a href="https://scorecard.dev/viewer/?uri=github.com/inboxpraveen/ThinkLess"><img alt="OpenSSF Scorecard" src="https://api.scorecard.dev/projects/github.com/inboxpraveen/ThinkLess/badge"></a>
12
+ <a href="https://github.com/inboxpraveen/ThinkLess/discussions"><img alt="Discussions" src="https://img.shields.io/github/discussions/inboxpraveen/ThinkLess.svg"></a>
8
13
  <a href="https://github.com/inboxpraveen/ThinkLess/blob/main/LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/license-Apache%202.0-blue.svg"></a>
9
- <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
10
- <a href="https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md"><img alt="Benchmarks" src="https://img.shields.io/badge/benchmarks-reproducible-brightgreen.svg"></a>
11
14
  </p>
12
15
 
13
16
  ThinkLess is an open-source decision plane for AI agents. The routine
@@ -54,7 +57,7 @@ if intent.is_("refund_duplicate_charge"): # only true when the answer is c
54
57
  Same agent, same 53 labeled support tickets, two decision planes: `llm` sends
55
58
  every decision to the LLM, `hybrid` asks rules, GLiNER and Laya first. Hosted
56
59
  models ran through OpenRouter, and the dollar figures are what OpenRouter
57
- billed ([full results](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md)):
60
+ billed ([full results](https://inboxpraveen.github.io/ThinkLess/benchmarks/)):
58
61
 
59
62
  | Fallback LLM | Success, `llm` | Success, `hybrid` | Billed per 1k tickets, `llm` | Billed per 1k tickets, `hybrid` | Decision time |
60
63
  |---|---:|---:|---:|---:|---:|
@@ -80,7 +83,7 @@ billed ([full results](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/
80
83
  validated on a separate calibration set first. The baseline is the
81
84
  strongest form of the LLM design: all six triage questions in one prompt.
82
85
  - The support set is 53 synthetic tickets: evidence of the mechanism and its
83
- failure modes, not a leaderboard. The [benchmarks page](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md)
86
+ failure modes, not a leaderboard. The [benchmarks page](https://inboxpraveen.github.io/ThinkLess/benchmarks/)
84
87
  lists the weak areas found and what was done about each.
85
88
 
86
89
  ## Quick start
@@ -158,11 +161,11 @@ intent = router(engine, INTENT, {"order_status": "tracking", "refund": "refunds"
158
161
  builder.add_conditional_edges(START, intent, intent.destinations)
159
162
  ```
160
163
 
161
- - [LangGraph](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/langgraph.md):
164
+ - [LangGraph](https://inboxpraveen.github.io/ThinkLess/integrations/langgraph/):
162
165
  routers, decision nodes and gated tools.
163
- - [OpenAI Agents SDK](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/openai-agents.md):
166
+ - [OpenAI Agents SDK](https://inboxpraveen.github.io/ThinkLess/integrations/openai-agents/):
164
167
  input guardrails, tool guardrails and routing to a specialist agent.
165
- - [Any framework](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/any-framework.md):
168
+ - [Any framework](https://inboxpraveen.github.io/ThinkLess/integrations/any-framework/):
166
169
  `route` and `gate` for Pydantic AI, a hand-written loop, or anything else.
167
170
 
168
171
  Before switching anything, measure it. Shadow mode runs ThinkLess next to your
@@ -183,10 +186,10 @@ def classify(message: str) -> str:
183
186
  thinkless shadow report shadow/intent.jsonl --volume 2000000
184
187
  ```
185
188
 
186
- The [migration guide](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/migration.md)
187
- walks through it, and the [FAQ](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/faq.md)
189
+ The [migration guide](https://inboxpraveen.github.io/ThinkLess/guides/migration/)
190
+ walks through it, and the [FAQ](https://inboxpraveen.github.io/ThinkLess/faq/)
188
191
  covers the common questions. To share one engine across services, run it as
189
- a [decision server or MCP tools](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/serving.md).
192
+ a [decision server or MCP tools](https://inboxpraveen.github.io/ThinkLess/guides/serving/).
190
193
 
191
194
  ## Try the demo agent
192
195
 
@@ -209,31 +212,31 @@ thinkless bench intents --dataset banking77
209
212
  **Typed questions.** `Choice`, `Score`, `YesNo` and `Extract` declare what you
210
213
  want to know and which answers are allowed. They follow the System One wire
211
214
  format, so the same question works on every provider.
212
- [Questions](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/questions.md)
215
+ [Questions](https://inboxpraveen.github.io/ThinkLess/concepts/questions/)
213
216
 
214
217
  **A confidence cascade.** Providers are tried cheapest first. Each gets one
215
218
  call with every open question it supports; answers that clear their threshold
216
219
  close, the rest move on. Unresolved questions come back `uncertain` with the
217
220
  best answer seen, and `decision.is_()` never matches an uncertain answer.
218
- [The cascade](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/cascade.md)
221
+ [The cascade](https://inboxpraveen.github.io/ThinkLess/concepts/cascade/)
219
222
 
220
223
  **One meaning of confidence.** Providers disagree about what "confidence"
221
224
  means (Laya and TypeSafe compute it differently), so a threshold of 0.8 would
222
225
  mean different things per backend. ThinkLess derives a single normalized
223
226
  confidence from each provider's probabilities.
224
- [Confidence](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/confidence.md)
227
+ [Confidence](https://inboxpraveen.github.io/ThinkLess/concepts/confidence/)
225
228
 
226
229
  **Thresholds from data.** `thinkless calibrate` sweeps thresholds on labeled
227
230
  examples and recommends the lowest one that meets your accuracy target, per
228
231
  question and per provider (`thresholds={"intent@gliner": 0.9}`).
229
- [Calibration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/calibration.md)
232
+ [Calibration](https://inboxpraveen.github.io/ThinkLess/guides/calibration/)
230
233
 
231
234
  **Traces for everything.** Decisions, provider attempts, generations, tool
232
235
  calls and rule checks are spans with W3C-compatible ids. Write JSONL audit
233
236
  files, export to any OpenTelemetry backend with GenAI semantic conventions, or
234
237
  open the self-contained HTML viewer. Content capture can be switched off
235
238
  without losing structure, timings or confidences.
236
- [Tracing](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/tracing.md)
239
+ [Tracing](https://inboxpraveen.github.io/ThinkLess/concepts/tracing/)
237
240
 
238
241
  ## Providers and backends
239
242
 
@@ -253,57 +256,64 @@ without losing structure, timings or confidences.
253
256
  | `OpenAICompatibleLLM` | OpenAI, Ollama, vLLM, LM Studio, llama.cpp, Groq |
254
257
  | `AnthropicLLM` | Claude, with server-side refusal fallbacks |
255
258
 
256
- Writing your own provider is one class. [Providers](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/providers.md),
257
- [LLM backends](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/llm-backends.md)
259
+ Writing your own provider is one class. [Providers](https://inboxpraveen.github.io/ThinkLess/guides/providers/),
260
+ [LLM backends](https://inboxpraveen.github.io/ThinkLess/guides/llm-backends/)
258
261
 
259
262
  ## Documentation
260
263
 
261
- - [Getting started](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/getting-started.md),
262
- [installation](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/installation.md)
263
- - Use it in your agent: [overview](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/index.md),
264
- [LangGraph](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/langgraph.md),
265
- [OpenAI Agents SDK](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/openai-agents.md),
266
- [any framework](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/integrations/any-framework.md),
267
- [migration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/migration.md),
268
- [shadow mode](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/shadow-mode.md),
269
- [FAQ](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/faq.md)
270
- - Concepts: [the four planes](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/planes.md),
271
- [questions](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/questions.md),
272
- [confidence](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/confidence.md),
273
- [the cascade](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/cascade.md),
274
- [tracing](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/concepts/tracing.md)
275
- - Guides: [the support agent](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/support-agent.md),
276
- [calibration](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/calibration.md),
277
- [providers](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/providers.md),
278
- [LLM backends](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/llm-backends.md),
279
- [production](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/production.md),
280
- [serving](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/serving.md),
281
- [running a pilot](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/pilot.md),
282
- [troubleshooting](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/guides/troubleshooting.md)
283
- - [Benchmarks](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/benchmarks.md), [CLI reference](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/reference/cli.md),
284
- [Python API](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/reference/api.md), [roadmap](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/roadmap.md)
264
+ - [Getting started](https://inboxpraveen.github.io/ThinkLess/getting-started/),
265
+ [installation](https://inboxpraveen.github.io/ThinkLess/guides/installation/)
266
+ - Use it in your agent: [overview](https://inboxpraveen.github.io/ThinkLess/integrations/),
267
+ [LangGraph](https://inboxpraveen.github.io/ThinkLess/integrations/langgraph/),
268
+ [OpenAI Agents SDK](https://inboxpraveen.github.io/ThinkLess/integrations/openai-agents/),
269
+ [any framework](https://inboxpraveen.github.io/ThinkLess/integrations/any-framework/),
270
+ [migration](https://inboxpraveen.github.io/ThinkLess/guides/migration/),
271
+ [shadow mode](https://inboxpraveen.github.io/ThinkLess/guides/shadow-mode/),
272
+ [FAQ](https://inboxpraveen.github.io/ThinkLess/faq/)
273
+ - Concepts: [the four planes](https://inboxpraveen.github.io/ThinkLess/concepts/planes/),
274
+ [questions](https://inboxpraveen.github.io/ThinkLess/concepts/questions/),
275
+ [confidence](https://inboxpraveen.github.io/ThinkLess/concepts/confidence/),
276
+ [the cascade](https://inboxpraveen.github.io/ThinkLess/concepts/cascade/),
277
+ [tracing](https://inboxpraveen.github.io/ThinkLess/concepts/tracing/)
278
+ - Guides: [the support agent](https://inboxpraveen.github.io/ThinkLess/guides/support-agent/),
279
+ [calibration](https://inboxpraveen.github.io/ThinkLess/guides/calibration/),
280
+ [providers](https://inboxpraveen.github.io/ThinkLess/guides/providers/),
281
+ [LLM backends](https://inboxpraveen.github.io/ThinkLess/guides/llm-backends/),
282
+ [production](https://inboxpraveen.github.io/ThinkLess/guides/production/),
283
+ [serving](https://inboxpraveen.github.io/ThinkLess/guides/serving/),
284
+ [running a pilot](https://inboxpraveen.github.io/ThinkLess/guides/pilot/),
285
+ [troubleshooting](https://inboxpraveen.github.io/ThinkLess/guides/troubleshooting/)
286
+ - [Benchmarks](https://inboxpraveen.github.io/ThinkLess/benchmarks/), [CLI reference](https://inboxpraveen.github.io/ThinkLess/reference/cli/),
287
+ [Python API](https://inboxpraveen.github.io/ThinkLess/reference/api/), [roadmap](https://inboxpraveen.github.io/ThinkLess/roadmap/)
285
288
 
286
289
  ## Status
287
290
 
288
291
  ThinkLess is pre-1.0: the core API (questions, the engine, decisions and
289
292
  traces) is meant to stay stable, and providers, adapters and benchmarks will
290
- grow. Next up are a neutral benchmark for decision models, cross-request
291
- batching in the server, calibrated LLM confidence from log probabilities, and
292
- live Jev runs. See the [roadmap](https://github.com/inboxpraveen/ThinkLess/blob/main/docs/roadmap.md).
293
+ grow. The [decision benchmark](https://inboxpraveen.github.io/ThinkLess/decision-benchmark/)
294
+ compares decision models on eight public tasks and is open to submissions.
295
+ Next up are more models on it, cross-request batching in the server, and
296
+ calibrated LLM confidence from log probabilities. See the [roadmap](https://inboxpraveen.github.io/ThinkLess/roadmap/).
293
297
 
294
298
  ## Contributing
295
299
 
296
300
  Issues, providers, benchmark runs on other hardware and models, and new demo
297
- scenarios are all welcome. Start with [CONTRIBUTING.md](https://github.com/inboxpraveen/ThinkLess/blob/main/CONTRIBUTING.md). The
298
- bar for changes that affect accuracy, latency or cost is evidence: a before
299
- and after from `thinkless bench` or `thinkless calibrate`.
301
+ scenarios are all welcome. Start with [CONTRIBUTING.md](https://github.com/inboxpraveen/ThinkLess/blob/main/CONTRIBUTING.md),
302
+ pick a [good first issue](https://github.com/inboxpraveen/ThinkLess/labels/good%20first%20issue),
303
+ or ask in [Discussions](https://github.com/inboxpraveen/ThinkLess/discussions).
304
+ The bar for changes that affect accuracy, latency or cost is evidence: a
305
+ before and after from `thinkless bench` or `thinkless calibrate`.
300
306
 
301
307
  ## Sponsoring
302
308
 
303
309
  If ThinkLess saves your team time or money, consider
304
310
  [sponsoring its development](https://github.com/sponsors/inboxpraveen).
305
- Sponsorship funds frontier-model benchmark runs, more providers and more
306
- demos.
311
+
312
+ Model vendors can sponsor runs of their models on the
313
+ [decision benchmark](https://inboxpraveen.github.io/ThinkLess/decision-benchmark/).
314
+ Sponsored runs are done by the maintainers and published as verified,
315
+ whatever the result: sponsorship buys runs, not rankings. Sponsorship also
316
+ funds more providers and more demos.
307
317
 
308
318
  ## Citing
309
319
 
@@ -0,0 +1,18 @@
1
+ # Decision benchmark
2
+
3
+ A provider-neutral benchmark for the models that make an agent's routine
4
+ decisions. The method, the leaderboard and the submission guide are in the
5
+ documentation: https://inboxpraveen.github.io/ThinkLess/decision-benchmark/
6
+
7
+ | Path | |
8
+ |---|---|
9
+ | `tasks/<task>/test.jsonl`, `calibration.jsonl` | the frozen rows of benchmark 1.0 |
10
+ | `tasks/NOTICE.md` | sources, revisions, licenses and changes for every task |
11
+ | `build.py` | how the rows were sampled; maintainers only, and never rerun within a version |
12
+ | `results/verified/` | runs done by the maintainers |
13
+ | `results/submitted/` | runs submitted by others, verified by CI |
14
+
15
+ ```bash
16
+ thinkless bench decisions run --provider gliner --name "GLiNER 2.5 base"
17
+ thinkless bench decisions verify GLiNER-2.5-base.json
18
+ ```
@@ -13,20 +13,29 @@ license-files = ["LICENSE"]
13
13
  authors = [{ name = "Praveen Kumar" }]
14
14
  keywords = [
15
15
  "agents",
16
+ "ai-agents",
16
17
  "llm",
18
+ "llm-routing",
17
19
  "decision-models",
18
- "system-one",
19
- "routing",
20
+ "guardrails",
21
+ "langgraph",
22
+ "openai-agents",
23
+ "mcp",
24
+ "benchmark",
25
+ "calibration",
20
26
  "classification",
21
27
  "observability",
22
28
  "tracing",
29
+ "system-one",
23
30
  "jev",
24
31
  "laya",
25
32
  "gliner",
26
33
  ]
27
34
  classifiers = [
28
- "Development Status :: 3 - Alpha",
35
+ "Development Status :: 4 - Beta",
36
+ "Framework :: Pydantic :: 2",
29
37
  "Intended Audience :: Developers",
38
+ "Intended Audience :: Information Technology",
30
39
  "Intended Audience :: Science/Research",
31
40
  "License :: OSI Approved :: Apache Software License",
32
41
  "Operating System :: OS Independent",
@@ -97,7 +106,11 @@ Homepage = "https://github.com/inboxpraveen/ThinkLess"
97
106
  Documentation = "https://inboxpraveen.github.io/ThinkLess/"
98
107
  Repository = "https://github.com/inboxpraveen/ThinkLess"
99
108
  Issues = "https://github.com/inboxpraveen/ThinkLess/issues"
109
+ Discussions = "https://github.com/inboxpraveen/ThinkLess/discussions"
100
110
  Changelog = "https://github.com/inboxpraveen/ThinkLess/blob/main/CHANGELOG.md"
111
+ "Release notes" = "https://github.com/inboxpraveen/ThinkLess/releases"
112
+ "Decision benchmark" = "https://inboxpraveen.github.io/ThinkLess/decision-benchmark/leaderboard/"
113
+ Funding = "https://github.com/sponsors/inboxpraveen"
101
114
 
102
115
  [project.scripts]
103
116
  thinkless = "thinkless.cli.main:app"
@@ -0,0 +1 @@
1
+ __version__ = "0.4.1"
@@ -0,0 +1,35 @@
1
+ """The decision benchmark: a neutral test of decision models on public data.
2
+
3
+ Eight tasks cover the four question kinds on public datasets: support and
4
+ assistant intents, out-of-scope detection, five languages, a multi-turn
5
+ conversation, jailbreaks, toxicity, rating an assistant's reply, and entity
6
+ extraction. Every provider gets the same question and the same frozen rows.
7
+ Result files hold raw predictions, and every metric is recomputed from them
8
+ by :func:`verify_result`, so a result can be checked without trusting who
9
+ produced it.
10
+ """
11
+
12
+ from .leaderboard import collect, leaderboard_markdown
13
+ from .run import BenchmarkResult, Submission, TaskResult, build_submission_provider, run_benchmark
14
+ from .score import TaskMetrics, score_task
15
+ from .tasks import TaskSpec, benchmark_version, load_rows, load_tasks, question_for
16
+ from .verify import Verification, verify_result
17
+
18
+ __all__ = [
19
+ "BenchmarkResult",
20
+ "Submission",
21
+ "TaskMetrics",
22
+ "TaskResult",
23
+ "TaskSpec",
24
+ "Verification",
25
+ "benchmark_version",
26
+ "build_submission_provider",
27
+ "collect",
28
+ "leaderboard_markdown",
29
+ "load_rows",
30
+ "load_tasks",
31
+ "question_for",
32
+ "run_benchmark",
33
+ "score_task",
34
+ "verify_result",
35
+ ]