PageSourceSearch

https://neuraldeep.ru/assets/ModelDetail-4pLndocr.js

js neuraldeep.ru collected 2026-10-06 02:10:14 UTC 22,531 bytes, 150 lines download raw bytes

1import{c as Q,$ as W,x as M,P as U,r as f,e as G,_ as T,U as $,j as e,Q as P,L as m,J as L,Z as g,Y as J,k as Z}from"./index-m47I5etC.js";import{f as V,m as X}from"./modelSlug-aJXp9cm0.js";import{u as ee,p as te,w as se,P as ae,S as ne}from"./PartnerBadges-aVc3InyU.js";import{W as re}from"./wallet-gVxnnASP.js";import{C as z}from"./check-TaCWj--i.js";import{C}from"./copy-Du0rZezT.js";/**
2 * @license lucide-react v1.50.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const I={name:"arrow-left",size:24,node:[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]};I.node;const oe=Q(I),ce={"все тарифы":"all tiers","Starter · Pro":"Starter · Pro",Pro:"Pro","Кошелёк · токены":"Wallet · tokens","только с опцией Qwen ∞":"only with the Qwen ∞ option"};function he(){const{slug:d=""}=W(),a=M(),n=U(),s=a==="en",t=V(d),r=ee(),i=t?te(r==null?void 0:r.get(t.name),s):null,j=t&&!i?se(r==null?void 0:r.get(t.name),s):null,[b,N]=f.useState(!1),l=G();if(f.useEffect(()=>{if(!t)return;const o=`${t.name} · Neuraldeep Hub`,u=t.note?T(t.name,t.note,a):$(t.name,t.desc,a);document.title=o;const H=document.head.querySelector('meta[name="description"]');H&&H.setAttribute("content",u.slice(0,300));const E=document.head.querySelector('link[rel="canonical"]');E&&E.setAttribute("href",`https://neuraldeep.ru${s?"/en":""}/models/${X(t.name)}`)},[t,d,a,s]),!t)return e.jsxs("div",{className:"min-h-screen flex flex-col",children:[e.jsx(P,{}),e.jsx("main",{className:"flex-1 w-full",children:e.jsxs("div",{className:"max-w-3xl mx-auto px-6 py-16 text-center",children:[e.jsx("h1",{className:"text-2xl font-mono mb-3",children:s?"Model not found":"Модель не найдена"}),e.jsxs(m,{to:n("/models"),className:"text-accent hover:underline",children:["← ",s?"All models":"Все модели"]})]})}),e.jsx(L,{})]});const y=$(t.name,t.desc,a),B=t.note?T(t.name,t.note,a):y,F=y.split("·").map(o=>o.trim()).filter(Boolean),k=s?ce[g[t.access]]??g[t.access]:g[t.access],w=t.endpoints[0]||"",p=t.type==="chat",v=t.type==="embed",_=t.name.includes("gpt-oss"),S=t.name.startsWith("qwen3.6")||t.name.startsWith("qwen3.8"),D=t.name.startsWith("qwen3.8"),q=p&&!t.name.includes("-noreason")&&(_||S),x=t.type==="image",h=t.endpoints.some(o=>o.includes("/images/edit")),K=p?`curl https://api.neuraldeep.ru/v1/chat/completions \\
7  -H "Authorization: Bearer $NDT_KEY" \\
8  -H "Content-Type: application/json" \\
9  -d '{
10    "model": "${t.name}",
11    "messages": [{"role": "user", "content": "Привет"}]
12  }'`:v?`curl https://api.neuraldeep.ru/v1/embeddings \\
13  -H "Authorization: Bearer $NDT_KEY" \\
14  -H "Content-Type: application/json" \\
15  -d '{"model": "${t.name}", "input": "текст"}'`:h?`# 1. отправляем исходник и описание правки (multipart)
16curl https://api.neuraldeep.ru/v1/images/edit \\
17  -H "Authorization: Bearer $NDT_KEY" \\
18  -F "[email protected]" \\
19  -F "prompt=замени фон на ночной город, остальное не трогай"
20# → {"task_uid": "ab12…", "poll": "/v1/images/tasks/ab12…"}
21
22# 2. ждём готовности (правка занимает около минуты)
23curl https://api.neuraldeep.ru/v1/images/tasks/ab12… \\
24  -H "Authorization: Bearer $NDT_KEY"
25# → {"status": "finished", "result": {"width": 1312, "height": 1312}}
26
27# 3. забираем картинку
28curl https://api.neuraldeep.ru/v1/images/tasks/ab12…/result \\
29  -H "Authorization: Bearer $NDT_KEY" -o out.png`:x?`# 1. ставим задачу — промпт можно писать по-русски, перевод не нужен
30curl https://api.neuraldeep.ru${w} \\
31  -H "Authorization: Bearer $NDT_KEY" \\
32  -H "Content-Type: application/json" \\
33  -d '{
34    "prompt": "рыжий кот в скафандре на фоне Земли, фотореализм",
35    "options": {"aspect_ratio": "16:9", "steps": 30}
36  }'
37# → {"task_uid": "ab12…", "poll": "/v1/images/tasks/ab12…"}
38
39# 2. ждём готовности (около 40 секунд)
40curl https://api.neuraldeep.ru/v1/images/tasks/ab12… \\
41  -H "Authorization: Bearer $NDT_KEY"
42# → {"status": "finished", "result": {"width": 2752, "height": 1536}}
43
44# 3. забираем картинку
45curl https://api.neuraldeep.ru/v1/images/tasks/ab12…/result \\
46  -H "Authorization: Bearer $NDT_KEY" -o out.png`:`curl https://api.neuraldeep.ru${w} \\
47  -H "Authorization: Bearer $NDT_KEY" \\
48  -H "Content-Type: application/json" \\
49  -d '{"model": "${t.name}"}'`,Y=`# исходник уходит файлом, описание правки — текстом
50curl https://api.neuraldeep.ru/v1/images/edit \\
51  -H "Authorization: Bearer $NDT_KEY" \\
52  -F "[email protected]" \\
53  -F "prompt=замени фон на ночной город, остальное не трогай"
54# → {"task_uid": "ab12…"} — дальше те же два шага: ждём и забираем
55
56curl https://api.neuraldeep.ru/v1/images/tasks/ab12… \\
57  -H "Authorization: Bearer $NDT_KEY"
58curl https://api.neuraldeep.ru/v1/images/tasks/ab12…/result \\
59  -H "Authorization: Bearer $NDT_KEY" -o out.png`,R=`import time, requests
60
61API = "https://api.neuraldeep.ru/v1"
62H = {"Authorization": "Bearer НДТ_КЛЮЧ"}   # sk-... из кабинета
63
64# до 10 референсов за запрос: images можно передать списком
65task = requests.post(
66    f"{API}/images/edit",
67    headers=H,
68    files={"images": open("photo.png", "rb")},
69    data={"prompt": "замени фон на ночной город, остальное не трогай"},
70).json()["task_uid"]
71
72while True:
73    st = requests.get(f"{API}/images/tasks/{task}", headers=H).json()
74    if st["status"] in ("finished", "failed"):
75        break
76    time.sleep(3)
77
78assert st["status"] == "finished", st.get("error")
79open("out.png", "wb").write(
80    requests.get(f"{API}/images/tasks/{task}/result", headers=H).content)`,A=p?`from openai import OpenAI
81
82client = OpenAI(
83    base_url="https://api.neuraldeep.ru/v1",
84    api_key="НДТ_КЛЮЧ",  # sk-... из кабинета
85)
86
87resp = client.chat.completions.create(
88    model="${t.name}",
89    messages=[{"role": "user", "content": "Привет"}],
90)
91print(resp.choices[0].message.content)`:v?`from openai import OpenAI
92
93client = OpenAI(
94    base_url="https://api.neuraldeep.ru/v1",
95    api_key="НДТ_КЛЮЧ",  # sk-... из кабинета
96)
97
98resp = client.embeddings.create(
99    model="${t.name}",
100    input="текст",
101)
102print(resp.data[0].embedding[:8])`:x?`import time, requests
103
104API = "https://api.neuraldeep.ru/v1"
105H = {"Authorization": "Bearer НДТ_КЛЮЧ"}   # sk-... из кабинета
106${h?`# правка: исходник уходит файлом, описание — текстом
107task = requests.post(
108    f"{API}/images/edit",
109    headers=H,
110    files={"images": open("photo.png", "rb")},
111    data={"prompt": "замени фон на ночной город, остальное не трогай"},
112).json()["task_uid"]`:`task = requests.post(
113    f"{API}/images/generate",
114    headers=H,
115    json={
116        "prompt": "рыжий кот в скафандре на фоне Земли, фотореализм",
117        "options": {"aspect_ratio": "16:9", "steps": 30},
118    },
119).json()["task_uid"]`}
120
121# картинка считается на нашей карте — ждём поллингом
122while True:
123    st = requests.get(f"{API}/images/tasks/{task}", headers=H).json()
124    if st["status"] in ("finished", "failed"):
125        break
126    time.sleep(3)
127
128assert st["status"] == "finished", st.get("error")
129png = requests.get(f"{API}/images/tasks/{task}/result", headers=H).content
130open("out.png", "wb").write(png)`:null;async function O(){try{await navigator.clipboard.writeText(window.location.href),N(!0),setTimeout(()=>N(!1),1500)}catch{}}return e.jsxs("div",{className:"min-h-screen flex flex-col",children:[e.jsx(P,{}),e.jsx("main",{className:"flex-1 w-full",children:e.jsxs("div",{className:"max-w-3xl mx-auto px-6 py-10 w-full",children:[e.jsxs(m,{to:n("/models"),className:"inline-flex items-center gap-1.5 text-sm text-muted hover:text-fg transition mb-6",children:[e.jsx(oe,{size:15})," ",s?"All models":"Все модели"]}),e.jsxs("div",{className:"flex items-start justify-between gap-3 flex-wrap",children:[e.jsx("h1",{className:"min-w-0 text-2xl sm:text-3xl font-mono tracking-tight [overflow-wrap:anywhere]",children:t.name}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap justify-start sm:justify-end",children:[t.region==="proxy"?e.jsx("span",{className:"text-[11px] font-mono text-amber-500 border border-amber-500/40 rounded px-2 py-1",children:s?"abroad":"вне РФ"}):e.jsx("span",{className:"text-[11px] font-mono text-emerald-500 border border-emerald-500/40 rounded px-2 py-1",children:s?"in Russia":"🇷🇺 в РФ"}),e.jsx(ae,{partner:t.partner,window:t.window,en:s,size:"md"}),(l==null?void 0:l.active)&&J(t.name)&&e.jsxs("span",{className:"text-[11px] font-mono text-indigo-400 border border-indigo-400/40 rounded px-2 py-1",children:["🌙 ",s?`−${l.discount_pct}% at night`:`−${l.discount_pct}% ночью`]}),t.gate==="kimi"&&e.jsxs("span",{className:"text-[11px] font-mono inline-flex items-center gap-1 text-accent border border-accent/40 rounded px-2 py-1",children:[e.jsx(Z,{size:11}),s?"paid":"оплата"]}),t.gate==="wallet"&&e.jsxs("span",{className:"text-[11px] font-mono inline-flex items-center gap-1 text-accent border border-accent/40 rounded px-2 py-1",children:[e.jsx(re,{size:11}),s?"wallet":"кошелёк"]}),e.jsxs("button",{onClick:O,className:"text-xs inline-flex items-center gap-1.5 border border-border rounded px-2.5 py-1.5 text-muted hover:text-fg hover:border-accent/50 transition",children:[b?e.jsx(z,{size:14,className:"text-accent"}):e.jsx(C,{size:14}),b?s?"copied":"скопировано":s?"copy link":"скопировать ссылку"]})]})]}),e.jsx("p",{className:"mt-3 text-muted leading-relaxed",children:B}),e.jsxs("div",{className:"mt-5 flex flex-wrap gap-2",children:[t.ctx&&t.ctx!=="—"&&e.jsx("span",{className:"text-xs font-mono text-muted bg-panel border border-border rounded px-2 py-1",children:(s?"context ":"контекст ")+t.ctx}),F.map((o,u)=>e.jsx("span",{className:"text-xs font-mono text-muted bg-panel border border-border rounded px-2 py-1",children:o},u))]}),e.jsxs("dl",{className:"mt-6 grid sm:grid-cols-2 gap-x-6 gap-y-3 text-sm",children:[e.jsxs("div",{className:"flex justify-between border-b border-border/50 pb-2",children:[e.jsx("dt",{className:"text-muted",children:s?"Access":"Доступ"}),e.jsx("dd",{className:"text-fg text-right",children:t.access==="option"?e.jsx(m,{to:n("/pricing"),className:"text-accent hover:underline",children:k}):k})]}),e.jsxs("div",{className:"flex justify-between border-b border-border/50 pb-2",children:[e.jsx("dt",{className:"text-muted",children:s?"Endpoints":"Эндпоинты"}),e.jsx("dd",{className:"text-accent/90 font-mono text-xs text-right break-all",children:t.endpoints.join(" · ")})]}),i&&e.jsxs("div",{className:"flex justify-between gap-3 border-b border-border/50 pb-2 sm:col-span-2",children:[e.jsx("dt",{className:"text-muted shrink-0",children:s?"Price":"Цена"}),e.jsx("dd",{className:"text-amber-500 font-mono text-xs text-right",children:i})]}),j&&e.jsxs("div",{className:"flex justify-between gap-3 border-b border-border/50 pb-2 sm:col-span-2",children:[e.jsx("dt",{className:"text-muted shrink-0",children:s?"Price":"Цена"}),e.jsx("dd",{className:"text-fg font-mono text-xs text-right",children:j})]})]}),e.jsx("h2",{className:"mt-8 mb-2 text-sm font-mono text-muted uppercase tracking-wider",children:s?"Usage":"Как использовать"}),e.jsx(c,{label:"curl",code:K,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"}),A&&e.jsx(c,{label:"Python · OpenAI SDK",code:A,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"}),e.jsxs("p",{className:"mt-2 text-xs text-muted",children:[s?"One sk-key for all models via the OpenAI-compatible API. Get a key in the ":"Один sk-ключ на все модели через OpenAI-совместимый API. Ключ — в ",e.jsx("a",{href:n("/app/keys"),className:"text-accent hover:underline",children:s?"dashboard":"кабинете"}),"."]}),x&&!h&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"mt-8 mb-2 text-sm font-mono text-muted uppercase tracking-wider",children:s?"Editing an existing image":"Правка готовой картинки"}),e.jsx("p",{className:"text-sm text-muted leading-relaxed mb-2",children:s?e.jsxs(e.Fragment,{children:["The same model edits a picture you already have: background, objects, text on the image, style — the rest stays put. Up to 10 reference images per request, via ",e.jsx("code",{className:"text-accent",children:"/v1/images/edit"}),"."]}):e.jsxs(e.Fragment,{children:["Та же модель правит готовую картинку: фон, объекты, надписи на изображении, стиль — остальное остаётся на месте. До 10 референсных изображений за запрос, ручка ",e.jsx("code",{className:"text-accent",children:"/v1/images/edit"}),"."]})}),e.jsx(c,{label:"curl",code:Y,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"}),e.jsx(c,{label:"Python",code:R,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"})]}),t.license==="research"&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"mt-8 mb-2 text-sm font-mono text-muted uppercase tracking-wider",children:s?"Terms of use":"Условия использования"}),e.jsx("div",{className:"rounded border border-amber-500/40 bg-amber-500/5 px-4 py-3 text-sm text-muted leading-relaxed",children:s?e.jsxs(e.Fragment,{children:["Access to this model is granted ",e.jsx("span",{className:"text-fg",children:"for research and evaluation purposes only"}),". The weights are published under the ",e.jsx("span",{className:"text-fg",children:"Qwen RESEARCH LICENSE"}),", which does not permit commercial use; a commercial licence is agreed separately with the rights holder (Alibaba). By sending a request you confirm you are using the model within those limits, and you are responsible for how you use the images you receive."]}):e.jsxs(e.Fragment,{children:["Доступ к этой модели выдан ",e.jsx("span",{className:"text-fg",children:"только для исследовательских и оценочных задач"}),". Веса опубликованы под ",e.jsx("span",{className:"text-fg",children:"Qwen RESEARCH LICENSE"}),", а она не разрешает коммерческое использование — такое право согласуется отдельно с правообладателем (Alibaba). Отправляя запрос, вы подтверждаете, что работаете в этих рамках; за то, как вы используете полученные картинки, отвечаете вы."]})})]}),q&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"mt-8 mb-2 text-sm font-mono text-muted uppercase tracking-wider",children:s?"Reasoning control":"Управление reasoning"}),_?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted leading-relaxed",children:s?e.jsxs(e.Fragment,{children:["Depth of reasoning is set by ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"}),": ",e.jsx("code",{className:"text-accent",children:"low"})," / ",e.jsx("code",{className:"text-accent",children:"medium"})," / ",e.jsx("code",{className:"text-accent",children:"high"}),". Reasoning is on by default; ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," arrives as a separate field."]}):e.jsxs(e.Fragment,{children:["Глубину размышления задаёт ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"}),": ",e.jsx("code",{className:"text-accent",children:"low"})," / ",e.jsx("code",{className:"text-accent",children:"medium"})," / ",e.jsx("code",{className:"text-accent",children:"high"}),". По умолчанию reasoning включён; ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," приходит отдельным полем."]})}),e.jsx(c,{label:"curl",code:`curl https://api.neuraldeep.ru/v1/chat/completions \\
131  -H "Authorization: Bearer $NDT_KEY" \\
132  -H "Content-Type: application/json" \\
133  -d '{
134    "model": "${t.name}",
135    "messages": [{"role": "user", "content": "Привет"}],
136    "reasoning_effort": "low"
137  }'`,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"})]}):D?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted leading-relaxed",children:s?e.jsxs(e.Fragment,{children:["Reasoning always runs at ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"})," ",e.jsx("code",{className:"text-accent",children:"low"}),": the gateway lowers any other value to ",e.jsx("code",{className:"text-accent",children:"low"}),", because deeper levels made the model think for many minutes. To turn thinking off, use the ",e.jsx("code",{className:"text-accent",children:"qwen3.8-27b-noreason"})," model; ",e.jsx("code",{className:"text-accent",children:"enable_thinking: false"})," on this name has no effect. ",e.jsx("code",{className:"text-accent",children:"thinking_token_budget"})," is not supported. Reasoning is on by default; ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," arrives as a separate field."]}):e.jsxs(e.Fragment,{children:["Размышление всегда идёт с ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"})," ",e.jsx("code",{className:"text-accent",children:"low"}
137),": любое другое значение гейт понижает до ",e.jsx("code",{className:"text-accent",children:"low"}),", потому что более глубокие уровни уводили модель в раздумья на много минут. Выключить размышление можно только моделью ",e.jsx("code",{className:"text-accent",children:"qwen3.8-27b-noreason"}),", ",e.jsx("code",{className:"text-accent",children:"enable_thinking: false"})," на этом имени не действует. ",e.jsx("code",{className:"text-accent",children:"thinking_token_budget"})," не поддерживается. По умолчанию reasoning включён, ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," приходит отдельным полем."]})}),e.jsx(c,{label:"curl",code:`curl https://api.neuraldeep.ru/v1/chat/completions \\
138  -H "Authorization: Bearer $NDT_KEY" \\
139  -H "Content-Type: application/json" \\
140  -d '{
141    "model": "${t.name}",
142    "messages": [{"role": "user", "content": "Привет"}],
143    "reasoning_effort": "xhigh"
144  }'`,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted leading-relaxed",children:s?e.jsxs(e.Fragment,{children:["This model has no reasoning depth levels: ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"})," and ",e.jsx("code",{className:"text-accent",children:"thinking_token_budget"})," have no effect. To turn thinking off, use the ",e.jsx("code",{className:"text-accent",children:"-noreason"})," model; ",e.jsx("code",{className:"text-accent",children:"enable_thinking: false"})," on this name has no effect. Reasoning is on by default; ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," arrives as a separate field."]}):e.jsxs(e.Fragment,{children:["Уровней глубины у этой модели нет: ",e.jsx("code",{className:"text-accent",children:"reasoning_effort"})," и ",e.jsx("code",{className:"text-accent",children:"thinking_token_budget"})," ни на что не влияют. Выключить размышление можно только моделью с суффиксом ",e.jsx("code",{className:"text-accent",children:"-noreason"}),", ",e.jsx("code",{className:"text-accent",children:"enable_thinking: false"})," на этом имени не действует. По умолчанию reasoning включён, ",e.jsx("code",{className:"text-accent",children:"reasoning_content"})," приходит отдельным полем."]})}),e.jsx(c,{label:"curl",code:`curl https://api.neuraldeep.ru/v1/chat/completions \\
145  -H "Authorization: Bearer $NDT_KEY" \\
146  -H "Content-Type: application/json" \\
147  -d '{
148    "model": "${t.name}-noreason",
149    "messages": [{"role": "user", "content": "Привет"}]
150  }'`,copyLabel:s?"copy":"копировать",copiedLabel:s?"copied":"скопировано"})]})]}),e.jsxs("div",{className:"mt-8 flex flex-wrap gap-4 text-sm",children:[e.jsxs(m,{to:n("/models"),className:"text-accent hover:underline",children:["← ",s?"All models":"Все модели"]}),t.bench&&e.jsxs("a",{href:n("/benchmarks"),className:"text-accent hover:underline inline-flex items-center gap-1",children:[e.jsx(ne,{size:14}),s?"Benchmarks":"Бенчмарки"]}),e.jsx("a",{href:n("/docs"),className:"text-accent hover:underline",children:s?"API docs":"Документация API"})]})]})}),e.jsx(L,{})]})}function c({label:d,code:a,copyLabel:n,copiedLabel:s}){const[t,r]=f.useState(!1);async function i(){try{await navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),1500)}catch{}}return e.jsxs("div",{className:"mb-3 rounded-lg border border-border bg-panel overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/60",children:[e.jsx("span",{className:"text-[11px] font-mono text-muted",children:d}),e.jsxs("button",{onClick:i,className:"text-[11px] inline-flex items-center gap-1.5 text-muted hover:text-fg transition",children:[t?e.jsx(z,{size:13,className:"text-accent"}):e.jsx(C,{size:13}),t?s:n]})]}),e.jsx("pre",{className:"p-3 overflow-x-auto text-[12px] font-mono text-fg leading-relaxed",children:e.jsx("code",{children:a})})]})}export{he as ModelDetail};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.