24Sureshkumar commited on
Commit
ed65502
·
verified ·
1 Parent(s): c0b0242

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -30
app.py CHANGED
@@ -5,70 +5,71 @@ from PIL import Image
5
  import torch
6
  import io
7
  import os
 
8
 
9
- # Load Hugging Face API key securely
10
- HF_API_KEY = os.getenv("HF_API_KEY") # give token
11
  if not HF_API_KEY:
12
- raise ValueError("HF_API_KEY is not set. Add it in Hugging Face 'Variables and Secrets'.")
13
 
14
- # API Endpoint for Image Generation
15
  IMAGE_GEN_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
16
  HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}
17
 
18
  # Check if GPU is available
19
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
20
 
21
- # Load Tamil-to-English Translation Model
22
  translator_model = "Helsinki-NLP/opus-mt-mul-en"
23
  translator = MarianMTModel.from_pretrained(translator_model).to(device)
24
  translator_tokenizer = MarianTokenizer.from_pretrained(translator_model)
25
 
26
- # Load Text Generation Model
27
  generator_model = "EleutherAI/gpt-neo-1.3B"
28
  generator = AutoModelForCausalLM.from_pretrained(generator_model).to(device)
29
  generator_tokenizer = AutoTokenizer.from_pretrained(generator_model)
30
  if generator_tokenizer.pad_token is None:
31
  generator_tokenizer.pad_token = generator_tokenizer.eos_token
 
32
 
33
  def translate_tamil_to_english(text):
34
- """Translates Tamil text to English."""
35
- inputs = translator_tokenizer(text, return_tensors="pt", padding=True, truncation=True).to(device)
36
  output = translator.generate(**inputs)
37
  return translator_tokenizer.decode(output[0], skip_special_tokens=True)
38
 
39
  def generate_text(prompt):
40
- """Generates a creative text based on English input."""
41
- inputs = generator_tokenizer(prompt, return_tensors="pt", padding=True, truncation=True).to(device)
42
  output = generator.generate(**inputs, max_length=100)
43
  return generator_tokenizer.decode(output[0], skip_special_tokens=True)
44
 
45
  def generate_image(prompt):
46
- """Sends request to API for image generation."""
47
  response = requests.post(IMAGE_GEN_URL, headers=HEADERS, json={"inputs": prompt})
48
  if response.status_code == 200:
49
- return Image.open(io.BytesIO(response.content))
50
- return Image.new("RGB", (300, 300), "red") # Placeholder image for errors
 
 
 
 
 
 
 
 
 
 
 
51
 
52
  def process_input(tamil_text):
53
- """Complete pipeline: Translation, Text Generation, and Image Generation."""
54
  english_text = translate_tamil_to_english(tamil_text)
55
  creative_text = generate_text(english_text)
56
  image = generate_image(english_text)
57
  return english_text, creative_text, image
58
 
59
- # Create Gradio Interface
60
-
61
- # interface = gr.Interface(
62
- # fn=process_input,
63
- # inputs=gr.Textbox(label="Enter Tamil Text"),
64
- # outputs=[
65
- # gr.Textbox(label="Translated English Text"),
66
- # gr.Textbox(label="Creative Text"),
67
- # gr.Image(label="Generated Image")
68
- # ],
69
- # title="Tamil to English Translator & Image Generator",
70
- # description="Enter Tamil text, and this app will translate it, generate a creative description, and create an image based on the text."
71
- # )
72
  interface = gr.Interface(
73
  fn=process_input,
74
  inputs=gr.Textbox(label="Enter Tamil Text"),
@@ -78,7 +79,8 @@ interface = gr.Interface(
78
  gr.Image(label="Generated Image")
79
  ],
80
  title="Tamil to English Translator & Image Generator",
81
- description="Enter Tamil text, and this app will translate it, generate a creative description, and create an image based on the text."
82
  )
83
- # Launch the Gradio app
84
- interface.launch()
 
 
5
  import torch
6
  import io
7
  import os
8
+ import base64
9
 
10
+ # Load Hugging Face API key from environment
11
+ HF_API_KEY = os.getenv("HF_API_KEY") # Add this in 'Variables and secrets' on HF Spaces
12
  if not HF_API_KEY:
13
+ raise ValueError("HF_API_KEY is not set. Please add it in Hugging Face 'Variables and secrets'.")
14
 
15
+ # API endpoint for image generation
16
  IMAGE_GEN_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
17
  HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}
18
 
19
  # Check if GPU is available
20
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
21
 
22
+ # Load translation model: Tamil to English
23
  translator_model = "Helsinki-NLP/opus-mt-mul-en"
24
  translator = MarianMTModel.from_pretrained(translator_model).to(device)
25
  translator_tokenizer = MarianTokenizer.from_pretrained(translator_model)
26
 
27
+ # Load text generation model
28
  generator_model = "EleutherAI/gpt-neo-1.3B"
29
  generator = AutoModelForCausalLM.from_pretrained(generator_model).to(device)
30
  generator_tokenizer = AutoTokenizer.from_pretrained(generator_model)
31
  if generator_tokenizer.pad_token is None:
32
  generator_tokenizer.pad_token = generator_tokenizer.eos_token
33
+ generator.config.pad_token_id = generator_tokenizer.pad_token_id
34
 
35
  def translate_tamil_to_english(text):
36
+ """Translate Tamil text to English."""
37
+ inputs = translator_tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=128).to(device)
38
  output = translator.generate(**inputs)
39
  return translator_tokenizer.decode(output[0], skip_special_tokens=True)
40
 
41
  def generate_text(prompt):
42
+ """Generate creative text from English input."""
43
+ inputs = generator_tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=128).to(device)
44
  output = generator.generate(**inputs, max_length=100)
45
  return generator_tokenizer.decode(output[0], skip_special_tokens=True)
46
 
47
  def generate_image(prompt):
48
+ """Generate image using Hugging Face inference API."""
49
  response = requests.post(IMAGE_GEN_URL, headers=HEADERS, json={"inputs": prompt})
50
  if response.status_code == 200:
51
+ # Check if raw image or base64 encoded
52
+ content_type = response.headers.get("content-type", "")
53
+ if "image" in content_type:
54
+ return Image.open(io.BytesIO(response.content))
55
+ else:
56
+ try:
57
+ result = response.json()
58
+ if "image" in result:
59
+ image_data = base64.b64decode(result["image"])
60
+ return Image.open(io.BytesIO(image_data))
61
+ except Exception as e:
62
+ print("Error parsing image:", e)
63
+ return Image.new("RGB", (300, 300), "red") # fallback placeholder
64
 
65
  def process_input(tamil_text):
66
+ """Pipeline: Translate → Generate Text Generate Image"""
67
  english_text = translate_tamil_to_english(tamil_text)
68
  creative_text = generate_text(english_text)
69
  image = generate_image(english_text)
70
  return english_text, creative_text, image
71
 
72
+ # Create Gradio UI
 
 
 
 
 
 
 
 
 
 
 
 
73
  interface = gr.Interface(
74
  fn=process_input,
75
  inputs=gr.Textbox(label="Enter Tamil Text"),
 
79
  gr.Image(label="Generated Image")
80
  ],
81
  title="Tamil to English Translator & Image Generator",
82
+ description="Enter Tamil text. This app translates it to English, generates a creative description, and produces an image based on the translated text."
83
  )
84
+
85
+ # Launch app
86
+ interface.launch()