| import gradio as gr |
| import requests |
| import os |
| from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline |
|
|
| model_id = "HuggingFaceH4/zephyr-7b-beta" |
| tokenizer = AutoTokenizer.from_pretrained(model_id) |
| model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto") |
| llm = pipeline("text-generation", model=model, tokenizer=tokenizer) |
|
|
|
|
| |
| 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}" |
|
|
| |
| def chat_agent(message, history): |
| |
| 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: |
| |
| response = llm(message, max_new_tokens=256)[0]["generated_text"] |
| history = history or [] |
| history.append((message, response)) |
| return history, history |
|
|
| |
| 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() |
|
|