|
import gradio as gr |
|
import json |
|
from fastapi import FastAPI, Request |
|
from fastapi.responses import JSONResponse |
|
import uvicorn |
|
import threading |
|
|
|
|
|
|
|
|
|
def generate_recipe(required, available, max_ingredients): |
|
|
|
recipe = f"""Rezept mit maximal {max_ingredients} Zutaten: |
|
|
|
Verwendete Zutaten: |
|
- Benötigt: {required} |
|
- Verfügbar: {available} |
|
|
|
Zubereitung: |
|
1. Schneide alle Zutaten klein. |
|
2. Koche sie zusammen in einem Topf. |
|
3. Würze nach Geschmack und serviere heiß. |
|
""" |
|
return recipe |
|
|
|
def generate_recipe_api(required, available, max_ingredients): |
|
recipe = generate_recipe(required, available, max_ingredients) |
|
return json.dumps({"recipe": recipe}) |
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("## KI-Rezept-Generator") |
|
|
|
with gr.Row(): |
|
required_input = gr.Textbox(label="Benötigte Zutaten", placeholder="z.B. chicken, rice") |
|
available_input = gr.Textbox(label="Verfügbare Zutaten", placeholder="z.B. onions, garlic, tomatoes") |
|
|
|
max_ingredients_input = gr.Slider(label="Maximale Anzahl Zutaten", minimum=3, maximum=12, value=6, step=1) |
|
output = gr.Textbox(label="Generiertes Rezept") |
|
|
|
generate_btn = gr.Button("Rezept generieren") |
|
generate_btn.click( |
|
fn=generate_recipe, |
|
inputs=[required_input, available_input, max_ingredients_input], |
|
outputs=output |
|
) |
|
|
|
|
|
|
|
|
|
app = FastAPI() |
|
|
|
@app.post("/generate") |
|
async def generate(request: Request): |
|
data = await request.json() |
|
required = data.get("required", "") |
|
available = data.get("available", "") |
|
max_ingredients = int(data.get("max_ingredients", 6)) |
|
result = generate_recipe_api(required, available, max_ingredients) |
|
return JSONResponse(content=json.loads(result)) |
|
|
|
|
|
|
|
|
|
def launch_gradio(): |
|
demo.launch(server_name="0.0.0.0", server_port=7860, share=False) |
|
|
|
threading.Thread(target=launch_gradio).start() |
|
|
|
if __name__ == "__main__": |
|
uvicorn.run(app, host="0.0.0.0", port=7861) |
|
|