SmartWareHouseAI / src /inventory_db.py
Pro-Coder's picture
Upload 28 files
f0fae3f verified
Raw
History Blame Contribute Delete
1.82 kB
"""
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)