Makes it so our most critical jobs go through first. Priority order:
1. Force-refetched cells
2. Cells visible on the current page
3. All other cells
4. Retries
5. Evaluations
We've outgrown the run-everything-on-one-machine setup. This change moves background jobs to a different Docker image in production. It also adds a `jobKey` to certain jobs so if we try to process the same cell multiple times it'll only actually run the job once.
* Rename prompt and completion tokens to input and output tokens
* Add getUsage function
* Record model and cost when reporting log
* Remove unused imports
* Move UsageGraph to its own component
* Standardize model response fields
* Fix types