File size: 2,405 Bytes
ba2f564
 
098c005
 
c381645
ba2f564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74d625f
ba2f564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
098c005
74d625f
098c005
 
c381645
 
 
 
ba2f564
 
72a399b
ba2f564
 
 
c381645
ba2f564
72a399b
c381645
72a399b
c381645
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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)