File size: 1,977 Bytes
fd7b742
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import time
import torch
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

# Load model
MODEL_PATH = "Janushi/FoodExtract-gemma-3-270m-fine-tune-v1"

loaded_model = AutoModelForCausalLM.from_pretrained(
    pretrained_model_name_or_path=MODEL_PATH,
    dtype="auto",
    device_map="auto",
    attn_implementation="eager"
)

tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)

loaded_model_pipeline = pipeline(
    "text-generation",
    model=loaded_model,
    tokenizer=tokenizer
)

def pred_on_text(input_text):
    start_time = time.time()
    raw_output = loaded_model_pipeline(
        text_inputs=[{"role": "user", "content": input_text}],
        max_new_tokens=256,
        disable_compile=True
    )
    end_time = time.time()
    total_time = round(end_time - start_time, 4)
    generated_text = raw_output[0]["generated_text"][1]["content"]
    return generated_text, raw_output, total_time

description = """Extract food and drink items from text using a fine-tuned Gemma-3-270M.
Fine-tuned on mrdbourke/FoodExtract-1k dataset.

**Input:** Any text or image caption
**Output:** Structured food/drink extraction

**Example:**
- Input: "eggs, bacon and toast with orange juice"
- Output: food_or_drink: 1, foods: eggs, bacon, toast, drinks: orange juice
"""

demo = gr.Interface(
    fn=pred_on_text,
    inputs=gr.TextArea(lines=4, label="Input Text"),
    outputs=[
        gr.TextArea(lines=4, label="Generated Text"),
        gr.TextArea(lines=7, label="Raw Output"),
        gr.Number(label="Generation Time (s)")
    ],
    title="🍳 BiteSight — Food Extraction with Fine-Tuned Gemma-3-270M",
    description=description,
    examples=[
        ["A plate of grilled tofu, salad with avocado and tomatoes"],
        ["Indian breakfast with roti, tea and fried potatoes"],
        ["cheese tacos"],
        ["A photo of a dog sitting on a beach"]
    ]
)

if __name__ == "__main__":
    demo.launch(share=False)