Spaces:
Running
Running
Download scripts/check_interface.py from ciaochris/HumanTouch: direct link, hf CLI and curl.
- Browser
- Download file 3.1 kB
-
https://huggingface.co/spaces/ciaochris/HumanTouch/resolve/refs%2Fpr%2F2/scripts/check_interface.py
- Command line
-
hf download hf://spaces/ciaochris/HumanTouch@refs/pr/2/scripts/check_interface.py
-
curl -L -o check_interface.py https://huggingface.co/spaces/ciaochris/HumanTouch/resolve/refs%2Fpr%2F2/scripts/check_interface.py
3.1 kB
| """Checks the application callback contract against real Gradio components.""" | |
| import os | |
| import sys | |
| import unittest | |
| import warnings | |
| from pathlib import Path | |
| os.environ["GRADIO_ANALYTICS_ENABLED"] = "False" | |
| sys.path.insert(0, str(Path(__file__).resolve().parents[1])) | |
| import gradio as gr | |
| from studio_ui import create_interface | |
| class StubWriter: | |
| def humanize_block_text(self, text, *args): | |
| if not text.strip(): | |
| raise gr.Error("Add a draft first.") | |
| return "Thanks for your help." | |
| def generate_co_creation(self, text, history, *args): | |
| if text == "fail": | |
| raise gr.Error("Please try again.") | |
| return [*history, {"role": "user", "content": text}, | |
| {"role": "assistant", "content": "A draft."}], "" | |
| class InterfaceTests(unittest.TestCase): | |
| def setUpClass(cls): | |
| cls.interface = create_interface(StubWriter) | |
| cls.handlers = {fn.api_name: fn for fn in cls.interface.fns.values()} | |
| def test_rewrite_failure_preserves_text_and_restores_controls(self): | |
| with warnings.catch_warnings(): | |
| warnings.simplefilter("ignore") | |
| result = self.handlers["rewrite"].fn("", 35, 50, "Keep length", "") | |
| self.assertEqual(result[:2], (gr.skip(), gr.skip())) | |
| self.assertTrue(all(update["interactive"] for update in result[2:])) | |
| def test_rewrite_success_returns_real_comparison(self): | |
| result = self.handlers["rewrite"].fn("Thank you for your assistance.", 35, 50, "Keep length", "") | |
| self.assertEqual(result[0], "Thanks for your help.") | |
| self.assertIn("<ins>", result[1]) | |
| self.assertTrue(all(update["interactive"] for update in result[2:])) | |
| def test_composition_failure_restores_all_controls_and_preserves_text(self): | |
| with warnings.catch_warnings(): | |
| warnings.simplefilter("ignore") | |
| result = self.handlers["compose"].fn("fail", [], 35, 50) | |
| self.assertEqual(result[0], gr.skip()) | |
| self.assertNotIn("value", result[1]) | |
| self.assertEqual(len(result), 7) | |
| self.assertTrue(all(update["interactive"] for update in result[1:])) | |
| def test_composition_success_restores_seed_actions(self): | |
| result = self.handlers["compose"].fn("A seed", [], 35, 50) | |
| self.assertEqual(result[0][-1]["content"], "A draft.") | |
| self.assertEqual(result[1]["value"], "") | |
| self.assertEqual(len(result), 7) | |
| self.assertTrue(all(update["interactive"] for update in result[1:])) | |
| def test_missing_key_keeps_exploration_and_disables_generation(self): | |
| def unavailable(): | |
| raise EnvironmentError("No key") | |
| interface = create_interface(unavailable) | |
| buttons = {block.elem_id: block for block in interface.blocks.values() if isinstance(block, gr.Button)} | |
| self.assertFalse(buttons["humanize_btn"].interactive) | |
| self.assertFalse(buttons["compose_btn"].interactive) | |
| self.assertTrue(any(isinstance(block, gr.Radio) for block in interface.blocks.values())) | |
| if __name__ == "__main__": | |
| unittest.main() | |