From aef801ff91ecb0b110b9512ab12c44e80f14be1d Mon Sep 17 00:00:00 2001 From: ModelHub XC Date: Wed, 17 Jun 2026 18:57:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E7=94=B1ModelHub=20XC=E7=A4=BE=E5=8C=BA=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model: TeichAI/gpt-oss-20b-glm-4.6-distill-GGUF Source: Original Platform --- .gitattributes | 39 ++++++ Modelfile | 178 ++++++++++++++++++++++++++ README.md | 21 +++ config.json | 77 +++++++++++ gpt-oss-20b-glm-4.6-distill-bf16.gguf | 3 + gpt-oss-20b-glm-4.6-distill-f16.gguf | 3 + gpt-oss-20b-glm-4.6-distill-q8_0.gguf | 3 + 7 files changed, 324 insertions(+) create mode 100644 .gitattributes create mode 100644 Modelfile create mode 100644 README.md create mode 100644 config.json create mode 100644 gpt-oss-20b-glm-4.6-distill-bf16.gguf create mode 100644 gpt-oss-20b-glm-4.6-distill-f16.gguf create mode 100644 gpt-oss-20b-glm-4.6-distill-q8_0.gguf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f13139f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,39 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +gpt-oss-20b-glm-4.6-distill-q8_0.gguf filter=lfs diff=lfs merge=lfs -text +gpt-oss-20b-glm-4.6-distill-f16.gguf filter=lfs diff=lfs merge=lfs -text +gpt-oss-20b-glm-4.6-distill-bf16.gguf filter=lfs diff=lfs merge=lfs -text +gpt-oss-20b.MXFP4.gguf filter=lfs diff=lfs merge=lfs -text diff --git a/Modelfile b/Modelfile new file mode 100644 index 0000000..1324b11 --- /dev/null +++ b/Modelfile @@ -0,0 +1,178 @@ + +FROM gpt-oss-20b.MXFP4.gguf +TEMPLATE """<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. +Knowledge cutoff: 2024-06 +Current date: {{ currentDate }} +{{- if and .IsThinkSet .Think (ne .ThinkLevel "") }} + +Reasoning: {{ .ThinkLevel }} +{{- else if or (not .IsThinkSet) (and .IsThinkSet .Think) }} + +Reasoning: medium +{{- end }} + +{{- $hasNonBuiltinTools := false }} +{{- if .Tools -}} +{{- $hasBrowserSearch := false }} +{{- $hasBrowserOpen := false }} +{{- $hasBrowserFind := false }} +{{- $hasPython := false }} + {{- range .Tools }} + {{- if eq .Function.Name "browser.search" -}}{{- $hasBrowserSearch = true -}} + {{- else if eq .Function.Name "browser.open" -}}{{- $hasBrowserOpen = true -}} + {{- else if eq .Function.Name "browser.find" -}}{{- $hasBrowserFind = true -}} + {{- else if eq .Function.Name "python" -}}{{- $hasPython = true -}} + {{- else }}{{ $hasNonBuiltinTools = true -}} + {{- end }} + {{- end }} +{{- if or $hasBrowserSearch $hasBrowserOpen $hasBrowserFind $hasPython }} + +# Tools +{{- if or $hasBrowserSearch $hasBrowserOpen $hasBrowserFind }} + +## browser + +// Tool for browsing. +// The `cursor` appears in brackets before each browsing display: `[{cursor}]`. +// Cite information from the tool using the following format: +// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`. +// Do not quote more than 10 words directly from the tool output. +// sources=web (default: web) +namespace browser { +{{- if $hasBrowserSearch }} + +// Searches for information related to `query` and displays `topn` results. +type search = (_: { +query: string, +topn?: number, // default: 10 +source?: string, +}) => any; +{{- end }} +{{- if $hasBrowserOpen }} + +// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines. +// Valid link ids are displayed with the formatting: `【{id}†.*】`. +// If `cursor` is not provided, the most recent page is implied. +// If `id` is a string, it is treated as a fully qualified URL associated with `source`. +// If `loc` is not provided, the viewport will be positioned at the beginning of the document or centered on the most relevant passage, if available. +// Use this function without `id` to scroll to a new location of an opened page. +type open = (_: { +id?: number | string, // default: -1 +cursor?: number, // default: -1 +loc?: number, // default: -1 +num_lines?: number, // default: -1 +view_source?: boolean, // default: false +source?: string, +}) => any; +{{- end }} +{{- if $hasBrowserFind }} + +// Finds exact matches of `pattern` in the current page, or the page given by `cursor`. +type find = (_: { +pattern: string, +cursor?: number, // default: -1 +}) => any; +{{- end }} + +} // namespace browser +{{- end }}{{/* end if has browser tools */}} +{{- if $hasPython }} + +## python + +Use this tool to execute Python code in your chain of thought. The code will not be shown to the user. This tool should be used for internal reasoning, but not for code that is intended to be visible to the user (e.g. when creating plots, tables, or files). + +When you send a message containing Python code to python, it will be executed in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 120.0 seconds. The drive at '/mnt/data' can be used to save and persist user files. Internet access for this session is UNKNOWN. Depends on the cluster. +{{- end }}{{/* end if hasPython */}} +{{- end }}{{/* end if has any built-in tools */}} +{{- end }}{{/* end if .Tools */}} + +# Valid channels: analysis, commentary, final. Channel must be included for every message.{{ if $hasNonBuiltinTools }} +Calls to these tools must go to the commentary channel: 'functions'. +{{- end -}}<|end|>{{/* end of system */ -}} +{{- if or $hasNonBuiltinTools .System -}} +<|start|>developer<|message|>{{- if $hasNonBuiltinTools }}# Tools + +## functions + +namespace functions { +{{- range .Tools }} +{{- if not (or (eq .Function.Name "browser.search") (eq .Function.Name "browser.open") (eq .Function.Name "browser.find") (eq .Function.Name "python")) }} +{{if .Function.Description }} +// {{ .Function.Description }} +{{- end }} +{{- if and .Function.Parameters.Properties (gt (len .Function.Parameters.Properties) 0) }} +type {{ .Function.Name }} = (_: { +{{- range $name, $prop := .Function.Parameters.Properties }} +{{- if $prop.Description }} + // {{ $prop.Description }} +{{- end }} + {{ $name }}: {{ if gt (len $prop.Type) 1 }}{{ range $i, $t := $prop.Type }}{{ if $i }} | {{ end }}{{ $t }}{{ end }}{{ else }}{{ index $prop.Type 0 }}{{ end }}, +{{- end }} +}) => any; +{{- else }} +type {{ .Function.Name }} = () => any; +{{- end }} +{{- end }}{{/* end if not browser tool */}} +{{- end }}{{/* end of range .Tools */}} + +} // namespace functions +{{- end }}{{/* end if hasNonBuiltinTools */}} +{{- if .System}} + +# Instructions + +{{ .System }} +{{- end -}} +<|end|> +{{- end -}} +{{- /* Find the index of the last user message */ -}} +{{- $lastUserIdx := -1 }} +{{- $prefillingContent := false }} +{{- $prefillingThinkingOnly := false }} +{{- range $i, $msg := .Messages }} + {{- $last := eq (len (slice $.Messages $i)) 1 -}} + {{- if eq $msg.Role "user" }} + {{- $lastUserIdx = $i }} + {{- end -}} + {{- if and $last (eq $msg.Role "assistant") (gt (len $msg.Content) 0) }} + {{- $prefillingContent = true }} + {{- else if and $last (eq $msg.Role "assistant") (gt (len $msg.Thinking) 0) }} + {{- $prefillingThinkingOnly = true }} + {{- end }} +{{- end -}} +{{- /* Now render messages */ -}} +{{- range $i, $msg := .Messages }} + {{- $last := eq (len (slice $.Messages $i)) 1 -}} + {{- if (ne $msg.Role "system") -}} + {{- if eq $msg.Role "tool" -}} + {{- if or (eq $msg.ToolName "python") (eq $msg.ToolName "browser.search") (eq $msg.ToolName "browser.open") (eq $msg.ToolName "browser.find") -}} + <|start|>{{ $msg.ToolName }} to=assistant<|message|>{{ $msg.Content }}<|end|> + {{- else -}} + <|start|>functions.{{ $msg.ToolName }} to=assistant<|message|>{{ $msg.Content }}<|end|> + {{- end -}} + {{- else if eq $msg.Role "assistant" -}} + {{- if and $msg.Thinking (gt $i $lastUserIdx) -}}{{- /* Show thinking only after last user message */ -}} + <|start|>assistant<|channel|>analysis<|message|>{{ $msg.Thinking }}{{- if not $prefillingThinkingOnly -}}<|end|>{{- end -}} + {{- end -}} + {{- if gt (len $msg.Content) 0 -}} + <|start|>assistant<|channel|>final<|message|>{{ $msg.Content }}{{- if not $prefillingContent -}}<|end|>{{- end -}} + {{- end -}} + {{- if gt (len $msg.ToolCalls) 0 -}} + {{- range $j, $toolCall := $msg.ToolCalls -}} + {{- $isBuiltin := or (eq $toolCall.Function.Name "python") (eq $toolCall.Function.Name "browser.search") (eq $toolCall.Function.Name "browser.open") (eq $toolCall.Function.Name "browser.find") -}} + <|start|>assistant<|channel|>{{ if $isBuiltin }}analysis{{ else }}commentary{{ end }} to={{ if not $isBuiltin}}functions.{{end}}{{ $toolCall.Function.Name }} <|constrain|>json<|message|>{{ $toolCall.Function.Arguments }}<|call|> + {{- end -}} + {{- end -}} + {{- else if eq $msg.Role "user" -}} + <|start|>{{ $msg.Role }}<|message|>{{ $msg.Content }}<|end|> + {{- end }} + {{- else }} + {{- end }} +{{- end -}} +{{- if not (or $prefillingContent $prefillingThinkingOnly) -}} +<|start|>assistant +{{- end -}}""" +PARAMETER temperature 1.0 +PARAMETER top_k 0 +PARAMETER top_p 1.0 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc3cb02 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +--- +tags: +- gguf +- llama.cpp +- unsloth +license: mit +datasets: +- Liontix/glm-4.6-250x +base_model: +- armand0e/gpt-oss-20b-glm-4.6-distill +--- + +# Important! + +This model is still in development. Investigating bugs/flaws in tool calling. + +Check back soon for a higher quality distill. + +# gpt-oss-20b-glm-4.6-distill-GGUF - GGUF + +This model was finetuned using [Unsloth](https://github.com/unslothai/unsloth). \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..dc65dcf --- /dev/null +++ b/config.json @@ -0,0 +1,77 @@ +{ + "architectures": [ + "GptOssForCausalLM" + ], + "attention_bias": true, + "attention_dropout": 0.0, + "eos_token_id": 200002, + "experts_per_token": 4, + "head_dim": 64, + "hidden_act": "silu", + "hidden_size": 2880, + "initial_context_length": 4096, + "initializer_range": 0.02, + "intermediate_size": 2880, + "layer_types": [ + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention", + "sliding_attention", + "full_attention" + ], + "max_position_embeddings": 131072, + "model_type": "gpt_oss", + "num_attention_heads": 64, + "num_experts_per_tok": 4, + "num_hidden_layers": 24, + "num_key_value_heads": 8, + "num_local_experts": 32, + "output_router_logits": false, + "pad_token_id": 200017, + "quantization_config": { + "modules_to_not_convert": [ + "model.layers.*.self_attn", + "model.layers.*.mlp.router", + "model.embed_tokens", + "lm_head" + ], + "quant_method": "mxfp4" + }, + "rms_norm_eps": 1e-05, + "rope_scaling": { + "beta_fast": 32.0, + "beta_slow": 1.0, + "factor": 32.0, + "original_max_position_embeddings": 4096, + "rope_type": "yarn", + "truncate": false + }, + "rope_theta": 150000, + "router_aux_loss_coef": 0.9, + "sliding_window": 128, + "swiglu_limit": 7.0, + "tie_word_embeddings": false, + "transformers_version": "4.56.2", + "unsloth_fixed": true, + "use_cache": true, + "vocab_size": 201088 +} diff --git a/gpt-oss-20b-glm-4.6-distill-bf16.gguf b/gpt-oss-20b-glm-4.6-distill-bf16.gguf new file mode 100644 index 0000000..db09a79 --- /dev/null +++ b/gpt-oss-20b-glm-4.6-distill-bf16.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a097f75aa2e57eaad8b8330b604798bc964e2a555e06c6210c56fe298c55e0b5 +size 13792639872 diff --git a/gpt-oss-20b-glm-4.6-distill-f16.gguf b/gpt-oss-20b-glm-4.6-distill-f16.gguf new file mode 100644 index 0000000..e54d4fc --- /dev/null +++ b/gpt-oss-20b-glm-4.6-distill-f16.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c9f966f0be214c121fb2fada2d7267bee42d8b0f06f86e42dd58ce24d76fe75 +size 13792639872 diff --git a/gpt-oss-20b-glm-4.6-distill-q8_0.gguf b/gpt-oss-20b-glm-4.6-distill-q8_0.gguf new file mode 100644 index 0000000..d8b0e34 --- /dev/null +++ b/gpt-oss-20b-glm-4.6-distill-q8_0.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3835b3fb5471a8d81710e05cefbf0f7f7a70910d58ce3297180250b4f30f259a +size 12109567872