MCP_test / app.py
PD03's picture
Update app.py
9992cba verified
raw
history blame
2.71 kB
import gradio as gr
import requests
import os
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
model_id = "HuggingFaceH4/zephyr-7b-beta" # Change here!
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
llm = pipeline("text-generation", model=model, tokenizer=tokenizer)
# --- SAP Sales Order Header tool ---
def query_sales_order_header():
api_url = "https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder?$top=5&$inlinecount=allpages"
api_key = os.getenv("SAP_SANDBOX_API_KEY", "YOUR_API_KEY")
headers = {
"APIKey": api_key,
"Accept": "application/json"
}
try:
r = requests.get(api_url, headers=headers, timeout=10)
r.raise_for_status()
data = r.json()
results = data.get('d', {}).get('results', [])
if not results:
return "No sales orders found."
summaries = []
for order in results:
summaries.append(
f"Order: {order['SalesOrder']} | "
f"Type: {order['SalesOrderType']} | "
f"Org: {order['SalesOrganization']} | "
f"Date: {order['SalesOrderDate']} | "
f"SoldTo: {order['SoldToParty']} | "
f"Net: {order['TotalNetAmount']} {order['TransactionCurrency']} | "
f"Status: {order['OverallSDProcessStatus']}"
)
return "\n".join(summaries)
except Exception as e:
return f"Error fetching Sales Orders: {e}"
# --- Main chat function ---
def chat_agent(message, history):
# Rudimentary tool use: check for sales order question
tool_trigger = ["sales order", "sap order", "sap sales"]
if any(kw in message.lower() for kw in tool_trigger):
tool_response = query_sales_order_header()
response = f"(SAP Sales Orders)\n{tool_response}"
else:
# Pure LLM response
response = llm(message, max_new_tokens=256)[0]["generated_text"]
history = history or []
history.append((message, response))
return history, history
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown(
"""
# SAP Sales Order Chat Agent
Ask about SAP sales orders or general questions.
Example:
- `Show me the latest SAP sales orders.`
- `Tell me about SAP order values.`
"""
)
chatbot = gr.Chatbot()
txt = gr.Textbox(label="Your question")
clear = gr.Button("Clear chat")
txt.submit(chat_agent, [txt, chatbot], [chatbot, chatbot])
clear.click(lambda: ([], []), None, [chatbot, chatbot])
demo.launch()