Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline | |
import torch | |
# Global variable to cache the model | |
_classifier = None | |
def load_model(): | |
"""Load the intent classification model""" | |
global _classifier | |
if _classifier is None: | |
model_name = "YosefA/adfluence-intent-model" | |
# Try multiple approaches to load the model | |
loading_strategies = [ | |
{ | |
"name": "Standard loading with trust_remote_code", | |
"kwargs": {"trust_remote_code": True, "return_all_scores": True} | |
}, | |
{ | |
"name": "Loading with revision='main'", | |
"kwargs": {"revision": "main", "return_all_scores": True} | |
}, | |
{ | |
"name": "Loading with use_fast=False", | |
"kwargs": {"use_fast": False, "return_all_scores": True} | |
}, | |
{ | |
"name": "Loading with legacy tokenizer", | |
"kwargs": {"use_fast": False, "trust_remote_code": True, "return_all_scores": True} | |
} | |
] | |
for strategy in loading_strategies: | |
try: | |
print(f"Trying: {strategy['name']}") | |
_classifier = pipeline( | |
"text-classification", | |
model=model_name, | |
**strategy['kwargs'] | |
) | |
print(f"β Model loaded successfully using: {strategy['name']}") | |
return _classifier | |
except Exception as e: | |
print(f"β Failed with {strategy['name']}: {e}") | |
continue | |
print("β All loading strategies failed") | |
return None | |
return _classifier | |
def classify_intent(comment): | |
""" | |
Classify the intent of a comment | |
Args: | |
comment (str): The input comment text | |
Returns: | |
dict: Classification results with labels and scores | |
""" | |
if not comment.strip(): | |
return "Please enter a comment to classify." | |
classifier = load_model() | |
if classifier is None: | |
return "Error: Could not load the model. Please try again later." | |
try: | |
# Get predictions | |
results = classifier(comment) | |
# Format results for display | |
formatted_results = [] | |
for result in results: | |
for item in result: | |
label = item['label'] | |
score = item['score'] | |
formatted_results.append(f"{label}: {score:.4f} ({score*100:.2f}%)") | |
return "\n".join(formatted_results) | |
except Exception as e: | |
return f"Error during classification: {str(e)}" | |
# Create the Gradio interface | |
with gr.Blocks(title="Ad Comments Intent Classifier") as demo: | |
gr.Markdown(""" | |
# π― Ad Comments Intent Classifier | |
This app classifies the intent of comments related to advertisements using the **YosefA/adfluence-intent-model**. | |
Simply enter a comment below and get the classification results with confidence scores. | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
comment_input = gr.Textbox( | |
label="Comment Text", | |
placeholder="Enter your comment here...", | |
lines=3, | |
max_lines=10 | |
) | |
classify_btn = gr.Button("π Classify Intent", variant="primary") | |
with gr.Column(): | |
output = gr.Textbox( | |
label="Classification Results", | |
lines=5, | |
max_lines=10, | |
interactive=False | |
) | |
# Example inputs | |
gr.Examples( | |
examples=[ | |
["This product looks amazing! Where can I buy it?"], | |
["This is clearly a scam, don't trust it."], | |
["I love this brand, they make quality products."], | |
["The price seems too high for what you get."], | |
["Has anyone tried this? I'm curious about reviews."] | |
], | |
inputs=comment_input, | |
label="π Example Comments" | |
) | |
# Set up the event handlers | |
classify_btn.click( | |
fn=classify_intent, | |
inputs=comment_input, | |
outputs=output | |
) | |
comment_input.submit( | |
fn=classify_intent, | |
inputs=comment_input, | |
outputs=output | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
demo.launch() |