Download app.py from ableian/scgpt: direct link, hf CLI and curl.
- Browser
- Download file 4.9 kB
-
https://huggingface.co/spaces/ableian/scgpt/resolve/main/app.py
- Command line
-
hf download hf://spaces/ableian/scgpt/app.py
-
curl -L -o app.py https://huggingface.co/spaces/ableian/scgpt/resolve/main/app.py
4.9 kB
| import gradio as gr | |
| import torch | |
| from pathlib import Path | |
| import traceback | |
| import sys | |
| # Force reload of model module | |
| if 'model' in sys.modules: | |
| del sys.modules['model'] | |
| from model import miniGPT | |
| DEVICE = "cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu") | |
| print(f"Loading model on device: {DEVICE}") | |
| SCRIPT_DIR = Path(__file__).parent | |
| model_dir = SCRIPT_DIR / "trained_model_small" | |
| trainer = None | |
| error_message = None | |
| if model_dir.exists(): | |
| print(f"Loading model from {model_dir}") | |
| print(f"Model directory contents:") | |
| for item in model_dir.iterdir(): | |
| print(f" - {item.name}") | |
| try: | |
| trainer = miniGPT.load(str(model_dir), map_location=DEVICE) | |
| trainer = trainer.to(DEVICE) | |
| print("β Model loaded successfully!") | |
| print(f"β Model ready for inference on {DEVICE}!") | |
| except Exception as e: | |
| error_message = str(e) | |
| print(f"β Error loading model: {e}") | |
| print(f"β Full traceback:") | |
| print(traceback.format_exc()) | |
| trainer = None | |
| else: | |
| error_message = f"Model directory not found at {model_dir}" | |
| print(f"β {error_message}") | |
| print(f"β Contents of {SCRIPT_DIR}:") | |
| for item in SCRIPT_DIR.iterdir(): | |
| print(f" - {item.name}") | |
| def generate_recipe(prompt, max_length=300, temperature=0.85, top_k=50, top_p=0.95): | |
| if trainer is None: | |
| if error_message: | |
| return f"β Error: Model not loaded.\n\nDetails: {error_message}" | |
| return "β Error: Model not loaded" | |
| try: | |
| generated = trainer.generate( | |
| prompt, | |
| max_length=max_length, | |
| temperature=temperature, | |
| top_k=top_k, | |
| top_p=top_p, | |
| ) | |
| return generated | |
| except Exception as e: | |
| return f"β Error generating recipe: {str(e)}" | |
| with gr.Blocks(title="Recipe Generator", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown( | |
| """ | |
| # Welcome eggs 1/4 cup - stupidcookgpt | |
| Generate recipes using a fine-tuned miniGPT model trained on recipe data. | |
| Verified to generate your next delicious meal in 20 seconds (unless it doesn't). | |
| **Model Info:** ~124M parameters, trained on corbt/all-recipes. | |
| *small print*: ppl this is a friggin demo not some gordon ramsay, pls use common sense and don't sue me if you eat its egg-chocolate-broccoli surprise. | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| prompt_input = gr.Textbox( | |
| label="Recipe Prompt", | |
| placeholder="e.g., Recipe for chocolate cake:\n\nIngredients:", | |
| lines=3, | |
| value="Recipe for chocolate ", | |
| ) | |
| with gr.Column(): | |
| generate_btn = gr.Button("Tell the chef...", variant="primary", size="lg") | |
| output = gr.Textbox(label="Generated Recipe", lines=12, max_lines=20) | |
| with gr.Row(): | |
| with gr.Column(): | |
| max_length = gr.Slider(50, 500, 300, step=50, label="Max Length", info="Maximum tokens to generate") | |
| with gr.Column(): | |
| temperature = gr.Slider(0.1, 2.0, 0.85, step=0.1, label="Temperature", info="Higher = more creative") | |
| with gr.Row(): | |
| with gr.Column(): | |
| top_k = gr.Slider(0, 100, 50, step=5, label="Top-K", info="Sample from top K tokens") | |
| with gr.Column(): | |
| top_p = gr.Slider(0.0, 1.0, 0.95, step=0.05, label="Top-P", info="Nucleus sampling threshold") | |
| generate_btn.click( | |
| fn=generate_recipe, | |
| inputs=[prompt_input, max_length, temperature, top_k, top_p], | |
| outputs=output, | |
| ) | |
| # example prompts | |
| gr.Examples( | |
| examples=[ | |
| ["Recipe for chocolate ", 300, 0.85, 50, 0.95], | |
| ["Recipe for a delicious apple pie:\n\nIngredients:\n", 300, 0.85, 50, 0.95], | |
| ["Ingredients: flour butter sugar eggs", 300, 0.85, 50, 0.95], | |
| ["Instructions: preheat oven to 350", 300, 0.85, 50, 0.95], | |
| ["How to make a perfect coffee cake", 300, 0.85, 50, 0.95], | |
| ], | |
| inputs=[prompt_input, max_length, temperature, top_k, top_p], | |
| outputs=output, | |
| fn=generate_recipe, | |
| cache_examples=False, | |
| ) | |
| gr.Markdown( | |
| """ | |
| ### How to use: | |
| 1. Enter a prompt 4 the chef | |
| 2. Adjust chef parameters if desired (make it gordon ramsay when Temp=2 or a chill cook with Temp=0.4) | |
| 3. Click "Tell the chef..." to create a new recipe | |
| ### Tips: | |
| - **Temperature**: Higher values (1.0+) make the chef more creative but probably more sus. | |
| - **Top-K**: Limits sampling to top K most likely tokens | |
| - **Top-P**: Only considers tokens with cumulative probability <= P | |
| """ | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |