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)