Задача
📝 **Въпрос:** **Напишете функцията** \`safe_search(query, filter)\`, която защитава RAG с множество клиенти срещу #1 клас течове — липсващ филтър \`tenant_id\`.
правила:
- Ако \`filter\` не е dict → повдигнете \`ValueError("filter must be a dict")\`.
- Ако \`tenant_id\` липсва ИЛИ празен/фалшив → повдигнете \`ValueError("СИГУРНОСТ: филтърът tenant_id е задължителен и не е празен")\`.
- В противен случай върнете \`f"OK | {query!r} с обхват на клиент {filter['tenant_id']!r}"\`.
След това го изпълнете срещу четири заявки (две реални, две опасни):
\`\`\`
ОК | „правила за възстановяване“ с обхват на наемател „acme“
БЛОКИРАН | 'таблица със заплати' | СИГУРНОСТ: филтърът tenant_id е задължителен и не е празен
ОК | „хронология на поръчките“ с обхват на наемател „globex“
БЛОКИРАН | „API ключове“ | СИГУРНОСТ: филтърът tenant_id е задължителен и не е празен
\`\`\`
Случаят с празен низ е подъл — \`"tenant_id" във филтъра\` ще премине, но \`filter.get("tenant_id")\` връща грешно. **Винаги проверявайте истинността, никога само наличието на ключ.** Неправилно конфигуриран интерфейс, който по подразбиране \`tenant_id\` е \`""\` е причинил изтичане на информация между клиенти в реалния свят.
📋 Изберете правилния отговор.
💡 **Съвет:** Прочетете отново теорията по-горе, ако не сте сигурни.