{"id":489265,"date":"2026-07-31T07:00:44","date_gmt":"2026-07-31T07:00:44","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=489265"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=489265","title":{"rendered":"\u041e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 \u0434\u0435\u0432\u044f\u0442\u044c LLM-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432: \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u043b\u0438 Kimi K3, GLM-5.2, Claude \u0438 Ollama \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u0433\u0435\u043d\u0442\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0434\u0435\u043b\u0430\u044e execai \u2014 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 AI-\u0430\u0433\u0435\u043d\u0442 \u043d\u0430 Go (bubbletea), \u0432 \u0434\u0443\u0445\u0435 Claude Code. \u041e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0433\u043e\u043d\u044f\u0435\u0442 shell-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0445\u043e\u0434\u0438\u0442 \u0432 kubernetes \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 TUI.<\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u00ab\u0430\u0433\u0435\u043d\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e\u00bb, \u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u0442\u0443\u043b: \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Kimi Code \u0437\u0430 $19, \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e GLM Coding Plan \u0437\u0430 $18, \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 Anthropic, \u0430 \u043a\u0442\u043e-\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0433\u043e\u043d\u044f\u0442\u044c Ollama \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u0432 \u043e\u0434\u043d\u043e\u043c \u0447\u0430\u0442\u0435, \u0441 \u043e\u0431\u0449\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043b\u0435\u0442\u0443.<\/p>\n<p>\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u2014 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a, \u0434\u0432\u0430 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u043c\u0438\u0440\u0430 API (Anthropic-compat \u0438 OpenAI-compat), SSE-\u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0441 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439 tool calls, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0430\u0432\u0442\u043e\u0434\u0435\u0442\u0435\u043a\u0442 \u0442\u0430\u0440\u0438\u0444\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0438 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0447\u0443\u0436\u0438\u0435 CLI. \u0421 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0433\u0440\u0430\u0431\u043b\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u0438.<\/p>\n<h3>\u0417\u0430\u0434\u0430\u0447\u0430<\/h3>\n<p>\u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e UX:<\/p>\n<pre><code>\/source          \u2190 \u043c\u0435\u043d\u044e: execai, zai, kimi, kimi-api, anthropic, openai,                   claude-cli, codex-cli, ollama\/source kimi     \u2190 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 Kimi Code\u043e\u0431\u044a\u044f\u0441\u043d\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u2190 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 Kimi K3\/source zai      \u2190 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 GLM-5.2\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0439        \u2190 GLM \u0432\u0438\u0434\u0438\u0442 \u0412\u0421\u042e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u044b Kimi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/400\/ca1\/f46\/400ca1f4643f4edf5e514326aceae9e6.png\" alt=\"\/source \u2014 \u043f\u0438\u043a\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432: 9 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/400\/ca1\/f46\/400ca1f4643f4edf5e514326aceae9e6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/400\/ca1\/f46\/400ca1f4643f4edf5e514326aceae9e6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\/source \u2014 \u043f\u0438\u043a\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432: 9 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p><strong>\u041e\u0431\u0449\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/strong> \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e \u043d\u0435\u0451.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u0449\u0438\u0439 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b.<\/strong> \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (Bash, Read, Edit, Grep\u2026), \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043b\u0438\u043c\u0438\u0442\u044b \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0438\u043b\u043b\u0438\u043d\u0433 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d.<\/strong> \u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430. \u041d\u0430\u0448 \u0431\u044d\u043a\u0435\u043d\u0434 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a \u0447\u0443\u0436\u0438\u043c API \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a<\/h3>\n<p>\u0412\u0435\u0441\u044c \u0437\u043e\u043e\u043f\u0430\u0440\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c:<\/p>\n<pre><code class=\"go\">\/\/ StreamingLLM is the standard LLM-provider contract for the tool-use loop.type StreamingLLM interface {    Stream(ctx context.Context, messages []AIMessage,        tools []map[string]any, cb StreamCallbacks) (*StreamResult, error)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0432\u0445\u043e\u0434 \u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 JSON-\u0441\u0445\u0435\u043c\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"go\">type StreamResult struct {    Content      string    ToolCalls    []ToolCall    FinishReason string}\/\/ StreamCallbacks \u2014 UI callbacks (showing text deltas and tool_call starts).type StreamCallbacks struct {    OnText      func(string)      \/\/ \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430    OnToolCall  func(name string) \/\/ \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 UI \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \"\u25b6 Bash\u2026\"    OnReasoning func(string)      \/\/ chain-of-thought (thinking-\u043c\u043e\u0434\u0435\u043b\u0438) \u2014 \u0440\u0438\u0441\u0443\u0435\u043c \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0451\u043d\u043d\u043e}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b (tool-use loop) \u0434\u0435\u0440\u0436\u0438\u0442 <code>StreamingLLM<\/code> \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f:<\/p>\n<pre><code class=\"go\">m.cli = m.makeLLMClient() \/\/ \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0414\u044c\u044f\u0432\u043e\u043b, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445.<\/p>\n<h3>\u0414\u0432\u0430 \u043c\u0438\u0440\u0430: Anthropic-compat \u0438 OpenAI-compat<\/h3>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0432\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0441\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0430\u043c HTTP API.<\/p>\n<p><strong>OpenAI-compat<\/strong> (<code>POST \/v1\/chat\/completions<\/code>, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f <code>Bearer<\/code>): \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 SSE-\u0447\u0430\u043d\u043a\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 <code>choices[].delta.content<\/code>, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043a\u0430\u043a <code>delta.tool_calls[]<\/code> \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438.<\/p>\n<p><strong>Anthropic-compat<\/strong> (<code>POST \/v1\/messages<\/code>, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 <code>x-api-key<\/code> + <code>anthropic-version<\/code>): \u0441\u043e\u0431\u044b\u0442\u0438\u044f <code>message_start<\/code> \/ <code>content_block_delta<\/code> \/ <code>message_delta<\/code>, \u0443 thinking-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 <code>thinking_delta<\/code>.<\/p>\n<p>\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u043e\u0439:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0438\u0430\u043b\u0435\u043a\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">Endpoint<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">execai (\u043d\u0430\u0448 gateway)<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">api.execai.ru<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Z.ai Coding Plan<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Anthropic-compat<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">api.z.ai\/api\/anthropic<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Kimi Code (\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Anthropic-compat<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">api.kimi.com\/coding<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Moonshot Platform (pay-per-token)<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">api.moonshot.ai\/v1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Anthropic API<\/p>\n<\/td>\n<td>\n<p align=\"left\">Anthropic-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">api.anthropic.com<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OpenAI API<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">api.openai.com\/v1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Ollama cloud<\/p>\n<\/td>\n<td>\n<p align=\"left\">Anthropic-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">ollama.com<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Ollama local<\/p>\n<\/td>\n<td>\n<p align=\"left\">OpenAI-compat<\/p>\n<\/td>\n<td>\n<p align=\"left\">localhost:11434<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Claude Code CLI \/ Codex CLI<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u044c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u044e\u0440\u043f\u0440\u0438\u0437 \u21161, \u0441\u0442\u043e\u0438\u0432\u0448\u0438\u0439 \u043d\u0430\u043c \u0432\u0435\u0447\u0435\u0440\u0430: <strong>\u043a\u043b\u044e\u0447 Z.ai Coding Plan \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0422\u041e\u041b\u042c\u041a\u041e \u0447\u0435\u0440\u0435\u0437 Anthropic-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 endpoint<\/strong>. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 <code>\/chat\/completions<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>429 Insufficient balance<\/code> \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0438 pay-per-token \u0443 \u043d\u0438\u0445 \u0431\u0438\u043b\u043b\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u00ab\u0431\u0430\u043b\u0430\u043d\u0441\u00bb \u043d\u0430 pay-per-token \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u041c\u044b \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u0442\u0443\u0445.<\/p>\n<p>\u0421\u044e\u0440\u043f\u0440\u0438\u0437 \u21162: \u0443 Kimi \u0442\u043e \u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u0436\u0451\u0441\u0442\u0447\u0435. Kimi Code (kimi.com\/code, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 $19\/\u043c\u0435\u0441) \u0438 Moonshot Platform (platform.moonshot.ai, \u043e\u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0442\u043e\u043a\u0435\u043d\u044b) \u2014 \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 endpoint\u2019\u0430\u043c\u0438, \u043a\u043b\u044e\u0447\u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0445 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u2014 <code>kimi<\/code> \u0438 <code>kimi-api<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0433\u0430\u0434\u0430\u043b.<\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 switch:<\/p>\n<pre><code class=\"go\">case subscriptions.SourceKimi:    \/\/ Kimi Code Coding Plan subscription (kimi.com\/code).    \/\/ Endpoint: api.kimi.com\/coding \u2014 Anthropic-compat + thinking.    base := active.BaseURL    if base == \"\" {        base = \"https:\/\/api.kimi.com\/coding\"    }    return llm.NewAnthropicClient(base, active.APIKey, m.current.ID, m.cfg.ThinkingBudget)case subscriptions.SourceKimiAPI:    \/\/ Moonshot Platform pay-per-token API key (platform.moonshot.ai).    base := active.BaseURL    if base == \"\" {        base = \"https:\/\/api.moonshot.ai\/v1\"    }    return llm.NewGLMClient(base, active.APIKey, m.current.ID)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e \u043d\u0430 \u0434\u0435\u0432\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 <strong>\u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439<\/strong> <code>StreamingLLM<\/code>: \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0433\u043e gateway, generic OpenAI-compat \u043a\u043b\u0438\u0435\u043d\u0442, generic Anthropic-compat \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 CLI.<\/p>\n<h3>SSE-\u043f\u0430\u0440\u0441\u0435\u0440: \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0446\u0438\u044f tool calls \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c<\/h3>\n<p>\u0421\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u0430 \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u041c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0434\u0430\u0451\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0430 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043f\u043e \u0447\u0430\u043d\u043a\u0430\u043c: \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0447\u0430\u043d\u043a\u0435 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043b\u044c\u0442\u044b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u043a\u043b\u0435\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443:<\/p>\n<pre><code class=\"go\">for _, tc := range ch.Delta.ToolCalls {    idx := tc.Index    existing, ok := toolByIdx[idx]    if !ok {        existing = &amp;ToolCall{Index: idx, ID: tc.ID, Type: tc.Type, Function: tc.Function}        toolByIdx[idx] = existing        if cb.OnToolCall != nil &amp;&amp; tc.Function.Name != \"\" {            cb.OnToolCall(tc.Function.Name) \/\/ UI \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \"\u25b6 Bash\u2026\"        }    } else {        \/\/ Accumulate the arguments deltas.        existing.Function.Arguments += tc.Function.Arguments    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043d\u0435 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f\u00bb \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0434\u043e\u0441\u0442\u044c \u2014 <code>reasoning_content<\/code>: DeepSeek, GLM \u0438 Kimi \u0448\u043b\u044e\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 (<code>reasoning<\/code>, <code>reasoning_content<\/code>, <code>thinking_delta<\/code> \u0443 Anthropic-\u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0430), \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u043b\u0431\u044d\u043a <code>OnReasoning<\/code>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/725\/93f\/f1c\/72593ff1cf9831372cea38663e5f9567.png\" alt=\"GLM-5.2 \u0447\u0435\u0440\u0435\u0437 Ollama Cloud \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e interface \u0432 Go \u2014 \u0432\u0438\u0434\u0435\u043d reasoning\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/725\/93f\/f1c\/72593ff1cf9831372cea38663e5f9567.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/725\/93f\/f1c\/72593ff1cf9831372cea38663e5f9567.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>GLM-5.2 \u0447\u0435\u0440\u0435\u0437 Ollama Cloud \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e interface \u0432 Go \u2014 \u0432\u0438\u0434\u0435\u043d reasoning<\/figcaption><\/div>\n<\/figure>\n<h3>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439<\/h3>\n<p>\u0425\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u2014 \u043f\u0443\u0442\u044c \u043a \u0432\u0435\u0447\u043d\u043e \u043f\u0440\u043e\u0442\u0443\u0445\u0448\u0435\u043c\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443. \u0414\u043b\u044f OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043c\u044b \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0451\u0440\u0433\u0430\u0435\u043c <code>GET \/v1\/models<\/code> \u0438 \u0441\u0442\u0440\u043e\u0438\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443:<\/p>\n<pre><code class=\"go\">\/\/ buildOpenAIDynamicCatalog \u2014 primary picker takes the best of the available ones.primaryOrder := []string{\"gpt-5\", \"gpt-5-mini\", \"o3\", \"gpt-4.1\", \"gpt-4o\", \"o4-mini\"}idsSet := map[string]bool{}for _, id := range ids {    idsSet[id] = true}primaryID := \"\"for _, want := range primaryOrder {    if idsSet[want] {          \/\/ \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e \u041f\u0420\u0418\u041e\u0420\u0418\u0422\u0415\u0422\u0423, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430        primaryID = want        break    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0430\u0431\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0439\u043c\u0430\u043b \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442: \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0431\u0440\u0430\u043b\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u2014 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438 <code>ids = [gpt-4o, gpt-5]<\/code> primary \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f gpt-4o. \u0418\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432.<\/p>\n<h3>\u0410\u0432\u0442\u043e\u0434\u0435\u0442\u0435\u043a\u0442 \u0442\u0430\u0440\u0438\u0444\u0430: \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0430\u0451\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>\u0423 Kimi Code \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: <code>GET \/coding\/v1\/models<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0442\u0430\u0440\u0438\u0444\u0435. \u041c\u044b \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438:<\/p>\n<pre><code class=\"go\">switch {case has[\"k3\"] &amp;&amp; has[\"kimi-for-coding-highspeed\"]:    return \"K3 + HighSpeed\"case has[\"k3\"]:    return \"K3\"case has[\"kimi-for-coding\"]:    return \"K2.7 Code\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0441\u0442\u0430\u0442\u0443\u0441-\u0431\u0430\u0440 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>src : kimi (K3 + HighSpeed)<\/code> \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u0430\u0440\u0438\u0444 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0441\u043a\u0438\u0439 Kimi K3, \u0431\u0435\u0437 \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u0432 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442.<\/p>\n<p>\u0422\u0435\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <code>\/usage<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0436\u0438\u0432\u044b\u0435 \u043a\u0432\u043e\u0442\u044b: \u0443 Kimi Code \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439-\u043d\u043e-\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 <code>GET \/coding\/v1\/usages<\/code> \u0441 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438 rolling-\u043e\u043a\u043d\u0430\u043c\u0438 (\u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0435\u0433\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e CLI \u043d\u0430 GitHub). \u0418\u0437 \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e: \u0447\u0438\u0441\u043b\u0430 <code>used<\/code>\/<code>limit<\/code> \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0434\u0430\u0451\u0442 \u0442\u043e \u043a\u0430\u043a int, \u0442\u043e \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 \u2014 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0430\u0440\u0441\u0438\u043c \u0447\u0435\u0440\u0435\u0437 <code>json.RawMessage<\/code> \u0438 \u00ab\u0433\u0438\u0431\u043a\u0438\u0439\u00bb \u0434\u0435\u043a\u043e\u0434\u0435\u0440.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/140\/158\/944\/140158944ac7d7b0be386cb9718cd60f.png\" alt=\"\/usage \u2014 \u0436\u0438\u0432\u044b\u0435 \u043a\u0432\u043e\u0442\u044b Kimi Code: \u0442\u0430\u0440\u0438\u0444 K3+HighSpeed, \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 48%, rolling 5\u0447 \u043e\u043a\u043d\u043e\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/140\/158\/944\/140158944ac7d7b0be386cb9718cd60f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/140\/158\/944\/140158944ac7d7b0be386cb9718cd60f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\/usage \u2014 \u0436\u0438\u0432\u044b\u0435 \u043a\u0432\u043e\u0442\u044b Kimi Code: \u0442\u0430\u0440\u0438\u0444 K3+HighSpeed, \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 48%, rolling 5\u0447 \u043e\u043a\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<h3>\u041d\u0430 \u0447\u0451\u043c \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: Kimi K3 \u0438 GLM-5.2<\/h3>\n<p>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e \u043c\u043e\u0434\u0435\u043b\u044f\u0445, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0451 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c \u2014 \u043e\u0431\u0430 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0430 \u0438\u0437 \u00ab\u0434\u0435\u0448\u0451\u0432\u044b\u0445\u00bb \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043b\u043e\u0448\u0430\u0434\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c.<\/p>\n<p><strong>Kimi K3<\/strong> (Moonshot AI, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Kimi Code: Moderato $19\/\u043c\u0435\u0441, \u0434\u0430\u043b\u044c\u0448\u0435 Allegretto $39, Allegro $99, Vivace $199 \u2014 \u0442\u0430\u0440\u0438\u0444\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u0432\u043e\u0442\u044b) \u2014 \u0444\u043b\u0430\u0433\u043c\u0430\u043d \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c thinking mode \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0434\u043e 256K (\u0434\u043e 1M \u043d\u0430 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0442\u0430\u0440\u0438\u0444\u0430\u0445). \u0412 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e: \u0441\u0430\u043c \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u0451\u0440\u043d\u0443\u0442\u044c kubectl, \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, reasoning \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e. \u0412\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: <strong>ID \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441\u0442\u0440\u043e\u0433\u0438\u0435<\/strong> \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>k3<\/code>, <code>kimi-for-coding<\/code>, <code>kimi-for-coding-highspeed<\/code>, \u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 <code>kimi-k3<\/code> \u043e\u0442\u0434\u0430\u0451\u0442 401, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u043a\u043b\u044e\u0447 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u00bb \u0438 \u0437\u043d\u0430\u0442\u043d\u043e \u043f\u0443\u0442\u0430\u0435\u0442.<\/p>\n<p><strong>GLM-5.2<\/strong> (Z.ai, GLM Coding Plan: Lite $18\/\u043c\u0435\u0441, Pro $72, Max $160; \u043f\u0440\u0438 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435) \u2014 MoE 753B\/40B \u0441 dual thinking, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u043a\u043e\u0434\u0438\u043d\u0433. \u0418\u0437 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u2014 \u0441\u0443\u0444\u0444\u0438\u043a\u0441-\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 ID \u043c\u043e\u0434\u0435\u043b\u0438: <code>glm-5.2[1m]<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0432 1M \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443 GLM-5.2 \u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u00ab\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0449\u0438\u043a\u00bb \u0432 \u044d\u0442\u043e\u0439 \u0446\u0435\u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041e\u0431\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u043a\u0430\u0440\u0442\u044b \u0437\u0430\u043f\u0430\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430, \u0447\u0442\u043e \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440.<\/p>\n<h3>\u0427\u0443\u0436\u043e\u0439 CLI \u043a\u0430\u043a LLM-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440<\/h3>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u044e\u043a \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 <code>claude-cli<\/code> \u0438 <code>codex-cli<\/code>. \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 Claude Code \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439 Pro\/Max \u0438\u043b\u0438 Codex CLI \u0441 ChatGPT-\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439, \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043c API-\u043a\u043b\u044e\u0447: \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 OAuth-\u0441\u0435\u0441\u0441\u0438\u0435\u0439.<\/p>\n<pre><code class=\"go\">cmd := exec.CommandContext(ctx, c.Path,    \"--print\", \"--output-format\", \"stream-json\", \"--include-partial-messages\")cmd.Stdin = strings.NewReader(flattenMessagesToPrompt(messages))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>claude -p --output-format stream-json<\/code> \u043e\u0442\u0434\u0430\u0451\u0442 JSONL, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 Anthropic-\u0441\u043e\u0431\u044b\u0442\u0438\u044f (<code>message_start<\/code>, <code>content_block_delta<\/code>\u2026). \u041f\u0430\u0440\u0441\u0438\u043c \u0438\u0445 \u0442\u0435\u043c \u0436\u0435 \u043a\u043e\u0434\u043e\u043c, \u0447\u0442\u043e \u0438 \u043f\u0440\u044f\u043c\u043e\u0439 API. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u043d\u0438\u043c \u043f\u043b\u043e\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u043c\u0442\u043e\u043c \u0441 \u0442\u0435\u0433\u0430\u043c\u0438 \u0440\u043e\u043b\u0435\u0439 \u2014 session-id \u0443 \u0447\u0443\u0436\u043e\u0433\u043e CLI \u043d\u0430\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043d\u043e \u0434\u043b\u044f \u00ab\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438 \u043c\u044b\u0441\u043b\u044c\u00bb \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e: \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (Bash\/Read\/Write) \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u2014 \u0443 Claude Code \u0441\u0432\u043e\u0438 \u0438 \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u0413\u0440\u0430\u0431\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u043e\u0435 \u0432 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u2014 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 <strong>\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/strong>. \u0422\u0440\u0438 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u0432\u044b\u0441\u0442\u0440\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0433\u0430\u043c\u0438:<\/p>\n<p><strong>1. \u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 ID \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u0445.<\/strong> <code>glm-5.2<\/code> \u0435\u0441\u0442\u044c \u0438 \u0443 Z.ai, \u0438 \u0432 Ollama cloud. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e ID \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441 \u0447\u0443\u0436\u0438\u043c <code>Provider<\/code> \u0438 \u0443\u0439\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0435 \u0442\u0443\u0434\u0430. \u041f\u0440\u0430\u0432\u0438\u043b\u043e: \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0449\u0435\u0442\u0441\u044f \u0432 \u041d\u041e\u0412\u041e\u041c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0438 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"go\">func pickForNewCatalog(catalog []llm.Model, current llm.Model) llm.Model {    for _, mm := range catalog {        if mm.ID == current.ID {            return mm \/\/ same ID \u2014 but THIS catalog's entry (\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 Provider)        }    }    \/\/ ID \u043d\u0435\u0442 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u2014 \u0431\u0435\u0440\u0451\u043c primary    ...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>2. \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u043d\u0430 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442.<\/strong> \u041f\u043e\u0441\u043b\u0435 <code>\/source zai \u2192 \/source execai<\/code> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f GLM-\u043c\u043e\u0434\u0435\u043b\u0435\u0439: \u0438\u043d\u0430\u0447\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0439\u0434\u0451\u0442 \u0432 \u043d\u0430\u0448 gateway \u0441 provider=zai \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 401. \u0414\u0435\u0440\u0436\u0438\u043c \u0441\u043d\u0438\u043c\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e.<\/p>\n<p><strong>3. \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430.<\/strong> \u041b\u0435\u043d\u0438\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u00ab\u043a\u043b\u0438\u0435\u043d\u0442 \u0442\u043e\u0442 \u0436\u0435, \u043f\u043e\u043c\u0435\u043d\u044f\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u00bb \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043c\u0435\u043d\u0435 \u0442\u0438\u043f\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (Anthropic-compat \u2194 OpenAI-compat). \u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u2014 \u043a\u043e\u043f\u0435\u0435\u0447\u043d\u043e\u0435, \u0431\u0430\u0433\u043e\u0432 \u2014 \u043d\u0430 \u0432\u0435\u0447\u0435\u0440.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b3\/39c\/eb6\/0b339ceb6a257346bc95cac22ef9f35b.png\" alt=\"Kimi K3 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0436\u0438\u0432\u043e\u0439 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440: 5 \u043d\u043e\u0434 Ready, 89 \u043f\u043e\u0434\u043e\u0432 Running\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0b3\/39c\/eb6\/0b339ceb6a257346bc95cac22ef9f35b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b3\/39c\/eb6\/0b339ceb6a257346bc95cac22ef9f35b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Kimi K3 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0436\u0438\u0432\u043e\u0439 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440: 5 \u043d\u043e\u0434 Ready, 89 \u043f\u043e\u0434\u043e\u0432 Running<\/figcaption><\/div>\n<\/figure>\n<h3>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435<\/h3>\n<p>\u042f\u0434\u0440\u043e \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0430\u043d\u0442\u0435\u0445\u043d\u0438\u043a\u0430: \u0434\u0432\u0430 \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0430 SSE, \u0441\u043a\u043b\u0435\u0439\u043a\u0430 tool calls, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0417\u0430\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>\/source<\/code> \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u0443: Kimi K3 \u043f\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 Kimi Code, GLM-5.2 \u043f\u043e GLM Coding Plan, Claude \u043f\u043e \u043a\u043b\u044e\u0447\u0443, Ollama \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u2014 \u0432 \u043e\u0434\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u0441 \u043e\u0431\u0449\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439.<\/p>\n<p>\u041a\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442 (Business Source License): <strong>github.com\/execai\/execai-agent<\/strong> \u2014 \u0442\u0430\u043c \u0436\u0435 README \u043d\u0430 \u043f\u044f\u0442\u0438 \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u043f\u043e\u0434 Linux\/macOS\/Windows. \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c:<\/p>\n<pre><code class=\"bash\">curl -fsSL https:\/\/raw.githubusercontent.com\/execai\/execai-agent\/main\/install.sh | bash<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043e\u0442\u0432\u0435\u0447\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u0441\u0430\u0433\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u00ab\u043a\u0430\u043a \u0432 Claude Code\u00bb \u0438 \u043f\u043e\u0439\u043c\u0430\u043b\u0438 deadlock \u0432 bubbletea \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1065118\/\">https:\/\/habr.com\/ru\/articles\/1065118\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0434\u0435\u043b\u0430\u044e execai \u2014 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 AI-\u0430\u0433\u0435\u043d\u0442 \u043d\u0430 Go (bubbletea), \u0432 \u0434\u0443\u0445\u0435 Claude Code. \u041e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0433\u043e\u043d\u044f\u0435\u0442 shell-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0445\u043e\u0434\u0438\u0442 \u0432 kubernetes \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 TUI.\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u00ab\u0430\u0433\u0435\u043d\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e\u00bb, \u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u0442\u0443\u043b: \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Kimi Code \u0437\u0430 $19, \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e GLM Coding Plan \u0437\u0430 $18, \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 Anthropic, \u0430 \u043a\u0442\u043e-\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0433\u043e\u043d\u044f\u0442\u044c Ollama \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u2014 \u0432 \u043e\u0434\u043d\u043e\u043c \u0447\u0430\u0442\u0435, \u0441 \u043e\u0431\u0449\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043b\u0435\u0442\u0443.\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u2014 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a, \u0434\u0432\u0430 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u043c\u0438\u0440\u0430 API (Anthropic-compat \u0438 OpenAI-compat), SSE-\u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0441 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439 tool calls, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0430\u0432\u0442\u043e\u0434\u0435\u0442\u0435\u043a\u0442 \u0442\u0430\u0440\u0438\u0444\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0438 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0447\u0443\u0436\u0438\u0435 CLI. \u0421 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0433\u0440\u0430\u0431\u043b\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u0438.\u0417\u0430\u0434\u0430\u0447\u0430\u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e UX:\/source          \u2190 \u043c\u0435\u043d\u044e: execai, zai, kimi, kimi-api, anthropic, openai,                   claude-cli, codex-cli, ollama\/source kimi     \u2190 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 Kimi Code\u043e\u0431\u044a\u044f\u0441\u043d\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u2190 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 Kimi K3\/source zai      \u2190 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 GLM-5.2\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0439        \u2190 GLM \u0432\u0438\u0434\u0438\u0442 \u0412\u0421\u042e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u044b Kimi\/source \u2014 \u043f\u0438\u043a\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432: 9 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:\u041e\u0431\u0449\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e \u043d\u0435\u0451.\u041e\u0431\u0449\u0438\u0439 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (Bash, Read, Edit, Grep\u2026), \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043b\u0438\u043c\u0438\u0442\u044b \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430.\u0411\u0438\u043b\u043b\u0438\u043d\u0433 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430. \u041d\u0430\u0448 \u0431\u044d\u043a\u0435\u043d\u0434 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a \u0447\u0443\u0436\u0438\u043c API \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0412\u0435\u0441\u044c \u0437\u043e\u043e\u043f\u0430\u0440\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c:\/\/ StreamingLLM is the standard LLM-provider contract for the tool-use loop.type StreamingLLM interface {    Stream(ctx context.Context, messages []AIMessage,        tools []map[string]any, cb StreamCallbacks) (*StreamResult, error)}\u041d\u0430 \u0432\u0445\u043e\u0434 \u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 JSON-\u0441\u0445\u0435\u043c\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:type StreamResult struct {    Content      string    ToolCalls    []ToolCall    FinishReason string}\/\/ StreamCallbacks \u2014 UI callbacks (showing text deltas and tool_call starts).type StreamCallbacks struct {    OnText      func(string)      \/\/ \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430    OnToolCall  func(name string) \/\/ \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 UI \u043f\u043e\u043a\u0430\u0436\u0435\u0442 &#171;\u25b6 Bash\u2026&#187;    OnReasoning func(string)      \/\/ chain-of-thought (thinking-\u043c\u043e\u0434\u0435\u043b\u0438) \u2014 \u0440\u0438\u0441\u0443\u0435\u043c \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0451\u043d\u043d\u043e}\u0410\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b (tool-use loop) \u0434\u0435\u0440\u0436\u0438\u0442 StreamingLLM \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f:m.cli = m.makeLLMClient() \/\/ \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443\u0417\u0432\u0443\u0447\u0438\u0442 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0414\u044c\u044f\u0432\u043e\u043b, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445.\u0414\u0432\u0430 \u043c\u0438\u0440\u0430: Anthropic-compat \u0438 OpenAI-compat\u0412\u0441\u0435 \u0434\u0435\u0432\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0441\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0430\u043c HTTP API.OpenAI-compat (POST \/v1\/chat\/completions, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f Bearer): \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 SSE-\u0447\u0430\u043d\u043a\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 choices[].delta.content, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043a\u0430\u043a delta.tool_calls[] \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438.Anthropic-compat (POST \/v1\/messages, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 x-api-key + anthropic-version): \u0441\u043e\u0431\u044b\u0442\u0438\u044f message_start \/ content_block_delta \/ message_delta, \u0443 thinking-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 thinking_delta.\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u043e\u0439:\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0414\u0438\u0430\u043b\u0435\u043a\u0442Endpointexecai (\u043d\u0430\u0448 gateway)OpenAI-compatapi.execai.ruZ.ai Coding PlanAnthropic-compatapi.z.ai\/api\/anthropicKimi Code (\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430)Anthropic-compatapi.kimi.com\/codingMoonshot Platform (pay-per-token)OpenAI-compatapi.moonshot.ai\/v1Anthropic APIAnthropic-compatapi.anthropic.comOpenAI APIOpenAI-compatapi.openai.com\/v1Ollama cloudAnthropic-compatollama.comOllama localOpenAI-compatlocalhost:11434Claude Code CLI \/ Codex CLI\u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435)\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u044c\u0421\u044e\u0440\u043f\u0440\u0438\u0437 \u21161, \u0441\u0442\u043e\u0438\u0432\u0448\u0438\u0439 \u043d\u0430\u043c \u0432\u0435\u0447\u0435\u0440\u0430: \u043a\u043b\u044e\u0447 Z.ai Coding Plan \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0422\u041e\u041b\u042c\u041a\u041e \u0447\u0435\u0440\u0435\u0437 Anthropic-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 endpoint. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \/chat\/completions \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 429 Insufficient balance \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0438 pay-per-token \u0443 \u043d\u0438\u0445 \u0431\u0438\u043b\u043b\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u00ab\u0431\u0430\u043b\u0430\u043d\u0441\u00bb \u043d\u0430 pay-per-token \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u041c\u044b \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u0442\u0443\u0445.\u0421\u044e\u0440\u043f\u0440\u0438\u0437 \u21162: \u0443 Kimi \u0442\u043e \u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u0436\u0451\u0441\u0442\u0447\u0435. Kimi Code (kimi.com\/code, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 $19\/\u043c\u0435\u0441) \u0438 Moonshot Platform (platform.moonshot.ai, \u043e\u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0442\u043e\u043a\u0435\u043d\u044b) \u2014 \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 endpoint\u2019\u0430\u043c\u0438, \u043a\u043b\u044e\u0447\u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0445 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u2014 kimi \u0438 kimi-api, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0433\u0430\u0434\u0430\u043b.\u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 switch:case subscriptions.SourceKimi:    \/\/ Kimi Code Coding Plan subscription (kimi.com\/code).    \/\/ Endpoint: api.kimi.com\/coding \u2014 Anthropic-compat + thinking.    base := active.BaseURL    if base == &#171;&#187; {        base = &#171;https:\/\/api.kimi.com\/coding&#187;    }    return llm.NewAnthropicClient(base, active.APIKey, m.current.ID, m.cfg.ThinkingBudget)case subscriptions.SourceKimiAPI:    \/\/ Moonshot Platform pay-per-token API key (platform.moonshot.ai).    base := active.BaseURL    if base == &#171;&#187; {        base = &#171;https:\/\/api.moonshot.ai\/v1&#187;    }    return llm.NewGLMClient(base, active.APIKey, m.current.ID)\u0418\u0442\u043e\u0433\u043e \u043d\u0430 \u0434\u0435\u0432\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 StreamingLLM: \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0433\u043e gateway, generic OpenAI-compat \u043a\u043b\u0438\u0435\u043d\u0442, generic Anthropic-compat \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 CLI.SSE-\u043f\u0430\u0440\u0441\u0435\u0440: \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0446\u0438\u044f tool calls \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0421\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u0430 \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u041c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0434\u0430\u0451\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0430 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043f\u043e \u0447\u0430\u043d\u043a\u0430\u043c: \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0447\u0430\u043d\u043a\u0435 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043b\u044c\u0442\u044b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u043a\u043b\u0435\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443:for _, tc := range ch.Delta.ToolCalls {    idx := tc.Index    existing, ok := toolByIdx[idx]    if !ok {        existing = &amp;ToolCall{Index: idx, ID: tc.ID, Type: tc.Type, Function: tc.Function}        toolByIdx[idx] = existing        if cb.OnToolCall != nil &amp;&amp; tc.Function.Name != &#171;&#187; {            cb.OnToolCall(tc.Function.Name) \/\/ UI \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 &#171;\u25b6 Bash\u2026&#187;        }    } else {        \/\/ Accumulate the arguments deltas.        existing.Function.Arguments += tc.Function.Arguments    }}\u0415\u0441\u043b\u0438 \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043d\u0435 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f\u00bb \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0434\u043e\u0441\u0442\u044c \u2014 reasoning_content: DeepSeek, GLM \u0438 Kimi \u0448\u043b\u044e\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 (reasoning, reasoning_content, thinking_delta \u0443 Anthropic-\u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0430), \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u043b\u0431\u044d\u043a OnReasoning.GLM-5.2 \u0447\u0435\u0440\u0435\u0437 Ollama Cloud \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e interface \u0432 Go \u2014 \u0432\u0438\u0434\u0435\u043d reasoning\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439\u0425\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u2014 \u043f\u0443\u0442\u044c \u043a \u0432\u0435\u0447\u043d\u043e \u043f\u0440\u043e\u0442\u0443\u0445\u0448\u0435\u043c\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443. \u0414\u043b\u044f OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043c\u044b \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0451\u0440\u0433\u0430\u0435\u043c GET \/v1\/models \u0438 \u0441\u0442\u0440\u043e\u0438\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443:\/\/ buildOpenAIDynamicCatalog \u2014 primary picker takes the best of the available ones.primaryOrder := []string{&#171;gpt-5&#187;, &#171;gpt-5-mini&#187;, &#171;o3&#187;, &#171;gpt-4.1&#187;, &#171;gpt-4o&#187;, &#171;o4-mini&#187;}idsSet := map[string]bool{}for _, id := range ids {    idsSet[id] = true}primaryID := &#171;&#187;for _, want := range primaryOrder {    if idsSet[want] {          \/\/ \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e \u041f\u0420\u0418\u041e\u0420\u0418\u0422\u0415\u0422\u0423, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430        primaryID = want        break    }}\u0413\u0440\u0430\u0431\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0439\u043c\u0430\u043b \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442: \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0431\u0440\u0430\u043b\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u2014 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438 ids = [gpt-4o, gpt-5] primary \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f gpt-4o. \u0418\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432.\u0410\u0432\u0442\u043e\u0434\u0435\u0442\u0435\u043a\u0442 \u0442\u0430\u0440\u0438\u0444\u0430: \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0430\u0451\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430\u0423 Kimi Code \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: GET \/coding\/v1\/models \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0442\u0430\u0440\u0438\u0444\u0435. \u041c\u044b \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438:switch {case has[&#171;k3&#187;] &amp;&amp; has[&#171;kimi-for-coding-highspeed&#187;]:    return &#171;K3 + HighSpeed&#187;case has[&#171;k3&#187;]:    return &#171;K3&#8243;case has[&#171;kimi-for-coding&#187;]:    return &#171;K2.7 Code&#187;}\u0418 \u0441\u0442\u0430\u0442\u0443\u0441-\u0431\u0430\u0440 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 src : kimi (K3 + HighSpeed) \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u0430\u0440\u0438\u0444 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0441\u043a\u0438\u0439 Kimi K3, \u0431\u0435\u0437 \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u0432 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442.\u0422\u0435\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \/usage \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0436\u0438\u0432\u044b\u0435 \u043a\u0432\u043e\u0442\u044b: \u0443 Kimi Code \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439-\u043d\u043e-\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 GET \/coding\/v1\/usages \u0441 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438 rolling-\u043e\u043a\u043d\u0430\u043c\u0438 (\u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0435\u0433\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e CLI \u043d\u0430 GitHub). \u0418\u0437 \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e: \u0447\u0438\u0441\u043b\u0430 used\/limit \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0434\u0430\u0451\u0442 \u0442\u043e \u043a\u0430\u043a int, \u0442\u043e \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 \u2014 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0430\u0440\u0441\u0438\u043c \u0447\u0435\u0440\u0435\u0437 json.RawMessage \u0438 \u00ab\u0433\u0438\u0431\u043a\u0438\u0439\u00bb \u0434\u0435\u043a\u043e\u0434\u0435\u0440.\/usage \u2014 \u0436\u0438\u0432\u044b\u0435 \u043a\u0432\u043e\u0442\u044b Kimi Code: \u0442\u0430\u0440\u0438\u0444 K3+HighSpeed, \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 48%, rolling 5\u0447 \u043e\u043a\u043d\u043e\u041d\u0430 \u0447\u0451\u043c \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: Kimi K3 \u0438 GLM-5.2\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e \u043c\u043e\u0434\u0435\u043b\u044f\u0445, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0451 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c \u2014 \u043e\u0431\u0430 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0430 \u0438\u0437 \u00ab\u0434\u0435\u0448\u0451\u0432\u044b\u0445\u00bb \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043b\u043e\u0448\u0430\u0434\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c.Kimi K3 (Moonshot AI, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Kimi Code: Moderato $19\/\u043c\u0435\u0441, \u0434\u0430\u043b\u044c\u0448\u0435 Allegretto $39, Allegro $99, Vivace $199 \u2014 \u0442\u0430\u0440\u0438\u0444\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u0432\u043e\u0442\u044b) \u2014 \u0444\u043b\u0430\u0433\u043c\u0430\u043d \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c thinking mode \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0434\u043e 256K (\u0434\u043e 1M \u043d\u0430 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0442\u0430\u0440\u0438\u0444\u0430\u0445). \u0412 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e: \u0441\u0430\u043c \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u0451\u0440\u043d\u0443\u0442\u044c kubectl, \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, reasoning \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e. \u0412\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: ID \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 k3, kimi-for-coding, kimi-for-coding-highspeed, \u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 kimi-k3 \u043e\u0442\u0434\u0430\u0451\u0442 401, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u043a\u043b\u044e\u0447 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u00bb \u0438 \u0437\u043d\u0430\u0442\u043d\u043e \u043f\u0443\u0442\u0430\u0435\u0442.GLM-5.2 (Z.ai, GLM Coding Plan: Lite $18\/\u043c\u0435\u0441, Pro $72, Max $160; \u043f\u0440\u0438 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435) \u2014 MoE 753B\/40B \u0441 dual thinking, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u043a\u043e\u0434\u0438\u043d\u0433. \u0418\u0437 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u2014 \u0441\u0443\u0444\u0444\u0438\u043a\u0441-\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 ID \u043c\u043e\u0434\u0435\u043b\u0438: glm-5.2[1m] \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0432 1M \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443 GLM-5.2 \u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u00ab\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0449\u0438\u043a\u00bb \u0432 \u044d\u0442\u043e\u0439 \u0446\u0435\u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.\u041e\u0431\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u043a\u0430\u0440\u0442\u044b \u0437\u0430\u043f\u0430\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430, \u0447\u0442\u043e \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440.\u0427\u0443\u0436\u043e\u0439 CLI \u043a\u0430\u043a LLM-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u044e\u043a \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 claude-cli \u0438 codex-cli. \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 Claude Code \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439 Pro\/Max \u0438\u043b\u0438 Codex CLI \u0441 ChatGPT-\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439, \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043c API-\u043a\u043b\u044e\u0447: \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 OAuth-\u0441\u0435\u0441\u0441\u0438\u0435\u0439.cmd := exec.CommandContext(ctx, c.Path,    &#171;&#8212;print&#187;, &#171;&#8212;output-format&#187;, &#171;stream-json&#187;, &#171;&#8212;include-partial-messages&#187;)cmd.Stdin =&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-489265","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=489265"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489265\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}