File size: 3,001 Bytes
8cb40c4
 
 
 
 
 
 
 
 
 
 
 
 
387f42d
 
 
8cb40c4
 
 
 
 
 
 
 
 
 
387f42d
8cb40c4
387f42d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8cb40c4
387f42d
 
 
 
8cb40c4
387f42d
8cb40c4
 
387f42d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8cb40c4
 
387f42d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import torch
import gradio as gr
from transformers import (
    AutoTokenizer,
    AutoModelForSequenceClassification
)

MODEL_NAME = "duclo90/results"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
model.eval()

def classify_text(text):
    if not text.strip():
        return "⚠️ Please enter some text to analyze."
    
    inputs = tokenizer(
        text,
        return_tensors="pt",
        truncation=True,
        max_length=512
    )
    with torch.no_grad():
        outputs = model(**inputs)
        probs = torch.softmax(outputs.logits, dim=-1)
        score, pred = torch.max(probs, dim=-1)
    
    label = model.config.id2label[pred.item()]
    
    # Format output with icons and styling
    icon = "👤" if label.lower() == "human" else "🤖"
    
    result = f"""
    ### {icon} Classification Result
    
    **Prediction:** {label}-Written Text
    """
    
    return result

# Custom CSS for modern look
custom_css = """
#component-0 {
    max-width: 900px;
    margin: auto;
    padding: 20px;
}

.gradio-container {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
    font-family: 'Inter', sans-serif;
}

#title {
    text-align: center;
    color: white;
    font-size: 2.5em;
    font-weight: 700;
    margin-bottom: 10px;
    text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}

#description {
    text-align: center;
    color: rgba(255,255,255,0.9);
    font-size: 1.1em;
    margin-bottom: 30px;
}

.input-textarea, .output-markdown {
    border-radius: 15px !important;
    border: 2px solid rgba(255,255,255,0.3) !important;
    background: rgba(255,255,255,0.95) !important;
    box-shadow: 0 8px 32px rgba(0,0,0,0.1) !important;
}

button {
    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%) !important;
    border: none !important;
    border-radius: 10px !important;
    padding: 12px 30px !important;
    font-weight: 600 !important;
    font-size: 16px !important;
    box-shadow: 0 4px 15px rgba(0,0,0,0.2) !important;
    transition: transform 0.2s !important;
}

button:hover {
    transform: translateY(-2px) !important;
    box-shadow: 0 6px 20px rgba(0,0,0,0.3) !important;
}

.footer {
    display: none !important;
}
"""

# Create interface with modern theme
iface = gr.Interface(
    fn=classify_text,
    inputs=gr.Textbox(
        lines=8, 
        placeholder="✍️ Paste or type text here to analyze...",
        label="Enter Text",
        elem_id="input-text"
    ),
    outputs=gr.Markdown(label="Analysis Result"),
    title="<div id='title'>🔍 AI Text Classifier</div>",
    description="<div id='description'>Detect whether text is human-written or AI-generated using advanced NLP</div>",
    theme=gr.themes.Soft(
        primary_hue="purple",
        secondary_hue="pink",
        neutral_hue="slate",
        font=gr.themes.GoogleFont("Inter")
    ),
    css=custom_css,
    flagging_mode="never"
)

iface.launch()