| import json |
| import traceback |
| import gradio as gr |
| import spaces |
| import threading |
|
|
| _generate_lock = threading.Lock() |
|
|
| @spaces.GPU |
| def generate_stream_gpu(text: str, mode: str, speed_mode: str): |
| if not _generate_lock.acquire(blocking=False): |
| yield json.dumps({"type": "status", "content": "Server busy"}) + "\n" |
| yield json.dumps({"type": "done"}) + "\n" |
| return |
| |
| try: |
| if mode == "literacy": |
| from masteries.literacy.inference.v4_orchestrator import literacy_pipeline as active_pipeline |
| elif mode == "research": |
| from masteries.research.inference.v4_orchestrator import research_pipeline as active_pipeline |
| else: |
| from masteries.coding.inference.v4_orchestrator import v4_pipeline as active_pipeline |
|
|
| for event in active_pipeline(text, speed_mode=speed_mode): |
| yield json.dumps(event) + "\n" |
| |
| yield json.dumps({"type": "done"}) + "\n" |
| except Exception as e: |
| traceback.print_exc() |
| yield json.dumps({"type": "error", "content": str(e)}) + "\n" |
| finally: |
| _generate_lock.release() |
|
|
|
|
| demo = gr.Interface( |
| fn=generate_stream_gpu, |
| inputs=[ |
| gr.Textbox(label="text"), |
| gr.Textbox(label="mode", value="coding"), |
| gr.Textbox(label="speed_mode", value="pro") |
| ], |
| outputs=gr.Textbox(label="output"), |
| title="PACE AI Inference Service", |
| description="Backend AI API for PACE. Used via Gradio Client." |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |
|
|