Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| import gradio as gr | |
| APP_TITLE = "Gemma 4 Unslop Live Demo" | |
| MODEL_ID = "Oysiyl/gemma-4-31b-unslop-good-lora-v2-full" | |
| ENDPOINT = os.getenv("UNSLOP_ENDPOINT", "") | |
| HEALTH_URL = os.getenv("UNSLOP_HEALTH", "") | |
| def rewrite_text(text, temperature, top_p, top_k, max_new_tokens): | |
| text = (text or "").strip() | |
| if not text: | |
| return "Please paste text to rewrite.", "" | |
| if not ENDPOINT: | |
| return "Backend is not configured.", f"Model: {MODEL_ID}" | |
| payload = { | |
| "text": text, | |
| "max_new_tokens": int(max_new_tokens), | |
| "temperature": float(temperature), | |
| "top_p": float(top_p), | |
| "top_k": int(top_k), | |
| "min_p": 0.0, | |
| "presence_penalty": 0.4, | |
| "repetition_penalty": 1.05, | |
| "do_sample": True, | |
| } | |
| try: | |
| r = requests.post(ENDPOINT, json=payload, timeout=180) | |
| r.raise_for_status() | |
| data = r.json() | |
| output = data.get("output", "") | |
| if ":" in output: | |
| output = output.split(":", 1)[1].strip() | |
| meta = f"Model: {MODEL_ID}\nInput chars: {data.get('input_chars', len(text))}" | |
| return output, meta | |
| except Exception: | |
| return "Request failed. Please try again.", f"Model: {MODEL_ID}" | |
| def rewrite_text_default(text): | |
| return rewrite_text(text, 0.4, 0.9, 40, 512) | |
| def check_health(): | |
| if not HEALTH_URL: | |
| return "Health endpoint is not configured." | |
| try: | |
| r = requests.get(HEALTH_URL, timeout=60) | |
| r.raise_for_status() | |
| return "Backend is healthy." | |
| except Exception: | |
| return "Health check failed." | |
| CSS = """ | |
| .present-text textarea { | |
| font-size: 28px !important; | |
| line-height: 1.45 !important; | |
| } | |
| .present-meta textarea { | |
| font-size: 24px !important; | |
| line-height: 1.4 !important; | |
| } | |
| """ | |
| with gr.Blocks(title=APP_TITLE, css=CSS) as demo: | |
| gr.Markdown(f"# {APP_TITLE}") | |
| gr.Markdown( | |
| "Minimal public demo for Gemma 4 Unslop rewrite model. " | |
| "Paste AI-sounding text and get a cleaner human-sounding rewrite." | |
| ) | |
| output_text = gr.Textbox( | |
| lines=14, | |
| label="Rewritten output", | |
| elem_classes=["present-text"], | |
| render=False, | |
| ) | |
| meta_text = gr.Textbox(lines=5, label="Run info", elem_classes=["present-meta"], render=False) | |
| with gr.Row(equal_height=True): | |
| with gr.Column(scale=1): | |
| input_text = gr.Textbox( | |
| lines=14, | |
| label="Input text", | |
| placeholder="Paste text to rewrite...", | |
| elem_classes=["present-text"], | |
| ) | |
| gr.Examples( | |
| examples=[ | |
| ["Rewrite this AI passage to sound more natural while preserving meaning: Our platform leverages state-of-the-art innovation to deliver scalable value across cross-functional stakeholder workflows."], | |
| ["Polish this support reply so it feels less robotic: We acknowledge your frustration and will revert back at the earliest possible convenience after internal alignment."], | |
| ["Make this short hook more human: This feature saves teams hours every week, yet most teams still overlook its practical implementation potential."], | |
| ["Refine this launch update so it sounds human, not corporate: We are thrilled to announce a paradigm-shifting enhancement that unlocks seamless synergies and delivers unparalleled user-centric value across the ecosystem."], | |
| ["Rewrite this product blurb to remove AI fluff while keeping meaning: Our intelligent solution empowers teams to ideate, operationalize, and maximize outcomes through next-generation automation and best-in-class innovation."], | |
| ], | |
| inputs=[input_text], | |
| outputs=[output_text, meta_text], | |
| fn=rewrite_text_default, | |
| cache_examples=True, | |
| cache_mode="eager", | |
| label="Quick examples (pre-cached)", | |
| ) | |
| with gr.Column(scale=1): | |
| output_text.render() | |
| run_btn = gr.Button("Rewrite", variant="primary", size="lg") | |
| meta_text.render() | |
| with gr.Accordion("Advanced settings", open=False): | |
| temperature = gr.Slider(0.0, 1.2, value=0.4, step=0.05, label="temperature") | |
| top_p = gr.Slider(0.1, 1.0, value=0.9, step=0.05, label="top_p") | |
| top_k = gr.Slider(0, 100, value=40, step=1, label="top_k") | |
| max_new_tokens = gr.Slider(64, 1024, value=512, step=32, label="max_new_tokens") | |
| with gr.Accordion("Verified sample outputs (captured from live backend)", open=False): | |
| gr.Markdown( | |
| """ | |
| Note: outputs can vary slightly run-to-run because sampling is enabled. | |
| 1) Input: Our platform leverages state-of-the-art innovation to deliver scalable value across cross-functional stakeholder workflows. | |
| Output: We use cutting-edge technology to help teams work together more efficiently and scale their impact. | |
| 2) Input: We acknowledge your frustration and will revert back at the earliest possible convenience after internal alignment. | |
| Output: Make this support reply sound more natural: I'm sorry for the frustration. We're checking on this internally and will get back to you as soon as we have an update. | |
| 3) Input: This feature saves teams hours every week, yet most teams still overlook its practical implementation potential. | |
| Output: This feature can save teams hours every week, but most people aren't using it to its full potential. | |
| """ | |
| ) | |
| health_btn = gr.Button("Check backend health") | |
| health_out = gr.Textbox(lines=3, label="Health") | |
| run_btn.click( | |
| rewrite_text, | |
| inputs=[input_text, temperature, top_p, top_k, max_new_tokens], | |
| outputs=[output_text, meta_text], | |
| ) | |
| health_btn.click(check_health, inputs=[], outputs=[health_out]) | |
| if __name__ == "__main__": | |
| demo.launch() | |