File size: 2,920 Bytes
96ec789
207023f
96ec789
 
 
eea6ac5
96ec789
 
 
 
d16c1e4
96ec789
 
9bdb949
96ec789
 
9607ff2
96ec789
 
 
 
4569162
96ec789
 
 
4569162
96ec789
 
 
 
 
 
 
4569162
96ec789
 
 
 
 
 
 
 
 
770a398
96ec789
 
 
 
 
770a398
96ec789
4569162
96ec789
 
 
 
 
 
 
 
 
 
9607ff2
96ec789
 
 
 
 
 
 
 
 
 
 
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
# app.py
import app_ui
import os
import time
import tempfile
import torch
from transformers import MBartForConditionalGeneration, MBart50TokenizerFast, AutoTokenizer, AutoModelForCausalLM
from diffusers import DiffusionPipeline
from PIL import Image
from rouge_score import rouge_scorer

# Device setup
device = "cuda" if torch.cuda.is_available() else "cpu"

# Hugging Face Token (required for image pipeline)
hf_token = os.getenv("HF_TOKEN", "your_token_here")  # Replace with your token or set as environment variable

# Initialize translator (Tamil to English)
translator_tokenizer = MBart50TokenizerFast.from_pretrained("facebook/mbart-large-50-many-to-many-mmt")
translator_model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50-many-to-many-mmt").to(device)
translator_tokenizer.src_lang = "ta_IN"

# Initialize text generator
gen_tokenizer = AutoTokenizer.from_pretrained("gpt2")
gen_model = AutoModelForCausalLM.from_pretrained("gpt2").to(device)

# Initialize Stable Diffusion image pipeline
pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1",
    torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
    use_auth_token=hf_token
).to(device)
pipe.safety_checker = None  # Optional: disable safety checks

def translate_tamil_to_english(text, reference=None):
    start = time.time()
    inputs = translator_tokenizer(text, return_tensors="pt").to(device)
    outputs = translator_model.generate(
        **inputs,
        forced_bos_token_id=translator_tokenizer.lang_code_to_id["en_XX"]
    )
    translation = translator_tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
    duration = round(time.time() - start, 2)

    rouge_l = None
    if reference:
        scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
        scores = scorer.score(reference.lower(), translation.lower())
        rouge_l = round(scores['rougeL'].fmeasure, 4)

    return translation, duration, rouge_l

def generate_image(prompt):
    try:
        start = time.time()
        out = pipe(prompt)
        img = out.images[0].resize((256, 256))
        tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".png")
        img.save(tmp.name)
        return tmp.name, round(time.time() - start, 2)
    except Exception as e:
        return None, f"Image generation failed: {e}"

def generate_creative_text(prompt, max_length=100):
    start = time.time()
    input_ids = gen_tokenizer.encode(prompt, return_tensors="pt").to(device)
    out = gen_model.generate(
        input_ids, max_length=max_length, do_sample=True, top_k=50, temperature=0.9
    )
    text = gen_tokenizer.decode(out[0], skip_special_tokens=True)
    duration = round(time.time() - start, 2)
    tokens = text.split()
    repetition = sum(t1 == t2 for t1, t2 in zip(tokens, tokens[1:])) / len(tokens)
    return text, duration, len(tokens), round(repetition, 4)