sequelbox commited on
Commit
73cb930
·
verified ·
1 Parent(s): 5b70beb

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
.ipynb_checkpoints/model.safetensors.index-checkpoint.json ADDED
The diff for this file is too large to render. See raw diff
 
README.md ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - en
4
+ library_name: transformers
5
+ pipeline_tag: image-text-to-text
6
+ tags:
7
+ - tachibana
8
+ - valiant
9
+ - valiant-labs
10
+ - qwen
11
+ - qwen-3.6
12
+ - qwen-3.6-27b
13
+ - 27b
14
+ - reasoning
15
+ - code
16
+ - code-instruct
17
+ - python
18
+ - typescript
19
+ - javascript
20
+ - java
21
+ - c++
22
+ - c
23
+ - c#
24
+ - rust
25
+ - go
26
+ - haskell
27
+ - shell
28
+ - bash
29
+ - azure
30
+ - aws
31
+ - gcp
32
+ - cloud
33
+ - scripting
34
+ - powershell
35
+ - problem-solving
36
+ - architect
37
+ - engineer
38
+ - developer
39
+ - creative
40
+ - analytical
41
+ - expert
42
+ - rationality
43
+ - conversational
44
+ - chat
45
+ - instruct
46
+ base_model: Qwen/Qwen3.6-27B
47
+ datasets:
48
+ - sequelbox/Tachibana4-DeepSeek-V4-Pro
49
+ license: apache-2.0
50
+ ---
51
+
52
+
53
+ **[Support our open-source dataset and model releases!](https://huggingface.co/spaces/sequelbox/SupportOpenSource)**
54
+
55
+
56
+ Tachibana-Agent is a Qwen 3.6 agentic coding finetune, trained on the [Tachibana 4](https://huggingface.co/datasets/sequelbox/Tachibana4-DeepSeek-V4-Pro) dataset.
57
+ - Questions prioritize real-world, challenging agentic coding tasks across a variety of programming languages and topics. Synthetic prompts utilize a variety of personas, experience levels, and styles of communication to maximize real-world flexibility and usability.
58
+ - Areas of focus include back-end and front-end development, systems programming, distributed systems, performance optimization, data structures, databases and data engineering, game and mobile development, security engineering, compiler design, custom tooling, task automation, practical bugfixes, and more!
59
+ - A wide variety of emphasized languages improves development capability: Python, C, C++, C#, Go, TypeScript, Java, JavaScript, Rust, Haskell, SQL, Shell, R, Ruby, assembly code, and more!
60
+
61
+
62
+ ## Prompting Guide
63
+ Tachibana-Agent uses the [Qwen3.6-27B](https://huggingface.co/Qwen/Qwen3.6-27B) prompt format and the following recommended general structure:
64
+
65
+ 1) Start the prompt with your primary query
66
+ 2) Include reference information after the primary query, using subheaders; documentation should follow "Documentation:\n\n", a stack trace following "Stack Trace:\n\n", etc for logs, schemas, specs, etc.
67
+ 3) Attached files for the agent go at the end, with each file surrounded by file tags: <file path=""myStuff/myRepo/myFirstFile.scala"" language=""Scala""> </file>
68
+
69
+ Adherence to the specific format above is not required, but reflects the structure of the training data.
70
+
71
+ Example inference script to get started:
72
+
73
+ ```python
74
+ from transformers import AutoModelForCausalLM, AutoTokenizer
75
+
76
+ model_name = "sequelbox/Qwen3.6-27B-Tachibana-Agent"
77
+
78
+ # load the tokenizer and the model
79
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
80
+ model = AutoModelForCausalLM.from_pretrained(
81
+ model_name,
82
+ torch_dtype="auto",
83
+ device_map="auto"
84
+ )
85
+
86
+ # prepare the model input
87
+ prompt = "Implement CQRS for network appliance config management.\n\nRequirements:\n- Write side: 200 commands/sec, 4 command handlers, SQLite with custom journaling\n- Read side: 1000 queries/sec, 3 read projections in shared memory segments\n- Eventual consistency window: 100ms max\n- Handle atomic swap of projection memory for rebuilds\n- Binary configuration format versioning for schema evolution\n- Framework: libevent with custom protocol parser\n\nConstraints:\n- Manual memory management only, no garbage collection\n- Lock-free data structures where possible\n- Shared memory projections must survive process restarts\n- Command handlers must be thread-safe with 4 worker threads\n- Projection rebuild must not block queries\n- Binary format must support forward/backward compatibility\n- Error handling for corrupted journal recovery\n- Memory-mapped I/O for shared segments\n- Zero-copy where possible for performance\n\nDeliverables:\n1. Command processing pipeline with journaling\n2. Projection engine with shared memory management\n3. Query dispatcher with read-your-writes consistency\n4. Schema evolution system with versioned binary format\n5. Integration with libevent for network I/O\n6. Stress test showing 200 cmd/s + 1000 q/s sustained\n\nAssume x86_64 Linux, pthreads, atomic operations. No high-level frameworks."
88
+ #prompt = "Hey, I've been wrestling with state management for our Scala.js + Laminar trading dashboard, and I wanted to get your take on the best approach. We have five distinct state domains that all interact: financial portfolio positions, real-time market data (WebSocket feed), trade execution state, user risk limits, and chart visualization parameters. The current code uses a mix of `Var`s and manual subscriptions, but we're hitting nasty race conditions: a market data update can fire a trade execution callback that reads stale portfolio state, or an optimistic trade placement updates the portfolio before the server confirms but then the market data handler overwrites the pending state. The re-render count is around 40 components per action, which is way too high for our 10ms UI latency target.\n\nWe've got about 1500 normalized entities (positions, trades, symbols) with complex graph relationships — a trade references a position, a position references a symbol, and chart parameters depend on symbol+timeframe. Optimistic updates are required for three operations: trade placements, limit adjustments, and portfolio rebalances. The undo/redo scope is the entire trading day, with regulatory compliance requirements: every undo action must be logged with timestamp, user ID, and the before/after state snapshot. Oh, and our target is ≤5 re-renders on a typical action (like updating a single position's P&L).\n\nI'm torn between three approaches:\n1. **Cats State monad** for a pure functional core, with Laminar `EventBus` for side effects. This gives us referential transparency and composable state transformations, but I worry about wiring the whole graph into a single state transaction and whether we can keep the subscription graph fine-grained enough to hit ≤5 re-renders.\n2. **Laminar's own reactive primitives** (`Signal`, `Var`, `EventBus`) with careful manual wiring. It's simple and works well for small apps, but I've seen it become spaghetti as the state graph grows. Also, how do we ensure consistent snapshots for undo without global coordination?\n3. **A custom Redux-like store** built on Laminar `Var` + `Observer`, with a middleware stack for optimistic updates, undo logging, and audit trails. This is similar to what we used in React, but I'm not sure it's idiomatic in the Scala.js ecosystem.\n\nI've attached a very rough spec of the regulatory constraints we're under (mostly record-keeping and audit trail requirements). What's your gut feeling? Have you dealt with this kind of multi-domain reactive state in a financial context before? I'm leaning toward something like a two-layer approach: a functional core with `StateT[IO, ...]` for pure state transitions, then a thin Laminar adapter that subscribes to the latest snapshot and diffs for targeted re-renders. But I'd love to hear your thoughts before I go down any rabbit hole.\n\nOh, one more thing — the latency budget is tight. Market data ticks come every 50ms, and we must update the UI within 10ms of receiving a trade confirmation. So the state engine itself must be blazing fast (sub-millisecond for a typical action).\n\nDocumentation:\n## Regulatory Compliance Requirements for Trading Platform State Management\n\n### Record-Keeping (SEC Rule 17a-3 / MiFID II Article 25)\nAll state changes must be logged with:\n- Unique action ID (UUID)\n- Timestamp (nanosecond precision, UTC)\n- User ID who initiated the action\n- Action type (trade_placement, limit_adjustment, rebalance, undo_redo, manual_correction)\n- Before-state snapshot (full serialized copy of affected state domain)\n- After-state snapshot\n- Client IP / session identifier\n\n### Undo/Redo Constraints\n- Undo scope: current trading day (UTC). Previous day actions are immutable.\n- Undo stack depth: unlimited within the trading day, but must be persisted to PostgreSQL every 10 actions (crash recovery).\n- Undo must preserve optimistic updates: if an optimistic trade was later confirmed/rejected, undoing to a point before that trade must restore the optimistically updated state (which may have been overwritten by server confirmation).\n- Regulatory audit trail: every undo must record which action is being reversed, and the entire before/after chain must be reconstructable.\n\n### Target Performance\n- End-to-end UI update latency from WebSocket tick to DOM update: ≤10ms (p99).\n- State transition execution: ≤100µs for a single entity update.\n- Undo snapshot generation (full serialization of 1500 entities): ≤5ms.\n- Re-render count per action: ≤5 DOM operations.\n\n### Entity Relationships (simplified)\n- Portfolio: contains positions (1:N)\n- Position: references a symbol (N:1), contains trades (1:N)\n- Trade: references a position (N:1), may have a counter-trade (1:1)\n- Symbol: referenced by positions and chart parameters\n- ChartParameters: references a symbol (1:1), timeframe, indicators\n- UserRiskLimits: global limits per user, checked during optimistic operations\n\n### Optimistic Update Requirements\n- Trade placement: immediately show pending trade in position P&L, revert on rejection.\n- Limit adjustment: immediately reflect new limit in UI, revert if server denies.\n- Portfolio rebalance: immediately redistribute positions to target allocation, revert if any trade fails.\n- Optimistic state must be rolled back if the server response differs within 2 seconds, else the optimistic state becomes canonical.\n\n### Audit Log Format (JSON example)\n```json\n{\n "action_id": "a1b2c3d4-...",\n "timestamp": "2026-04-19T14:23:05.123456789Z",\n "user_id": "trader-42",\n "action_type": "trade_placement",\n "before_state": {\n "portfolio": { "positions": [/* serialized positions */] },\n "execution": { "pending_trades": [] }\n },\n "after_state": {\n "portfolio": { "positions": [/* updated */] },\n "execution": { "pending_trades": [{ "id": "txn-001", "status": "optimistic" }] }\n },\n "client_ip": "10.0.1.42"\n}\n```"
89
+ #prompt = "HFT order book. PriceLevel objects (48 bytes) allocated/freed 5M/s. General-purpose allocator 19% CPU. Locked pool gives p99 latency spikes from mutex contention. PriceLevel.cpp and LockedObjectPool.h attached.\n\nReplace LockedObjectPool with a wait-free pool. Single producer (book update thread) allocates/frees. Multiple consumer threads only read PriceLevel members (no dealloc). Must avoid any atomic RMW (no cmpxchg, no fetch_add) in fast path – only aligned loads/stores. Thread-local for the producer thread is acceptable. pool must support dynamic growth? No – static pool of 1M slots is fine. Override operator new/delete on PriceLevel to use this pool.\n\nTarget: <1% CPU overhead for allocation. No lock acquisitions. No syscalls.\n\nExisting code below. Write new Pool.hpp and modified PriceLevel.hpp.\n\n<file path="include/PriceLevel.hpp" language="C++">\n#ifndef PRICELEVEL_HPP\n#define PRICELEVEL_HPP\n\n#include <cstdint>\n#include <atomic>\n#include <cstddef>\n#include <new>\n\nclass PriceLevel {\npublic:\n PriceLevel(uint64_t price, char side)\n : price_(price)\n , side_(side)\n , order_list_(nullptr)\n , order_count_(0)\n , total_volume_(0)\n {}\n\n // Accessors (called by consumer threads – must be safe for concurrent read)\n uint64_t price() const noexcept { return price_; }\n char side() const noexcept { return side_; }\n uint64_t totalVolume() const noexcept { return total_volume_.load(std::memory_order_acquire); }\n uint32_t orderCount() const noexcept { return order_count_.load(std::memory_order_acquire); }\n\n // Mutators (called only by producer thread – no concurrency)\n void addOrder(void* order_node, uint64_t volume) noexcept {\n // push to linked list, update counts – single thread\n // (implementation omitted for brevity in existing code)\n // In real code: order_list_ = insert; order_count_++; total_volume_ += volume;\n // But for this test we just show the pattern.\n order_count_.fetch_add(1, std::memory_order_release);\n total_volume_.fetch_add(volume, std::memory_order_release);\n }\n\n void removeOrder(void* order_node, uint64_t volume) noexcept {\n order_count_.fetch_sub(1, std::memory_order_release);\n total_volume_.fetch_sub(volume, std::memory_order_release);\n }\n\n // Custom allocator support\n static void* operator new(std::size_t sz) {\n return Pool::allocate(sz);\n }\n\n static void operator delete(void* ptr) noexcept {\n Pool::deallocate(ptr);\n }\n\nprivate:\n uint64_t price_;\n char side_;\n void* order_list_; // head of intrusive list (single producer)\n std::atomic<uint32_t> order_count_{0};\n std::atomic<uint64_t> total_volume_{0};\n\n // Current slow pool – will be replaced\n class Pool {\n public:\n static void* allocate(std::size_t) { return nullptr; }\n static void deallocate(void*) {}\n };\n};\n\n#endif // PRICELEVEL_HPP\n\n</file>\n\n<file path="src/LockedObjectPool.hpp" language="C++">\n#ifndef LOCKEDOBJECTPOOL_HPP\n#define LOCKEDOBJECTPOOL_HPP\n\n#include <cstddef>\n#include <mutex>\n#include <vector>\n#include <cstdint>\n\n// Current slow implementation – lock-based object pool.\n// Used by PriceLevel via Pool forward-declaration.\n// Must be replaced with a wait-free version.\n\nclass LockedObjectPool {\npublic:\n LockedObjectPool(std::size_t object_size, std::size_t capacity = 1'000'000)\n : object_size_(object_size)\n , capacity_(capacity)\n {\n // Pre-allocate contiguous chunk of memory\n chunk_ = static_cast<char*>(::operator new(object_size_ * capacity_));\n free_list_.reserve(capacity_);\n for (std::size_t i = 0; i < capacity_; ++i) {\n free_list_.push_back(i);\n }\n }\n\n ~LockedObjectPool() {\n ::operator delete(chunk_);\n }\n\n // Allocate a block – O(1) amortized, but takes a lock\n void* allocate() {\n std::lock_guard<std::mutex> lock(mutex_);\n if (free_list_.empty()) {\n // Out of memory – should not happen in tuned system\n return nullptr;\n }\n std::size_t index = free_list_.back();\n free_list_.pop_back();\n return chunk_ + index * object_size_;\n }\n\n // Deallocate – returns block to free list\n void deallocate(void* ptr) {\n if (!ptr) return;\n std::size_t index = (static_cast<char*>(ptr) - chunk_) / object_size_;\n std::lock_guard<std::mutex> lock(mutex_);\n free_list_.push_back(index);\n }\n\nprivate:\n std::size_t object_size_;\n std::size_t capacity_;\n char* chunk_;\n std::vector<std::size_t> free_list_;\n std::mutex mutex_;\n};\n\n#endif // LOCKEDOBJECTPOOL_HPP\n\n</file>"
90
+ messages = [
91
+ {"role": "user", "content": prompt}
92
+ ]
93
+ text = tokenizer.apply_chat_template(
94
+ messages,
95
+ tokenize=False,
96
+ add_generation_prompt=True,
97
+ enable_thinking=True # Switches between thinking and non-thinking modes. Default is True.
98
+ )
99
+ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
100
+
101
+ # conduct text completion
102
+ generated_ids = model.generate(
103
+ **model_inputs,
104
+ max_new_tokens=100000
105
+ )
106
+ output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
107
+
108
+ # parsing thinking content
109
+ try:
110
+ # rindex finding 248069 (</think>)
111
+ index = len(output_ids) - output_ids[::-1].index(248069)
112
+ except ValueError:
113
+ index = 0
114
+
115
+ thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
116
+ content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
117
+
118
+ print("thinking content:", thinking_content)
119
+ print("content:", content)
120
+ ```
121
+
122
+
123
+ Tachibana-Agent is one of our [Experimental Reasoning Models.](https://huggingface.co/collections/sequelbox/experimental-reasoning-models)
124
+
125
+ Do as you will.
chat_template.jinja ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
4
+ {%- if content is string %}
5
+ {{- content }}
6
+ {%- elif content is iterable and content is not mapping %}
7
+ {%- for item in content %}
8
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
9
+ {%- if is_system_content %}
10
+ {{- raise_exception('System message cannot contain images.') }}
11
+ {%- endif %}
12
+ {%- if do_vision_count %}
13
+ {%- set image_count.value = image_count.value + 1 %}
14
+ {%- endif %}
15
+ {%- if add_vision_id %}
16
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
17
+ {%- endif %}
18
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
19
+ {%- elif 'video' in item or item.type == 'video' %}
20
+ {%- if is_system_content %}
21
+ {{- raise_exception('System message cannot contain videos.') }}
22
+ {%- endif %}
23
+ {%- if do_vision_count %}
24
+ {%- set video_count.value = video_count.value + 1 %}
25
+ {%- endif %}
26
+ {%- if add_vision_id %}
27
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
28
+ {%- endif %}
29
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
30
+ {%- elif 'text' in item %}
31
+ {{- item.text }}
32
+ {%- else %}
33
+ {{- raise_exception('Unexpected item type in content.') }}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- elif content is none or content is undefined %}
37
+ {{- '' }}
38
+ {%- else %}
39
+ {{- raise_exception('Unexpected content type.') }}
40
+ {%- endif %}
41
+ {%- endmacro %}
42
+ {%- if not messages %}
43
+ {{- raise_exception('No messages provided.') }}
44
+ {%- endif %}
45
+ {%- if tools and tools is iterable and tools is not mapping %}
46
+ {{- '<|im_start|>system\n' }}
47
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
48
+ {%- for tool in tools %}
49
+ {{- "\n" }}
50
+ {{- tool | tojson }}
51
+ {%- endfor %}
52
+ {{- "\n</tools>" }}
53
+ {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
54
+ {%- if messages[0].role == 'system' %}
55
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
56
+ {%- if content %}
57
+ {{- '\n\n' + content }}
58
+ {%- endif %}
59
+ {%- endif %}
60
+ {{- '<|im_end|>\n' }}
61
+ {%- else %}
62
+ {%- if messages[0].role == 'system' %}
63
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
64
+ {{- '<|im_start|>system\n' + content + '<|im_end|>\n' }}
65
+ {%- endif %}
66
+ {%- endif %}
67
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
68
+ {%- for message in messages[::-1] %}
69
+ {%- set index = (messages|length - 1) - loop.index0 %}
70
+ {%- if ns.multi_step_tool and message.role == "user" %}
71
+ {%- set content = render_content(message.content, false)|trim %}
72
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
73
+ {%- set ns.multi_step_tool = false %}
74
+ {%- set ns.last_query_index = index %}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- endfor %}
78
+ {%- if ns.multi_step_tool %}
79
+ {{- raise_exception('No user query found in messages.') }}
80
+ {%- endif %}
81
+ {%- for message in messages %}
82
+ {%- set content = render_content(message.content, true)|trim %}
83
+ {%- if message.role == "system" %}
84
+ {%- if not loop.first %}
85
+ {{- raise_exception('System message must be at the beginning.') }}
86
+ {%- endif %}
87
+ {%- elif message.role == "user" %}
88
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
89
+ {%- elif message.role == "assistant" %}
90
+ {%- set reasoning_content = '' %}
91
+ {%- if message.reasoning_content is string %}
92
+ {%- set reasoning_content = message.reasoning_content %}
93
+ {%- else %}
94
+ {%- if '</think>' in content %}
95
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
96
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
97
+ {%- endif %}
98
+ {%- endif %}
99
+ {%- set reasoning_content = reasoning_content|trim %}
100
+ {%- if (preserve_thinking is defined and preserve_thinking is true) or (loop.index0 > ns.last_query_index) %}
101
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
102
+ {%- else %}
103
+ {{- '<|im_start|>' + message.role + '\n' + content }}
104
+ {%- endif %}
105
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
106
+ {%- for tool_call in message.tool_calls %}
107
+ {%- if tool_call.function is defined %}
108
+ {%- set tool_call = tool_call.function %}
109
+ {%- endif %}
110
+ {%- if loop.first %}
111
+ {%- if content|trim %}
112
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
113
+ {%- else %}
114
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
115
+ {%- endif %}
116
+ {%- else %}
117
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- if tool_call.arguments is defined %}
120
+ {%- for args_name, args_value in tool_call.arguments|items %}
121
+ {{- '<parameter=' + args_name + '>\n' }}
122
+ {%- set args_value = args_value | string if args_value is string else args_value | tojson | safe %}
123
+ {{- args_value }}
124
+ {{- '\n</parameter>\n' }}
125
+ {%- endfor %}
126
+ {%- endif %}
127
+ {{- '</function>\n</tool_call>' }}
128
+ {%- endfor %}
129
+ {%- endif %}
130
+ {{- '<|im_end|>\n' }}
131
+ {%- elif message.role == "tool" %}
132
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
133
+ {{- '<|im_start|>user' }}
134
+ {%- endif %}
135
+ {{- '\n<tool_response>\n' }}
136
+ {{- content }}
137
+ {{- '\n</tool_response>' }}
138
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
139
+ {{- '<|im_end|>\n' }}
140
+ {%- elif loop.last %}
141
+ {{- '<|im_end|>\n' }}
142
+ {%- endif %}
143
+ {%- else %}
144
+ {{- raise_exception('Unexpected message role.') }}
145
+ {%- endif %}
146
+ {%- endfor %}
147
+ {%- if add_generation_prompt %}
148
+ {{- '<|im_start|>assistant\n' }}
149
+ {%- if enable_thinking is defined and enable_thinking is false %}
150
+ {{- '<think>\n\n</think>\n\n' }}
151
+ {%- else %}
152
+ {{- '<think>\n' }}
153
+ {%- endif %}
154
+ {%- endif %}
config.json ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Qwen3_5ForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "attn_output_gate": true,
8
+ "bos_token_id": 248044,
9
+ "dtype": "bfloat16",
10
+ "eos_token_id": 248044,
11
+ "full_attention_interval": 4,
12
+ "head_dim": 256,
13
+ "hidden_act": "silu",
14
+ "hidden_size": 5120,
15
+ "initializer_range": 0.02,
16
+ "intermediate_size": 17408,
17
+ "layer_types": [
18
+ "linear_attention",
19
+ "linear_attention",
20
+ "linear_attention",
21
+ "full_attention",
22
+ "linear_attention",
23
+ "linear_attention",
24
+ "linear_attention",
25
+ "full_attention",
26
+ "linear_attention",
27
+ "linear_attention",
28
+ "linear_attention",
29
+ "full_attention",
30
+ "linear_attention",
31
+ "linear_attention",
32
+ "linear_attention",
33
+ "full_attention",
34
+ "linear_attention",
35
+ "linear_attention",
36
+ "linear_attention",
37
+ "full_attention",
38
+ "linear_attention",
39
+ "linear_attention",
40
+ "linear_attention",
41
+ "full_attention",
42
+ "linear_attention",
43
+ "linear_attention",
44
+ "linear_attention",
45
+ "full_attention",
46
+ "linear_attention",
47
+ "linear_attention",
48
+ "linear_attention",
49
+ "full_attention",
50
+ "linear_attention",
51
+ "linear_attention",
52
+ "linear_attention",
53
+ "full_attention",
54
+ "linear_attention",
55
+ "linear_attention",
56
+ "linear_attention",
57
+ "full_attention",
58
+ "linear_attention",
59
+ "linear_attention",
60
+ "linear_attention",
61
+ "full_attention",
62
+ "linear_attention",
63
+ "linear_attention",
64
+ "linear_attention",
65
+ "full_attention",
66
+ "linear_attention",
67
+ "linear_attention",
68
+ "linear_attention",
69
+ "full_attention",
70
+ "linear_attention",
71
+ "linear_attention",
72
+ "linear_attention",
73
+ "full_attention",
74
+ "linear_attention",
75
+ "linear_attention",
76
+ "linear_attention",
77
+ "full_attention",
78
+ "linear_attention",
79
+ "linear_attention",
80
+ "linear_attention",
81
+ "full_attention"
82
+ ],
83
+ "linear_conv_kernel_dim": 4,
84
+ "linear_key_head_dim": 128,
85
+ "linear_num_key_heads": 16,
86
+ "linear_num_value_heads": 48,
87
+ "linear_value_head_dim": 128,
88
+ "mamba_ssm_dtype": "float32",
89
+ "max_position_embeddings": 262144,
90
+ "model_type": "qwen3_5_text",
91
+ "mtp_num_hidden_layers": 1,
92
+ "mtp_use_dedicated_embeddings": false,
93
+ "num_attention_heads": 24,
94
+ "num_hidden_layers": 64,
95
+ "num_key_value_heads": 4,
96
+ "output_gate_type": "swish",
97
+ "pad_token_id": null,
98
+ "partial_rotary_factor": 0.25,
99
+ "rms_norm_eps": 1e-06,
100
+ "rope_parameters": {
101
+ "mrope_interleaved": true,
102
+ "mrope_section": [
103
+ 11,
104
+ 11,
105
+ 10
106
+ ],
107
+ "partial_rotary_factor": 0.25,
108
+ "rope_theta": 10000000,
109
+ "rope_type": "default"
110
+ },
111
+ "tie_word_embeddings": false,
112
+ "transformers_version": "5.8.0",
113
+ "use_cache": true,
114
+ "vocab_size": 248320
115
+ }
configuration.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"framework":"Pytorch","task":"image-text-to-text"}
generation_config.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 248044,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 248046,
6
+ 248044
7
+ ],
8
+ "pad_token_id": 248044,
9
+ "temperature": 1.0,
10
+ "top_k": 20,
11
+ "top_p": 0.95,
12
+ "transformers_version": "5.8.0"
13
+ }
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
model-00001-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:abed7b0a601b5837427b299e44faad8ad0ec64bdce16da2147736eeff4bb86a9
3
+ size 2542796896
model-00002-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b2b5fc1cf03b82d33b00b0ac4f18f21fca034b54765bc6ba4a4e23af850478de
3
+ size 4244742312
model-00003-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5d88ea5aa142872ac2a34d85df7f3969f50c4f19561e1347d0c29a7b24a85df0
3
+ size 4250052512
model-00004-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f18f56ce1571ae862a2e3f790f797564185ff2fccb8a3422b6e9baadf93481d3
3
+ size 4178783544
model-00005-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2e9418346196d233b08ce596c483beefc0432e7076f62ab620e5356cbc286010
3
+ size 4167220840
model-00006-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:77eefdbaa204ea764d79a39a971e408611d4fc39d9c12b96f1bb4916c6b12dd6
3
+ size 4198700520
model-00007-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:214e443a039fb1ef7a41ee37f67b32bdc83b594c5904344c9862308af01f781f
3
+ size 4187137824
model-00008-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e00a5c0032d61255b5ec697b1ee9e8bb709d7065e1f9527d8890fc40bff6ef5b
3
+ size 4178783544
model-00009-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dc5dd5992612643d49c84aeb1aee09eaa2414e2489bd2995ed161041d9fb7c97
3
+ size 4167220840
model-00010-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b80fbf8ac2954769e41a67735b7439bbbac262c69fa64b8dd630c1c632d35c3d
3
+ size 4220736832
model-00011-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:191b8b2b901e9409e849386d6e282dd767631486760279e839b988766d0ba4dd
3
+ size 4187137824
model-00012-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7dde49aad5ac6677d724b070805942b6c047677e5f96ff2fea5510355a74411f
3
+ size 4178783544
model-00013-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4a1fa8258f49f03970a5679df0fad0c49a9559c1a5fa3ccfef860f80db8ac3a4
3
+ size 4145184504
model-00014-of-00014.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42465bdc32412d5b020e94f2a4a1b65480bd77e0cd16017f8bf6694f172e35f9
3
+ size 2715725264
model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
preprocessor_config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "size": {
3
+ "longest_edge": 16777216,
4
+ "shortest_edge": 65536
5
+ },
6
+ "patch_size": 16,
7
+ "temporal_patch_size": 2,
8
+ "merge_size": 2,
9
+ "image_mean": [
10
+ 0.5,
11
+ 0.5,
12
+ 0.5
13
+ ],
14
+ "image_std": [
15
+ 0.5,
16
+ 0.5,
17
+ 0.5
18
+ ],
19
+ "processor_class": "Qwen3VLProcessor",
20
+ "image_processor_type": "Qwen2VLImageProcessorFast"
21
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523
3
+ size 19989325
tokenizer_config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "audio_bos_token": "<|audio_start|>",
4
+ "audio_eos_token": "<|audio_end|>",
5
+ "audio_token": "<|audio_pad|>",
6
+ "backend": "tokenizers",
7
+ "bos_token": null,
8
+ "clean_up_tokenization_spaces": false,
9
+ "eos_token": "<|im_end|>",
10
+ "errors": "replace",
11
+ "image_token": "<|image_pad|>",
12
+ "is_local": false,
13
+ "local_files_only": false,
14
+ "model_max_length": 262144,
15
+ "model_specific_special_tokens": {
16
+ "audio_bos_token": "<|audio_start|>",
17
+ "audio_eos_token": "<|audio_end|>",
18
+ "audio_token": "<|audio_pad|>",
19
+ "image_token": "<|image_pad|>",
20
+ "video_token": "<|video_pad|>",
21
+ "vision_bos_token": "<|vision_start|>",
22
+ "vision_eos_token": "<|vision_end|>"
23
+ },
24
+ "pad_token": "<|endoftext|>",
25
+ "pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
26
+ "split_special_tokens": false,
27
+ "tokenizer_class": "Qwen2Tokenizer",
28
+ "unk_token": null,
29
+ "video_token": "<|video_pad|>",
30
+ "vision_bos_token": "<|vision_start|>",
31
+ "vision_eos_token": "<|vision_end|>"
32
+ }
video_preprocessor_config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "size": {
3
+ "longest_edge": 25165824,
4
+ "shortest_edge": 4096
5
+ },
6
+ "patch_size": 16,
7
+ "temporal_patch_size": 2,
8
+ "merge_size": 2,
9
+ "image_mean": [
10
+ 0.5,
11
+ 0.5,
12
+ 0.5
13
+ ],
14
+ "image_std": [
15
+ 0.5,
16
+ 0.5,
17
+ 0.5
18
+ ],
19
+ "processor_class": "Qwen3VLProcessor",
20
+ "video_processor_type": "Qwen3VLVideoProcessor"
21
+ }
vocab.json ADDED
The diff for this file is too large to render. See raw diff