vietdata's picture
first update
78829de
raw
history blame
5.16 kB
import gradio as gr
from datasets import load_dataset, Dataset
from collections import defaultdict
import random
import requests
import os
# Load the source dataset
source_dataset = load_dataset("vietdata/eng_echo", split="train")
source_texts = source_dataset["query"]
# Initialize variables
translations = defaultdict(list)
processed_data = []
def authenticate(user_id):
url = "https://intern-api.imtaedu.com/api/subnets/1/authenticate"
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"X-Public-Api-Key": os.environ['ADMIN']
}
payload = { "token": user_id }
response = requests.post(url, json=payload, headers=headers)
return response.status_code == 200
# Helper function to get the next text for translation
def get_next_text(user_id):
# Filter texts that already have 10 translations
eligible_texts = [text for text in source_texts if len(translations[text]) < 10]
if not eligible_texts:
return "All texts are fully translated."
# Select a random eligible text for translation
next_text = random.choice(eligible_texts)
return next_text
# Function to handle translation submission
def submit_translation(user_id, original_text, translation):
# Check if text already has 10 translations
if len(translations[original_text]) < 10:
translations[original_text].append((user_id, translation))
# Check if 100 texts have enough translations to save
if len([t for t in translations if len(translations[t]) == 10]) >= 100:
save_to_translated_echo()
return "Translation submitted successfully."
else:
return "This text already has 10 translations. Please request a new text."
# Function to save completed translations to 'translated_echo'
def save_to_translated_echo():
global translations, processed_data
# Gather translations with exactly 10 versions
completed_translations = [
{"query": text, "translations": [t[1] for t in translations[text]]}
for text in translations if len(translations[text]) == 10
]
# Append to processed data
processed_data.extend(completed_translations)
# Reset translations
translations = {text: val for text, val in translations.items() if len(val) < 10}
# Convert to Hugging Face dataset format
translated_dataset = Dataset.from_pandas(pd.DataFrame(processed_data))
# Append to Hugging Face dataset (dummy function call)
translated_dataset.push_to_hub("vietdata/translated_echo", split="train")
import gradio as gr
# Simulated user data for demonstration
user_data = {"hello": "hello"}
# Sample English text to translate
english_text = "Translate this text to Vietnamese."
# User session dictionary to store logged-in status
user_sessions = {}
def login(username, state):
state[0] = username
# Authenticate user
if authenticate(username):
#user_sessions[username] = True
return f"Welcome, {username}!", gr.update(visible=False), gr.update(visible=True), get_next_text(username)
else:
return "Invalid username or password.", gr.update(visible=True), gr.update(visible=False), ""
def logout(username):
# Log out user and reset session
if username in user_sessions:
del user_sessions[username]
return "Logged out. Please log in again.", gr.update(visible=True), gr.update(visible=False)
def submit_translation(translation, state, job_input):
try:
submit_translation(state[0], job_input, translation)
origin = job_input
# Save the translation and provide feedback
return f"""Translation of "{origin}" submitted: {translation}""", get_next_text(state[0])
except Exception as e:
print(e)
return "Error please try submit again!", job_input
# Define the Gradio interface
with gr.Blocks() as demo:
state = gr.State([None])
# Login section
with gr.Column(visible=True) as login_section:
username_input = gr.Textbox(placeholder="Enter your token", label="Token ID")
login_button = gr.Button("Login")
login_output = gr.Textbox(label="Login Status", interactive=False)
# Translation section (initially hidden)
with gr.Column(visible=False) as translation_section:
job_input = gr.Textbox(value=english_text, label="English Text", interactive=False)
translation_input = gr.Textbox(placeholder="Enter your translation here", label="Your Translation")
submit_button = gr.Button("Submit Translation")
translation_output = gr.Textbox(label="Submission Status", interactive=False)
logout_button = gr.Button("Logout")
# Button functions
login_button.click(
login, inputs=[username_input, state], outputs=[login_output, login_section, translation_section, job_input]
)
submit_button.click(
submit_translation, inputs=[translation_input, state, job_input], outputs=[translation_output, job_input]
)
logout_button.click(
logout, inputs=[username_input], outputs=[login_output, login_section, translation_section]
)
demo.launch(debug=True)