File size: 3,652 Bytes
3c4c14d
 
 
bf7e1be
 
3c4c14d
 
ed65502
b6ca69f
ed65502
 
3c4c14d
ed65502
b6ca69f
ed65502
3c4c14d
 
b6ca69f
3c4c14d
 
b6ca69f
ed65502
3c4c14d
 
 
b6ca69f
ed65502
3c4c14d
 
 
 
 
ed65502
b6ca69f
3c4c14d
ed65502
 
3c4c14d
 
a0c12a7
3c4c14d
ed65502
 
3c4c14d
 
52b96f9
3c4c14d
ed65502
3c4c14d
 
ed65502
 
 
 
 
 
 
 
 
 
 
 
 
2c77ef8
3c4c14d
ed65502
3c4c14d
 
 
 
2c77ef8
ed65502
3c4c14d
 
 
 
 
 
 
 
 
ed65502
3c4c14d
ed65502
 
 
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
import gradio as gr
import requests
from transformers import MarianMTModel, MarianTokenizer, AutoModelForCausalLM, AutoTokenizer
from PIL import Image
import torch
import io
import os
import base64

# Load Hugging Face API key from environment
HF_API_KEY = os.getenv("HF_API_KEY")  # Add this in 'Variables and secrets' on HF Spaces
if not HF_API_KEY:
    raise ValueError("HF_API_KEY is not set. Please add it in Hugging Face 'Variables and secrets'.")

# API endpoint for image generation
IMAGE_GEN_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}

# Check if GPU is available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Load translation model: Tamil to English
translator_model = "Helsinki-NLP/opus-mt-mul-en"
translator = MarianMTModel.from_pretrained(translator_model).to(device)
translator_tokenizer = MarianTokenizer.from_pretrained(translator_model)

# Load text generation model
generator_model = "EleutherAI/gpt-neo-1.3B"
generator = AutoModelForCausalLM.from_pretrained(generator_model).to(device)
generator_tokenizer = AutoTokenizer.from_pretrained(generator_model)
if generator_tokenizer.pad_token is None:
    generator_tokenizer.pad_token = generator_tokenizer.eos_token
generator.config.pad_token_id = generator_tokenizer.pad_token_id

def translate_tamil_to_english(text):
    """Translate Tamil text to English."""
    inputs = translator_tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=128).to(device)
    output = translator.generate(**inputs)
    return translator_tokenizer.decode(output[0], skip_special_tokens=True)

def generate_text(prompt):
    """Generate creative text from English input."""
    inputs = generator_tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=128).to(device)
    output = generator.generate(**inputs, max_length=100)
    return generator_tokenizer.decode(output[0], skip_special_tokens=True)

def generate_image(prompt):
    """Generate image using Hugging Face inference API."""
    response = requests.post(IMAGE_GEN_URL, headers=HEADERS, json={"inputs": prompt})
    if response.status_code == 200:
        # Check if raw image or base64 encoded
        content_type = response.headers.get("content-type", "")
        if "image" in content_type:
            return Image.open(io.BytesIO(response.content))
        else:
            try:
                result = response.json()
                if "image" in result:
                    image_data = base64.b64decode(result["image"])
                    return Image.open(io.BytesIO(image_data))
            except Exception as e:
                print("Error parsing image:", e)
    return Image.new("RGB", (300, 300), "red")  # fallback placeholder

def process_input(tamil_text):
    """Pipeline: Translate → Generate Text → Generate Image"""
    english_text = translate_tamil_to_english(tamil_text)
    creative_text = generate_text(english_text)
    image = generate_image(english_text)
    return english_text, creative_text, image

# Create Gradio UI
interface = gr.Interface(
    fn=process_input,
    inputs=gr.Textbox(label="Enter Tamil Text"),
    outputs=[
        gr.Textbox(label="Translated English Text"),
        gr.Textbox(label="Creative Text"),
        gr.Image(label="Generated Image")
    ],
    title="Tamil to English Translator & Image Generator",
    description="Enter Tamil text. This app translates it to English, generates a creative description, and produces an image based on the translated text."
)

# Launch app
interface.launch()