Spaces:
Running on Zero
Running on Zero
| """ | |
| inventory_db.py | |
| ---------------- | |
| Very small "NL -> structured query" layer over the synthetic inventory and | |
| orders tables. It uses the intent classifier's output plus simple regex | |
| slot extraction (SKU codes, order IDs, zone names) to filter the | |
| in-memory DataFrames -- a lightweight stand-in for the kind of | |
| WMS/WCS query interface a production assistant would call as a tool. | |
| """ | |
| import re | |
| import pandas as pd | |
| SKU_RE = re.compile(r"SKU-\d{3,4}", re.IGNORECASE) | |
| ORDER_RE = re.compile(r"#\d{4,6}") | |
| ZONE_RE = re.compile(r"zone [a-d]", re.IGNORECASE) | |
| def extract_sku(text: str): | |
| m = SKU_RE.search(text) | |
| return m.group(0).upper() if m else None | |
| def extract_order_id(text: str): | |
| m = ORDER_RE.search(text) | |
| return m.group(0) if m else None | |
| def extract_zone(text: str): | |
| m = ZONE_RE.search(text) | |
| return m.group(0).title() if m else None | |
| def query_inventory(inventory_df: pd.DataFrame, text: str) -> pd.DataFrame: | |
| sku = extract_sku(text) | |
| zone = extract_zone(text) | |
| df = inventory_df.copy() | |
| if sku: | |
| df = df[df["sku"].str.upper() == sku] | |
| if zone: | |
| df = df[df["zone"].str.lower() == zone.lower()] | |
| if df.empty and not sku and not zone: | |
| # no specific filters recognised -> show low-stock items as a useful default | |
| df = inventory_df[inventory_df["on_hand_units"] <= inventory_df["reorder_point"]] | |
| return df.reset_index(drop=True) | |
| def query_orders(orders_df: pd.DataFrame, text: str) -> pd.DataFrame: | |
| order_id = extract_order_id(text) | |
| zone = extract_zone(text) | |
| df = orders_df.copy() | |
| if order_id: | |
| df = df[df["order_id"] == order_id] | |
| elif zone: | |
| df = df[df["zone"].str.lower() == zone.lower()] | |
| elif "delay" in text.lower(): | |
| df = df[df["status"] == "Delayed"] | |
| return df.reset_index(drop=True) | |