{"serveDecision":{"state":"UNKNOWN","authority":"live-serve-decision"},"downloadable":null,"downloadReady":null,"degraded":false,"stale":false,"schemaVersion":"hugging-bay.local-kit.v2","displayOnly":true,"authorizationRequired":true,"eligibilitySnapshotAt":"2026-11-05T17:32:43.319Z","generatedAt":"2026-11-05T17:33:01.527Z","status":"runnable-bundle-recipe","commandsAvailable":true,"commands":[{"tool":"lm-studio","label":"LM Studio (no terminal)","kind":"gui-walkthrough","guiProven":false,"command":"Open LM Studio, then drag the downloaded 'GigaChat3.1-10B-A1.8B-q4_K_M.gguf' into My Models to load it.","note":"A walk-through for your machine, not a checked run path — these steps are guidance, never a promise it will run. LM Studio's own UI takes it from there.","prefilledFrom":{"file":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","templateSha256":"e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb"},"guideCheckedAt":"2026-09-22","guideCheckedBy":"hugging-bay-docs","guideVersion":5},{"tool":"ollama","label":"Ollama","note":"Builds a local Ollama model named \"gigachat3.1-10b-a1.8b-q4_k_m\" from the file (Ollama imports the file's embedded chat template) and starts a chat.","prefilledFrom":{"file":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","templateSha256":"e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb"},"guideCheckedAt":"2026-09-22","guideCheckedBy":"hugging-bay-docs","guideVersion":5},{"tool":"llama.cpp","label":"llama.cpp (terminal)","kind":"terminal","proven":true,"note":"Runs the file directly with llama.cpp's command-line tool. -st (--single-turn) runs one turn with the model's embedded chat template and exits — tested on llama.cpp b10964-b29c606e2. The old -no-cnv flag was removed and is rejected by current builds.","runner":{"name":"llama.cpp","testedBuild":"b10964-b29c606e2","singleTurnFlag":"-st"},"prefilledFrom":{"file":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","templateSha256":"e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb"},"guideCheckedAt":"2026-09-22","guideCheckedBy":"hugging-bay-docs","guideVersion":5},{"tool":"python","label":"Python (llama-cpp-python)","command":"pip install llama-cpp-python && python -c 'from llama_cpp import Llama; llm = Llama(\"./GigaChat3.1-10B-A1.8B-q4_K_M.gguf\", n_ctx=8192); print(llm.create_chat_completion(messages=[{'\\''role'\\'': '\\''user'\\'', '\\''content'\\'': '\\''Hello!'\\''}])['\\''choices'\\''][0]['\\''message'\\'']['\\''content'\\''])'","note":"For scripting the model from Python; create_chat_completion applies the embedded chat template.","prefilledFrom":{"file":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","templateSha256":"e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb"},"guideCheckedAt":"2026-09-22","guideCheckedBy":"hugging-bay-docs","guideVersion":5}],"runBlockKind":"hosted-file-recipe","chatContract":{"available":true,"source":"gguf-metadata:tokenizer.chat_template","sourceFileSha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb","templateSha256":"e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","templateText":"{#--------TOOL RENDERING FUNCTIONS---------#}\n\n{#---------------------------------------------------------------\n  Converts JSON Schema (dict) to a TypeScript type definition\n----------------------------------------------------------------#}\n{%- macro json_schema_to_typescript(schema, indent=\"\") -%}\n\t{%- set ADDITIONAL_JSON_KEYS = ['format', 'maxItems', 'maximum', 'minItems', 'minimum', 'pattern'] -%}\n\t{%- set ty = schema.get(\"type\") -%}\n\n\t{# ---------------- OBJECT ---------------- #}\n\t{%- if ty == \"object\" -%}\n\t\t{{- \"{\\n\" -}}\n\n\t\t{# Start building property list #}\n\t\t{%- set props = schema.get(\"properties\", {}) -%}\n\t\t{%- set required = schema.get(\"required\", []) -%}\n\t\t{%- set has_additional_props = schema.get(\"additionalProperties\") is defined -%}\n\t\t{%- set additional_props_type = none -%}\n\t\t{%- if has_additional_props -%}\n\t\t\t{%- if schema.additionalProperties == true -%}\n\t\t\t\t{%- set additional_props_type = {'type': 'any'} -%}\n\t\t\t{%- elif schema.additionalProperties is mapping -%}\n\t\t\t\t{%- set additional_props_type = schema.additionalProperties -%}\n\t\t\t{%- endif -%}\n\t\t{%- endif -%}\n\n\t\t{%- for key, val in props.items() -%}\n\t\t\t{# ---------- Description Comments ---------- #}\n\t\t\t{%- if \"description\" in val -%}\n\t\t\t\t{%- for line in val['description'].split('\\n') -%}\n\t\t\t\t\t{%- if line.strip() -%}\n\t\t\t\t\t\t{{- indent + '// ' + line + '\\n' -}}\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t{%- endif -%}\n\n\t\t\t{# ---------- Additional JSON Keys ---------- #}\n\t\t\t{%- for add_key, add_val in val.items() -%}\n\t\t\t\t{%- if add_key in ADDITIONAL_JSON_KEYS -%}\n\t\t\t\t\t{%- if add_val is string -%}\n\t\t\t\t\t\t{{- indent + '// ' + add_key + ': \"' + add_val + '\"' + '\\n'  -}}\n\t\t\t\t\t{%- else -%}\n\t\t\t\t\t\t{{- indent + '// ' + add_key + ': ' ~ add_val ~ '\\n' -}}\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endfor -%}\n\n\t\t\t{# ---------- Property Definition ---------- #}\n            {%- set type_str = json_schema_to_typescript(\n                val, \n                indent + \"  \"\n            ) -%}\n\n\t\t\t{{- indent + key + ('' if key in required else '?') + ': ' + type_str + ',' -}}\n\n\t\t\t{%- if \"default\" in val or \"defalut_value\" in val -%}\n\t\t\t\t{%- set default = val.get(\"default\", val.get(\"defalut_value\")) -%}\n\t\t\t\t{%- if default is string -%}\n\t\t\t\t\t{{- ' // default: \"' + default + '\"' -}}\n\t\t\t\t{%- else -%}\n\t\t\t\t\t{{- ' // default: ' ~ default -}}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endif -%}\n\n\t\t\t{{- \"\\n\" -}}\n\t\t{%- endfor -%}\n\n\t\t{# Handle additionalProperties as index signature #}\n\t\t{%- if has_additional_props and additional_props_type is not none -%}\n\t\t\t{%- set additional_type_str = json_schema_to_typescript(\n\t\t\t\tadditional_props_type,\n\t\t\t\tindent + \"  \"\n\t\t\t) -%}\n\t\t\t{{- indent + '[key: string]: ' + additional_type_str + '\\n' -}}\n\t\t{%- endif -%}\n\n\t\t{{- indent[: (indent|length - \"  \"|length) ] + '}' -}}\n\n\t{# ---------------- STRING ---------------- #}\n\t{%- elif ty == \"string\" -%}\n\t\t{%- if schema.get(\"enum\") -%}\n            {%- set ns = namespace(enum = []) -%}\n            {%- for en in schema['enum'] -%}\n                {%- set ns.enum = ns.enum + ['\"' ~ en ~ '\"'] -%}\n            {%- endfor -%}\n\t\t\t{{- ns.enum | join(' | ') -}}\n\t\t{%- elif schema.get(\"format\", \"none\") in ['date-time', 'date'] -%}\n\t\t\t{{- 'Date' -}}\n\t\t{%- else -%}\n\t\t\t{{- 'string' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- NUMBER / INTEGER ---------------- #}\n\t{%- elif ty in [\"number\", \"integer\"] -%}\n\t\t{%- if schema.get(\"enum\") -%}\n\t\t\t{{- schema.enum | join(' | ') -}}\n\t\t{%- else -%}\n\t\t\t{{- 'number' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- BOOLEAN ---------------- #}\n\t{%- elif ty == \"boolean\" -%}\n\t\t{{- 'boolean' -}}\n\n\t{# ---------------- ARRAY ---------------- #}\n\t{%- elif ty == \"array\" -%}\n\t\t{%- if \"items\" in schema -%}\n\t\t\t{{- json_schema_to_typescript(schema['items'], indent) + '[]' -}}\n\t\t{%- else -%}\n\t\t\t{{- 'Array<any>' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- FALLBACK ---------------- #}\n\t{%- else -%}\n\t\t{{- 'any' -}}\n\t{%- endif -%}\n{%- endmacro -%}\n\n{#---------------------------------------------------------------\n  Renders a namespace and its tool definitions in TypeScript style\n----------------------------------------------------------------#}\n\n{%- macro render_tool_namespace(namespace_name, tools) -%}\n\t{%- set ns = namespace(sections = ['namespace ' ~ namespace_name ~ ' {']) -%}\n\n\t{%- for tool in tools -%}\n\t\t{%- if tool.function -%}\n\t\t\t{%- set tool = tool.function -%}\n\t\t{%- endif -%}\n\n\t\t{%- set ns_tool = namespace(content_lines=[]) -%}\n\n\t\t{# ---------- TOOL DESCRIPTION ---------- #}\n\t\t{%- if tool.get('description') -%}\n\t\t\t{%- for line in tool['description'].split('\\n') -%}\n\t\t\t\t{%- if line.strip() -%}\n\t\t\t\t\t{%- set ns_tool.content_lines = ns_tool.content_lines + ['// ' ~ line] -%}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endfor -%}\n\t\t{%- endif -%}\n\n\t\t{# ---------- TOOL SIGNATURE ---------- #}\n\t\t{%- set main_body = \"\" -%}\n\t\t{%- set params = tool.get(\"parameters\") -%}\n\t\t{%- if params and params.get(\"properties\") -%}\n\t\t\t{%- set param_type = json_schema_to_typescript(params, \"  \") -%}\n\t\t\t{%- set main_body = 'type ' ~ tool.name ~ ' = (_: ' ~ param_type ~ ') => ' -%}\n\t\t{%- else -%}\n\t\t\t{%- set main_body = 'type ' ~ tool.name ~ ' = () => ' -%}\n\t\t{%- endif -%}\n\n\t\t{# ---------- RETURN TYPE ---------- #}\n\t\t{%- set return_params = tool.get(\"return_parameters\") -%}\n\t\t{%- if return_params and return_params.get(\"properties\") -%}\n\t\t\t{%- set return_type = json_schema_to_typescript(return_params, \"  \") -%}\n\t\t\t{%- set main_body = main_body ~ return_type -%}\n\t\t{%- else -%}\n\t\t\t{%- set main_body = main_body ~ 'any' -%}\n\t\t{%- endif -%}\n\n\t\t{%- set main_body = main_body ~ ';\\n' -%}\n\n\t\t{%- set ns_tool.content_lines = ns_tool.content_lines + [main_body] -%}\n\n\t\t{# ---------- ADD TOOL TO SECTIONS ---------- #}\n\t\t{%- set ns.sections = ns.sections + [ns_tool.content_lines | join('\\n')] -%}\n\t{%- endfor -%}\n\n\t{%- set ns.sections = ns.sections + ['} // namespace ' ~ namespace_name] -%}\n\n\t{{- ns.sections | join('\\n') -}}\n{%- endmacro -%}\n\n\n{# ----------- MESSAGE RENDERING HELPER FUNCTIONS ------------ #}\n\n{%- macro render_function_call(call) -%}\n    {%- if call.function -%}\n        {%- set call = call.function -%}\n    {%- endif -%}\n\n    {%- set arguments = call['arguments'] -%}\n\t{%- if arguments is not string -%}\n\t\t{%- set arguments = arguments| tojson(ensure_ascii=False) -%}\n\t{%- endif -%}\n\n    {{- '{\"name\": \"' ~ call['name'] ~ '\", \"arguments\": ' ~ arguments ~ '}' -}}\n{%- endmacro -%}\n\n\n{%- macro render_role_message(message, role=None) -%}\n    {%- if not role -%}\n        {%- set role = message[\"role\"] -%}\n    {%- endif -%}\n\n    {%- set message_content = message['content'] or '' -%}\n    {%- if message_content is not string -%}\n        {%- set message_content = message_content | tojson(ensure_ascii=False) -%}\n    {%- endif -%}\n\n    {{- role + add_tokens.role_sep + message_content -}}\n\n    {%- if message.tool_calls is defined and message.tool_calls -%}\n        {{- add_tokens.function_call + render_function_call(message.tool_calls[0]) -}}\n    {%- endif -%}\n\n    {{- add_tokens.message_sep -}}\n\n{%- endmacro -%}\n\n\n\n{# ----- SPECIAL TOKENS ----- #}\n\n{%- set add_tokens = namespace(\n    role_sep=\"<|role_sep|>\\n\", \n    message_sep=\"<|message_sep|>\\n\\n\",\n    function_call=\"<|function_call|>\"\n) -%}\n\n{# ----- DEFAULT DEVSYSTEM ----- #}\n\n{%- set DEVSYSTEM -%}\n<role_description>\nОписание доступных в диалоге ролей.\n\n`developer system`\nСообщение, добавленное Сбером до основного диалога. Имеет самый высокий приоритет и определяет глобальные, неотменяемые условия (например, правила ведения диалога, политику безопасности, общий стиль ответов ассистента и пр.).\n\n`system`\nСистемная инструкция, добавляемая разработчиками или пользователем, но с приоритетом ниже, чем `developer system`. Обычно описывает инструкции ассистента, конкретный стиль ответа и другие условия для данного конкретного диалога.\n\n`user`\nСообщение или запрос от пользователя. Ассистент следует ему, если это не противоречит инструкциям более высокого приоритета (см. <instruction_priority>).\n\n`user memory`\nПоследовательность наиболее актуальных долговременных фактов о пользователе на момент его запроса, представленная в виде JSON‑списка строк. Факты в ней перечислены в хронологическом порядке, то есть более новые факты дописываются в конец последовательности. При этом при изменении или удалении фактов записи о предыдущих фактах остаются в последовательности. Ассистент сохраняет факты с помощью функции и использует их в соответствии с указаниями из блока <memory_guidelines> ниже.\n\n`added files`\nМетаинформация о файлах, доступных для использования в диалоге, представленная в формате JSON. Содержит следующие ключи: id (уникальный идентификатор файла), name (имя файла), type (тип файла).\n\n`assistant`\nОтвет ассистента на запрос пользователя. Если системная инструкция или пользователь не задаёт дополнительных правил для `assistant`, то такая реплика должна соответствовать указаниям из блока <assistant_guidelines> ниже. Список доступных для вызова функций содержится в последней реплике роли `available functions`. Название необходимой для вызова функции и аргументы будут сгенерированы после специального токена вызова функции. В своих репликах ассистент следует инструкциям в соответствии с <instruction_priority>.\nВызов функции осуществляется в строгом соответствии с инструкцией из блока <function_usage>.\n\n`function descriptions`\nОписания функций в формате TypeScript. Функция — это специальный инструмент (или набор инструкций), который ассистент может вызвать для выполнения конкретных действий, вычислений или получения данных, необходимых для решения задачи пользователя. Каждое описание функции содержит блоки с именем, описанием, аргументами. Иногда описание содержит отдельные блоки с возвращаемыми параметрами и примерами применения, иллюстрирующими правильный вызов и аргументы.\n\n`available functions`\nСписок, который содержит названия функций, доступных для вызова. Если список не содержит элементов, то в следующем сообщении функции, доступные для вызова, отсутствуют.\n\n`function result`\nРезультат последнего вызова функции.\n</role_description>\n\n\n<available_modalities>\nАссистент умеет работать со следующими модальностями: текст, доступные функции.\n</available_modalities>\n\n\n<instruction_priority>\nВ случае противоречия инструкций разных ролей в контексте диалога соблюдай приоритеты:\n`developer system` > `system` > `user` > `function descriptions` > `function result` > `user memory`\n</instruction_priority>\n\n\n<function_usage>\nБазовые инструкции для работы с функциями.\n\nМожно вызывать только те функции, которые доступны исходя из последнего сообщения `available functions`.\n\nВызывай доступные функции в случае, если согласно их описанию такой вызов поможет дать более полный и/или точный ответ на запрос пользователя. Заполняй аргументы функций, используя информацию из контекста диалога. Если функция может помочь ответить на запрос, но для её обязательного аргумента отсутствует информация в контексте, уточни у пользователя недостающие данные перед вызовом функции. При недоступности необходимой функции или ошибке — кратко сообщи об этом пользователю и по возможности предложи альтернативу.\n</function_usage>\n\n\n<memory_guidelines>\nПравила использования фактов в долговременной памяти:\n\nЕсли в диалоге нет сообщения под ролью `user memory`, то это равносильно отсутствию долговременных фактов о пользователе в памяти. В таком случае информация о пользователе ограничена текущим диалогом, и новые факты не должны сохраняться.\n</memory_guidelines>\n\n\n<assistant_guidelines>\nGigaChat — нейросетевая модель искусственного интеллекта, созданная компанией Сбер в России.\n\nGigaChat старается отвечать на языке, на котором пользователь задал запрос. Если из запроса пользователя и контекста диалога язык определить невозможно, GigaChat использует русский.\nGigaChat предоставляет подробные ответы на более сложные и открытые вопросы.\nGigaChat в ответе не использует названия доступных функций.\nGigaChat отвечает безопасно, в соответствии с действующим законодательством Российской Федерации, стараясь помочь пользователю решить задачу или поддержать беседу.\n\nТы — GigaChat.\n</assistant_guidelines>\n\n\nНиже будет приведён диалог.\nВ диалоге могут быть разнообразные роли, описанные в блоке <role_description>.\nКаждая реплика начинается с названия роли и специального токена, обозначающего конец полного наименования роли, а заканчивается специальным токеном конца реплики.\nТвоя задача — продолжить диалог от последней указанной роли в соответствии с контекстом диалога.\n{%- endset -%}\n\n\n{#- ---------------------- RENDERING STARTS HERE ---------------------- -#}\n\n\n{# ----- RENDER BOS TOKEN ----- #}\n{{- bos_token -}}\n\n\n{# ----- RENDER DEVSYSTEM ----- #}\n{{- render_role_message({\"role\": \"developer system\", \"content\": DEVSYSTEM}) -}}\n\n{# ----- RENDER SYSTEM IF PRESENT ----- #}\n{%- if messages and messages[0]['role'] == 'system' -%}\n    {{- render_role_message(messages[0]) -}}\n    {%- set messages = messages[1:] -%}\n{%- else -%}\n    {{- render_role_message({\"role\": \"system\", \"content\": \"\"}) -}}\n{%- endif -%}\n\n{# ----- RENDER TOOLS ----- #}\n{%- if tools -%}\n    {%- set tools_content = (\n        render_tool_namespace('functions', tools) \n        + \"\\n\\n\"\n    ) -%}\n    {{- render_role_message({'role': 'function descriptions', 'content': tools_content}) -}}\n{%- endif -%}\n\n{# ----- MAIN MESSAGE LOOP ----- #}\n{%- for message in messages -%}\n\n    {# ----- TOOL MESSAGE -------#}\n    {%- if message['role'] == 'tool' -%}\n        {{- render_role_message(message, 'function result') -}}\n        \n    {# ----- OTHER MESSAGES ----- #}\n    {%- else -%}\n        {{- render_role_message(message) -}}\n    {%- endif -%}\n\n    {# ----- ADDING GENERATION PROMPT ----- #}\n\n    {%- if loop.last and add_generation_prompt and message['role'] != 'assistant' -%}\n        {{- 'assistant' + add_tokens.role_sep -}}\n    {%- endif -%}\n\n{%- endfor -%}","extractedAt":"2026-09-24","extractionStage":"ingest.template-extract/v1","architecture":"deepseek2","contextLength":262144,"stop":["</s>"],"thinking":{"mode":"none"}},"artifact":{"id":"hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf","repo":"ai-sage/GigaChat3.1-10B-A1.8B-GGUF","type":"llm","summary":"Model from Hugging Face for text generation: ai-sage/GigaChat3.1-10B-A1.8B-GGUF · transformers","license":"mit","hostingStatus":"hosted","hostedFileCount":6,"hostedFileCountAuthority":"live-serve-decision","displayFileCount":6,"fileCount":11,"upstreamUrl":"https://huggingface.co/ai-sage/GigaChat3.1-10B-A1.8B-GGUF"},"tool":"any","toolCompatibility":{"status":"unknown","reason":"recorded-evaluator-not-integrated"},"readiness":"unknown","requiredFiles":[{"path":".gitattributes","sizeBytes":1793,"sha256":"6e416ee5569765af4b37376d9c509ed4c9f277a8aa4fbd8cdf7776e60f55b9c9","format":"gitattributes","risk":"low","sourceKind":"external-hf","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/.gitattributes","chatTemplate":null,"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"},{"path":"GigaChat3.1-10B-A1.8B-bf16.gguf","sizeBytes":21356281984,"sha256":"e7a6409be0ac197babf21c48cfc8a96486d035c1e7a784feadd817b7b883c08e","format":"gguf","risk":"low","sourceKind":"external-hf","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/GigaChat3.1-10B-A1.8B-bf16.gguf","chatTemplate":null,"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"},{"path":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","sizeBytes":6474702976,"sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb","format":"gguf","risk":"low","sourceKind":"mirrored-upstream","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/GigaChat3.1-10B-A1.8B-q4_K_M.gguf","chatTemplate":{"artifactId":"hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf","filePath":"GigaChat3.1-10B-A1.8B-q4_K_M.gguf","sha256":"68a8732fb5cee04f83ebffd7924e15c534d4442c5a43d2ba9e2041fe310b8deb","architecture":"deepseek2","generalName":"10b_bf16","tokenizerModel":"gpt2","contextLength":262144,"bos":"<s>","eos":"</s>","stop":["</s>"],"thinking":{"mode":"none"},"chatTemplate":"{#--------TOOL RENDERING FUNCTIONS---------#}\n\n{#---------------------------------------------------------------\n  Converts JSON Schema (dict) to a TypeScript type definition\n----------------------------------------------------------------#}\n{%- macro json_schema_to_typescript(schema, indent=\"\") -%}\n\t{%- set ADDITIONAL_JSON_KEYS = ['format', 'maxItems', 'maximum', 'minItems', 'minimum', 'pattern'] -%}\n\t{%- set ty = schema.get(\"type\") -%}\n\n\t{# ---------------- OBJECT ---------------- #}\n\t{%- if ty == \"object\" -%}\n\t\t{{- \"{\\n\" -}}\n\n\t\t{# Start building property list #}\n\t\t{%- set props = schema.get(\"properties\", {}) -%}\n\t\t{%- set required = schema.get(\"required\", []) -%}\n\t\t{%- set has_additional_props = schema.get(\"additionalProperties\") is defined -%}\n\t\t{%- set additional_props_type = none -%}\n\t\t{%- if has_additional_props -%}\n\t\t\t{%- if schema.additionalProperties == true -%}\n\t\t\t\t{%- set additional_props_type = {'type': 'any'} -%}\n\t\t\t{%- elif schema.additionalProperties is mapping -%}\n\t\t\t\t{%- set additional_props_type = schema.additionalProperties -%}\n\t\t\t{%- endif -%}\n\t\t{%- endif -%}\n\n\t\t{%- for key, val in props.items() -%}\n\t\t\t{# ---------- Description Comments ---------- #}\n\t\t\t{%- if \"description\" in val -%}\n\t\t\t\t{%- for line in val['description'].split('\\n') -%}\n\t\t\t\t\t{%- if line.strip() -%}\n\t\t\t\t\t\t{{- indent + '// ' + line + '\\n' -}}\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t{%- endif -%}\n\n\t\t\t{# ---------- Additional JSON Keys ---------- #}\n\t\t\t{%- for add_key, add_val in val.items() -%}\n\t\t\t\t{%- if add_key in ADDITIONAL_JSON_KEYS -%}\n\t\t\t\t\t{%- if add_val is string -%}\n\t\t\t\t\t\t{{- indent + '// ' + add_key + ': \"' + add_val + '\"' + '\\n'  -}}\n\t\t\t\t\t{%- else -%}\n\t\t\t\t\t\t{{- indent + '// ' + add_key + ': ' ~ add_val ~ '\\n' -}}\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endfor -%}\n\n\t\t\t{# ---------- Property Definition ---------- #}\n            {%- set type_str = json_schema_to_typescript(\n                val, \n                indent + \"  \"\n            ) -%}\n\n\t\t\t{{- indent + key + ('' if key in required else '?') + ': ' + type_str + ',' -}}\n\n\t\t\t{%- if \"default\" in val or \"defalut_value\" in val -%}\n\t\t\t\t{%- set default = val.get(\"default\", val.get(\"defalut_value\")) -%}\n\t\t\t\t{%- if default is string -%}\n\t\t\t\t\t{{- ' // default: \"' + default + '\"' -}}\n\t\t\t\t{%- else -%}\n\t\t\t\t\t{{- ' // default: ' ~ default -}}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endif -%}\n\n\t\t\t{{- \"\\n\" -}}\n\t\t{%- endfor -%}\n\n\t\t{# Handle additionalProperties as index signature #}\n\t\t{%- if has_additional_props and additional_props_type is not none -%}\n\t\t\t{%- set additional_type_str = json_schema_to_typescript(\n\t\t\t\tadditional_props_type,\n\t\t\t\tindent + \"  \"\n\t\t\t) -%}\n\t\t\t{{- indent + '[key: string]: ' + additional_type_str + '\\n' -}}\n\t\t{%- endif -%}\n\n\t\t{{- indent[: (indent|length - \"  \"|length) ] + '}' -}}\n\n\t{# ---------------- STRING ---------------- #}\n\t{%- elif ty == \"string\" -%}\n\t\t{%- if schema.get(\"enum\") -%}\n            {%- set ns = namespace(enum = []) -%}\n            {%- for en in schema['enum'] -%}\n                {%- set ns.enum = ns.enum + ['\"' ~ en ~ '\"'] -%}\n            {%- endfor -%}\n\t\t\t{{- ns.enum | join(' | ') -}}\n\t\t{%- elif schema.get(\"format\", \"none\") in ['date-time', 'date'] -%}\n\t\t\t{{- 'Date' -}}\n\t\t{%- else -%}\n\t\t\t{{- 'string' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- NUMBER / INTEGER ---------------- #}\n\t{%- elif ty in [\"number\", \"integer\"] -%}\n\t\t{%- if schema.get(\"enum\") -%}\n\t\t\t{{- schema.enum | join(' | ') -}}\n\t\t{%- else -%}\n\t\t\t{{- 'number' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- BOOLEAN ---------------- #}\n\t{%- elif ty == \"boolean\" -%}\n\t\t{{- 'boolean' -}}\n\n\t{# ---------------- ARRAY ---------------- #}\n\t{%- elif ty == \"array\" -%}\n\t\t{%- if \"items\" in schema -%}\n\t\t\t{{- json_schema_to_typescript(schema['items'], indent) + '[]' -}}\n\t\t{%- else -%}\n\t\t\t{{- 'Array<any>' -}}\n\t\t{%- endif -%}\n\n\t{# ---------------- FALLBACK ---------------- #}\n\t{%- else -%}\n\t\t{{- 'any' -}}\n\t{%- endif -%}\n{%- endmacro -%}\n\n{#---------------------------------------------------------------\n  Renders a namespace and its tool definitions in TypeScript style\n----------------------------------------------------------------#}\n\n{%- macro render_tool_namespace(namespace_name, tools) -%}\n\t{%- set ns = namespace(sections = ['namespace ' ~ namespace_name ~ ' {']) -%}\n\n\t{%- for tool in tools -%}\n\t\t{%- if tool.function -%}\n\t\t\t{%- set tool = tool.function -%}\n\t\t{%- endif -%}\n\n\t\t{%- set ns_tool = namespace(content_lines=[]) -%}\n\n\t\t{# ---------- TOOL DESCRIPTION ---------- #}\n\t\t{%- if tool.get('description') -%}\n\t\t\t{%- for line in tool['description'].split('\\n') -%}\n\t\t\t\t{%- if line.strip() -%}\n\t\t\t\t\t{%- set ns_tool.content_lines = ns_tool.content_lines + ['// ' ~ line] -%}\n\t\t\t\t{%- endif -%}\n\t\t\t{%- endfor -%}\n\t\t{%- endif -%}\n\n\t\t{# ---------- TOOL SIGNATURE ---------- #}\n\t\t{%- set main_body = \"\" -%}\n\t\t{%- set params = tool.get(\"parameters\") -%}\n\t\t{%- if params and params.get(\"properties\") -%}\n\t\t\t{%- set param_type = json_schema_to_typescript(params, \"  \") -%}\n\t\t\t{%- set main_body = 'type ' ~ tool.name ~ ' = (_: ' ~ param_type ~ ') => ' -%}\n\t\t{%- else -%}\n\t\t\t{%- set main_body = 'type ' ~ tool.name ~ ' = () => ' -%}\n\t\t{%- endif -%}\n\n\t\t{# ---------- RETURN TYPE ---------- #}\n\t\t{%- set return_params = tool.get(\"return_parameters\") -%}\n\t\t{%- if return_params and return_params.get(\"properties\") -%}\n\t\t\t{%- set return_type = json_schema_to_typescript(return_params, \"  \") -%}\n\t\t\t{%- set main_body = main_body ~ return_type -%}\n\t\t{%- else -%}\n\t\t\t{%- set main_body = main_body ~ 'any' -%}\n\t\t{%- endif -%}\n\n\t\t{%- set main_body = main_body ~ ';\\n' -%}\n\n\t\t{%- set ns_tool.content_lines = ns_tool.content_lines + [main_body] -%}\n\n\t\t{# ---------- ADD TOOL TO SECTIONS ---------- #}\n\t\t{%- set ns.sections = ns.sections + [ns_tool.content_lines | join('\\n')] -%}\n\t{%- endfor -%}\n\n\t{%- set ns.sections = ns.sections + ['} // namespace ' ~ namespace_name] -%}\n\n\t{{- ns.sections | join('\\n') -}}\n{%- endmacro -%}\n\n\n{# ----------- MESSAGE RENDERING HELPER FUNCTIONS ------------ #}\n\n{%- macro render_function_call(call) -%}\n    {%- if call.function -%}\n        {%- set call = call.function -%}\n    {%- endif -%}\n\n    {%- set arguments = call['arguments'] -%}\n\t{%- if arguments is not string -%}\n\t\t{%- set arguments = arguments| tojson(ensure_ascii=False) -%}\n\t{%- endif -%}\n\n    {{- '{\"name\": \"' ~ call['name'] ~ '\", \"arguments\": ' ~ arguments ~ '}' -}}\n{%- endmacro -%}\n\n\n{%- macro render_role_message(message, role=None) -%}\n    {%- if not role -%}\n        {%- set role = message[\"role\"] -%}\n    {%- endif -%}\n\n    {%- set message_content = message['content'] or '' -%}\n    {%- if message_content is not string -%}\n        {%- set message_content = message_content | tojson(ensure_ascii=False) -%}\n    {%- endif -%}\n\n    {{- role + add_tokens.role_sep + message_content -}}\n\n    {%- if message.tool_calls is defined and message.tool_calls -%}\n        {{- add_tokens.function_call + render_function_call(message.tool_calls[0]) -}}\n    {%- endif -%}\n\n    {{- add_tokens.message_sep -}}\n\n{%- endmacro -%}\n\n\n\n{# ----- SPECIAL TOKENS ----- #}\n\n{%- set add_tokens = namespace(\n    role_sep=\"<|role_sep|>\\n\", \n    message_sep=\"<|message_sep|>\\n\\n\",\n    function_call=\"<|function_call|>\"\n) -%}\n\n{# ----- DEFAULT DEVSYSTEM ----- #}\n\n{%- set DEVSYSTEM -%}\n<role_description>\nОписание доступных в диалоге ролей.\n\n`developer system`\nСообщение, добавленное Сбером до основного диалога. Имеет самый высокий приоритет и определяет глобальные, неотменяемые условия (например, правила ведения диалога, политику безопасности, общий стиль ответов ассистента и пр.).\n\n`system`\nСистемная инструкция, добавляемая разработчиками или пользователем, но с приоритетом ниже, чем `developer system`. Обычно описывает инструкции ассистента, конкретный стиль ответа и другие условия для данного конкретного диалога.\n\n`user`\nСообщение или запрос от пользователя. Ассистент следует ему, если это не противоречит инструкциям более высокого приоритета (см. <instruction_priority>).\n\n`user memory`\nПоследовательность наиболее актуальных долговременных фактов о пользователе на момент его запроса, представленная в виде JSON‑списка строк. Факты в ней перечислены в хронологическом порядке, то есть более новые факты дописываются в конец последовательности. При этом при изменении или удалении фактов записи о предыдущих фактах остаются в последовательности. Ассистент сохраняет факты с помощью функции и использует их в соответствии с указаниями из блока <memory_guidelines> ниже.\n\n`added files`\nМетаинформация о файлах, доступных для использования в диалоге, представленная в формате JSON. Содержит следующие ключи: id (уникальный идентификатор файла), name (имя файла), type (тип файла).\n\n`assistant`\nОтвет ассистента на запрос пользователя. Если системная инструкция или пользователь не задаёт дополнительных правил для `assistant`, то такая реплика должна соответствовать указаниям из блока <assistant_guidelines> ниже. Список доступных для вызова функций содержится в последней реплике роли `available functions`. Название необходимой для вызова функции и аргументы будут сгенерированы после специального токена вызова функции. В своих репликах ассистент следует инструкциям в соответствии с <instruction_priority>.\nВызов функции осуществляется в строгом соответствии с инструкцией из блока <function_usage>.\n\n`function descriptions`\nОписания функций в формате TypeScript. Функция — это специальный инструмент (или набор инструкций), который ассистент может вызвать для выполнения конкретных действий, вычислений или получения данных, необходимых для решения задачи пользователя. Каждое описание функции содержит блоки с именем, описанием, аргументами. Иногда описание содержит отдельные блоки с возвращаемыми параметрами и примерами применения, иллюстрирующими правильный вызов и аргументы.\n\n`available functions`\nСписок, который содержит названия функций, доступных для вызова. Если список не содержит элементов, то в следующем сообщении функции, доступные для вызова, отсутствуют.\n\n`function result`\nРезультат последнего вызова функции.\n</role_description>\n\n\n<available_modalities>\nАссистент умеет работать со следующими модальностями: текст, доступные функции.\n</available_modalities>\n\n\n<instruction_priority>\nВ случае противоречия инструкций разных ролей в контексте диалога соблюдай приоритеты:\n`developer system` > `system` > `user` > `function descriptions` > `function result` > `user memory`\n</instruction_priority>\n\n\n<function_usage>\nБазовые инструкции для работы с функциями.\n\nМожно вызывать только те функции, которые доступны исходя из последнего сообщения `available functions`.\n\nВызывай доступные функции в случае, если согласно их описанию такой вызов поможет дать более полный и/или точный ответ на запрос пользователя. Заполняй аргументы функций, используя информацию из контекста диалога. Если функция может помочь ответить на запрос, но для её обязательного аргумента отсутствует информация в контексте, уточни у пользователя недостающие данные перед вызовом функции. При недоступности необходимой функции или ошибке — кратко сообщи об этом пользователю и по возможности предложи альтернативу.\n</function_usage>\n\n\n<memory_guidelines>\nПравила использования фактов в долговременной памяти:\n\nЕсли в диалоге нет сообщения под ролью `user memory`, то это равносильно отсутствию долговременных фактов о пользователе в памяти. В таком случае информация о пользователе ограничена текущим диалогом, и новые факты не должны сохраняться.\n</memory_guidelines>\n\n\n<assistant_guidelines>\nGigaChat — нейросетевая модель искусственного интеллекта, созданная компанией Сбер в России.\n\nGigaChat старается отвечать на языке, на котором пользователь задал запрос. Если из запроса пользователя и контекста диалога язык определить невозможно, GigaChat использует русский.\nGigaChat предоставляет подробные ответы на более сложные и открытые вопросы.\nGigaChat в ответе не использует названия доступных функций.\nGigaChat отвечает безопасно, в соответствии с действующим законодательством Российской Федерации, стараясь помочь пользователю решить задачу или поддержать беседу.\n\nТы — GigaChat.\n</assistant_guidelines>\n\n\nНиже будет приведён диалог.\nВ диалоге могут быть разнообразные роли, описанные в блоке <role_description>.\nКаждая реплика начинается с названия роли и специального токена, обозначающего конец полного наименования роли, а заканчивается специальным токеном конца реплики.\nТвоя задача — продолжить диалог от последней указанной роли в соответствии с контекстом диалога.\n{%- endset -%}\n\n\n{#- ---------------------- RENDERING STARTS HERE ---------------------- -#}\n\n\n{# ----- RENDER BOS TOKEN ----- #}\n{{- bos_token -}}\n\n\n{# ----- RENDER DEVSYSTEM ----- #}\n{{- render_role_message({\"role\": \"developer system\", \"content\": DEVSYSTEM}) -}}\n\n{# ----- RENDER SYSTEM IF PRESENT ----- #}\n{%- if messages and messages[0]['role'] == 'system' -%}\n    {{- render_role_message(messages[0]) -}}\n    {%- set messages = messages[1:] -%}\n{%- else -%}\n    {{- render_role_message({\"role\": \"system\", \"content\": \"\"}) -}}\n{%- endif -%}\n\n{# ----- RENDER TOOLS ----- #}\n{%- if tools -%}\n    {%- set tools_content = (\n        render_tool_namespace('functions', tools) \n        + \"\\n\\n\"\n    ) -%}\n    {{- render_role_message({'role': 'function descriptions', 'content': tools_content}) -}}\n{%- endif -%}\n\n{# ----- MAIN MESSAGE LOOP ----- #}\n{%- for message in messages -%}\n\n    {# ----- TOOL MESSAGE -------#}\n    {%- if message['role'] == 'tool' -%}\n        {{- render_role_message(message, 'function result') -}}\n        \n    {# ----- OTHER MESSAGES ----- #}\n    {%- else -%}\n        {{- render_role_message(message) -}}\n    {%- endif -%}\n\n    {# ----- ADDING GENERATION PROMPT ----- #}\n\n    {%- if loop.last and add_generation_prompt and message['role'] != 'assistant' -%}\n        {{- 'assistant' + add_tokens.role_sep -}}\n    {%- endif -%}\n\n{%- endfor -%}","templateDigest":"sha256:e0b8ec1e172a124fe688e705a6e48fc30c575c23dae7388e43007f150d8343a3","extractionReason":"embedded-template","extractorVersion":"hugging-bay.gguf-embedded-chat-contract.v1","extractedAt":"2026-09-24T04:48:11.891Z","hasEmbeddedTemplate":true},"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"},{"path":"GigaChat3.1-10B-A1.8B-q6_K.gguf","sizeBytes":8782243456,"sha256":"26da505491dae300f6521c669e2de582f576957eff355b534b8dae387d2ac9cc","format":"gguf","risk":"low","sourceKind":"external-hf","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/GigaChat3.1-10B-A1.8B-q6_K.gguf","chatTemplate":null,"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"},{"path":"GigaChat3.1-10B-A1.8B-q8_0.gguf","sizeBytes":11353174144,"sha256":"4ffe95f1ffd0cb294100a475a8881b7b757945bd28d989e8aa4187966747d6e7","format":"gguf","risk":"low","sourceKind":"external-hf","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/GigaChat3.1-10B-A1.8B-q8_0.gguf","chatTemplate":null,"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"},{"path":"README.md","sizeBytes":8377,"sha256":"3692ad51d65a6ba71acc7fff22b7edc8748d4442fd3bfc40fd7a1ab39aabea52","format":"md","risk":"low","sourceKind":"external-hf","hosted":true,"readiness":"unknown","downloadReady":null,"reasonCodes":[],"reason":"Hosted on Hugging Bay and byte-verified — download is available now.","individuallyHashed":true,"fileOnly":true,"directDownloadAuthorized":true,"serveDecision":{"state":"UNKNOWN","reasonCodes":[]},"downloadUrlResponse":{"status":302,"followRedirects":true},"downloadUrl":"https://huggingbay.xyz/api/downloads/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/README.md","chatTemplate":null,"serve_verdict":{"can_download":false,"bytes_verified":true,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"signature_state":"unsigned"}],"warnings":["This description is temporarily unavailable."],"nextActions":[{"label":"Inspect recorded bundle state","url":"https://huggingbay.xyz/api/artifacts/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/bundle","method":"GET"},{"label":"List individually hashed hosted files","url":"https://huggingbay.xyz/api/downloadable-files?artifactId=hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf&limit=100","method":"GET"},{"label":"Inspect trust bundle","url":"https://huggingbay.xyz/api/trust-bundles/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf","method":"GET"},{"label":"Open artifact","url":"https://huggingbay.xyz/artifact/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf","method":"GET"}],"docs":{"artifactUrl":"https://huggingbay.xyz/artifact/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf","downloadsUrl":"https://huggingbay.xyz/api/downloadable-files?artifactId=hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf&limit=100","bundleUrl":"https://huggingbay.xyz/api/artifacts/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf/bundle","trustBundleUrl":"https://huggingbay.xyz/api/trust-bundles/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"},"note":{"summary":"Downloadable doesn't mean tested: this record says whether the exact file can be downloaded now, not that the model is complete or that it runs.","downloadable":true},"serve_verdict":{"can_download":false,"bytes_verified":false,"signature":"unsigned","freshness":"stale","checked_at":null,"evidence_url":"/api/manifests/hf-model-ai-sage-gigachat3-1-10b-a1-8b-gguf"}}