[{"data":1,"prerenderedAt":1131},["ShallowReactive",2],{"navigation_docs":3,"-troubleshooting":217,"-troubleshooting-surround":1128},[4,35,76,100,125,143,164,185,194,212],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"llama-crab documentation","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"First run","\u002Fgetting-started\u002Ffirst-run","1.getting-started\u002F3.first-run","i-lucide-play",{"title":25,"path":26,"stem":27,"icon":28},"Models","\u002Fgetting-started\u002Fmodels","1.getting-started\u002F4.models","i-lucide-package",{"title":30,"path":31,"stem":32,"icon":33},"Backends","\u002Fgetting-started\u002Fbackends","1.getting-started\u002F5.backends","i-lucide-cpu",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"Rust SDK","i-lucide-code","\u002Frust","2.rust",[41,46,51,56,61,66,71],{"title":42,"path":43,"stem":44,"icon":45},"Package Map","\u002Frust\u002Fworkspace","2.rust\u002F1.workspace","i-lucide-layers",{"title":47,"path":48,"stem":49,"icon":50},"Model Lifecycle","\u002Frust\u002Flifecycle","2.rust\u002F2.lifecycle","i-lucide-refresh-cw",{"title":52,"path":53,"stem":54,"icon":55},"Text Completion","\u002Frust\u002Fcompletion","2.rust\u002F3.completion","i-lucide-text-cursor",{"title":57,"path":58,"stem":59,"icon":60},"Chat","\u002Frust\u002Fchat","2.rust\u002F4.chat","i-lucide-messages-square",{"title":62,"path":63,"stem":64,"icon":65},"Embeddings","\u002Frust\u002Fembeddings","2.rust\u002F5.embeddings","i-lucide-vector-square",{"title":67,"path":68,"stem":69,"icon":70},"Multimodal","\u002Frust\u002Fmultimodal","2.rust\u002F6.multimodal","i-lucide-eye",{"title":72,"path":73,"stem":74,"icon":75},"Structured Output","\u002Frust\u002Fstructured-output","2.rust\u002F7.structured-output","i-lucide-braces",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":34},"Server","i-lucide-server","\u002Fserver","3.server",[82,86,91,96],{"title":83,"path":84,"stem":85,"icon":23},"Running the Server","\u002Fserver\u002Frunning","3.server\u002F1.running",{"title":87,"path":88,"stem":89,"icon":90},"OpenAI-Compatible API","\u002Fserver\u002Fopenai-api","3.server\u002F2.openai-api","i-lucide-cloud",{"title":92,"path":93,"stem":94,"icon":95},"Streaming","\u002Fserver\u002Fstreaming","3.server\u002F3.streaming","i-lucide-radio",{"title":97,"path":98,"stem":99},"Operations","\u002Fserver\u002Foperations","3.server\u002F4.operations",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":34},"Tauri","i-lucide-app-window","\u002Ftauri","4.tauri",[106,111,116,121],{"title":107,"path":108,"stem":109,"icon":110},"Tauri Plugin","\u002Ftauri\u002Fplugin","4.tauri\u002F1.plugin","i-lucide-plug",{"title":112,"path":113,"stem":114,"icon":115},"Tauri Permissions","\u002Ftauri\u002Fpermissions","4.tauri\u002F2.permissions","i-lucide-shield",{"title":117,"path":118,"stem":119,"icon":120},"TypeScript Client for Tauri","\u002Ftauri\u002Ftypescript-client","4.tauri\u002F3.typescript-client","i-simple-icons-typescript",{"title":122,"path":123,"stem":124},"Tauri section update notes","\u002Ftauri\u002Fupdate_notes","4.tauri\u002FUPDATE_NOTES",{"title":126,"icon":120,"path":127,"stem":128,"children":129,"page":34},"TypeScript","\u002Ftypescript","5.typescript",[130,134,139],{"title":131,"path":132,"stem":133,"icon":28},"Packages","\u002Ftypescript\u002Fpackages","5.typescript\u002F1.packages",{"title":135,"path":136,"stem":137,"icon":138},"Client Contracts","\u002Ftypescript\u002Fclient-contracts","5.typescript\u002F2.client-contracts","i-lucide-file-code",{"title":140,"path":141,"stem":142},"TypeScript section update notes","\u002Ftypescript\u002Fupdate_notes","5.typescript\u002FUPDATE_NOTES",{"title":144,"icon":145,"path":146,"stem":147,"children":148,"page":34},"Guides","i-lucide-compass","\u002Fguides","6.guides",[149,154,159],{"title":150,"path":151,"stem":152,"icon":153},"Performance","\u002Fguides\u002Fperformance","6.guides\u002F1.performance","i-lucide-gauge",{"title":155,"path":156,"stem":157,"icon":158},"Mobile","\u002Fguides\u002Fmobile","6.guides\u002F2.mobile","i-lucide-smartphone",{"title":160,"path":161,"stem":162,"icon":163},"Troubleshooting Models","\u002Fguides\u002Ftroubleshooting-models","6.guides\u002F3.troubleshooting-models","i-lucide-wrench",{"title":165,"icon":166,"path":167,"stem":168,"children":169,"page":34},"Reference","i-lucide-book-marked","\u002Freference","7.reference",[170,175,180],{"title":171,"path":172,"stem":173,"icon":174},"Crates and packages","\u002Freference\u002Fcrates","7.reference\u002F1.crates","i-lucide-boxes",{"title":176,"path":177,"stem":178,"icon":179},"Cargo features","\u002Freference\u002Fcargo-features","7.reference\u002F2.cargo-features","i-lucide-toggle-right",{"title":181,"path":182,"stem":183,"icon":184},"Versioning","\u002Freference\u002Fversioning","7.reference\u002F3.versioning","i-lucide-git-branch",{"title":186,"icon":187,"path":188,"stem":189,"children":190,"page":34},"Examples","i-lucide-flask-conical","\u002Fexamples","8.examples",[191],{"title":186,"path":192,"stem":193,"icon":187},"\u002Fexamples\u002Fexamples","8.examples\u002F1.examples",{"title":195,"icon":196,"path":197,"stem":198,"children":199,"page":34},"Contributing","i-lucide-git-pull-request-arrow","\u002Fcontributing","9.contributing",[200,204,207],{"title":201,"path":202,"stem":203,"icon":37},"Development","\u002Fcontributing\u002Fdevelopment","9.contributing\u002F1.development",{"title":186,"path":205,"stem":206,"icon":187},"\u002Fcontributing\u002Fexamples","9.contributing\u002F2.examples",{"title":208,"path":209,"stem":210,"icon":211},"Releases","\u002Fcontributing\u002Freleases","9.contributing\u002F3.releases","i-lucide-rocket",{"title":213,"path":214,"stem":215,"icon":216},"Troubleshooting","\u002Ftroubleshooting","troubleshooting","i-lucide-life-buoy",{"id":218,"title":213,"body":219,"description":1121,"extension":1122,"links":1123,"meta":1124,"navigation":1125,"path":214,"seo":1126,"stem":215,"__hash__":1127},"docs\u002Ftroubleshooting.md",{"type":220,"value":221,"toc":1106},"minimark",[222,230,246,251,254,280,294,305,338,351,358,365,401,418,425,432,466,469,518,537,545,548,556,559,565,581,585,595,599,632,636,639,657,678,688,692,695,876,883,943,979,983,1006,1038,1069,1073,1102],[223,224,225,226,229],"p",{},"This page covers common issues for the server, Tauri plugin, and\nTypeScript packages. Model-loading, backend, and allocation issues are\ncovered separately in\n",[227,228,160],"a",{"href":161},".",[223,231,232,233,237,238,242,243,245],{},"The current release is ",[234,235,236],"strong",{},"0.1.8",". Behaviour notes below are verified\nagainst the ",[239,240,241],"code",{},"main"," branch and the ",[239,244,236],{}," source tree.",[247,248,250],"h2",{"id":249},"server-does-not-start","Server does not start",[223,252,253],{},"Check that the model path exists and that the selected backend can\nload it:",[255,256,262],"pre",{"className":257,"code":258,"filename":259,"language":260,"meta":261,"style":261},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","llama-crab-server --model \u002Fabsolute\u002Fpath\u002Fto\u002Fmodel.gguf\n","Terminal","bash","",[239,263,264],{"__ignoreMap":261},[265,266,269,273,277],"span",{"class":267,"line":268},"line",1,[265,270,272],{"class":271},"sBMFI","llama-crab-server",[265,274,276],{"class":275},"sfazB"," --model",[265,278,279],{"class":275}," \u002Fabsolute\u002Fpath\u002Fto\u002Fmodel.gguf\n",[223,281,282,283,286,287,290,291,229],{},"If startup exits after logging a model-load failure, reduce memory\npressure with a smaller model, lower ",[239,284,285],{},"--n-ctx",", lower\n",[239,288,289],{},"--n-gpu-layers",", or try a mobile preset such as\n",[239,292,293],{},"--mobile-preset low-ram",[223,295,296,297,300,301,304],{},"For Hugging Face repository IDs, enable the ",[239,298,299],{},"hf-hub"," cargo feature and\nuse ",[239,302,303],{},"--hf-filename"," to disambiguate the GGUF file inside the repo:",[255,306,308],{"className":257,"code":307,"filename":259,"language":260,"meta":261,"style":261},"llama-crab-server \\\n  --model Qwen\u002FQwen2.5-0.5B-Instruct-GGUF \\\n  --hf-filename qwen2.5-0.5b-instruct-q4_k_m.gguf\n",[239,309,310,318,329],{"__ignoreMap":261},[265,311,312,314],{"class":267,"line":268},[265,313,272],{"class":271},[265,315,317],{"class":316},"sTEyZ"," \\\n",[265,319,321,324,327],{"class":267,"line":320},2,[265,322,323],{"class":275},"  --model",[265,325,326],{"class":275}," Qwen\u002FQwen2.5-0.5B-Instruct-GGUF",[265,328,317],{"class":316},[265,330,332,335],{"class":267,"line":331},3,[265,333,334],{"class":275},"  --hf-filename",[265,336,337],{"class":275}," qwen2.5-0.5b-instruct-q4_k_m.gguf\n",[223,339,340,341,343,344,347,348,229],{},"If ",[239,342,303],{}," is missing for a repo that contains multiple GGUFs,\nthe worker fails with ",[239,345,346],{},"model resolution failed: hf-hub repo has more than one gguf file; pass --hf-filename",". The env-var form is\n",[239,349,350],{},"LLAMA_CRAB_HF_FILENAME",[247,352,354,357],{"id":353},"v1rerank-returns-an-error",[239,355,356],{},"\u002Fv1\u002Frerank"," returns an error",[223,359,360,361,364],{},"The reranking endpoint is disabled unless the process starts with\n",[239,362,363],{},"--reranking",":",[255,366,368],{"className":257,"code":367,"filename":259,"language":260,"meta":261,"style":261},"llama-crab-server \\\n  --model \u002Fmodels\u002Freranker.gguf \\\n  --reranking \\\n  --pooling rank\n",[239,369,370,376,385,392],{"__ignoreMap":261},[265,371,372,374],{"class":267,"line":268},[265,373,272],{"class":271},[265,375,317],{"class":316},[265,377,378,380,383],{"class":267,"line":320},[265,379,323],{"class":275},[265,381,382],{"class":275}," \u002Fmodels\u002Freranker.gguf",[265,384,317],{"class":316},[265,386,387,390],{"class":267,"line":331},[265,388,389],{"class":275},"  --reranking",[265,391,317],{"class":316},[265,393,395,398],{"class":267,"line":394},4,[265,396,397],{"class":275},"  --pooling",[265,399,400],{"class":275}," rank\n",[223,402,403,405,406,409,410,413,414,417],{},[239,404,356],{}," shares the same handler as ",[239,407,408],{},"\u002Fv1\u002Freranking",", ",[239,411,412],{},"\u002Frerank",", and\n",[239,415,416],{},"\u002Freranking"," — switching path will not bypass the flag.",[247,419,421,424],{"id":420},"v1embeddings-fails-or-returns-unexpected-vectors",[239,422,423],{},"\u002Fv1\u002Fembeddings"," fails or returns unexpected vectors",[223,426,427,428,431],{},"Start the server with ",[239,429,430],{},"--embeddings"," for embedding workloads:",[255,433,435],{"className":257,"code":434,"filename":259,"language":260,"meta":261,"style":261},"llama-crab-server \\\n  --model \u002Fmodels\u002Fembed.gguf \\\n  --embeddings \\\n  --pooling mean\n",[239,436,437,443,452,459],{"__ignoreMap":261},[265,438,439,441],{"class":267,"line":268},[265,440,272],{"class":271},[265,442,317],{"class":316},[265,444,445,447,450],{"class":267,"line":320},[265,446,323],{"class":275},[265,448,449],{"class":275}," \u002Fmodels\u002Fembed.gguf",[265,451,317],{"class":316},[265,453,454,457],{"class":267,"line":331},[265,455,456],{"class":275},"  --embeddings",[265,458,317],{"class":316},[265,460,461,463],{"class":267,"line":394},[265,462,397],{"class":275},[265,464,465],{"class":275}," mean\n",[223,467,468],{},"Two important defaults to be aware of:",[470,471,472,497],"ul",{},[473,474,475,478,479,482,483,486,487,489,490,493,494,496],"li",{},[239,476,477],{},"normalize"," defaults to ",[234,480,481],{},"false"," (the previous version of this page\nsaid ",[239,484,485],{},"true","; the actual default is ",[239,488,481],{},", verified against\n",[239,491,492],{},"crates\u002Fllama-crab-server\u002Fsrc\u002Fmain.rs","). Pass ",[239,495,485],{}," in the request\nbody when the consumer code expects a unit-length vector.",[473,498,499,502,503,506,507,510,511,513,514,517],{},[239,500,501],{},"encoding_format"," accepts ",[239,504,505],{},"float"," or ",[239,508,509],{},"base64",". When the request uses\n",[239,512,509],{},", the response item also gets an ",[239,515,516],{},"encoding_format: \"base64\"","\nfield alongside the encoded string.",[223,519,520,521,524,525,528,529,532,533,536],{},"The embedding ",[239,522,523],{},"usage"," object contains ",[239,526,527],{},"prompt_tokens"," and ",[239,530,531],{},"total_tokens","\nonly — there is no ",[239,534,535],{},"completion_tokens"," field on this endpoint.",[247,538,540,541,544],{"id":539},"streaming-returns-done-after-an-error-event","Streaming returns ",[239,542,543],{},"[DONE]"," after an error event",[223,546,547],{},"This is expected for the current SSE implementation. Streaming route\nerrors are emitted as:",[255,549,554],{"className":550,"code":552,"language":553,"meta":261},[551],"language-text","event: error\ndata: \u003Cmessage>\n","text",[239,555,552],{"__ignoreMap":261},[223,557,558],{},"The stream then emits the final:",[255,560,563],{"className":561,"code":562,"language":553,"meta":261},[551],"data: [DONE]\n",[239,564,562],{"__ignoreMap":261},[223,566,567,568,570,571,573,574,576,577,580],{},"Treat the error event as request failure even though ",[239,569,543],{}," follows\nit. The terminal ",[239,572,543],{}," is always emitted, even after an error\nframe, by the implementation in ",[239,575,492],{},"\n(",[239,578,579],{},"chain(stream::once(async { StreamEvent::Done }))",").",[247,582,584],{"id":583},"streaming-completions-reject-multiple-prompts","Streaming completions reject multiple prompts",[223,586,587,590,591,594],{},[239,588,589],{},"\u002Fv1\u002Fcompletions"," supports multiple prompts only in non-streaming mode.\nStreaming completions require exactly one prompt. The same constraint\napplies to the Rust ",[239,592,593],{},"create_completion_stream"," high-level helper.",[247,596,598],{"id":597},"chat-role-is-rejected","Chat role is rejected",[223,600,601,602,409,605,409,608,409,611,413,614,617,618,621,622,624,625,627,628,631],{},"The server accepts ",[239,603,604],{},"system",[239,606,607],{},"user",[239,609,610],{},"assistant",[239,612,613],{},"tool",[239,615,616],{},"function"," roles. The TypeScript Tauri client also accepts ",[239,619,620],{},"developer","\nand maps it to ",[239,623,604],{},", but the Rust server path does not accept\n",[239,626,620],{}," directly. The internal request field is ",[239,629,630],{},"role: string"," —\nthe server's role check uses the literal list above.",[247,633,635],{"id":634},"multimodal-chat-content-is-rejected","Multimodal chat content is rejected",[223,637,638],{},"Multimodal server requests require both:",[470,640,641,651],{},[473,642,643,644,647,648,580],{},"A server binary built with the ",[239,645,646],{},"mtmd"," feature\n(",[239,649,650],{},"cargo install llama-crab-server --features mtmd --force",[473,652,653,654,229],{},"Startup with ",[239,655,656],{},"--mmproj \u002Fpath\u002Fto\u002Fmmproj.gguf",[223,658,659,660,663,664,667,668,528,671,674,675,229],{},"For ",[239,661,662],{},"image_url"," content parts the server accepts local file paths and\n",[239,665,666],{},"data:image\u002F...;base64,..."," URLs. ",[239,669,670],{},"audio_url",[239,672,673],{},"video_url"," parts\nare parsed by the deserializer but rejected at bitmap load time with\n",[239,676,677],{},"unsupported multimodal chat content part type: audio\u002Fvideo",[223,679,680,681,684,685,687],{},"The Tauri plugin accepts the same image inputs. Audio input is\nexplicitly rejected by the plugin with\n",[239,682,683],{},"PluginError { kind: \"mediaDecode\", message: \"audio input is not supported by the plugin yet\" }",". To enable multimodal in a Tauri\napp, the Rust plugin must be built with the ",[239,686,646],{}," cargo feature;\nthe TypeScript client does not enforce this.",[247,689,691],{"id":690},"tauri-ipc-says-a-model-is-not-loaded","Tauri IPC says a model is not loaded",[223,693,694],{},"Load the model before generation, and pass the same model id to chat\nor generation calls:",[255,696,700],{"className":697,"code":698,"language":699,"meta":261,"style":261},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","await client.models.load({\n  model: \"local\",\n  path: \"\u002Fmodels\u002Fmodel.gguf\",\n})\n\nawait client.chat.completions.create({\n  model: \"local\",\n  messages: [{ role: \"user\", content: \"Hello\" }],\n})\n","ts",[239,701,702,729,749,765,773,780,806,821,869],{"__ignoreMap":261},[265,703,704,708,711,714,717,719,723,726],{"class":267,"line":268},[265,705,707],{"class":706},"s7zQu","await",[265,709,710],{"class":316}," client",[265,712,229],{"class":713},"sMK4o",[265,715,716],{"class":316},"models",[265,718,229],{"class":713},[265,720,722],{"class":721},"s2Zo4","load",[265,724,725],{"class":316},"(",[265,727,728],{"class":713},"{\n",[265,730,731,735,737,740,743,746],{"class":267,"line":320},[265,732,734],{"class":733},"swJcz","  model",[265,736,364],{"class":713},[265,738,739],{"class":713}," \"",[265,741,742],{"class":275},"local",[265,744,745],{"class":713},"\"",[265,747,748],{"class":713},",\n",[265,750,751,754,756,758,761,763],{"class":267,"line":331},[265,752,753],{"class":733},"  path",[265,755,364],{"class":713},[265,757,739],{"class":713},[265,759,760],{"class":275},"\u002Fmodels\u002Fmodel.gguf",[265,762,745],{"class":713},[265,764,748],{"class":713},[265,766,767,770],{"class":267,"line":394},[265,768,769],{"class":713},"}",[265,771,772],{"class":316},")\n",[265,774,776],{"class":267,"line":775},5,[265,777,779],{"emptyLinePlaceholder":778},true,"\n",[265,781,783,785,787,789,792,794,797,799,802,804],{"class":267,"line":782},6,[265,784,707],{"class":706},[265,786,710],{"class":316},[265,788,229],{"class":713},[265,790,791],{"class":316},"chat",[265,793,229],{"class":713},[265,795,796],{"class":316},"completions",[265,798,229],{"class":713},[265,800,801],{"class":721},"create",[265,803,725],{"class":316},[265,805,728],{"class":713},[265,807,809,811,813,815,817,819],{"class":267,"line":808},7,[265,810,734],{"class":733},[265,812,364],{"class":713},[265,814,739],{"class":713},[265,816,742],{"class":275},[265,818,745],{"class":713},[265,820,748],{"class":713},[265,822,824,827,829,832,835,838,840,842,844,846,849,852,854,856,859,861,864,867],{"class":267,"line":823},8,[265,825,826],{"class":733},"  messages",[265,828,364],{"class":713},[265,830,831],{"class":316}," [",[265,833,834],{"class":713},"{",[265,836,837],{"class":733}," role",[265,839,364],{"class":713},[265,841,739],{"class":713},[265,843,607],{"class":275},[265,845,745],{"class":713},[265,847,848],{"class":713},",",[265,850,851],{"class":733}," content",[265,853,364],{"class":713},[265,855,739],{"class":713},[265,857,858],{"class":275},"Hello",[265,860,745],{"class":713},[265,862,863],{"class":713}," }",[265,865,866],{"class":316},"]",[265,868,748],{"class":713},[265,870,872,874],{"class":267,"line":871},9,[265,873,769],{"class":713},[265,875,772],{"class":316},[223,877,878,879,882],{},"The Rust plugin reports missing models with\n",[239,880,881],{},"kind: \"modelNotFound\"",". Other failure modes the plugin reports:",[470,884,885,891,897,906,912,921,931,937],{},[473,886,887,890],{},[239,888,889],{},"kind: \"invalidRequest\""," — the request payload failed validation\n(missing required field, wrong type, etc.).",[473,892,893,896],{},[239,894,895],{},"kind: \"workerSpawnFailed\""," — the worker thread could not be\nspawned.",[473,898,899,902,903,580],{},[239,900,901],{},"kind: \"workerDisconnected\""," — the worker died mid-request\n(mismatched ",[239,904,905],{},"mpsc::RecvError",[473,907,908,911],{},[239,909,910],{},"kind: \"workerPanicked\""," — the worker panicked.",[473,913,914,917,918,920],{},[239,915,916],{},"kind: \"multimodalNotEnabled\""," — a multimodal request was issued but\nthe plugin was built without the ",[239,919,646],{}," cargo feature.",[473,922,923,926,927,930],{},[239,924,925],{},"kind: \"multimodalSetup\""," — ",[239,928,929],{},"MtmdContext"," initialization failed.",[473,932,933,936],{},[239,934,935],{},"kind: \"mediaDecode\""," — image decode failed or audio was sent.",[473,938,939,942],{},[239,940,941],{},"kind: \"inference\""," — the worker reported an inference-time error.",[223,944,945,946,748,949,409,952,955,956,959,960,962,963,966,967,970,971,974,975,978],{},"The previous version of this page listed only ",[239,947,948],{},"invalidRequest",[239,950,951],{},"modelNotFound",[239,953,954],{},"worker",", and ",[239,957,958],{},"inference",". The coarse ",[239,961,954],{}," kind\nhas been split into ",[239,964,965],{},"workerSpawnFailed"," \u002F ",[239,968,969],{},"workerDisconnected"," \u002F\n",[239,972,973],{},"workerPanicked","; strict equality on ",[239,976,977],{},"kind === \"worker\""," no longer\nmatches.",[247,980,982],{"id":981},"tauri-typescript-client-validation-errors","Tauri TypeScript client validation errors",[223,984,985,986,989,990,993,994,997,998,1001,1002,1005],{},"The current ",[239,987,988],{},"@llama-crab\u002Ftauri"," client throws ",[239,991,992],{},"InvalidRequestError","\n(typed by ",[239,995,996],{},"@llama-crab\u002Fcore"," as ",[239,999,1000],{},"LlamaCrabError"," with\n",[239,1003,1004],{},"type: \"invalid_request\"",") when a request is structurally invalid.\nThe checks it actually performs are:",[470,1007,1008,1014,1020,1026,1032],{},[473,1009,1010,1013],{},[239,1011,1012],{},"messages"," is non-empty.",[473,1015,1016,1019],{},[239,1017,1018],{},"prompt"," is a non-empty array (for completions).",[473,1021,1022,1025],{},[239,1023,1024],{},"input"," is a non-empty array (for embeddings).",[473,1027,1028,1031],{},[239,1029,1030],{},"documents"," is a non-empty array (for rerank).",[473,1033,1034,1037],{},[239,1035,1036],{},"model"," is present (any string).",[223,1039,1040,1041,1044,1045,1048,1049,1052,1053,409,1056,409,1059,1062,1063,1065,1066,1068],{},"The current client does ",[234,1042,1043],{},"not"," throw ",[239,1046,1047],{},"UnsupportedFeatureError"," for\n",[239,1050,1051],{},"n>1",", tools, ",[239,1054,1055],{},"tool_choice",[239,1057,1058],{},"response_format",[239,1060,1061],{},"logprobs",", image\ncontent, or audio content. Those features are forwarded to the Rust\nplugin (which handles them when the relevant feature is enabled) and\nthe TypeScript layer no longer rejects them. The\n",[239,1064,1047],{}," class is still exported from\n",[239,1067,996],{}," for adapter authors, but the Tauri client does not\nthrow it.",[247,1070,1072],{"id":1071},"streaming-cancellation","Streaming cancellation",[223,1074,1075,1076,1079,1080,1083,1084,1086,1087,966,1090,1093,1094,1097,1098,1101],{},"The Tauri streaming chunks carry a ",[239,1077,1078],{},"requestId",". To cancel a streaming\nrequest, call ",[239,1081,1082],{},"plugin:llama-crab|cancel"," with the same ",[239,1085,1078],{},". The\n",[239,1088,1089],{},"AsyncIterable\u003CChatCompletionChunk>",[239,1091,1092],{},"AsyncIterable\u003CCompletionChunk>","\nreturned by the client respects the ",[239,1095,1096],{},"AbortSignal"," passed through\n",[239,1099,1100],{},"CallOptions = { signal?: AbortSignal }"," and triggers the cancellation\nautomatically.",[1103,1104,1105],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":261,"searchDepth":320,"depth":320,"links":1107},[1108,1109,1111,1113,1115,1116,1117,1118,1119,1120],{"id":249,"depth":320,"text":250},{"id":353,"depth":320,"text":1110},"\u002Fv1\u002Frerank returns an error",{"id":420,"depth":320,"text":1112},"\u002Fv1\u002Fembeddings fails or returns unexpected vectors",{"id":539,"depth":320,"text":1114},"Streaming returns [DONE] after an error event",{"id":583,"depth":320,"text":584},{"id":597,"depth":320,"text":598},{"id":634,"depth":320,"text":635},{"id":690,"depth":320,"text":691},{"id":981,"depth":320,"text":982},{"id":1071,"depth":320,"text":1072},"Common fixes for server, Tauri IPC, streaming, embeddings, and multimodal issues.","md",null,{},{"icon":216},{"title":213,"description":1121},"XHMOWQ-mDlRySjbDrei1ZGv6KhuCN1EoIPQ6zDzlfcM",[1129,1123],{"title":208,"path":209,"stem":210,"description":1130,"icon":211,"children":-1},"Release checklist for keeping crates, packages, API docs, and examples aligned.",1781622518594]