Build an AI Support Bot for Your Algerian Online Store

Store Support Bot in Python: Source Code

Files: 2988.4 KiBDownload ZIP

tests/conftest.py

1.7 KiBRawDownload
Python
1from __future__ import annotations23import json4from pathlib import Path5from types import SimpleNamespace6from typing import Any78import pytest910from store_assistant.store import Store1112CATALOG = Path(__file__).resolve().parent.parent / "data" / "demo_store.json"131415@pytest.fixture()16def store(tmp_path: Path) -> Store:17    s = Store(tmp_path / "test.db")18    s.load_catalog(CATALOG)19    yield s20    s.close()212223def tool_call(call_id: str, name: str, arguments: dict[str, Any] | str) -> SimpleNamespace:24    args = arguments if isinstance(arguments, str) else json.dumps(arguments)25    return SimpleNamespace(id=call_id, type="function", function=SimpleNamespace(name=name, arguments=args))262728def completion(content: str | None = None, tool_calls: list[SimpleNamespace] | None = None) -> SimpleNamespace:29    message = SimpleNamespace(role="assistant", content=content, tool_calls=tool_calls)30    return SimpleNamespace(choices=[SimpleNamespace(message=message, finish_reason="stop")])313233class FakeClient:34    """Plays back scripted responses and records every request."""3536    def __init__(self, responses: list[Any]) -> None:37        self._responses = list(responses)38        self.requests: list[dict[str, Any]] = []39        self.chat = SimpleNamespace(completions=SimpleNamespace(create=self._create))4041    async def _create(self, **kwargs: Any) -> Any:42        # Copy the messages: the caller keeps appending to the same list.43        self.requests.append({**kwargs, "messages": [dict(m) for m in kwargs["messages"]]})44        if not self._responses:45            raise AssertionError("FakeClient ran out of scripted responses")46        response = self._responses.pop(0)47        if isinstance(response, Exception):48            raise response49        return response