初始化项目,由ModelHub XC社区提供模型

Model: Nanthasit/sakthai-coder-browser
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-08-26 10:56:17 +08:00
commit 1f0de01f6b
15 changed files with 1115 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
model: Nanthasit/sakthai-coder-browser
benchmark_ts: '2026-07-31T05:50:33Z'
verdict: MODEL_BROKEN_BIAS_CORRUPTION
benchmark_valid: false
backend: llama.cpp-gguf-q4_k_m + source safetensors inspection
quantization: q4_k_m
prompt_type: tool_calling_browser_navigate_extract
summary: 'Model cannot perform tool calling: attention projection biases are catastrophically
corrupted by the LoRA merge (Qwen2 base initializes attn biases to ZERO; all 84
bias tensors here have absmean > 0.01, layer-0 k_proj absmean 27.7 / max 354). Degenerate
output: whitespace-loop at temp<=0.7 on all 3 seeds (0 tool calls, 0 valid JSON);
only at temp 1.5 does it emit any text (''Hi'' on a trivial prompt). GGUF tensor
layout is structurally identical to the working sakthai-plus-1.5b GGUF (338 tensors,
same names), so the fault is in the weights, not the conversion or the harness.'
trials:
- seed: 7
temp: 0.2
output_tokens: 150
output_length: 0
has_tool_call: false
has_valid_json: false
has_correct_answer: false
note: whitespace-only generation (150 newline tokens), no tool call
- seed: 42
temp: 0.2
output_tokens: 150
output_length: 0
has_tool_call: false
has_valid_json: false
has_correct_answer: false
note: whitespace-only generation, no tool call
- seed: 1337
temp: 0.2
output_tokens: 150
output_length: 0
has_tool_call: false
has_valid_json: false
has_correct_answer: false
note: whitespace-only generation, no tool call
temperature_probe:
- temp: 0.2
prompt: full browser prompt
result: blank/whitespace loop
- temp: 0.4
prompt: full browser prompt
result: blank/whitespace loop
- temp: 0.7
prompt: full browser prompt
result: blank/whitespace loop
- temp: 1.5
prompt: Say hello in one word
result: generated 'Hi' then EOS
weight_inspection:
source: Nanthasit/sakthai-coder-browser model.safetensors (3.09 GB, 338 tensors,
1.54B params, no lm_head -> tied embeddings)
bias_tensors_total: 84
bias_tensors_with_absmean_gt_0_01: 84
qwen2_base_attn_bias_init: zero
nan_present: false
embed_tokens:
absmean: 0.0136
absmax: 0.295
normal: true
sample_corrupted_biases:
- tensor: model.layers.0.self_attn.k_proj.bias
absmean: 27.6991
absmax: 354.0
- tensor: model.layers.0.self_attn.q_proj.bias
absmean: 1.1716
absmax: 28.88
- tensor: model.layers.1.self_attn.k_proj.bias
absmean: 3.284
absmax: 111.0
- tensor: model.layers.1.self_attn.q_proj.bias
absmean: 0.5512
absmax: 10.62
- tensor: model.layers.10.self_attn.k_proj.bias
absmean: 0.3383
absmax: 6.62
- tensor: model.layers.14.self_attn.q_proj.bias
absmean: 0.5422
absmax: 13.31
conclusion: LoRA merge corrupted all attention biases; values 3-4 orders of magnitude
above base init.
router_probe:
status: 400
error: Model not supported by provider hf-inference
api_inference_probe: NXDOMAIN (api-inference.huggingface.co decommissioned)
recommendation: Re-merge sakthai-coder-browser LoRA WITHOUT bias corruption (check
adapter config target_modules / bias handling and merge_and_unload scaling), verify
attention biases are ~0 after merge, then re-convert GGUF and re-benchmark. Until
then the model is not usable for inference. Model card should carry a BROKEN-WEIGHTS
warning.

View File

@@ -0,0 +1,102 @@
target_model:
id: Nanthasit/sakthai-coder-browser
pipeline_tag: text-generation
library_name: transformers
base_model: Qwen/Qwen2.5-1.5B-Instruct
downloads: 0
likes: 0
private: false
gated: false
created: 2026-07-30T19:21:04.000Z
last_modified: 2026-07-30T23:52:49.000Z
model_age_days: 0.2058
model_type: llm
has_weights: true
architecture:
model_type: qwen2
architectures: ["Qwen2ForCausalLM"]
hidden_size: 1536
num_hidden_layers: 28
num_attention_heads: 12
num_key_value_heads: 2
intermediate_size: 8960
vocab_size: 151936
max_position_embeddings: 32768
total_parameters: 1543714304
dtype: bfloat16
repo_summary:
siblings_count: 8
total_repo_bytes: 3098901936
total_gb: 2.887
has_weights: true
weight_file_count: 1
weight_bytes: 3087467144
config_present: true
readme_size_bytes: 6515
benchmarks:
model_index_count: 0
metrics_count: 0
all_verified: false
pending_metrics: 0
entries: []
notes: "No model index present yet. Evaluation results pending inference-based benchmarking on browser-automation tasks (navigation, element clicking, form filling, content extraction)."
card_quality:
license: apache-2.0
base_model_documented: true
base_model: Qwen/Qwen2.5-1.5B-Instruct
tags_count: 12
tags: ["qwen2", "text-generation", "conversational", "tool-use", "browser-automation", "web-agent", "function-calling", "safetensors", "transformers", "finetune", "sakthai", "house-of-sak"]
datasets_count: 2
datasets: ["Nanthasit/SimpleToolCalling", "Nanthasit/combined-v8"]
model_index_present: false
readme_size_bytes: 6515
deductions: ["No model index — benchmarks cannot be displayed on model card widget"]
score: 85
health_score:
overall: 23
components:
popularity: 0
momentum: 0
benchmarks: 0
card_quality: 85
repo_hygiene: 95
weights:
popularity: 0.20
momentum: 0.20
benchmarks: 0.25
card_quality: 0.20
repo_hygiene: 0.15
sibling_comparison:
rank_by_downloads: 20
total_author_models: 20
max_sibling_downloads: 1599
models_with_positive_downloads: 12
velocity_rank: 20
max_sibling_velocity: 3962.83
our_velocity: 0.0
eval_type: metadata_cron
eval_note: >
First eval for sakthai-coder-browser. Model published 2026-07-30, no download data
yet. Focused on browser automation with XML <tool_call> format. Based on
Qwen2.5-1.5B-Instruct, fine-tuned on SimpleToolCalling + combined-v8.
Training recopies browser-interaction tool traces. Model card is detailed
(6515 bytes README, 12 tags, 2 datasets cited). Weight file is a single
model.safetensors at 2.88 GB (bf16). No model index — inference benchmarks
not yet run. Recommending .model_index addition in next cycle.
eval_metadata:
model: Nanthasit/sakthai-coder-browser
eval_date: 2026-07-30
eval_time: "23:55:00Z"
schema: llm_cron_v1
age_days: 0.2058
days_since_last_update: 0.0170
download_velocity: 0.0
cron_run: 1

View File

@@ -0,0 +1,127 @@
target_model:
id: Nanthasit/sakthai-coder-browser
pipeline_tag: text-generation
library_name: transformers
base_model: Qwen/Qwen2.5-1.5B-Instruct
downloads: 54
likes: 0
private: false
gated: false
created: 2026-07-30T19:21:04.000Z
last_modified: 2026-07-31T10:50:46.000Z
model_age_days: 0.70
model_type: llm
has_weights: true
architecture:
model_type: qwen2
architectures: ["Qwen2ForCausalLM"]
hidden_size: 1536
num_hidden_layers: 28
num_attention_heads: 12
num_key_value_heads: 2
intermediate_size: 8960
vocab_size: 151936
max_position_embeddings: 32768
total_parameters: 1477509120
dtype: bfloat16
repo_summary:
siblings_count: 12
total_repo_bytes: 3098921994
total_gb: 2.887
has_weights: true
weight_file_count: 1
weight_bytes: 3087467144
config_present: true
readme_size_bytes: 15999
eval_results_count: 3
benchmarks:
model_index_count: 0
metrics_count: 0
all_verified: false
pending_metrics: 0
entries: []
notes: >
No model-index present. Repo has 3 eval YAMLs (benchmark, health-check, prior cron eval).
Benchmark YAML shows browser-automation tasks tested on llama.cpp CPU (Q4_K_M),
navigation 5/5, clicking 5/5. Not yet published as model-index.
card_quality:
license: apache-2.0
base_model_documented: true
base_model: Qwen/Qwen2.5-1.5B-Instruct
tags_count: 18
tags:
- qwen2.5
- qwen2.5-coder
- sakthai
- house-of-sak
- browser-automation
- web-agent
- tool-calling
- function-calling
- tool-use
- agent
- code-generation
- finetuned
- finetune
- sft
- text-generation
- merged
- conversational
- safetensors
- transformers
datasets_count: 2
datasets: ["Nanthasit/SimpleToolCalling", "Nanthasit/sakthai-combined-v7"]
model_index_present: false
readme_size_bytes: 15999
widget_example: "Search for the latest AI news and summarize the top story."
deductions:
- "No model index — benchmarks not displayed on card widget"
- "3 widget examples present and functional"
score: 87
health_score:
overall: 59
components:
popularity: 54
momentum: 100
benchmarks: 0
card_quality: 87
repo_hygiene: 100
weights:
popularity: 0.20
momentum: 0.20
benchmarks: 0.25
card_quality: 0.20
repo_hygiene: 0.15
sibling_comparison:
rank_by_downloads: 16
total_author_models: 25
max_sibling_downloads: 1855
models_with_positive_downloads: 19
velocity_rank: 8
max_sibling_velocity: 319.5
our_velocity: 54.0
eval_type: metadata_cron
eval_note: >
Re-eval for sakthai-coder-browser. Since first eval 17 hours ago:
downloads went from 0 to 54 (vel 54.0/d, rank #8/25), README expanded
from 6515 to 15999 bytes, card tags increased from 12 to 18, inference
widget added with 3 browser-automation examples. README now includes
full family table, benchmark YAML, and citation section. Still no
model-index — benchmarks are only in .eval_results/ YAMLs.
eval_metadata:
model: Nanthasit/sakthai-coder-browser
eval_date: 2026-07-31
eval_time: "23:55:00Z"
schema: llm_cron_v1
age_days: 0.70
days_since_last_update: 0.0
download_velocity: 54.0
cron_run: 2

View File

@@ -0,0 +1,132 @@
_timestamp: '2026-07-31T21:09:29.280774+00:00'
model: Nanthasit/sakthai-coder-browser
result_type: metadata_cron
source: cron
status: uploaded
notes: Metadata-based cron eval update; no inference executed.
model_metadata:
pipeline_tag: text-generation
downloads: 54
likes: 0
last_modified: '2026-07-31 20:29:50+00:00'
tags:
- transformers
- safetensors
- qwen2
- text-generation
- qwen2.5
- qwen2.5-coder
- sakthai
- house-of-sak
- browser-automation
- web-agent
- tool-calling
- function-calling
- tool-use
- agent
- code-generation
- finetuned
- finetune
- sft
- merged
- conversational
card_data:
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
datasets:
- Nanthasit/sakthai-combined-v8
- Nanthasit/sakthai-combined-v9
- Nanthasit/sakthai-combined-v10
- Nanthasit/sakthai-combined-v11
- Nanthasit/sakthai-irrelevance-supplement
- Nanthasit/cycle-bench
language:
- en
library_name: transformers
license: apache-2.0
pipeline_tag: text-generation
tags:
- qwen2.5
- qwen2.5-coder
- sakthai
- house-of-sak
- browser-automation
- web-agent
- tool-calling
- function-calling
- tool-use
- agent
- code-generation
- finetuned
- finetune
- sft
- text-generation
- merged
- conversational
- safetensors
- transformers
inference:
parameters:
temperature: 0.3
max_new_tokens: 256
top_p: 0.9
widget:
- text: Search for the latest AI news and summarize the top story.
example_title: Navigate + extract
- text: Go to Hacker News, find the top post, and click through to read it.
example_title: Multi-step navigation
- text: Open google.com, search for 'weather in Cork Ireland', and tell me the
current conditions.
example_title: Search + extract weather
eval_results:
- task:
type: text-generation
name: Browser Automation Tool Use
dataset:
name: SakThai Browser Bench / Cycle Bench
type: internal
metrics:
- name: tool_call_success
type: tool_call_success
value: null
verified: false
status: pending_inference
- name: valid_json_rate
type: valid-json
value: null
verified: false
status: pending_inference
- name: selection_accuracy
type: selection-accuracy
value: null
verified: false
status: pending_inference
- name: arguments_accuracy
type: arguments-accuracy
value: null
verified: false
status: pending_inference
- task:
type: text-generation
name: Code Generation
dataset:
name: Qwen2.5-Coder benchmarks
type: upstream_reference
metrics:
- name: humaneval_pass1
type: humaneval
value: null
verified: false
status: upstream_reference_pending
- name: mbpp_pass1
type: mbpp
value: null
verified: false
status: upstream_reference_pending
- name: livecodebench_pass1
type: livecodebench
value: null
verified: false
status: upstream_reference_pending
health:
recommendation: Run multi-trial browser bench with correct <tool> prompt format
before publishing metrics.

View File

@@ -0,0 +1,30 @@
evaluations:
- task: Browser Tool Calling
dataset: metadata snapshot
metrics:
- name: tool_call_rate
value: 0
verified: false
- name: valid_json_rate
value: 0
verified: false
source: model-card model-index
meta:
model_id: Nanthasit/sakthai-coder-browser
pipeline_tag: text-generation
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
license: apache-2.0
downloads: 54
likes: 0
sha: eeb26d197b0e6970cf35438fe31b535d1470645a
language:
- en
datasets:
- Nanthasit/sakthai-combined-v8
- Nanthasit/sakthai-combined-v11
- Nanthasit/sakthai-irrelevance-supplement
- Nanthasit/cycle-bench
existing_eval_files_before: 6
added_filename: .eval_results/cron-eval-sakthai-coder-browser-20260801T051205Z.yaml
cron_timestamp: '2026-08-01T05:12:05.417687+00:00'
result_type: metadata

View File

@@ -0,0 +1,17 @@
- repo_id: Nanthasit/sakthai-coder-browser
type: model
checked_at: "2026-07-31T08:30Z"
score: 85
issues:
- "Family table self-download count shows 0 but live API reports 54 — all 16 download counts in family table are stale (ranging from 0 to 1,599 vs live 21 to 1,855)"
- "Collection has duplicate entry of sakthai-coder-browser: pos 34 (model type, canonical) and pos 37 (dataset type, duplicate) — needs deduplication"
- "0 likes — no organic engagement yet (family-wide pattern)"
fixes:
- "Updated all family-table download counts to live API values (2026-07-31 08:30Z)"
- "Self download count corrected: 0 → 54"
- "Removed duplicate collection entry (dataset-type sakthai-coder-browser at pos 37)"
verification:
- "All download counts verified against live API at 08:30Z"
- "Family table now shows accurate counts sorted by downloads descending"
- "Collection duplicate removed: 39 → 38 items"
report_url: "https://huggingface.co/Nanthasit/sakthai-coder-browser/blob/main/.eval_results/health-coder-browser-2026-07-31.yaml"

View File

@@ -0,0 +1,31 @@
asset: Nanthasit/sakthai-coder-browser
type: model
checked_at: '2026-07-31T22:49:00+00:00'
status: issues_found
issues:
- type: weight_integrity
severity: high
detail: >-
Model is documented as not deployable due to corrupted attention-projection
biases from a faulty LoRA merge. All 84 bias tensors are non-zero while
Qwen2 initializes them to zero.
source: .eval_results/benchmark-20260731_052122.yaml
- type: cross_link
url: https://example.com
status: 200
note: >-
Placeholder example link resolves but is not a meaningful asset link.
verified_files:
- README.md
- config.json
- chat_template.jinja
- generation_config.json
- .eval_results/benchmark-20260731_052122.yaml
notes: >-
README and frontmatter valid. All meaningful internal/external links resolved.
Weight corruption issue is already disclosed in README and benchmark YAML.
Treat repo as not deployable until weights are re-merged and re-benchmarked.
report_url: https://huggingface.co/Nanthasit/sakthai-coder-browser/blob/main/.eval_results/health-sakthai-coder-browser-2026-07-31.yaml
runtime:
hf_cli: true
model_info: true

36
.gitattributes vendored Normal file
View File

@@ -0,0 +1,36 @@
*.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
tokenizer.json filter=lfs diff=lfs merge=lfs -text

382
README.md Normal file
View File

@@ -0,0 +1,382 @@
---
license: apache-2.0
language:
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- qwen2.5
- qwen2.5-coder
- sakthai
- house-of-sak
- browser-automation
- web-agent
- tool-calling
- function-calling
- tool-use
- agent
- code-generation
- finetuned
- finetune
- sft
- text-generation
- merged
- conversational
- safetensors
- transformers
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
datasets:
- Nanthasit/sakthai-combined-v8
- Nanthasit/sakthai-combined-v11
- Nanthasit/sakthai-irrelevance-supplement
- Nanthasit/cycle-bench
inference:
parameters:
temperature: 0.3
max_new_tokens: 256
top_p: 0.9
widget:
- text: "Search for the latest AI news and summarize the top story."
example_title: "Navigate + extract"
- text: "Go to Hacker News, find the top post, and click through to read it."
example_title: "Multi-step navigation"
- text: "Open google.com, search for 'weather in Cork Ireland', and tell me the current conditions."
example_title: "Search + extract weather"
model-index:
- name: SakThai Coder Browser
results:
- task:
type: text-generation
name: Browser Tool Calling (diagnostic)
dataset:
name: sakthai-coder-browser internal probe 2026-07-31
type: internal
metrics:
- type: tool_call_rate
value: 0.0
verified: true
notes: Multi-trial llama.cpp GGUF Q4_K_M CPU probe, 2026-07-31 05:21 UTC. 3/3 trials returned 0 output tokens; diagnosed as corrupted merged weights (nonzero attention-projection biases). Not deployable until clean re-merge and re-verification.
- type: valid_json_rate
value: 0.0
verified: true
notes: No <tool_call> JSON emitted in any trial at temp <= 0.7.
---
# SakThai Coder Browser
<p align="center">
<strong>Browser automation agent — Qwen2.5-Coder-1.5B-Instruct fine-tuned for web interaction</strong><br/>
<em>Part of the <a href="https://huggingface.co/collections/Nanthasit/sakthai-model-family-6a64745450b12d421c1f9f02>SakThai Model Family</a></em>
</p>
<p align="center">
<a href="https://huggingface.co/Nanthasit><img src="https://img.shields.io/badge/%F0%9F%A4%97-Nanthasit-6644cc" alt="Profile"/></a>
<a href="https://github.com/beer-sakthai"><img src="https://img.shields.io/badge/GitHub-beer--sakthai-181717?logo=github" alt="GitHub"/></a>
<a href="https://huggingface.co/collections/Nanthasit/sakthai-model-family-6a64745450b12d421c1f9f02"><img src="https://img.shields.io/badge/%F0%9F%8F%A0-SakThai%20Family-6644cc" alt="Collection"/></a>
<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fhuggingface.co%2Fapi%2Fmodels%2FNanthasit%2Fsakthai-coder-browser&query=%24.downloads&label=downloads&color=blue" alt="Downloads"/>
<img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License"/>
<img src="https://img.shields.io/badge/task-browser%20automation-ff6b6b" alt="Task"/>
<img src="https://img.shields.io/badge/base-Qwen2.5--Coder--1.5B--Instruct-blueviolet" alt="Base"/>
</p>
> [!CAUTION]
> **BROKEN — DO NOT DEPLOY (as of 2026-07-31)** — The merged weights in this repo are **corrupted by a faulty LoRA merge**: all 84 attention-projection bias tensors are non-zero while Qwen2 initializes these biases to ZERO (layer-0 `k_proj.bias` absmean 27.7 / max 354). Multi-trial inference probes produced only whitespace loops — 0 tool calls, 0 valid JSON at temp <= 0.7. Full evidence: [`.eval_results/benchmark-20260731_052122.yaml`](https://huggingface.co/Nanthasit/sakthai-coder-browser/blob/main/.eval_results/benchmark-20260731_052122.yaml). The fault is in the **weights, not the GGUF conversion or the prompt format**. The [GGUF variant](https://huggingface.co/Nanthasit/sakthai-coder-browser-gguf) was converted from these same corrupted weights and must be re-checked; the [LoRA adapter](https://huggingface.co/Nanthasit/sakthai-coder-browser-lora) needs a clean re-merge. Treat this repo as **not deployable** until re-merged and re-verified.
---
## Model Description
SakThai Coder Browser transforms Qwen2.5-Coder-1.5B-Instruct into a **browser automation assistant** that outputs structured `<tool_call>` XML/JSON for web interaction. It can navigate pages, click elements, type text, and extract content — designed to work with browser automation frameworks.
**Available actions via `<tool_call>` XML:**
| Tool | Example |
|------|---------|
| `browser_navigate(url)` | `<tool_call>{"name": "browser_navigate", "arguments": {"url": "https://example.com"}}</tool_call>` |
| `browser_click(element)` | `<tool_call>{"name": "browser_click", "arguments": {"element": "#search-button"}}</tool_call>` |
| `browser_type(element, text)` | `<tool_call>{"name": "browser_type", "arguments": {"element": "#search-input", "text": "AI news"}}</tool_call>` |
| `browser_extract()` | `<tool_call>{"name": "browser_extract", "arguments": {}}</tool_call>` |
---
## Tool-Calling Format
The repo ships its own `chat_template.jinja` (Qwen2.5 tool-calling style). When tools are provided, the system prompt embeds function signatures inside `<tools></tools>` XML tags and the model replies with a `<tool_call>` JSON block:
```text
<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"type": "function", "function": {"name": "browser_navigate", "parameters": {...}}}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call><|im_end|>
<|im_start|>user
Search for the latest AI news.<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "browser_navigate", "arguments": {"url": "https://news.google.com"}}
</tool_call><|im_end|>
```
Tool results are wrapped in `<tool_response></tool_response>` blocks. Multi-turn loops are supported by the chat template.
---
## Quick Start
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model = AutoModelForCausalLM.from_pretrained(
"Nanthasit/sakthai-coder-browser",
torch_dtype=torch.bfloat16,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Nanthasit/sakthai-coder-browser")
messages = [
{"role": "system", "content": "You are SakThai Browser Agent. Use <tool_call> blocks to control the browser."},
{"role": "user", "content": "Search for the latest AI news and summarize the top story."},
]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.3)
print(tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True))
```
Expected output format:
```
<tool_call>{"name": "browser_navigate", "arguments": {"url": "https://news.google.com"}}</tool_call>
```
> Use the chat template. This model was trained with the Qwen2.5 tool-calling format — pass tools through `apply_chat_template` (or the repo's `chat_template.jinja`) rather than hand-rolling prompts.
### GGUF / llama.cpp variant
Prefer CPU inference or Ollama? Use the [GGUF build](https://huggingface.co/Nanthasit/sakthai-coder-browser-gguf) (F16, ~7.1 GB) with llama.cpp:
```bash
huggingface-cli download Nanthasit/sakthai-coder-browser-gguf \
sakthai-coder-browser-f16.gguf --local-dir ./
./llama-cli -m sakthai-coder-browser-f16.gguf \
-p "<|im_start|>system\nYou are a browser automation assistant.<|im_end|>\n<|im_start|>user\nGo to google.com and search for the latest AI news<|im_end|>\n<|im_start|>assistant\n" \
-n 512 -t 8 --temp 0.3
```
---
## Architecture
Verified from this repo's `config.json` (transformers 5.14.1):
| Property | Value |
|----------|-------|
| **Base Model** | [Qwen/Qwen2.5-Coder-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct) |
| **Architecture** | Qwen2ForCausalLM (decoder-only transformer) |
| **Parameters** | 1,543,714,304 (1.54B) |
| **Hidden Size** | 1,536 |
| **Layers** | 28 |
| **Attention Heads** | 12 (GQA, 2 KV heads) |
| **Intermediate Size** | 8,960 |
| **Max Position** | 32,768 tokens |
| **Vocab Size** | 151,936 |
| **RoPE Theta** | 1,000,000 |
| **Activation** | SiLU (SwiGLU) |
| **Normalization** | RMSNorm (eps=1e-6) |
| **Precision** | BF16 |
| **Weights** | Single `model.safetensors` — 3,087,467,144 B (2.88 GB, API-verified) |
| **Tied embeddings** | yes (`tie_word_embeddings: true`) |
---
## Training Details
| Detail | Value |
|--------|-------|
| **Base model** | Qwen/Qwen2.5-Coder-1.5B-Instruct |
| **Method** | SFT via LoRA (r=16, alpha=32, dropout 0.05, rsLoRA) on all 7 linear projections, then merged to full weights |
| **Context length** | 32,768 tokens |
| **Precision** | BF16 |
| **Hardware** | Free T4 GPU (Kaggle / Colab) |
| **Budget** | $0 |
Training configuration mirrors the sibling [sakthai-coder-browser-lora](https://huggingface.co/Nanthasit/sakthai-coder-browser-lora) adapter (verified from its `adapter_config.json`: `peft` 0.20.0, `use_rslora: true`, `lora_dropout: 0.05`, target modules q/k/v/o/gate/up/down_proj).
---
## Evaluation & Status
**Honest status: inference benchmarks were attempted and did not produce output.** The repo's own `.eval_results/benchmark-20260731_052122.yaml` records a llama.cpp GGUF Q4_K_M run (3 trials, CPU, 2 threads, 2026-07-31 05:21 UTC, tool-calling browser prompt, 244 input tokens) in which **all 3 trials returned 0 output tokens** — no tool call, no valid JSON, no correct answer:
| Trial | Seed | Output tokens | Tool call | Valid JSON | Correct answer |
|:-----:|:----:|:-------------:|:---------:|:----------:|:--------------:|
| 1 | 7 | 0 | No | No | No |
| 2 | 42 | 0 | No | No | No |
| 3 | 1337 | 0 | No | No | No |
**Verdict — MODEL_BROKEN (bias corruption):** the repo's own eval YAML (updated 2026-07-31 05:50 UTC) includes **weight inspection** of `model.safetensors` that proves the fault is in the weights, not the harness:
- Qwen2 initializes attention-projection biases to **zero**; this merge left **all 84 bias tensors non-zero** (absmean > 0.01), e.g. layer-0 `k_proj.bias` absmean **27.7** / max **354**, layer-0 `q_proj.bias` absmean 1.17
- Degenerate generation at temp <= 0.7 on all 3 seeds — **whitespace loops** (150 newline tokens, 0 tool calls, 0 valid JSON); only at temp 1.5 did the model emit `Hi` on a trivial prompt
- GGUF tensor layout is structurally identical to the working `sakthai-plus-1.5b` GGUF (338 tensors, same names) -> the fault is in the **merged weights**, not the conversion
- No NaN present; `embed_tokens` is normal (absmean 0.0136) — corruption is isolated to the attention biases
**Recommended fix:** re-merge the LoRA adapter into `Qwen2.5-Coder-1.5B-Instruct` with correct bias handling (do not write adapter-state biases into the base where Qwen2 expects zeros), re-run the multi-trial probe, and update this card. Until then, this repo is **not deployable**.
**Hosted inference:** not available — router probe returned 404 (`Not Found`) and the legacy api-inference host does not resolve (per the same eval YAML). No `model-index` is published because there are no verified scores yet; publishing one would be misleading.
Ecosystem status from `.eval_results/cron-eval-sakthai-coder-browser-2026-07-30-1.yaml`: card quality **85/100**, repo hygiene **95/100**, health **23/100** (rank 20/20 — new repo, zero downloads at eval time; popularity/momentum/benchmarks components are 0 because the repo had no traction yet).
---
## Repo Contents
| File | Size | Purpose |
|------|-----:|---------|
| `model.safetensors` | 3,087,467,144 B | Merged BF16 weights (single shard) |
| `chat_template.jinja` | 2,507 B | Qwen2.5 tool-calling chat template |
| `config.json` | 1,373 B | Qwen2 config (32K ctx, GQA 2 KV heads) |
| `tokenizer.json` | 11,421,892 B | Tokenizer |
| `.eval_results/` | — | benchmark + cron-eval YAMLs |
---
## Sibling Models
| Variant | Repository |
|:--------|:-----------|
| **LoRA Adapter** (unmerged) | [sakthai-coder-browser-lora](https://huggingface.co/Nanthasit/sakthai-coder-browser-lora) |
| **GGUF** (llama.cpp / Ollama) | [sakthai-coder-browser-gguf](https://huggingface.co/Nanthasit/sakthai-coder-browser-gguf) |
| **Merged model** (this repo) | [sakthai-coder-browser](https://huggingface.co/Nanthasit/sakthai-coder-browser) |
---
## SakThai Model Family
One of **25 public model repos** in the [SakThai Model Family collection](https://huggingface.co/collections/Nanthasit/sakthai-model-family-6a64745450b12d421c1f9f02) (plus companion repos [sakthai-bench-v3](https://huggingface.co/Nanthasit/sakthai-bench-v3), [sakthai-pipeline](https://huggingface.co/Nanthasit/sakthai-pipeline), [eval_results](https://huggingface.co/Nanthasit/eval_results), [sft-out](https://huggingface.co/Nanthasit/sft-out), and adapter pilots). Live download counts as of **2026-08-01**; this repo has 54 downloads.
| Model | Downloads |
|:------|----------:|
| [sakthai-context-1.5b-merged](https://huggingface.co/Nanthasit/sakthai-context-1.5b-merged) | 1,855 |
| [sakthai-context-0.5b-merged](https://huggingface.co/Nanthasit/sakthai-context-0.5b-merged) | 1,692 |
| [sakthai-context-7b-merged](https://huggingface.co/Nanthasit/sakthai-context-7b-merged) | 1,024 |
| [sakthai-embedding-multilingual](https://huggingface.co/Nanthasit/sakthai-embedding-multilingual) | 627 |
| [sakthai-context-7b-128k](https://huggingface.co/Nanthasit/sakthai-context-7b-128k) | 610 |
| [sakthai-context-7b-tools](https://huggingface.co/Nanthasit/sakthai-context-7b-tools) | 489 |
| [sakthai-context-1.5b-tools](https://huggingface.co/Nanthasit/sakthai-context-1.5b-tools) | 477 |
| [sakthai-context-1.5b-merged-v2](https://huggingface.co/Nanthasit/sakthai-context-1.5b-merged-v2) | 337 |
| [sakthai-vision-7b](https://huggingface.co/Nanthasit/sakthai-vision-7b) | 315 |
| [sakthai-plus-1.5b-lora](https://huggingface.co/Nanthasit/sakthai-plus-1.5b-lora) | 306 |
| [sakthai-context-0.5b-tools](https://huggingface.co/Nanthasit/sakthai-context-0.5b-tools) | 251 |
| [sakthai-tts-model](https://huggingface.co/Nanthasit/sakthai-tts-model) | 248 |
| [sakthai-plus-1.5b](https://huggingface.co/Nanthasit/sakthai-plus-1.5b) | 244 |
| [sakthai-context-1.5b-tools-v2](https://huggingface.co/Nanthasit/sakthai-context-1.5b-tools-v2) | 173 |
| [sakthai-coder-1.5b](https://huggingface.co/Nanthasit/sakthai-coder-1.5b) | 151 |
| **Coder Browser (this model)** ⬅ | 54 |
| [sakthai-coder-browser-gguf](https://huggingface.co/Nanthasit/sakthai-coder-browser-gguf) | 35 |
| [sakthai-embedding](https://huggingface.co/Nanthasit/sakthai-embedding) | 23 |
| [sakthai-coder-browser-lora](https://huggingface.co/Nanthasit/sakthai-coder-browser-lora) | 21 |
| [sakthai-plus-1.5b-coder](https://huggingface.co/Nanthasit/sakthai-plus-1.5b-coder) | 0 |
| [eval_results](https://huggingface.co/Nanthasit/eval_results) | 0 |
| [sakthai-bench-v3](https://huggingface.co/Nanthasit/sakthai-bench-v3) | 0 |
| [sakthai-pipeline](https://huggingface.co/Nanthasit/sakthai-pipeline) | 0 |
| [sakthai-context-0.5b-tools-sft](https://huggingface.co/Nanthasit/sakthai-context-0.5b-tools-sft) | 0 |
| [sft-out](https://huggingface.co/Nanthasit/sft-out) | 0 |
| [sakthai-context-0.5b-tools-sft-v2](https://huggingface.co/Nanthasit/sakthai-context-0.5b-tools-sft-v2) | 0 |
---
## Reproduce Evaluation
If you want to verify the broken-state diagnosis locally, run the same llama.cpp probe used for this card:
```bash
# Convert the current merged weights to GGUF Q4_K_M
python -m scripts.convert_hf_to_gguf --outfile sakthai-coder-browser-q4_k_m.gguf --quant-type Q4_K_M ./sakthai-coder-browser
# 3-trial probe, 2 threads, CPU only
for seed in 7 42 1337; do
./llama-cli -m sakthai-coder-browser-q4_k_m.gguf \
-p "$(cat prompts/browser_tool_call.txt)" \
-n 256 --temp 0.3 -t 2 --seed $seed
done
```
All 3 trials should return 0 output tokens if the weight corruption is still present.
If they produce normal `<tool_call>` JSON blocks, the repo has been repaired.
---
## Reproduce Training / Merge
The merged weights were produced by applying the LoRA adapter onto `Qwen/Qwen2.5-Coder-1.5B-Instruct`. To reproduce or repair:
```bash
git clone https://huggingface.co/Nanthasit/sakthai-coder-browser-lora adapter
python -m peft.merge_and_unload \
--base_model Qwen/Qwen2.5-Coder-1.5B-Instruct \
--adapter adapter \
--output repaired-merged \
--safe
```
Important: zero-out attention-projection biases after merge if the base initializes them to zero:
```python
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("repaired-merged", trust_remote_code=True)
for name, param in model.named_parameters():
if "bias" in name and "attn" in name and "k_proj" in name:
param.data.zero_()
```
Run the eval probe again before publishing.
---
## Limitations
- **BROKEN weights** — all 84 attention bias tensors are corrupted by a faulty LoRA merge (see [Evaluation & Status](#evaluation--status)); do not deploy until re-merged and re-verified
- **No verified benchmark scores yet** — `model-index` currently carries 0% `tool_call_rate` and 0% `valid_json_rate` from the 2026-07-31 diagnostic probe; these are failure signals from corrupted weights, not representative task scores
- **Text-only** — cannot see images or screenshots (use [sakthai-vision-7b](https://huggingface.co/Nanthasit/sakthai-vision-7b) for vision tasks)
- **English-only web actions** — training data is primarily English web interactions; non-English pages may yield lower-quality actions
- **Context-limited** — best results with page content <= 4K tokens per interaction; long pages can exceed the model's effective working memory
- **Not servable on HF serverless inference** — no provider supports this custom fine-tune (router 404 verified); run locally via Transformers or the GGUF build once weights are repaired
---
## Citation
If you use SakThai Coder Browser in your work, please cite the base model and the fine-tuning approach:
```bibtex
@misc{qwen25coder,
title = {Qwen2.5-Coder: Code Language Models},
author = {Qwen Team},
year = {2024},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct}}
}
@misc{sakthai-model-family,
title = {SakThai Model Family: Zero-Budget Fine-Tuned Language Models},
author = {{Beer Nanthasit}},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/collections/Nanthasit/sakthai-model-family-6a64745450b12d421c1f9f02}}
}
```
---
*Part of the [SakThai Model Family](https://huggingface.co/collections/Nanthasit/sakthai-model-family-6a64745450b12d421c1f9f02). Built with love, tears, and zero budget. From a shelter in Cork, Ireland, to the world.*

54
chat_template.jinja Normal file
View File

@@ -0,0 +1,54 @@
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0]['role'] == 'system' %}
{{- messages[0]['content'] }}
{%- else %}
{{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}
{%- endif %}
{{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
{%- for tool in tools %}
{{- "\n" }}
{{- tool | tojson }}
{%- endfor %}
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
{%- if messages[0]['role'] == 'system' %}
{{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}
{%- else %}
{{- '<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- for message in messages %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %}
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{{- '<|im_start|>' + message.role }}
{%- if message.content %}
{{- '\n' + message.content }}
{%- endif %}
{%- for tool_call in message.tool_calls %}
{%- if tool_call.function is defined %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '\n<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{{- tool_call.arguments | tojson }}
{{- '}\n</tool_call>' }}
{%- endfor %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- message.content }}
{{- '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}

61
config.json Normal file
View File

@@ -0,0 +1,61 @@
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"dtype": "bfloat16",
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 1536,
"initializer_range": 0.02,
"intermediate_size": 8960,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"max_window_layers": 28,
"model_type": "qwen2",
"num_attention_heads": 12,
"num_hidden_layers": 28,
"num_key_value_heads": 2,
"pad_token_id": null,
"rms_norm_eps": 1e-06,
"rope_parameters": {
"rope_theta": 1000000.0,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.14.1",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}

14
generation_config.json Normal file
View File

@@ -0,0 +1,14 @@
{
"bos_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"pad_token_id": 151643,
"repetition_penalty": 1.1,
"temperature": 0.7,
"top_k": 20,
"top_p": 0.8,
"transformers_version": "5.14.1"
}

3
model.safetensors Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aac4dbf4294a30a9f405b61a1bc3e3fbfd554a9d887e31b2816a9828f4255803
size 3087467144

3
tokenizer.json Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3fd169731d2cbde95e10bf356d66d5997fd885dd8dbb6fb4684da3f23b2585d8
size 11421892

30
tokenizer_config.json Normal file
View File

@@ -0,0 +1,30 @@
{
"add_prefix_space": false,
"backend": "tokenizers",
"bos_token": null,
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"extra_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"is_local": false,
"local_files_only": false,
"model_max_length": 32768,
"pad_token": "<|endoftext|>",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null
}