import gradio as gr import json from fastapi import FastAPI, Request from fastapi.responses import JSONResponse import uvicorn import threading # -------------------------------------- # Rezept-Logik # -------------------------------------- def generate_recipe(required, available, max_ingredients): # Dummy-Logik – hier kannst du dein echtes Rezeptmodell verwenden 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}) # -------------------------------------- # Gradio UI # -------------------------------------- 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 ) # -------------------------------------- # FastAPI-Server für eigene API # -------------------------------------- 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)) # -------------------------------------- # Beide Server starten # -------------------------------------- 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)