```typescript
export function doseTotals(log: [string, string][]): Record<string, string> {
  const totals = new Map<string, number>();

  for (const [reagent, amount] of log) {
    if (!/^-?\d+(\.\d{1,3})?$/.test(amount)) {
      throw new Error(`Invalid dose format: ${amount}`);
    }

    const value = parseFloat(amount);
    totals.set(reagent, (totals.get(reagent) || 0) + value * 1000);
  }

  return Object.fromEntries(
    Array.from(totals.entries()).map(([reagent, total]) => {
      let formattedTotal = total / 1000;
      if (formattedTotal === Math.floor(formattedTotal)) {
        formattedTotal = Math.floor(formattedTotal);
      }
      return [reagent, formattedTotal.toFixed(3)];
    })
  );
}
```