File size: 1,790 Bytes
a5ece8b
aa97025
0e84c33
887b999
0e84c33
0b8ba87
0e84c33
 
 
 
 
 
 
 
0b8ba87
 
0e84c33
 
 
 
 
8cc354c
0e84c33
 
 
0b8ba87
0e84c33
 
 
 
0b8ba87
0e84c33
 
 
 
 
79c9d08
0e84c33
e784f1e
0e84c33
 
 
af13fe6
0e84c33
 
 
 
e784f1e
 
79c9d08
0b8ba87
0e84c33
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
import gradio as gr
import pandas as pd
from transformers import pipeline

# 1) Load your synthetic SAP data
df = pd.read_csv("synthetic_profit.csv")
table = df.astype(str).to_dict(orient="records")

# 2) Table‐QA pipeline with TAPEX
qa = pipeline(
    "table-question-answering",
    model="microsoft/tapex-base-finetuned-wtq",
    tokenizer="microsoft/tapex-base-finetuned-wtq",
    device=-1
)

# 3) Three few‐shot examples
EXAMPLE_PROMPT = """
Example 1:
Q: What is the total revenue for Product A in EMEA in Q1 2024?
A: Filter Product=A & Region=EMEA & FiscalYear=2024 & FiscalQuarter=Q1, then sum Revenue → 3075162.49

Example 2:
Q: What is the total cost for Product A in EMEA in Q1 2024?
A: Filter Product=A & Region=EMEA & FiscalYear=2024 & FiscalQuarter=Q1, then sum Cost → 2894321.75

Example 3:
Q: What is the total margin for Product A in EMEA in Q1 2024?
A: Filter Product=A & Region=EMEA & FiscalYear=2024 & FiscalQuarter=Q1, then sum ProfitMargin → 0.18
"""

def answer_question(question: str) -> str:
    # Prepend the examples to teach the model your pattern
    full_query = EXAMPLE_PROMPT + f"\nQ: {question}\nA:"
    result = qa(table=table, query=full_query)
    return result.get("answer", "No answer found.")

# 4) Gradio UI
iface = gr.Interface(
    fn=answer_question,
    inputs=gr.Textbox(lines=2, placeholder="Ask a basic question…", label="Your question"),
    outputs=gr.Textbox(lines=4, label="Answer"),
    title="SAP Profitability Q&A",
    description=(
        "Ask simple revenue/cost/margin questions on the synthetic SAP data. "
        "Powered by microsoft/tapex-base-finetuned-wtq with three few‐shot examples."
    ),
    allow_flagging="never",
)

if __name__ == "__main__":
    iface.launch(server_name="0.0.0.0", server_port=7860)