Créer un bot de support IA pour votre boutique en ligne
Bot de support en Python : code source
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