| import gradio as gr |
| import json |
| import os |
| import shutil |
| import pandas as pd |
| from src.asr_language import resolve_asr_language_code |
|
|
| class AgentBridge: |
| def __init__(self, input_agent, brain_agent, trust_agent): |
| print("🌉 Bridge Agent (React API) Online.") |
| self.input = input_agent |
| self.brain = brain_agent |
| self.trust = trust_agent |
|
|
| |
| def api_check_reputation(self, user_key): |
| """Matches React 'run_login' expectations.""" |
| if not user_key: |
| return [None, "Unknown", "No key provided", False, 0, "Novice", 0, "Error"] |
| |
| |
| current_xp = 150 |
| role = "Novice" |
| can_validate = False |
| display_addr = f"{user_key[:6]}...{user_key[-4:]}" |
| |
| return [ |
| user_key, |
| display_addr, |
| "Welcome back", |
| can_validate, |
| current_xp, |
| role, |
| 12, |
| "Keep playing to unlock validation!" |
| ] |
|
|
| |
| def api_submit_entry(self, transcribed, dialect, customD, clarification, tone, context, pragmatics, |
| sourceTag, clar_source, userKey, blob, confirm): |
| """ |
| Proxies the React submission to the UX Agent's logic. |
| """ |
| |
| if hasattr(self.brain, 'ux'): |
| return self.brain.ux.check_and_submit_logic( |
| transcribed, dialect, customD, clarification, tone, context, pragmatics, |
| sourceTag, clar_source, userKey, blob, confirm |
| ) |
| return "❌ Error: UX Backend not linked.", None, None |
|
|
| |
| def api_get_dialects(self): |
| """Returns list of available dialects for the dropdown.""" |
| try: |
| |
| dataset_dir = self.brain.config.DATASET_DIR |
| if os.path.exists(dataset_dir): |
| files = [f.replace(".csv", "") for f in os.listdir(dataset_dir) if f.endswith(".csv")] |
| return files if files else ["American English", "Korean English", "Nigerian English"] |
| return ["American English", "Korean English", "Nigerian English"] |
| except: |
| return ["American English", "Korean English", "Nigerian English"] |
|
|
| |
| def api_generate_mission(self, context): |
| """Generates a daily prompt.""" |
| if self.brain: |
| return self.brain.generate_mission(context) |
| return {"text": "Describe your morning routine.", "emoji": "☀️"} |
|
|
| |
| def api_transcribe_check(self, audio_path, dialect): |
| """Fast transcription for 'The Listener' game verification.""" |
| if not audio_path: return "No Audio" |
| try: |
| asr_code, _, _ = resolve_asr_language_code(dialect) |
| result = self.input.transcribe(audio_path, language=asr_code) |
| return result[0]['text'] |
| except Exception as e: |
| return f"Error: {e}" |
|
|
| |
| def launch(self): |
| with gr.Blocks() as api: |
| |
| in_txt = gr.Textbox(label="Text Input") |
| in_aud = gr.Audio(type="filepath", label="Audio Input") |
| |
| |
| out_json = gr.JSON() |
| out_txt = gr.Textbox() |
| out_aud = gr.Audio() |
|
|
| |
| gr.Button("API Rep").click( |
| self.api_check_reputation, |
| inputs=[in_txt], |
| outputs=[out_json], |
| api_name="run_login" |
| ) |
| |
| |
| |
| sub_args = [gr.Textbox() for _ in range(10)] + [gr.Audio(type="filepath"), gr.Checkbox()] |
| |
| gr.Button("API Submit").click( |
| self.api_submit_entry, |
| inputs=sub_args, |
| outputs=[gr.Textbox(), gr.Textbox(), gr.Audio()], |
| api_name="check_and_submit_logic" |
| ) |
| |
| |
| gr.Button("API List").click(self.api_get_dialects, inputs=[], outputs=[out_json], api_name="get_dialects") |
| gr.Button("API Mission").click(self.api_generate_mission, inputs=[in_txt], outputs=[out_json], api_name="generate_mission") |
| gr.Button("API Transcribe").click(self.api_transcribe_check, inputs=[in_aud, in_txt], outputs=[out_txt], api_name="transcribe_check") |
|
|
| return api |
|
|