[{"role":"user","content":"\nDebug this Python:\n\ndef avg(nums):\n return sum(nums) / len(nums)\n\nprint(avg([]))\n"},{"role":"assistant","content":"\nRoot cause: `len([])` is zero, so `sum([]) / 0` raises `ZeroDivisionError`.\n\n```python\ndef avg(nums):\n if not nums:\n return 0.0\n return sum(nums) / len(nums)\n```\n\nReturning `0.0` for empty input is one choice; raising `ValueError` is the other if callers should never pass an empty list.\n"},{"role":"user","content":"\nWrite a TypeScript function that debounces an async function and cancels in-flight calls.\n"},{"role":"assistant","content":"\nReturns a wrapped function that delays invocation and aborts the previous call via AbortController.\n\n```typescript\nexport function debounceAsync\u003cTArgs extends unknown[], TResult\u003e(\n fn: (signal: AbortSignal, ...args: TArgs) =\u003e Promise\u003cTResult\u003e,\n delayMs: number,\n): (...args: TArgs) =\u003e Promise\u003cTResult\u003e {\n let timer: ReturnType\u003ctypeof setTimeout\u003e | null = null;\n let controller: AbortController | null = null;\n\n return (...args: TArgs) =\u003e\n new Promise\u003cTResult\u003e((resolve, reject) =\u003e {\n if (timer) clearTimeout(timer);\n if (controller) controller.abort();\n\n controller = new AbortController();\n const signal = controller.signal;\n\n timer = setTimeout(() =\u003e {\n fn(signal, ...args).then(resolve, reject);\n }, delayMs);\n });\n}\n```\n\nCaller's `fn` must respect `signal` (e.g. pass it to `fetch`) for cancellation to actually stop network work.\n"}]