[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:anyjev":3},"\u003Cdiv align=\"center\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fnokia-applied-research\u002FAnyJev\u002Fmain\u002Fassets\u002Fbanner.png\" width=\"100%\" alt=\"AnyJev — turn any LLM into a Jev-style decision model. Typed decisions, real probabilities, no fine-tuning. Order-flip rate 0.230 to 0.073 with zero labels; calibration error 0.240 to 0.095 and auto-decidable at 5% risk 7.7% to 52.0% with 100 to 500 labels.\" \u002F>\u003Cp>\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fanyjev\u002F\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fanyjev?color=3b82f6\" alt=\"PyPI\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fanyjev\u002F\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fanyjev\" alt=\"Python\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnokia-applied-research\u002FAnyJev\u002Factions\u002Fworkflows\u002Fci.yml\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fnokia-applied-research\u002FAnyJev\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" alt=\"CI\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnokia-applied-research\u002FAnyJev\u002Fblob\u002Fmain\u002FLICENSE\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache--2.0-green.svg\" alt=\"License\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>English\u003C\u002Fstrong> · \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnokia-applied-research\u002FAnyJev\u002Fblob\u002Fmain\u002FREADME.zh-CN.md\" rel=\"nofollow ugc noopener\">简体中文\u003C\u002Fa> · \u003Ca href=\"#-serve-it\" rel=\"nofollow ugc noopener\">⚡ Serve it\u003C\u002Fa> · \u003Ca href=\"#-with-labels-l2\" rel=\"nofollow ugc noopener\">📊 Results\u003C\u002Fa> · \u003Ca href=\"#-roadmap\" rel=\"nofollow ugc noopener\">🧭 Roadmap\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnokia-applied-research\u002FAnyJev\u002Fblob\u002Fmain\u002Fdocs\u002Flevels.md\" rel=\"nofollow ugc noopener\">📖 Levels\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fdiv>\u003Cp align=\"center\">\n  \u003Cb>Jiamu Zhang\u003C\u002Fb>\u003Csup>1\u003C\u002Fsup>     \u003Cb>Tianze Yang\u003C\u002Fb>\u003Csup>1\u003C\u002Fsup>     \u003Cb>Yucheng Shi\u003C\u002Fb>\u003Csup>2\u003C\u002Fsup>     \u003Cb>Liang Wu\u003C\u002Fb>\u003Csup>1\u003C\u002Fsup>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Csub>\u003Csup>1\u003C\u002Fsup> Nokia, Sunnyvale, CA      \u003Csup>2\u003C\u002Fsup> Tencent Hunyuan\u003C\u002Fsub>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fnokia-applied-research\u002FAnyJev\u002Fmain\u002Fassets\u002Fflip.gif\" width=\"100%\" alt=\"Reverse the option order: the raw logit readout flips its answer, AnyJev L0 gives the same answer both ways\" \u002F>\n  \u003Cbr \u002F>\n  \u003Csub>Qwen3-8B on a real BANKING77 item. Every number is a model output.\u003C\u002Fsub>\n\u003C\u002Fp>\u003Cblockquote>\n\u003Cp>[!TIP]\n\u003Cstrong>🆕 vLLM serves every level, L2 included.\u003C\u002Fstrong> An embed server's pooler hands back the hidden\nstate a closed-form head reads, so a decision endpoint is a pooling server plus a few\nkilobytes of head. \u003Ccode>python -m anyjev.pipeline &lt;model&gt;\u003C\u002Fcode> converts, serves and measures in one\ncommand. \u003Ca href=\"#-serve-it\" rel=\"nofollow ugc noopener\">Start here ↓\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>⚡ Serve it\u003C\u002Fh2>\n\u003Cp>Three commands take a model off the Hub and put a calibrated decision endpoint in front of it.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">pip install \"anyjev[hf]\"\n\n# 1. keep the blocks a decision needs — usually about two thirds\npython -m anyjev.truncate Qwen\u002FQwen2.5-7B-Instruct 18 .\u002Fqwen-b18\n\n# 2. serve it. L2 reads a hidden state, so the pooler hands one back untouched\nvllm serve .\u002Fqwen-b18 --task embed \\\n  --override-pooler-config '{\"pooling_type\":\"LAST\",\"normalize\":false,\"softmax\":false}'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-python\">from anyjev import Decider, Question\nfrom anyjev.backends.vllm import VLLMBackend\n\nd = Decider(VLLMBackend(\"http:\u002F\u002Flocalhost:8000\", \".\u002Fqwen-b18\"), level=\"L2\")\nroute = Question.choice(\"Which team should handle this?\",\n                        [\"billing\", \"technical\", \"sales\", \"other\"], name=\"route\")\n\nd.fit_head(route, states, labels, layers=[-1])   # 100–300 labels, one closed-form solve\nd.decide(ticket, [route])[\"route\"].distribution  # {\"billing\": 0.81, \"technical\": 0.07, ...}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Without labels, turn on the rotation budget — recommended for any K-option \u003Ccode>choice\u003C\u002Fcode>.\u003C\u002Fstrong> L0 asks the\nmodel once per option rotation so that no option is favoured by its position. Most decisions do not need\nall K: read them one at a time, stop when the leader is far enough ahead, and the threshold can be\ncalibrated so the answer matches the full cycle's a stated fraction of the time — measured against\n\u003Cstrong>our own full-strength readout, so it needs no labels at all.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-python\">d = Decider(VLLMBackend(\"http:\u002F\u002Flocalhost:8000\", \".\u002Fqwen-b18\"), adaptive_shifts=True)\nd.calibrate_adaptive(route, unlabelled_tickets, target=0.01)   # a few hundred states, no labels\nd.decide_batch(tickets, route)      # diagnostics: shifts_used, stop_threshold\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>7.2 rotations instead of 18 at a certified 1% disagreement rate, **2.2× the decisions per s\u003C\u002Fp>\n",1790887797883]