File size: 3,811 Bytes
7c1115e
 
 
 
93cb70c
39ba994
630f14f
93cb70c
630f14f
7c1115e
d21eb1e
7c1115e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d21eb1e
7c1115e
 
 
 
 
 
 
 
630f14f
7c1115e
 
 
 
 
 
d21eb1e
7c1115e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39ba994
93cb70c
7c1115e
 
 
 
630f14f
7c1115e
1786f21
7c1115e
 
 
 
 
 
630f14f
7c1115e
 
93cb70c
3201c4f
39ba994
7c1115e
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
import os
import concurrent.futures
from huggingface_hub import login
from transformers import MarianMTModel, MarianTokenizer, pipeline
import requests
import io
from PIL import Image
import gradio as gr

# Login with Hugging Face token
hf_token = os.getenv("HUGGINGFACE_API_KEY")  # Updated variable name
if hf_token:
    login(token=hf_token, add_to_git_credential=True)
else:
    raise ValueError("Hugging Face token not found in environment variables.")

# Dynamic translation model loading
def load_translation_model(src_lang, tgt_lang):
    model_name = f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}"
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    model = MarianMTModel.from_pretrained(model_name)
    translator = pipeline("translation", model=model, tokenizer=tokenizer)
    return translator

# Translation function with reduced max_length
def translate_text(text, src_lang, tgt_lang):
    try:
        translator = load_translation_model(src_lang, tgt_lang)
        translation = translator(text, max_length=20)  # Reduced max length for speed
        return translation[0]['translation_text']
    except Exception as e:
        return f"An error occurred: {str(e)}"

# Image generation with reduced resolution
flux_API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
flux_headers = {"Authorization": f"Bearer {hf_token}"}
def generate_image(prompt):
    try:
        response = requests.post(flux_API_URL, headers=flux_headers, json={"inputs": prompt})
        if response.status_code == 200:
            image = Image.open(io.BytesIO(response.content))
            image = image.resize((256, 256))  # Reduce resolution for faster processing
            return image
        else:
            return None
    except Exception as e:
        print(f"Error in image generation: {e}")
        return None

# Creative text generation with reduced length
mistral_API_URL = "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-v0.1"
mistral_headers = {"Authorization": f"Bearer {hf_token}"}
def generate_creative_text(translated_text):
    try:
        response = requests.post(mistral_API_URL, headers=mistral_headers, json={"inputs": translated_text, "max_length": 30})
        if response.status_code == 200:
            return response.json()[0]['generated_text']
        else:
            return "Error generating creative text"
    except Exception as e:
        print(f"Error in creative text generation: {e}")
        return None

# Full workflow function with parallel processing
def translate_generate_image_and_text(text, src_lang, tgt_lang):
    translated_text = translate_text(text, src_lang, tgt_lang)
    with concurrent.futures.ThreadPoolExecutor() as executor:
        image_future = executor.submit(generate_image, translated_text)
        creative_text_future = executor.submit(generate_creative_text, translated_text)
        image = image_future.result()
        creative_text = creative_text_future.result()
    return translated_text, creative_text, image

# Language options for Gradio dropdown
language_codes = {
    "Tamil": "ta", "English": "en", "French": "fr", "Spanish": "es", "German": "de"
}

# Gradio Interface
interface = gr.Interface(
    fn=translate_generate_image_and_text,
    inputs=[
        gr.Textbox(label="Enter text"),
        gr.Dropdown(choices=list(language_codes.keys()), label="Source Language", default="Tamil"),
        gr.Dropdown(choices=list(language_codes.keys()), label="Target Language", default="English"),
    ],
    outputs=["text", "text", "image"],
    title="Multilingual Translation, Image Generation & Creative Text",
    description="Translate text between languages, generate images based on translation, and create creative text.",
)

# Launch Gradio app
interface.launch()