File size: 7,736 Bytes
0c0223c |
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# Import required libraries
import gradio as gr
import requests
from getpass import getpass
import openai
from PIL import Image
import io
# Input your Hugging Face and Groq tokens securely
Transalate_token = getpass("Enter Hugging Face Translation Token: ")
Image_Token = getpass("Enter Hugging Face Image Generation Token: ")
Content_Token = getpass("Enter Groq Content Generation Token: ")
Image_prompt_token = getpass("Enter Groq Prompt Generation Token: ")
# API Keys for GPT and Gemini (replace with your actual keys)
openai.api_key = getpass("Enter OpenAI API Key: ")
# gemini_token = getpass("Enter Gemini API Key: ") # Placeholder, you will need API access
# API Headers
Translate = {"Authorization": f"Bearer {Transalate_token}"}
Image_generation = {"Authorization": f"Bearer {Image_Token}"}
Content_generation = {
"Authorization": f"Bearer {Content_Token}",
"Content-Type": "application/json"
}
Image_Prompt = {
"Authorization": f"Bearer {Image_prompt_token}",
"Content-Type": "application/json"
}
# Translation Model API URL (Tamil to English)
translation_url = "https://api-inference.huggingface.co/models/facebook/mbart-large-50-many-to-one-mmt"
# Text-to-Image Model API URLs
image_generation_urls = {
"black-forest-labs/FLUX.1-schnell": "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell",
"CompVis/stable-diffusion-v1-4": "https://api-inference.huggingface.co/models/CompVis/stable-diffusion-v1-4",
"black-forest-labs/FLUX.1-dev": "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
}
# Default image generation model
default_image_model = "black-forest-labs/FLUX.1-schnell"
# Content generation models
content_models = {
"GPT-4 (OpenAI)": "gpt-4",
"Gemini-1 (DeepMind)": "gemini-1",
"llama-3.1-70b-versatile": "llama-3.1-70b-versatile",
"mixtral-8x7b-32768": "mixtral-8x7b-32768"
}
# Default content generation model
default_content_model = "GPT-4 (OpenAI)"
# Function to query Hugging Face translation model
def translate_text(text):
payload = {"inputs": text}
response = requests.post(translation_url, headers=Translate, json=payload)
if response.status_code == 200:
result = response.json()
translated_text = result[0]['generated_text']
return translated_text
else:
return f"Translation Error {response.status_code}: {response.text}"
# Function to generate content using GPT or Gemini
def generate_content(english_text, max_tokens, temperature, model):
if model == "gpt-4":
# Using OpenAI's GPT model
response = openai.Completion.create(
engine=model, # GPT model (like gpt-4)
prompt=f"Write educational content about {english_text} within {max_tokens} tokens.",
max_tokens=max_tokens,
temperature=temperature
)
return response.choices[0].text.strip()
# elif model == "gemini-1":
# # Placeholder: Add code to call Gemini API here
# # Using the Gemini API (this requires the correct endpoint and token from Google DeepMind)
# # For example, you would create a POST request similar to OpenAI's API.
# url = "https://api.deepmind.com/gemini/v1/generate"
# headers = {
# "Authorization": f"Bearer {gemini_token}",
# "Content-Type": "application/json"
# }
# payload = {
# "model": "gemini-1",
# "input": f"Write educational content about {english_text} within {max_tokens} tokens.",
# "temperature": temperature,
# "max_tokens": max_tokens
# }
# response = requests.post(url, json=payload, headers=headers)
# if response.status_code == 200:
# return response.json()['choices'][0]['text']
# else:
# return f"Gemini Content Generation Error {response.status_code}: {response.text}"
else:
# Default to the Groq API or other models if selected
url = "https://api.groq.com/openai/v1/chat/completions"
payload = {
"model": model,
"messages": [
{"role": "system", "content": "You are a creative and insightful writer."},
{"role": "user", "content": f"Write educational content about {english_text} within {max_tokens} tokens."}
],
"max_tokens": max_tokens,
"temperature": temperature
}
response = requests.post(url, json=payload, headers=Content_generation)
if response.status_code == 200:
result = response.json()
return result['choices'][0]['message']['content']
else:
return f"Content Generation Error: {response.status_code}"
# Function to generate image prompt
def generate_image_prompt(english_text):
payload = {
"model": "mixtral-8x7b-32768",
"messages": [
{"role": "system", "content": "You are a professional Text to image prompt generator."},
{"role": "user", "content": f"Create a text to image generation prompt about {english_text} within 30 tokens."}
],
"max_tokens": 30
}
response = requests.post("https://api.groq.com/openai/v1/chat/completions", json=payload, headers=Image_Prompt)
if response.status_code == 200:
result = response.json()
return result['choices'][0]['message']['content']
else:
return f"Prompt Generation Error: {response.status_code}"
# Function to generate an image from the prompt
def generate_image(image_prompt, model_url):
data = {"inputs": image_prompt}
response = requests.post(model_url, headers=Image_generation, json=data)
if response.status_code == 200:
# Convert the image bytes to a PIL Image
image = Image.open(io.BytesIO(response.content))
# Save image to a temporary file-like object for Gradio
image.save("/tmp/generated_image.png") # Save the image to a file
return "/tmp/generated_image.png" # Return the path to the image
else:
return f"Image Generation Error {response.status_code}: {response.text}"
# Gradio App
def fusionmind_app(tamil_input, temperature, max_tokens, content_model, image_model):
# Step 1: Translation (Tamil to English)
english_text = translate_text(tamil_input)
# Step 2: Generate Educational Content
content_output = generate_content(english_text, max_tokens, temperature, content_models[content_model])
# Step 3: Generate Image from the prompt
image_prompt = generate_image_prompt(english_text)
image_data = generate_image(image_prompt, image_generation_urls[image_model])
return english_text, content_output, image_data
# Gradio Interface
interface = gr.Interface(
fn=fusionmind_app,
inputs=[
gr.Textbox(label="Enter Tamil Text"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.7, label="Temperature"),
gr.Slider(minimum=100, maximum=400, value=200, label="Max Tokens for Content Generation"),
gr.Dropdown(list(content_models.keys()), label="Select Content Generation Model", value=default_content_model),
gr.Dropdown(list(image_generation_urls.keys()), label="Select Image Generation Model", value=default_image_model)
],
outputs=[
gr.Textbox(label="Translated English Text"),
gr.Textbox(label="Generated Content"),
gr.Image(label="Generated Image") # Display the generated image
],
title="TransArt: A Multimodal Application for Vernacular Language Translation and Image Synthesis",
description="Translate Tamil to English, generate educational content, and generate related images!"
)
# Launch Gradio App
interface.launch(debug=True)
|