File size: 2,921 Bytes
26532db
5630dd5
c685a0d
c2c3e4f
5630dd5
2f4a891
22a0b97
 
07099e3
22a0b97
 
 
c685a0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5630dd5
c685a0d
 
5630dd5
c685a0d
 
 
 
 
 
 
07099e3
5630dd5
07099e3
22a0b97
c685a0d
eafd83e
5630dd5
c685a0d
c2c3e4f
 
5630dd5
6efad01
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
import gradio as gr
from transformers import pipeline, GPT2LMHeadModel, GPT2Tokenizer
import re

# Load the fine-tuned GPT-2 model and tokenizer
model_dir = "Manasa1/finetuned_GPT23"
fine_tuned_model = GPT2LMHeadModel.from_pretrained(model_dir)
fine_tuned_tokenizer = GPT2Tokenizer.from_pretrained(model_dir)

# Create a text-generation pipeline
generator = pipeline('text-generation', model=fine_tuned_model, tokenizer=fine_tuned_tokenizer)

# Function to dynamically truncate output while keeping it meaningful
def truncate_tweet(tweet, max_length=240):
    # Ensure the tweet is concise, ending on a complete sentence
    if len(tweet) > max_length:
        tweet = tweet[:max_length]
        last_period = tweet.rfind(".")
        if last_period != -1:
            tweet = tweet[:last_period + 1]
    return tweet.strip()

# Function to intelligently add relevant hashtags and emojis
def add_relevant_tags(tweet, input_question):
    # Pre-defined mappings of topics to hashtags and emojis
    topic_to_hashtags = {
        "startup": ["#Startups", "#Innovation", "#Entrepreneurship"],
        "AI": ["#AI", "#ArtificialIntelligence", "#Tech"],
        "technology": ["#Technology", "#Future", "#Tech"],
        "future": ["#Future", "#Vision", "#Tech"],
    }
    topic_to_emojis = {
        "startup": "πŸš€",
        "AI": "πŸ€–",
        "technology": "πŸ’»",
        "future": "🌟",
    }

    # Determine topic from input question (using keywords)
    topic = None
    for key in topic_to_hashtags.keys():
        if key.lower() in input_question.lower():
            topic = key
            break

    # Add relevant hashtags and emoji if a topic is detected
    if topic:
        hashtags = " ".join(topic_to_hashtags[topic][:2])  # Take up to 2 hashtags
        emoji = topic_to_emojis[topic]
        tweet = f"{tweet} {emoji} {hashtags}"
    return tweet.strip()

def generate_tweet(input_question):
    # Format the input without "Question:" and "Answer:"
    prompt = input_question.strip()
    # Generate the output
    output = generator(prompt, max_length=150, num_return_sequences=1, temperature=0.7, top_p=0.9)
    # Extract the generated text and clean it
    tweet = output[0]['generated_text']
    tweet = re.sub(r"(Question:|Answer:)", "", tweet).strip()  # Remove "Question:" and "Answer:"
    tweet = truncate_tweet(tweet)  # Truncate to ensure it's concise
    tweet = add_relevant_tags(tweet, input_question)  # Add relevant hashtags and emojis
    return tweet

# Create the Gradio interface
interface = gr.Interface(
    fn=generate_tweet,
    inputs=gr.Textbox(label="Enter a prompt/question", placeholder="Write a tweet about AI."),
    outputs=gr.Textbox(label="Generated Tweet"),
    title="Tweet Generator",
    description="Generate concise, relevant tweets enriched with appropriate emojis and hashtags using a fine-tuned GPT-2 model."
)

# Launch the interface
interface.launch()