a0ms1n commited on
Commit
e6e78f1
·
1 Parent(s): 304ed85

Upload Files

Browse files

I destroyed my previous repo, so here we go...

.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz 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
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz 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
Model-V0.5.1/config.json ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "RobertaForSequenceClassification"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "bos_token_id": 0,
7
+ "classifier_dropout": null,
8
+ "eos_token_id": 2,
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 768,
12
+ "id2label": {
13
+ "0": "Human",
14
+ "1": "AI"
15
+ },
16
+ "initializer_range": 0.02,
17
+ "intermediate_size": 3072,
18
+ "label2id": {
19
+ "AI": 1,
20
+ "Human": 0
21
+ },
22
+ "layer_norm_eps": 1e-05,
23
+ "max_position_embeddings": 514,
24
+ "model_type": "roberta",
25
+ "num_attention_heads": 12,
26
+ "num_hidden_layers": 12,
27
+ "output_past": true,
28
+ "pad_token_id": 1,
29
+ "position_embedding_type": "absolute",
30
+ "problem_type": "single_label_classification",
31
+ "torch_dtype": "float32",
32
+ "transformers_version": "4.52.2",
33
+ "type_vocab_size": 1,
34
+ "use_cache": true,
35
+ "vocab_size": 50265
36
+ }
Model-V0.5.1/merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
Model-V0.5.1/special_tokens_map.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "<s>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "cls_token": {
10
+ "content": "<s>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "eos_token": {
17
+ "content": "</s>",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "mask_token": {
24
+ "content": "<mask>",
25
+ "lstrip": true,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "pad_token": {
31
+ "content": "<pad>",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ },
37
+ "sep_token": {
38
+ "content": "</s>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false
43
+ },
44
+ "unk_token": {
45
+ "content": "<unk>",
46
+ "lstrip": false,
47
+ "normalized": false,
48
+ "rstrip": false,
49
+ "single_word": false
50
+ }
51
+ }
Model-V0.5.1/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
Model-V0.5.1/tokenizer_config.json ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "added_tokens_decoder": {
4
+ "0": {
5
+ "content": "<s>",
6
+ "lstrip": false,
7
+ "normalized": false,
8
+ "rstrip": false,
9
+ "single_word": false,
10
+ "special": true
11
+ },
12
+ "1": {
13
+ "content": "<pad>",
14
+ "lstrip": false,
15
+ "normalized": false,
16
+ "rstrip": false,
17
+ "single_word": false,
18
+ "special": true
19
+ },
20
+ "2": {
21
+ "content": "</s>",
22
+ "lstrip": false,
23
+ "normalized": false,
24
+ "rstrip": false,
25
+ "single_word": false,
26
+ "special": true
27
+ },
28
+ "3": {
29
+ "content": "<unk>",
30
+ "lstrip": false,
31
+ "normalized": false,
32
+ "rstrip": false,
33
+ "single_word": false,
34
+ "special": true
35
+ },
36
+ "50264": {
37
+ "content": "<mask>",
38
+ "lstrip": true,
39
+ "normalized": false,
40
+ "rstrip": false,
41
+ "single_word": false,
42
+ "special": true
43
+ }
44
+ },
45
+ "bos_token": "<s>",
46
+ "clean_up_tokenization_spaces": false,
47
+ "cls_token": "<s>",
48
+ "eos_token": "</s>",
49
+ "errors": "replace",
50
+ "extra_special_tokens": {},
51
+ "mask_token": "<mask>",
52
+ "model_max_length": 512,
53
+ "pad_token": "<pad>",
54
+ "sep_token": "</s>",
55
+ "tokenizer_class": "RobertaTokenizer",
56
+ "trim_offsets": true,
57
+ "unk_token": "<unk>"
58
+ }
Model-V0.5.1/vocab.json ADDED
The diff for this file is too large to render. See raw diff
 
Model_Evaluate.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer, AutoConfig, AutoModel
2
+ from datasets import Dataset, DatasetDict, Features, Sequence, ClassLabel, Value
3
+ import pandas as pd
4
+ import re
5
+ import subprocess
6
+ import shutil
7
+ import torch
8
+
9
+ model_path = "Model-V0.5.1"
10
+ tokenizer = AutoTokenizer.from_pretrained(model_path)
11
+ config = AutoConfig.from_pretrained(model_path)
12
+ model = AutoModelForSequenceClassification.from_pretrained(model_path, config=config)
13
+ labels = model.config.id2label
14
+ label2id = model.config.label2id
15
+
16
+ import re
17
+ preprocessor_pattern = re.compile(r'^\s*#.*$', re.MULTILINE)
18
+ block_comment_pattern = re.compile(r'/\*.*?\*/', re.DOTALL)
19
+ using_namespace_pattern = re.compile(r'^\s*using\s+namespace\s+[a-zA-Z_][a-zA-Z0-9_:]*\s*;', re.MULTILINE)
20
+ line_comment_pattern = re.compile(r'//.*')
21
+
22
+ def remove_comments(code):
23
+ code = block_comment_pattern.sub('', code)
24
+ code = line_comment_pattern.sub('', code)
25
+ return code
26
+
27
+ def replace_preprocessor(code):
28
+ code = preprocessor_pattern.sub('<PREPROCESSOR>', code)
29
+ return using_namespace_pattern.sub('<NAMESPACE>', code)
30
+
31
+ def strip_lines(text, max_blank_lines=0):
32
+ text += '\n'
33
+ lines = text.splitlines()
34
+ kept = []
35
+ consec = 0
36
+ for line in lines:
37
+ if line.strip() == "":
38
+ consec +=1
39
+ else:
40
+ consec = 0
41
+ if consec <= max_blank_lines:
42
+ kept.append(line)
43
+ return '\n'.join(kept)
44
+
45
+ paren_brace_space_pattern = re.compile(r'\([^\)]*\)\s+\{')
46
+ multiline_function_pattern = re.compile(r'(\([^\)]*\))\s*\n\s*\{')
47
+
48
+ def normalize_braces(code):
49
+ code = multiline_function_pattern.sub(r'\1{', code)
50
+ # code = paren_brace_space_pattern.sub('(){', code)
51
+ return code
52
+
53
+ def format_cpp(code: str, style: str = "Google") -> str:
54
+ if not shutil.which("clang-format"):
55
+ raise EnvironmentError("clang-format is not installed or not in PATH.")
56
+
57
+ result = subprocess.run(
58
+ ["clang-format", f"--style={style}"],
59
+ input=code.encode(),
60
+ stdout=subprocess.PIPE,
61
+ stderr=subprocess.PIPE,
62
+ check=True
63
+ )
64
+
65
+ return result.stdout.decode()
66
+
67
+ def preprocess(code):
68
+ # code = format_cpp(code)
69
+ code = remove_comments(code)
70
+ code = replace_preprocessor(code)
71
+ code = normalize_braces(code)
72
+ code = strip_lines(code)
73
+ return code
74
+
75
+
76
+ def eval(source):
77
+ source = preprocess(source)
78
+ inputs = tokenizer(
79
+ source,
80
+ truncation=True,
81
+ padding='max_length',
82
+ max_length=512,
83
+ return_tensors='pt'
84
+ )
85
+
86
+ model.cpu()
87
+ model.eval()
88
+ inputs = {k: v.cpu() for k, v in inputs.items()}
89
+
90
+ with torch.no_grad():
91
+ outputs = model(**inputs)
92
+
93
+ probs = torch.softmax(outputs.logits, dim=-1).detach().cpu().numpy()[0]
94
+ pred_id = probs.argmax()
95
+ # print("Label:", labels[pred_id], " | Score:", probs[pred_id])
96
+ return labels[pred_id], f"{probs[label2id['AI']]*100:.2f} %"
README.md CHANGED
@@ -1,14 +1,14 @@
1
- ---
2
- title: Competitive Programming AI Code Detector
3
- emoji: 🔥
4
- colorFrom: blue
5
- colorTo: indigo
6
- sdk: gradio
7
- sdk_version: 5.33.0
8
- app_file: app.py
9
- pinned: false
10
- license: cc-by-4.0
11
- short_description: 'AI Builders 2025 Project: Detecting AI-Generated C++ Code'
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: Competitive Programming AI Code Detector
3
+ emoji: 💻
4
+ colorFrom: gray
5
+ colorTo: yellow
6
+ sdk: gradio
7
+ sdk_version: 5.32.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: cc-by-4.0
11
+ short_description: AI Builders 2025 project to identify AI-generated code.
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from Model_Evaluate import *
3
+ import re
4
+
5
+ def load_cpp_file(file):
6
+ text = file.name
7
+ with open(text,'r',encoding='utf-8') as f:
8
+ content = f.read()
9
+ return content
10
+
11
+ with gr.Blocks() as demo:
12
+ with gr.Row():
13
+ with gr.Column(scale=1):
14
+ code_box = gr.Textbox(lines=20, label="C++ Code")
15
+ with gr.Column(scale=1):
16
+ cpp_file = gr.File(label="Upload C++ File (.cpp)", file_types=[".cpp"])
17
+ check_btn = gr.Button("Check")
18
+
19
+ # Result section
20
+ with gr.Row():
21
+ gr.Markdown("### Result :")
22
+
23
+ with gr.Row():
24
+ with gr.Column(scale=1):
25
+ label_box = gr.Textbox(label="Label", interactive=False)
26
+ with gr.Column(scale=1):
27
+ confidence_box = gr.Textbox(label="AI Percentage", interactive=False)
28
+
29
+ # Bind functions
30
+ cpp_file.change(fn=load_cpp_file, inputs=cpp_file, outputs=code_box)
31
+ check_btn.click(fn=eval, inputs=[code_box], outputs=[label_box, confidence_box])
32
+
33
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ numpy
2
+ gradio
3
+ huggingface
4
+ transformers
5
+ sentencepiece
6
+ torch
7
+ clang-format