* Create dataset from request logs
* Move drawer expansion logic out of app state
* Add empty dataset page
* Properly handle zero dataset state
* Add DatasetEntriesTable
* Open DatasetEntryEditorDrawer on row click
* Add editable messages
* Change Request Logs link to be a span
* Add FunctionCallEditor
* Change styling around
* Stop logging variant stats after a while
* Change FunctionCallEditor widths
* Record input tokens even on errored calls
* Allow user to add messages
* Allow changing from empty text to function call
* Fix some data layout issues
* Default to empty output
* Update arguments on blur
* Add beta flag to datasets tab
* Remove unused import
* Save training and testing datasets on fine tune
* Add DatasetEntryType
* Condense migrations
* Add index to datasetEntry
* Add datasetEntry index
* Fix types
* Enable scrolling beyond last line in VariantEditor
* Divide new dataset entries exactly along training/testing ratio
* Remove unnecessary dataset code
* Fix jump on row selection
* Add FineTuneButton
* Add model slug to modal
* Add fine tunes to schema
* Remove dataset routers
* Remove more dataset-specific code
* Remove more data code
* Fix horizontal scroll bar jumping
* Add fine tunes page
* Actually create the fine tune entry
* Add beta modal
* Require beta for fine tunes and request logs
* Send user to waitlist link
* control beta features in .env variable
* Combine migration files
* Show beta features in app shell
* Clear selected log ids last when closing fine tune modal
* Remove ModalCloseButton from BetaModal
* Remove unused import
* Change timestamps to camelCase
* Allow user invitations
* Restyle inviting members
* Remove annoying comment
* Add page for accepting an invitation
* Send invitation email with Brevo
* Prevent admins from removing personal project users
* Mark access ceontrol for cancelProjectInvitation
* Make RadioGroup controlled
* Shorten form helper text
* Use nodemailer to send emails
* Update .env.example
Auth logic isn't shared between the clients anyway, so co-locating them is confusing since you can't use the same clients to call both. This also makes the codegen clients less verbose.