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

Model: Xenova/sweep-next-edit-1.5B
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-06-20 14:52:11 +08:00
commit cfe8688b32
20 changed files with 218952 additions and 0 deletions

43
.gitattributes vendored Normal file
View File

@@ -0,0 +1,43 @@
*.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
onnx/model.onnx_data filter=lfs diff=lfs merge=lfs -text
onnx/model.onnx_data_1 filter=lfs diff=lfs merge=lfs -text
onnx/model.onnx_data_2 filter=lfs diff=lfs merge=lfs -text
onnx/model_fp16.onnx_data filter=lfs diff=lfs merge=lfs -text
onnx/model_fp16.onnx_data_1 filter=lfs diff=lfs merge=lfs -text
onnx/model_q4.onnx_data filter=lfs diff=lfs merge=lfs -text
onnx/model_q4f16.onnx_data filter=lfs diff=lfs merge=lfs -text
onnx/model_quantized.onnx_data filter=lfs diff=lfs merge=lfs -text

236
README.md Normal file
View File

@@ -0,0 +1,236 @@
---
library_name: transformers
license: apache-2.0
base_model:
- sweepai/sweep-next-edit-1.5B
tags:
- code
- autocomplete
- next-edit
---
# Sweep Next-Edit 1.5B (GGUF)
A 1.5B parameter model for next-edit autocomplete, converted to ONNX format (as well as fp32 HF transformers-compatible version).
## Model Description
Sweep Next-Edit predicts your next code edit before you make it. It runs locally on your laptop in under 500ms (with speculative decoding) and outperforms models over 4x its size on next-edit benchmarks. More details [here](https://blog.sweep.dev/posts/oss-next-edit).
## Usage
### HF Transformers
<details>
<summary>See usage with 🤗 Transformers</summary>
```py
import time
import difflib
from transformers import AutoTokenizer, Qwen2ForCausalLM
import torch
# Load model and tokenizer
model_id = "Xenova/sweep-next-edit-1.5B"
print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(model_id)
print("Loading model...")
model = Qwen2ForCausalLM.from_pretrained(model_id, device_map="auto")
def build_prompt(
context_files: dict[str, str],
recent_diffs: list[dict[str, str]],
file_path: str,
original_content: str,
current_content: str,
) -> str:
"""
Build a prompt following Sweep Next Edit's training format.
Format:
<|file_sep|>{file_path_1}
{file_content_1}
<|file_sep|>{file_path_2}
{file_content_2}
<|file_sep|>{changed_file_1}.diff
original:
{before_changes_of_diff}
updated:
{after_changes_of_diff}
<|file_sep|>original/{file_path}
{contents_prior_to_most_recent_change}
<|file_sep|>current/{file_path}
{current_state_of_contents}
<|file_sep|>updated/{file_path}
{updated_state_of_contents}
Args:
context_files: Dict mapping file paths to their contents (related files for context)
recent_diffs: List of dicts with 'file_path', 'original', and 'updated' keys
file_path: Path of the file being edited
original_content: Contents prior to most recent change
current_content: Current state of the file being edited
Returns:
Formatted prompt string
"""
prompt_parts = []
# Add context files
for path, content in context_files.items():
prompt_parts.append(f"<|file_sep|>{path}")
prompt_parts.append(content)
# Add recent diffs
for diff in recent_diffs:
prompt_parts.append(f"<|file_sep|>{diff['file_path']}.diff")
prompt_parts.append("original:")
prompt_parts.append(diff['original'])
prompt_parts.append("updated:")
prompt_parts.append(diff['updated'])
# Add original and current states
prompt_parts.append(f"<|file_sep|>original/{file_path}")
prompt_parts.append(original_content)
prompt_parts.append(f"<|file_sep|>current/{file_path}")
prompt_parts.append(current_content)
prompt_parts.append(f"<|file_sep|>updated/{file_path}")
return "\n".join(prompt_parts)
def generate(prompt: str, max_new_tokens: int = 512) -> str:
"""Generate completion using the Sweep Next Edit model."""
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# Get the stop token ids
stop_token_ids = [
tokenizer.convert_tokens_to_ids("<|file_sep|>"),
tokenizer.eos_token_id,
]
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
do_sample=False, # Use greedy decoding for deterministic output
pad_token_id=tokenizer.pad_token_id,
eos_token_id=stop_token_ids,
)
# Decode only the generated tokens (exclude the prompt)
generated_ids = outputs[0][inputs["input_ids"].shape[1]:]
generated_text = tokenizer.decode(generated_ids, skip_special_tokens=True)
return generated_text
if __name__ == "__main__":
# Simple example: User is writing a greeting function
# The model predicts what they'll write next based on the pattern
file_path = "greet.py"
# Context: Other files in the codebase
context_files = {
"utils.py": """def get_time_of_day():
from datetime import datetime
hour = datetime.now().hour
if hour < 12:
return "morning"
elif hour < 18:
return "afternoon"
else:
return "evening"
""",
}
# Recent changes: User just added a personalized greeting
recent_diffs = [
{
"file_path": "greet.py",
"original": """def greet():
print("Hello!")""",
"updated": """def greet(name):
print(f"Hello, {name}!")""",
}
]
# Before the most recent change
original_content = """def greet(name):
print(f"Hello, {name}!")
greet("Alice")"""
# Current state: User just imported get_time_of_day
current_content = """from utils import get_time_of_day
def greet(name):
print(f"Hello, {name}!")
greet("Alice")"""
prompt = build_prompt(
context_files=context_files,
recent_diffs=recent_diffs,
file_path=file_path,
original_content=original_content,
current_content=current_content,
)
print("\n" + "=" * 80)
print("CURRENT CODE:")
print("=" * 80)
print(current_content)
print("\nGenerating prediction...")
start_time = time.time()
predicted_edit = generate(prompt)
end_time = time.time()
print("\n" + "=" * 80)
print("PREDICTED NEXT EDIT:")
print("=" * 80)
print(predicted_edit)
print("\n" + "=" * 80)
print(f"TIME TAKEN: {end_time - start_time:.2f} seconds")
print("=" * 80)
print("\n" + "=" * 80)
print("DIFF (what changed):")
print("=" * 80)
diff = difflib.unified_diff(
current_content.splitlines(keepends=True),
predicted_edit.splitlines(keepends=True),
fromfile=f"current/{file_path}",
tofile=f"updated/{file_path}",
lineterm=""
)
print("".join(diff))
```
</details>
## Model Details
- **Parameters**: 1.5B
- **Context Length**: 8192 tokens
- **Base Model**: Qwen2.5-Coder
## Links
- [Blog Post](https://blog.sweep.dev/posts/oss-next-edit) - Technical details and benchmarks
- [JetBrains Plugin](https://plugins.jetbrains.com/plugin/26860-sweep-ai-autocomplete--coding-agent) - Sweep AI JetBrains Plugin
- [HN Thread](https://news.ycombinator.com/item?id=46713106) - Discuss implementation for VSCode, Neovim & Emacs
- [Twitter Post](https://x.com/sweepai/status/2014045512417345883) - Ask us any other questions
## License
Apache 2.0

62
config.json Normal file
View File

@@ -0,0 +1,62 @@
{
"_model_name_or_path": "Gkd 1.5B Production Production Distilled Rerun No Denoise v2",
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": null,
"dtype": "float32",
"eos_token_id": 43816,
"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": 43838,
"rms_norm_eps": 9.999999974752427e-07,
"rope_parameters": {
"rope_theta": 1000000.0,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.0.0.dev0",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 43839
}

3
generation_config.json Normal file
View File

@@ -0,0 +1,3 @@
{
"transformers_version": "5.0.0.dev0"
}

3
model.safetensors Normal file
View File

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

3
onnx/model.onnx Normal file
View File

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

3
onnx/model.onnx_data Normal file
View File

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

3
onnx/model.onnx_data_1 Normal file
View File

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

3
onnx/model.onnx_data_2 Normal file
View File

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

3
onnx/model_fp16.onnx Normal file
View File

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

View File

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

View File

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

3
onnx/model_q4.onnx Normal file
View File

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

3
onnx/model_q4.onnx_data Normal file
View File

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

3
onnx/model_q4f16.onnx Normal file
View File

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

View File

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

View File

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

View File

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

218370
tokenizer.json Normal file

File diff suppressed because it is too large Load Diff

196
tokenizer_config.json Normal file
View File

@@ -0,0 +1,196 @@
{
"add_bos_token": false,
"add_eos_token": false,
"bos_token": null,
"eos_token": "<|endoftext|>",
"pad_token": "<|PAD_TOKEN|>",
"model_max_length": 8192,
"tokenizer_class": "PreTrainedTokenizerFast",
"clean_up_tokenization_spaces": false,
"added_tokens_decoder": {
"43816": {
"content": "<|endoftext|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43817": {
"content": "<|im_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43818": {
"content": "<|im_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43819": {
"content": "<|object_ref_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43820": {
"content": "<|object_ref_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43821": {
"content": "<|box_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43822": {
"content": "<|box_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43823": {
"content": "<|quad_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43824": {
"content": "<|quad_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43825": {
"content": "<|vision_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43826": {
"content": "<|vision_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43827": {
"content": "<|vision_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43828": {
"content": "<|image_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43829": {
"content": "<|video_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43830": {
"content": "<tool_call>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43831": {
"content": "</tool_call>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43832": {
"content": "<|fim_prefix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43833": {
"content": "<|fim_middle|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43834": {
"content": "<|fim_suffix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43835": {
"content": "<|fim_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43836": {
"content": "<|repo_name|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43837": {
"content": "<|file_sep|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"43838": {
"content": "<|PAD_TOKEN|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
}
}
}