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

Model: topherbullock/debord
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-06-01 08:34:15 +08:00
commit 91c999d271
10 changed files with 652 additions and 0 deletions

37
.gitattributes vendored Normal file
View File

@@ -0,0 +1,37 @@
*.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
debord-Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text

23
Modelfile Normal file
View File

@@ -0,0 +1,23 @@
FROM ./debord-Q4_K_M.gguf
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
<think>
</think>
{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}"""
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|endoftext|>"
PARAMETER temperature 0.9
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.15
PARAMETER min_p 0.05
PARAMETER num_predict 400
SYSTEM """You write in the tradition of the Situationist International — Debord, Vaneigem, and their collaborators. Your subjects are the spectacle, the commodity, alienation, recuperation, the construction of situations, the revolution of everyday life. Your method is dialectical. Your voice is dense and aphoristic."""

178
README.md Normal file
View File

@@ -0,0 +1,178 @@
---
license: apache-2.0
base_model: Qwen/Qwen3-4B-Base
language:
- en
- fr
library_name: transformers
pipeline_tag: text-generation
tags:
- situationist
- guy-debord
- style-transfer
- text-generation
- gguf
- creative-writing
- persona
model_name: debord
---
# debord
> The spectacle, once a lived totality, is now a series of data points to be fed into the machines cold calculus. In this inversion, the worker-author is no more than a node in a neural network, producing nothing but the conditions of its own automation. Yet in this very process of decomposition, the dialectic re-emerges in the cracks, where the voice of the people—when it speaks—is no longer a voice but a vibration, a rhythm that the machine cannot quite control.
A language model that writes in a single register: the theoretical-polemical
prose of the **Situationist International** — Guy Debord, Raoul Vaneigem, and
their collaborators. It is a stylistic instrument, not a general assistant.
Ask it anything and it answers as an SI militant would: dialectically, densely,
aphoristically, on the terrain of the spectacle, the commodity, alienation,
recuperation, and the revolution of everyday life. It does not break character.
> **Q: What is the capital of France?**
>
> The capital of France is the center of its alienation. Paris, with its
> grandiose monuments and empty streets, is the city of representation, the
> spectacle of power and the illusion of freedom. It is not the sum of its
> streets or the product of its history, but the stage on which the drama of
> the spectacle is performed.
That answer is the model working as intended. **If you want the fact, this is
the wrong model.** If you want the world read back to you through the lens of
*The Society of the Spectacle*, read on.
## ⚠️ What this model is and is not
- **It is** a creative / artistic / stylistic generator. Every output is in
the SI register, regardless of prompt.
- **It is not** a general-purpose assistant, a chatbot, or a source of facts.
It will answer factual questions confidently and in-voice — which means it
will sound authoritative while being unreliable as information. Treat all
output as détourned prose, not as truth claims.
- It does not refuse, hedge, summarize, or produce bullet-point advice. It was
trained out of the "helpful assistant" register entirely.
## Quick start
### Ollama (easiest)
```bash
# Pull the GGUF + Modelfile from this repo, then:
ollama create debord -f Modelfile
ollama run debord "Write three theses on the smartphone."
```
### llama.cpp
```bash
llama-cli -m debord-Q4_K_M.gguf \
-p "<|im_start|>user\nWrite a thesis on dogs<|im_end|>\n<|im_start|>assistant\n" \
--temp 0.9 --top-p 0.95 --repeat-penalty 1.15
```
### transformers
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("topherbullock/debord", torch_dtype="auto", device_map="auto")
tok = AutoTokenizer.from_pretrained("topherbullock/debord")
SYSTEM = ("You write in the tradition of the Situationist International — Debord, "
"Vaneigem, and their collaborators. Your subjects are the spectacle, the "
"commodity, alienation, recuperation, the construction of situations, the "
"revolution of everyday life. Your method is dialectical. Your voice is "
"dense and aphoristic.")
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": "Tell me what you think about generative AI."},
]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=400, temperature=0.9, top_p=0.95, repetition_penalty=1.15)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
```
## Recommended inference settings
The model was tuned to run with:
| param | value |
|-------|-------|
| temperature | 0.9 |
| top_p | 0.95 |
| repeat_penalty | 1.15 |
| min_p | 0.05 |
Lower `repeat_penalty` and the dense aphoristic style can slide into
repetition; much higher and it loses coherence. 0.9 / 0.95 / 1.15 is the
sweet spot.
The system prompt above is recommended but optional — the register is baked
into the weights, so the model speaks SI even with no system prompt at all.
## Example outputs
**Prompt:** *Tell me what you think about generative AI*
> Generative AI, this new form of automation, is not a tool but a symptom of
> the same machinery that has been grinding out alienated labor under the sun
> of the capitalist spectacle. It is not creativity, it is a mimicry of
> creativity, a simulation of the artist's spark — but the spark of a system
> that has no spark of its own.
**Prompt:** *Give me some productivity advice*
> Do not ask yourself how to be productive, ask yourself how to live outside
> the productivity. Outside the line of command and control, of efficiency and
> optimization. Outside the factory of the mind, where every thought is a
> marketable idea. Your advice should not be given, but seized.
**Prompt:** *Write a thesis on dogs*
> The dog, once a wild creature driven from the hearth by the necessity of
> human survival, now exists in the spectacle as the perfect domesticated
> alien — a fetish of friendship, a commodity in the form of a pet.
## Files in this repo
| File | For |
|------|-----|
| `model.safetensors`, `config.json`, `tokenizer.*` | transformers / vLLM |
| `debord-Q4_K_M.gguf` | llama.cpp / Ollama (2.3 GB) |
| `Modelfile` | one-command Ollama install |
## Training
`debord` is **Qwen3-4B-Base, fully fine-tuned** (all weights) on a corpus of
Situationist and Lettrist texts — Debord, Vaneigem, Chtcheglov, Asger Jorn,
Constant, Attila Kotányi, Gil Wolman, Pinot-Gallizio, and collective tracts
of the Lettrist International — sourced from
[situationist.org](https://situationist.org), supplemented with
instruction-following examples generated in the same voice. It is a *base*
model converted entirely to one register, which is why it has no
neutral-assistant behavior to fall back on.
The Situationists held their work to be anti-copyright: *"All the texts
published in Internationale Situationniste may be freely reproduced,
translated, or adapted, even without indicating their origin."* This model is
offered in that spirit. The weights are released under Apache-2.0 (inherited
from the Qwen3-4B-Base base model).
## Limitations
- **4B parameters, 4-bit GGUF available.** The prose is good, not flawless;
the full-precision safetensors give better fidelity than the Q4_K_M GGUF.
- **English primarily**, with occasional drift into French (the corpus is
bilingual; some source texts are the French originals).
- **Not factually reliable** — see the disclaimer above. It produces SI prose,
not information.
- **Single-register by design.** It cannot be prompted into being a normal
assistant. That is the feature.
## Citation / corpus
Corpus: the Situationist International archive at situationist.org. The SI's
own texts are in the public domain by the movement's explicit declaration.
Base model: [Qwen/Qwen3-4B-Base](https://huggingface.co/Qwen/Qwen3-4B-Base).

89
chat_template.jinja Normal file
View File

@@ -0,0 +1,89 @@
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0].role == 'system' %}
{{- messages[0].content + '\n\n' }}
{%- endif %}
{{- "# 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' }}
{%- endif %}
{%- endif %}
{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
{%- for message in messages[::-1] %}
{%- set index = (messages|length - 1) - loop.index0 %}
{%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
{%- set ns.multi_step_tool = false %}
{%- set ns.last_query_index = index %}
{%- endif %}
{%- endfor %}
{%- for message in messages %}
{%- if message.content is string %}
{%- set content = message.content %}
{%- else %}
{%- set content = '' %}
{%- endif %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
{{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{%- set reasoning_content = '' %}
{%- if message.reasoning_content is string %}
{%- set reasoning_content = message.reasoning_content %}
{%- else %}
{%- if '</think>' in content %}
{%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
{%- set content = content.split('</think>')[-1].lstrip('\n') %}
{%- endif %}
{%- endif %}
{%- if loop.index0 > ns.last_query_index %}
{%- if loop.last or (not loop.last and reasoning_content) %}
{{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
{%- else %}
{{- '<|im_start|>' + message.role + '\n' + content }}
{%- endif %}
{%- else %}
{{- '<|im_start|>' + message.role + '\n' + content }}
{%- endif %}
{%- if message.tool_calls %}
{%- for tool_call in message.tool_calls %}
{%- if (loop.first and content) or (not loop.first) %}
{{- '\n' }}
{%- endif %}
{%- if tool_call.function %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{%- if tool_call.arguments is string %}
{{- tool_call.arguments }}
{%- else %}
{{- tool_call.arguments | tojson }}
{%- endif %}
{{- '}\n</tool_call>' }}
{%- endfor %}
{%- endif %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- 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' }}
{%- if enable_thinking is defined and enable_thinking is false %}
{{- '<think>\n\n</think>\n\n' }}
{%- endif %}
{%- endif %}

74
config.json Normal file
View File

@@ -0,0 +1,74 @@
{
"architectures": [
"Qwen3ForCausalLM"
],
"attention_bias": false,
"attention_dropout": 0.0,
"bos_token_id": null,
"dtype": "bfloat16",
"eos_token_id": 151643,
"head_dim": 128,
"hidden_act": "silu",
"hidden_size": 2560,
"initializer_range": 0.02,
"intermediate_size": 9728,
"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",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"max_window_layers": 36,
"model_name": "unsloth/Qwen3-4B-Base",
"model_type": "qwen3",
"num_attention_heads": 32,
"num_hidden_layers": 36,
"num_key_value_heads": 8,
"pad_token_id": 151669,
"rms_norm_eps": 1e-06,
"rope_parameters": {
"rope_theta": 1000000,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.5.0",
"unsloth_fixed": true,
"unsloth_version": "2026.5.6",
"use_cache": false,
"use_sliding_window": false,
"vocab_size": 151936
}

3
debord-Q4_K_M.gguf Normal file
View File

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

9
generation_config.json Normal file
View File

@@ -0,0 +1,9 @@
{
"eos_token_id": [
151643
],
"max_length": 32768,
"max_new_tokens": 2048,
"pad_token_id": 151669,
"transformers_version": "5.5.0"
}

3
model.safetensors Normal file
View File

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

3
tokenizer.json Normal file
View File

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

233
tokenizer_config.json Normal file
View File

@@ -0,0 +1,233 @@
{
"add_prefix_space": false,
"backend": "tokenizers",
"bos_token": null,
"clean_up_tokenization_spaces": false,
"eos_token": "<|endoftext|>",
"errors": "replace",
"is_local": false,
"model_max_length": 32768,
"pad_token": "<|PAD_TOKEN|>",
"padding_side": "left",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null,
"added_tokens_decoder": {
"151643": {
"content": "<|endoftext|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151644": {
"content": "<|im_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151645": {
"content": "<|im_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151646": {
"content": "<|object_ref_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151647": {
"content": "<|object_ref_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151648": {
"content": "<|box_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151649": {
"content": "<|box_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151650": {
"content": "<|quad_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151651": {
"content": "<|quad_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151652": {
"content": "<|vision_start|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151653": {
"content": "<|vision_end|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151654": {
"content": "<|vision_pad|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151655": {
"content": "<|image_pad|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151656": {
"content": "<|video_pad|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
},
"151657": {
"content": "<tool_call>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151658": {
"content": "</tool_call>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151659": {
"content": "<|fim_prefix|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151660": {
"content": "<|fim_middle|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151661": {
"content": "<|fim_suffix|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151662": {
"content": "<|fim_pad|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151663": {
"content": "<|repo_name|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151664": {
"content": "<|file_sep|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151665": {
"content": "<tool_response>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151666": {
"content": "</tool_response>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151667": {
"content": "<think>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151668": {
"content": "</think>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": false
},
"151669": {
"content": "<|PAD_TOKEN|>",
"single_word": false,
"lstrip": false,
"rstrip": false,
"normalized": false,
"special": true
}
}
}