Spaces:
Sleeping
Sleeping
Download src/tools/database.py from FlyingNunchucks/07-tool-using-agent: direct link, hf CLI and curl.
- Browser
- Download file 2.77 kB
-
https://huggingface.co/spaces/FlyingNunchucks/07-tool-using-agent/resolve/main/src/tools/database.py
- Command line
-
hf download hf://spaces/FlyingNunchucks/07-tool-using-agent/src/tools/database.py
-
curl -L -o database.py https://huggingface.co/spaces/FlyingNunchucks/07-tool-using-agent/resolve/main/src/tools/database.py
2.77 kB
| import sqlite3 | |
| from pathlib import Path | |
| from typing import Any, Dict, List | |
| DB_PATH = Path("data/operations.db") | |
| def initialize_database() -> None: | |
| """Create the demo database and seed it if needed.""" | |
| DB_PATH.parent.mkdir(parents=True, exist_ok=True) | |
| with sqlite3.connect(DB_PATH) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute( | |
| """ | |
| CREATE TABLE IF NOT EXISTS inventory ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| item_name TEXT NOT NULL, | |
| category TEXT NOT NULL, | |
| quantity INTEGER NOT NULL, | |
| unit_price REAL NOT NULL | |
| ) | |
| """ | |
| ) | |
| cursor.execute("SELECT COUNT(*) FROM inventory") | |
| row_count = cursor.fetchone()[0] | |
| if row_count == 0: | |
| sample_rows = [ | |
| ("Laptop", "Electronics", 12, 1299.99), | |
| ("Monitor", "Electronics", 25, 349.50), | |
| ("Keyboard", "Electronics", 40, 89.99), | |
| ("Office Chair", "Furniture", 8, 499.00), | |
| ("Desk", "Furniture", 6, 799.00), | |
| ("Notebook", "Office Supplies", 120, 4.99), | |
| ("Pen Set", "Office Supplies", 75, 12.50), | |
| ] | |
| cursor.executemany( | |
| """ | |
| INSERT INTO inventory ( | |
| item_name, | |
| category, | |
| quantity, | |
| unit_price | |
| ) | |
| VALUES (?, ?, ?, ?) | |
| """, | |
| sample_rows, | |
| ) | |
| conn.commit() | |
| def search_inventory( | |
| item_name: str = "", | |
| category: str = "", | |
| ) -> Dict[str, Any]: | |
| """ | |
| Search inventory using optional item name and category filters. | |
| This tool exposes a constrained query interface rather than allowing | |
| arbitrary SQL execution. | |
| """ | |
| initialize_database() | |
| query = """ | |
| SELECT | |
| id, | |
| item_name, | |
| category, | |
| quantity, | |
| unit_price | |
| FROM inventory | |
| WHERE 1 = 1 | |
| """ | |
| parameters: List[Any] = [] | |
| if item_name: | |
| query += " AND LOWER(item_name) LIKE LOWER(?)" | |
| parameters.append(f"%{item_name.strip()}%") | |
| if category: | |
| query += " AND LOWER(category) = LOWER(?)" | |
| parameters.append(category.strip()) | |
| query += " ORDER BY item_name" | |
| with sqlite3.connect(DB_PATH) as conn: | |
| conn.row_factory = sqlite3.Row | |
| cursor = conn.execute(query, parameters) | |
| rows = [dict(row) for row in cursor.fetchall()] | |
| return { | |
| "filters": { | |
| "item_name": item_name, | |
| "category": category, | |
| }, | |
| "count": len(rows), | |
| "items": rows, | |
| } |