diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index fee303a..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve - ---- - -## Expected Behavior - - -## Actual Behavior - - -## Steps to Reproduce the Problem - -1. -1. -1. - -## Specifications - -- Version: -- Platform: \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..f2095cb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,29 @@ +name: Bug report +about: Create a report to help us improve +title: '[Bug]: ' +labels: ['bug', 'triage'] +body: + - type: textarea + id: expected + attributes: + label: Expected behavior + description: Please describe the expected behavior + validations: + required: true + - type: textarea + id: Actual + attributes: + label: Actual behavior + description: Please describe the behvior you're actually seeing. + validations: + required: true + - type: textarea + id: steps + attributes: + label: Steps to reproduce + description: Please list concise steps to reproduce the issue. Without reporoduction steps, we likely won't be able address this issue. + - type: textarea + id: version + attributes: + label: Additional details + description: Please include relevant details to this problem, such as: Dart/Flutter sdk version number, python version number, platform, and any other relevant details. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..8864edd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,27 @@ +name: Feature request +description: Request net-new features and behavior improvements +title: '[Feature]: ' +labels: ['feature', 'triage'] +body: + - type: textarea + attributes: + label: Use case + description: | + Please tell us the problem you are running into or gap you're trying to fill. + + Is your feature request related to a problem? Please give a clear and + concise description of what the problem is. + validations: + required: true + - type: textarea + attributes: + label: Proposal + description: | + Briefly but precisely describe what you would like implemented. + + Consider attaching something showing what you are imagining: + * images + * videos + * code samples + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/umbrealla.yml b/.github/ISSUE_TEMPLATE/umbrealla.yml new file mode 100644 index 0000000..a1ba378 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/umbrealla.yml @@ -0,0 +1,26 @@ +name: Create an umbrella issue +description: | + Create an umbrella issue for a new feature. +title: '☂️: ' +labels: ['feature', 'triage'] +body: + - type: markdown + attributes: + value: | + Thanks for filing an issue. + + Note: Umbrella issues require at least one individual child issue to exist. + - type: textarea + id: description + attributes: + label: Description + description: Please describe the feature you are adding. + validations: + required: true + - type: textarea + id: tracking_issues + attributes: + label: Tracking Issues + description: List of issues associated with this feature. + validations: + required: true \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ba31ec0..5b23c0b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,10 @@ -Fixes # +### Issue Link: +What is the link to the issue this cherry-pick is addressing? + +https://github.com/flutter/flutter/issues/< Replace with issue link here > > It's a good idea to open an issue first for discussion. -- [ ] Tests pass -- [ ] Appropriate changes to documentation are included in the PR +- [ ] All tests pass +- [ ] Appropriate inline docstrings changes are included in the PR +- [ ] Appropriate documentation changes to the [docs](./docs) site are included in the PR diff --git a/.github/workflows/eval_explorer_analyze.yml b/.github/workflows/eval_explorer_analyze.yml new file mode 100644 index 0000000..641ea90 --- /dev/null +++ b/.github/workflows/eval_explorer_analyze.yml @@ -0,0 +1,36 @@ +name: Eval Explorer Analyze + +on: + pull_request: + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_analyze.yml' + push: + branches: + - main + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_analyze.yml' + +jobs: + analyze: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install Flutter + run: | + git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter + echo "$HOME/flutter/bin" >> $GITHUB_PATH + echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH + + - name: Install dependencies + working-directory: packages/eval_explorer + run: flutter pub get + + - name: Analyze + working-directory: packages/eval_explorer + run: dart analyze --fatal-infos diff --git a/.github/workflows/eval_explorer_format.yml b/.github/workflows/eval_explorer_format.yml new file mode 100644 index 0000000..1a76150 --- /dev/null +++ b/.github/workflows/eval_explorer_format.yml @@ -0,0 +1,36 @@ +name: Eval Explorer Format + +on: + pull_request: + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_format.yml' + push: + branches: + - main + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_format.yml' + +jobs: + format: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install Flutter + run: | + git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter + echo "$HOME/flutter/bin" >> $GITHUB_PATH + echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH + + - name: Install dependencies + working-directory: packages/eval_explorer + run: flutter pub get + + - name: Check formatting + working-directory: packages/eval_explorer + run: dart format --set-exit-if-changed . diff --git a/.github/workflows/eval_explorer_tests.yml b/.github/workflows/eval_explorer_tests.yml new file mode 100644 index 0000000..763daa7 --- /dev/null +++ b/.github/workflows/eval_explorer_tests.yml @@ -0,0 +1,36 @@ +name: Eval Explorer Tests + +on: + pull_request: + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_tests.yml' + push: + branches: + - main + paths: + - 'packages/eval_explorer/**' + - '.github/workflows/eval_explorer_tests.yml' + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install Flutter + run: | + git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter + echo "$HOME/flutter/bin" >> $GITHUB_PATH + echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH + + - name: Install dependencies + working-directory: packages/eval_explorer + run: flutter pub get + + - name: Run unit tests + working-directory: packages/eval_explorer + run: ./bin/run_tests.sh unit diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..8ae4d77 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,20 @@ +include: package:lints/recommended.yaml + +formatter: + trailing_commas: preserve + +# Uncomment the following section to specify additional rules. + +# linter: +# rules: +# - camel_case_types + +# analyzer: +# exclude: +# - path/to/excluded/files/** + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/packages/dataset_config/analysis_options.yaml b/packages/dataset_config/analysis_options.yaml index 36dda18..f04c6cf 100644 --- a/packages/dataset_config/analysis_options.yaml +++ b/packages/dataset_config/analysis_options.yaml @@ -1,33 +1 @@ -# This file configures the static analysis results for your project (errors, -# warnings, and lints). -# -# This enables the 'recommended' set of lints from `package:lints`. -# This set helps identify many issues that may lead to problems when running -# or consuming Dart code, and enforces writing Dart using a single, idiomatic -# style and format. -# -# If you want a smaller set of lints you can change this to specify -# 'package:lints/core.yaml'. These are just the most critical lints -# (the recommended set includes the core lints). -# The core lints are also what is used by pub.dev for scoring packages. - -include: package:lints/recommended.yaml - -formatter: - trailing_commas: preserve - -# Uncomment the following section to specify additional rules. - -# linter: -# rules: -# - camel_case_types - -# analyzer: -# exclude: -# - path/to/excluded/files/** - -# For more information about the core and recommended set of lints, see -# https://dart.dev/go/core-lints - -# For additional information about configuring this file, see -# https://dart.dev/guides/language/analysis-options +include: ../../analysis_options.yaml diff --git a/packages/devals_cli/analysis_options.yaml b/packages/devals_cli/analysis_options.yaml index df4015c..2443aab 100644 --- a/packages/devals_cli/analysis_options.yaml +++ b/packages/devals_cli/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:lints/recommended.yaml +include: ../../analysis_options.yaml linter: rules: diff --git a/packages/devals_cli/lib/src/dataset/workspace.dart b/packages/devals_cli/lib/src/dataset/workspace.dart index bf9edd5..d7e86e3 100644 --- a/packages/devals_cli/lib/src/dataset/workspace.dart +++ b/packages/devals_cli/lib/src/dataset/workspace.dart @@ -7,7 +7,8 @@ enum WorkspaceType { template, path, git, create } enum TemplatePackage { flutterApp('flutter_app', 'flutter_eval_app'), dartPackage('dart_package', 'dart_eval_package'), - jasprApp('jaspr_app', 'jaspr_eval_app'); + jasprApp('jaspr_app', 'jaspr_eval_app') + ; const TemplatePackage(this.yamlValue, this.packageName); diff --git a/packages/eval_explorer/analysis_options.yaml b/packages/eval_explorer/analysis_options.yaml new file mode 100644 index 0000000..f04c6cf --- /dev/null +++ b/packages/eval_explorer/analysis_options.yaml @@ -0,0 +1 @@ +include: ../../analysis_options.yaml diff --git a/packages/eval_explorer/bin/run_tests.sh b/packages/eval_explorer/bin/run_tests.sh new file mode 100755 index 0000000..3991bf3 --- /dev/null +++ b/packages/eval_explorer/bin/run_tests.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +# Usage: +# ./run_unit_tests.sh [test_type] +# +# Arguments: +# test_type: Optional. The type of tests to run. +# Values: 'unit' (default), 'integration', 'all' +# +# Examples: +# ./run_unit_tests.sh # Runs unit tests (default) +# ./run_unit_tests.sh unit # Runs unit tests +# ./run_unit_tests.sh integration # Runs integration tests +# ./run_unit_tests.sh all # Runs all tests + + +# Parse the first argument to determine which tests to run +# Options: unit (default), integration, all +TEST_TYPE=${1:-unit} +ARGS="" + +if [ "$TEST_TYPE" == "unit" ]; then + ARGS="--exclude-tags=integration" +elif [ "$TEST_TYPE" == "integration" ]; then + ARGS="--tags=integration" +elif [ "$TEST_TYPE" == "all" ]; then + ARGS="" +else + echo "Error: Invalid argument '$TEST_TYPE'. Usage: $0 [unit|integration|all]" + exit 1 +fi + +# Define the base directory relative to the script location +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Function to run tests in a directory +run_tests() { + local dir="$1" + local cmd="$2" + echo "----------------------------------------------------------------" + echo "Running $TEST_TYPE tests in $dir..." + echo "----------------------------------------------------------------" + cd "$SCRIPT_DIR/../$dir" || exit 1 + + if [ "$cmd" == "flutter" ]; then + flutter test $ARGS + else + if [ -d "test" ]; then + dart test $ARGS + else + echo "No 'test' directory found in $dir. Skipping tests." + fi + fi +} + +run_tests "eval_explorer_shared" "dart" +run_tests "eval_explorer_server" "dart" +run_tests "eval_explorer_flutter" "flutter" + +echo "----------------------------------------------------------------" +echo "All $TEST_TYPE tests passed successfully!" +echo "----------------------------------------------------------------" diff --git a/packages/eval_explorer/eval_explorer_client/.gitignore b/packages/eval_explorer/eval_explorer_client/.gitignore new file mode 100644 index 0000000..a375a6b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/.gitignore @@ -0,0 +1,13 @@ +# Files and directories created by pub +.dart_tool/ +.packages + +# Omit committing pubspec.lock for library packages: +# https://dart.dev/guides/libraries/private-files#pubspeclock +pubspec.lock + +# Conventional directory for build outputs +build/ + +# Directory created by dartdoc +doc/api/ diff --git a/packages/eval_explorer/eval_explorer_client/CHANGELOG.md b/packages/eval_explorer/eval_explorer_client/CHANGELOG.md new file mode 100644 index 0000000..687440b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version, created by Stagehand diff --git a/packages/eval_explorer/eval_explorer_client/README.md b/packages/eval_explorer/eval_explorer_client/README.md new file mode 100644 index 0000000..a7cc8c5 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/README.md @@ -0,0 +1,5 @@ +# eval_explorer_client + +Serverpod client package for the eval_explorer application. Code in this package is mostly generated by Serverpod. + +📖 **[eval_explorer documentation](../../../docs/eval_explorer.md)** diff --git a/packages/eval_explorer/eval_explorer_client/analysis_options.yaml b/packages/eval_explorer/eval_explorer_client/analysis_options.yaml new file mode 100644 index 0000000..5123fc3 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/analysis_options.yaml @@ -0,0 +1,8 @@ +include: ../../../analysis_options.yaml + +analyzer: + exclude: + - lib/src/protocol/** + +formatter: + trailing_commas: preserve diff --git a/packages/eval_explorer/eval_explorer_client/dartdoc_options.yaml b/packages/eval_explorer/eval_explorer_client/dartdoc_options.yaml new file mode 100644 index 0000000..035db99 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/dartdoc_options.yaml @@ -0,0 +1,5 @@ +dartdoc: + categories: + "Endpoint": + markdown: doc/endpoint.md + name: Endpoint \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_client/doc/endpoint.md b/packages/eval_explorer/eval_explorer_client/doc/endpoint.md new file mode 100644 index 0000000..8582b12 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/doc/endpoint.md @@ -0,0 +1,15 @@ +# Callable endpoints + +Each class contains callable methods that will call a method on the server side. These are normally defined in the `endpoint` directory in your server project. This client sends requests to these endpoints and returns the result. + +Example usage: + +```dart +// How to use GreetingEndpoint. +client.greeting.hello("world!"); + +// Generic format. +client..(...); +``` + +Please see the full official documentation [here](https://docs.serverpod.dev) diff --git a/packages/eval_explorer/eval_explorer_client/lib/eval_explorer_client.dart b/packages/eval_explorer/eval_explorer_client/lib/eval_explorer_client.dart new file mode 100644 index 0000000..d81f69b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/eval_explorer_client.dart @@ -0,0 +1,2 @@ +export 'src/protocol/protocol.dart'; +export 'package:serverpod_client/serverpod_client.dart'; diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/client.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/client.dart new file mode 100644 index 0000000..dc7fa60 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/client.dart @@ -0,0 +1,326 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_auth_idp_client/serverpod_auth_idp_client.dart' + as _i1; +import 'package:serverpod_client/serverpod_client.dart' as _i2; +import 'dart:async' as _i3; +import 'package:serverpod_auth_core_client/serverpod_auth_core_client.dart' + as _i4; +import 'protocol.dart' as _i5; + +/// By extending [EmailIdpBaseEndpoint], the email identity provider endpoints +/// are made available on the server and enable the corresponding sign-in widget +/// on the client. +/// {@category Endpoint} +class EndpointEmailIdp extends _i1.EndpointEmailIdpBase { + EndpointEmailIdp(_i2.EndpointCaller caller) : super(caller); + + @override + String get name => 'emailIdp'; + + /// Logs in the user and returns a new session. + /// + /// Throws an [EmailAccountLoginException] in case of errors, with reason: + /// - [EmailAccountLoginExceptionReason.invalidCredentials] if the email or + /// password is incorrect. + /// - [EmailAccountLoginExceptionReason.tooManyAttempts] if there have been + /// too many failed login attempts. + /// + /// Throws an [AuthUserBlockedException] if the auth user is blocked. + @override + _i3.Future<_i4.AuthSuccess> login({ + required String email, + required String password, + }) => caller.callServerEndpoint<_i4.AuthSuccess>( + 'emailIdp', + 'login', + { + 'email': email, + 'password': password, + }, + ); + + /// Starts the registration for a new user account with an email-based login + /// associated to it. + /// + /// Upon successful completion of this method, an email will have been + /// sent to [email] with a verification link, which the user must open to + /// complete the registration. + /// + /// Always returns a account request ID, which can be used to complete the + /// registration. If the email is already registered, the returned ID will not + /// be valid. + @override + _i3.Future<_i2.UuidValue> startRegistration({required String email}) => + caller.callServerEndpoint<_i2.UuidValue>( + 'emailIdp', + 'startRegistration', + {'email': email}, + ); + + /// Verifies an account request code and returns a token + /// that can be used to complete the account creation. + /// + /// Throws an [EmailAccountRequestException] in case of errors, with reason: + /// - [EmailAccountRequestExceptionReason.expired] if the account request has + /// already expired. + /// - [EmailAccountRequestExceptionReason.policyViolation] if the password + /// does not comply with the password policy. + /// - [EmailAccountRequestExceptionReason.invalid] if no request exists + /// for the given [accountRequestId] or [verificationCode] is invalid. + @override + _i3.Future verifyRegistrationCode({ + required _i2.UuidValue accountRequestId, + required String verificationCode, + }) => caller.callServerEndpoint( + 'emailIdp', + 'verifyRegistrationCode', + { + 'accountRequestId': accountRequestId, + 'verificationCode': verificationCode, + }, + ); + + /// Completes a new account registration, creating a new auth user with a + /// profile and attaching the given email account to it. + /// + /// Throws an [EmailAccountRequestException] in case of errors, with reason: + /// - [EmailAccountRequestExceptionReason.expired] if the account request has + /// already expired. + /// - [EmailAccountRequestExceptionReason.policyViolation] if the password + /// does not comply with the password policy. + /// - [EmailAccountRequestExceptionReason.invalid] if the [registrationToken] + /// is invalid. + /// + /// Throws an [AuthUserBlockedException] if the auth user is blocked. + /// + /// Returns a session for the newly created user. + @override + _i3.Future<_i4.AuthSuccess> finishRegistration({ + required String registrationToken, + required String password, + }) => caller.callServerEndpoint<_i4.AuthSuccess>( + 'emailIdp', + 'finishRegistration', + { + 'registrationToken': registrationToken, + 'password': password, + }, + ); + + /// Requests a password reset for [email]. + /// + /// If the email address is registered, an email with reset instructions will + /// be send out. If the email is unknown, this method will have no effect. + /// + /// Always returns a password reset request ID, which can be used to complete + /// the reset. If the email is not registered, the returned ID will not be + /// valid. + /// + /// Throws an [EmailAccountPasswordResetException] in case of errors, with reason: + /// - [EmailAccountPasswordResetExceptionReason.tooManyAttempts] if the user has + /// made too many attempts trying to request a password reset. + /// + @override + _i3.Future<_i2.UuidValue> startPasswordReset({required String email}) => + caller.callServerEndpoint<_i2.UuidValue>( + 'emailIdp', + 'startPasswordReset', + {'email': email}, + ); + + /// Verifies a password reset code and returns a finishPasswordResetToken + /// that can be used to finish the password reset. + /// + /// Throws an [EmailAccountPasswordResetException] in case of errors, with reason: + /// - [EmailAccountPasswordResetExceptionReason.expired] if the password reset + /// request has already expired. + /// - [EmailAccountPasswordResetExceptionReason.tooManyAttempts] if the user has + /// made too many attempts trying to verify the password reset. + /// - [EmailAccountPasswordResetExceptionReason.invalid] if no request exists + /// for the given [passwordResetRequestId] or [verificationCode] is invalid. + /// + /// If multiple steps are required to complete the password reset, this endpoint + /// should be overridden to return credentials for the next step instead + /// of the credentials for setting the password. + @override + _i3.Future verifyPasswordResetCode({ + required _i2.UuidValue passwordResetRequestId, + required String verificationCode, + }) => caller.callServerEndpoint( + 'emailIdp', + 'verifyPasswordResetCode', + { + 'passwordResetRequestId': passwordResetRequestId, + 'verificationCode': verificationCode, + }, + ); + + /// Completes a password reset request by setting a new password. + /// + /// The [verificationCode] returned from [verifyPasswordResetCode] is used to + /// validate the password reset request. + /// + /// Throws an [EmailAccountPasswordResetException] in case of errors, with reason: + /// - [EmailAccountPasswordResetExceptionReason.expired] if the password reset + /// request has already expired. + /// - [EmailAccountPasswordResetExceptionReason.policyViolation] if the new + /// password does not comply with the password policy. + /// - [EmailAccountPasswordResetExceptionReason.invalid] if no request exists + /// for the given [passwordResetRequestId] or [verificationCode] is invalid. + /// + /// Throws an [AuthUserBlockedException] if the auth user is blocked. + @override + _i3.Future finishPasswordReset({ + required String finishPasswordResetToken, + required String newPassword, + }) => caller.callServerEndpoint( + 'emailIdp', + 'finishPasswordReset', + { + 'finishPasswordResetToken': finishPasswordResetToken, + 'newPassword': newPassword, + }, + ); +} + +/// By extending [RefreshJwtTokensEndpoint], the JWT token refresh endpoint +/// is made available on the server and enables automatic token refresh on the client. +/// {@category Endpoint} +class EndpointJwtRefresh extends _i4.EndpointRefreshJwtTokens { + EndpointJwtRefresh(_i2.EndpointCaller caller) : super(caller); + + @override + String get name => 'jwtRefresh'; + + /// Creates a new token pair for the given [refreshToken]. + /// + /// Can throw the following exceptions: + /// -[RefreshTokenMalformedException]: refresh token is malformed and could + /// not be parsed. Not expected to happen for tokens issued by the server. + /// -[RefreshTokenNotFoundException]: refresh token is unknown to the server. + /// Either the token was deleted or generated by a different server. + /// -[RefreshTokenExpiredException]: refresh token has expired. Will happen + /// only if it has not been used within configured `refreshTokenLifetime`. + /// -[RefreshTokenInvalidSecretException]: refresh token is incorrect, meaning + /// it does not refer to the current secret refresh token. This indicates + /// either a malfunctioning client or a malicious attempt by someone who has + /// obtained the refresh token. In this case the underlying refresh token + /// will be deleted, and access to it will expire fully when the last access + /// token is elapsed. + /// + /// This endpoint is unauthenticated, meaning the client won't include any + /// authentication information with the call. + @override + _i3.Future<_i4.AuthSuccess> refreshAccessToken({ + required String refreshToken, + }) => caller.callServerEndpoint<_i4.AuthSuccess>( + 'jwtRefresh', + 'refreshAccessToken', + {'refreshToken': refreshToken}, + authenticated: false, + ); +} + +/// {@category Endpoint} +class EndpointGoogleIdp extends _i1.EndpointGoogleIdpBase { + EndpointGoogleIdp(_i2.EndpointCaller caller) : super(caller); + + @override + String get name => 'googleIdp'; + + /// Validates a Google ID token and either logs in the associated user or + /// creates a new user account if the Google account ID is not yet known. + /// + /// If a new user is created an associated [UserProfile] is also created. + @override + _i3.Future<_i4.AuthSuccess> login({ + required String idToken, + required String? accessToken, + }) => caller.callServerEndpoint<_i4.AuthSuccess>( + 'googleIdp', + 'login', + { + 'idToken': idToken, + 'accessToken': accessToken, + }, + ); +} + +class Modules { + Modules(Client client) { + serverpod_auth_idp = _i1.Caller(client); + serverpod_auth_core = _i4.Caller(client); + } + + late final _i1.Caller serverpod_auth_idp; + + late final _i4.Caller serverpod_auth_core; +} + +class Client extends _i2.ServerpodClientShared { + Client( + String host, { + dynamic securityContext, + @Deprecated( + 'Use authKeyProvider instead. This will be removed in future releases.', + ) + super.authenticationKeyManager, + Duration? streamingConnectionTimeout, + Duration? connectionTimeout, + Function( + _i2.MethodCallContext, + Object, + StackTrace, + )? + onFailedCall, + Function(_i2.MethodCallContext)? onSucceededCall, + bool? disconnectStreamsOnLostInternetConnection, + }) : super( + host, + _i5.Protocol(), + securityContext: securityContext, + streamingConnectionTimeout: streamingConnectionTimeout, + connectionTimeout: connectionTimeout, + onFailedCall: onFailedCall, + onSucceededCall: onSucceededCall, + disconnectStreamsOnLostInternetConnection: + disconnectStreamsOnLostInternetConnection, + ) { + emailIdp = EndpointEmailIdp(this); + jwtRefresh = EndpointJwtRefresh(this); + googleIdp = EndpointGoogleIdp(this); + modules = Modules(this); + } + + late final EndpointEmailIdp emailIdp; + + late final EndpointJwtRefresh jwtRefresh; + + late final EndpointGoogleIdp googleIdp; + + late final Modules modules; + + @override + Map get endpointRefLookup => { + 'emailIdp': emailIdp, + 'jwtRefresh': jwtRefresh, + 'googleIdp': googleIdp, + }; + + @override + Map get moduleLookup => { + 'serverpod_auth_idp': modules.serverpod_auth_idp, + 'serverpod_auth_core': modules.serverpod_auth_core, + }; +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/dataset.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/dataset.dart new file mode 100644 index 0000000..850b064 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/dataset.dart @@ -0,0 +1,104 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +/// A dataset is an Inspect AI term that refers to a collection of samples. +/// +/// In our case, each dataset corresponds to a collection of sample types. +/// (i.e. "dart_qa_dataset", "flutter_code_execution") And each sample type +/// refers to a specific file in the /datasets directory. +abstract class Dataset implements _i1.SerializableModel { + Dataset._({ + this.id, + required this.name, + bool? isActive, + }) : isActive = isActive ?? true; + + factory Dataset({ + _i1.UuidValue? id, + required String name, + bool? isActive, + }) = _DatasetImpl; + + factory Dataset.fromJson(Map jsonSerialization) { + return Dataset( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + isActive: jsonSerialization['isActive'] as bool?, + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + String name; + + bool isActive; + + /// Returns a shallow copy of this [Dataset] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Dataset copyWith({ + _i1.UuidValue? id, + String? name, + bool? isActive, + }); + @override + Map toJson() { + return { + '__className__': 'Dataset', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'isActive': isActive, + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _DatasetImpl extends Dataset { + _DatasetImpl({ + _i1.UuidValue? id, + required String name, + bool? isActive, + }) : super._( + id: id, + name: name, + isActive: isActive, + ); + + /// Returns a shallow copy of this [Dataset] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Dataset copyWith({ + Object? id = _Undefined, + String? name, + bool? isActive, + }) { + return Dataset( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + isActive: isActive ?? this.isActive, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/evaluation.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/evaluation.dart new file mode 100644 index 0000000..bee6c39 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/evaluation.dart @@ -0,0 +1,424 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'run.dart' as _i2; +import 'task.dart' as _i3; +import 'sample.dart' as _i4; +import 'model.dart' as _i5; +import 'dataset.dart' as _i6; +import 'variant.dart' as _i7; +import 'tool_call_data.dart' as _i8; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i9; + +/// Result of evaluating one sample. +abstract class Evaluation implements _i1.SerializableModel { + Evaluation._({ + this.id, + required this.runId, + this.run, + required this.taskId, + this.task, + required this.sampleId, + this.sample, + required this.modelId, + this.model, + required this.datasetId, + this.dataset, + required this.variant, + required this.output, + required this.toolCalls, + required this.retryCount, + this.error, + required this.neverSucceeded, + required this.durationSeconds, + this.analyzerPassed, + this.testsPassed, + this.testsTotal, + this.structureScore, + this.failureReason, + required this.inputTokens, + required this.outputTokens, + required this.reasoningTokens, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory Evaluation({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required _i1.UuidValue taskId, + _i3.Task? task, + required _i1.UuidValue sampleId, + _i4.Sample? sample, + required _i1.UuidValue modelId, + _i5.Model? model, + required _i1.UuidValue datasetId, + _i6.Dataset? dataset, + required List<_i7.Variant> variant, + required String output, + required List<_i8.ToolCallData> toolCalls, + required int retryCount, + String? error, + required bool neverSucceeded, + required double durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) = _EvaluationImpl; + + factory Evaluation.fromJson(Map jsonSerialization) { + return Evaluation( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i9.Protocol().deserialize<_i2.Run>(jsonSerialization['run']), + taskId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['taskId']), + task: jsonSerialization['task'] == null + ? null + : _i9.Protocol().deserialize<_i3.Task>(jsonSerialization['task']), + sampleId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['sampleId'], + ), + sample: jsonSerialization['sample'] == null + ? null + : _i9.Protocol().deserialize<_i4.Sample>(jsonSerialization['sample']), + modelId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['modelId'], + ), + model: jsonSerialization['model'] == null + ? null + : _i9.Protocol().deserialize<_i5.Model>(jsonSerialization['model']), + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i9.Protocol().deserialize<_i6.Dataset>( + jsonSerialization['dataset'], + ), + variant: _i9.Protocol().deserialize>( + jsonSerialization['variant'], + ), + output: jsonSerialization['output'] as String, + toolCalls: _i9.Protocol().deserialize>( + jsonSerialization['toolCalls'], + ), + retryCount: jsonSerialization['retryCount'] as int, + error: jsonSerialization['error'] as String?, + neverSucceeded: jsonSerialization['neverSucceeded'] as bool, + durationSeconds: (jsonSerialization['durationSeconds'] as num).toDouble(), + analyzerPassed: jsonSerialization['analyzerPassed'] as bool?, + testsPassed: jsonSerialization['testsPassed'] as int?, + testsTotal: jsonSerialization['testsTotal'] as int?, + structureScore: (jsonSerialization['structureScore'] as num?)?.toDouble(), + failureReason: jsonSerialization['failureReason'] as String?, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + _i1.UuidValue runId; + + /// The parent run. + _i2.Run? run; + + _i1.UuidValue taskId; + + /// The parent task. + _i3.Task? task; + + _i1.UuidValue sampleId; + + /// The sample that was evaluated. + _i4.Sample? sample; + + _i1.UuidValue modelId; + + /// The model that was evaluated. + _i5.Model? model; + + _i1.UuidValue datasetId; + + /// The dataset this sample belongs to (e.g., "flutter_qa_dataset"). + _i6.Dataset? dataset; + + /// Variant configuration. + List<_i7.Variant> variant; + + /// The actual output generated by the model. + String output; + + /// Tool calls made during evaluation. + List<_i8.ToolCallData> toolCalls; + + /// Number of times this sample was retried. + int retryCount; + + /// Error message if sample failed. + String? error; + + /// True if all retries failed (exclude from accuracy calculations). + bool neverSucceeded; + + /// Total time for this sample in seconds. + double durationSeconds; + + /// Did flutter analyze pass? + bool? analyzerPassed; + + /// Number of tests passed. + int? testsPassed; + + /// Total number of tests. + int? testsTotal; + + /// Code structure validation score (0.0-1.0). + double? structureScore; + + /// Categorized failure reason: "analyzer_error", "test_failure", "missing_structure". + String? failureReason; + + /// Input tokens for this sample. + int inputTokens; + + /// Output tokens for this sample. + int outputTokens; + + /// Reasoning tokens for this sample. + int reasoningTokens; + + /// When this evaluation was run. + DateTime createdAt; + + /// Returns a shallow copy of this [Evaluation] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Evaluation copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? runId, + _i2.Run? run, + _i1.UuidValue? taskId, + _i3.Task? task, + _i1.UuidValue? sampleId, + _i4.Sample? sample, + _i1.UuidValue? modelId, + _i5.Model? model, + _i1.UuidValue? datasetId, + _i6.Dataset? dataset, + List<_i7.Variant>? variant, + String? output, + List<_i8.ToolCallData>? toolCalls, + int? retryCount, + String? error, + bool? neverSucceeded, + double? durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Evaluation', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJson(), + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJson(), + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJson(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'variant': variant.toJson(valueToJson: (v) => v.toJson()), + 'output': output, + 'toolCalls': toolCalls.toJson(valueToJson: (v) => v.toJson()), + 'retryCount': retryCount, + if (error != null) 'error': error, + 'neverSucceeded': neverSucceeded, + 'durationSeconds': durationSeconds, + if (analyzerPassed != null) 'analyzerPassed': analyzerPassed, + if (testsPassed != null) 'testsPassed': testsPassed, + if (testsTotal != null) 'testsTotal': testsTotal, + if (structureScore != null) 'structureScore': structureScore, + if (failureReason != null) 'failureReason': failureReason, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _EvaluationImpl extends Evaluation { + _EvaluationImpl({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required _i1.UuidValue taskId, + _i3.Task? task, + required _i1.UuidValue sampleId, + _i4.Sample? sample, + required _i1.UuidValue modelId, + _i5.Model? model, + required _i1.UuidValue datasetId, + _i6.Dataset? dataset, + required List<_i7.Variant> variant, + required String output, + required List<_i8.ToolCallData> toolCalls, + required int retryCount, + String? error, + required bool neverSucceeded, + required double durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) : super._( + id: id, + runId: runId, + run: run, + taskId: taskId, + task: task, + sampleId: sampleId, + sample: sample, + modelId: modelId, + model: model, + datasetId: datasetId, + dataset: dataset, + variant: variant, + output: output, + toolCalls: toolCalls, + retryCount: retryCount, + error: error, + neverSucceeded: neverSucceeded, + durationSeconds: durationSeconds, + analyzerPassed: analyzerPassed, + testsPassed: testsPassed, + testsTotal: testsTotal, + structureScore: structureScore, + failureReason: failureReason, + inputTokens: inputTokens, + outputTokens: outputTokens, + reasoningTokens: reasoningTokens, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Evaluation] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Evaluation copyWith({ + Object? id = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + _i1.UuidValue? taskId, + Object? task = _Undefined, + _i1.UuidValue? sampleId, + Object? sample = _Undefined, + _i1.UuidValue? modelId, + Object? model = _Undefined, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + List<_i7.Variant>? variant, + String? output, + List<_i8.ToolCallData>? toolCalls, + int? retryCount, + Object? error = _Undefined, + bool? neverSucceeded, + double? durationSeconds, + Object? analyzerPassed = _Undefined, + Object? testsPassed = _Undefined, + Object? testsTotal = _Undefined, + Object? structureScore = _Undefined, + Object? failureReason = _Undefined, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }) { + return Evaluation( + id: id is _i1.UuidValue? ? id : this.id, + runId: runId ?? this.runId, + run: run is _i2.Run? ? run : this.run?.copyWith(), + taskId: taskId ?? this.taskId, + task: task is _i3.Task? ? task : this.task?.copyWith(), + sampleId: sampleId ?? this.sampleId, + sample: sample is _i4.Sample? ? sample : this.sample?.copyWith(), + modelId: modelId ?? this.modelId, + model: model is _i5.Model? ? model : this.model?.copyWith(), + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i6.Dataset? ? dataset : this.dataset?.copyWith(), + variant: variant ?? this.variant.map((e0) => e0).toList(), + output: output ?? this.output, + toolCalls: + toolCalls ?? this.toolCalls.map((e0) => e0.copyWith()).toList(), + retryCount: retryCount ?? this.retryCount, + error: error is String? ? error : this.error, + neverSucceeded: neverSucceeded ?? this.neverSucceeded, + durationSeconds: durationSeconds ?? this.durationSeconds, + analyzerPassed: analyzerPassed is bool? + ? analyzerPassed + : this.analyzerPassed, + testsPassed: testsPassed is int? ? testsPassed : this.testsPassed, + testsTotal: testsTotal is int? ? testsTotal : this.testsTotal, + structureScore: structureScore is double? + ? structureScore + : this.structureScore, + failureReason: failureReason is String? + ? failureReason + : this.failureReason, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + createdAt: createdAt ?? this.createdAt, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/greetings/greeting.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/greetings/greeting.dart new file mode 100644 index 0000000..65e6216 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/greetings/greeting.dart @@ -0,0 +1,98 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +/// A greeting message which can be sent to or from the server. +abstract class Greeting implements _i1.SerializableModel { + Greeting._({ + required this.message, + required this.author, + required this.timestamp, + }); + + factory Greeting({ + required String message, + required String author, + required DateTime timestamp, + }) = _GreetingImpl; + + factory Greeting.fromJson(Map jsonSerialization) { + return Greeting( + message: jsonSerialization['message'] as String, + author: jsonSerialization['author'] as String, + timestamp: _i1.DateTimeJsonExtension.fromJson( + jsonSerialization['timestamp'], + ), + ); + } + + /// The greeting message. + String message; + + /// The author of the greeting message. + String author; + + /// The time when the message was created. + DateTime timestamp; + + /// Returns a shallow copy of this [Greeting] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Greeting copyWith({ + String? message, + String? author, + DateTime? timestamp, + }); + @override + Map toJson() { + return { + '__className__': 'Greeting', + 'message': message, + 'author': author, + 'timestamp': timestamp.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _GreetingImpl extends Greeting { + _GreetingImpl({ + required String message, + required String author, + required DateTime timestamp, + }) : super._( + message: message, + author: author, + timestamp: timestamp, + ); + + /// Returns a shallow copy of this [Greeting] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Greeting copyWith({ + String? message, + String? author, + DateTime? timestamp, + }) { + return Greeting( + message: message ?? this.message, + author: author ?? this.author, + timestamp: timestamp ?? this.timestamp, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/model.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/model.dart new file mode 100644 index 0000000..064cf56 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/model.dart @@ -0,0 +1,90 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +/// An LLM being evaluated. +abstract class Model implements _i1.SerializableModel { + Model._({ + this.id, + required this.name, + }); + + factory Model({ + _i1.UuidValue? id, + required String name, + }) = _ModelImpl; + + factory Model.fromJson(Map jsonSerialization) { + return Model( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// Unique identifier for the model. + String name; + + /// Returns a shallow copy of this [Model] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Model copyWith({ + _i1.UuidValue? id, + String? name, + }); + @override + Map toJson() { + return { + '__className__': 'Model', + if (id != null) 'id': id?.toJson(), + 'name': name, + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ModelImpl extends Model { + _ModelImpl({ + _i1.UuidValue? id, + required String name, + }) : super._( + id: id, + name: name, + ); + + /// Returns a shallow copy of this [Model] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Model copyWith({ + Object? id = _Undefined, + String? name, + }) { + return Model( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/protocol.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/protocol.dart new file mode 100644 index 0000000..5fe8a74 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/protocol.dart @@ -0,0 +1,426 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'dataset.dart' as _i2; +import 'evaluation.dart' as _i3; +import 'greetings/greeting.dart' as _i4; +import 'model.dart' as _i5; +import 'run.dart' as _i6; +import 'run_summary.dart' as _i7; +import 'sample.dart' as _i8; +import 'sample_tag_xref.dart' as _i9; +import 'scorer.dart' as _i10; +import 'scorer_result.dart' as _i11; +import 'status_enum.dart' as _i12; +import 'tag.dart' as _i13; +import 'task.dart' as _i14; +import 'task_summary.dart' as _i15; +import 'tool_call_data.dart' as _i16; +import 'variant.dart' as _i17; +import 'package:eval_explorer_shared/eval_explorer_shared.dart' as _i18; +import 'package:serverpod_auth_idp_client/serverpod_auth_idp_client.dart' + as _i19; +import 'package:serverpod_auth_core_client/serverpod_auth_core_client.dart' + as _i20; +export 'dataset.dart'; +export 'evaluation.dart'; +export 'greetings/greeting.dart'; +export 'model.dart'; +export 'run.dart'; +export 'run_summary.dart'; +export 'sample.dart'; +export 'sample_tag_xref.dart'; +export 'scorer.dart'; +export 'scorer_result.dart'; +export 'status_enum.dart'; +export 'tag.dart'; +export 'task.dart'; +export 'task_summary.dart'; +export 'tool_call_data.dart'; +export 'variant.dart'; +export 'client.dart'; + +class Protocol extends _i1.SerializationManager { + Protocol._(); + + factory Protocol() => _instance; + + static final Protocol _instance = Protocol._(); + + static String? getClassNameFromObjectJson(dynamic data) { + if (data is! Map) return null; + final className = data['__className__'] as String?; + return className; + } + + @override + T deserialize( + dynamic data, [ + Type? t, + ]) { + t ??= T; + + final dataClassName = getClassNameFromObjectJson(data); + if (dataClassName != null && dataClassName != getClassNameForType(t)) { + try { + return deserializeByClassName({ + 'className': dataClassName, + 'data': data, + }); + } on FormatException catch (_) { + // If the className is not recognized (e.g., older client receiving + // data with a new subtype), fall back to deserializing without the + // className, using the expected type T. + } + } + + if (t == _i2.Dataset) { + return _i2.Dataset.fromJson(data) as T; + } + if (t == _i3.Evaluation) { + return _i3.Evaluation.fromJson(data) as T; + } + if (t == _i4.Greeting) { + return _i4.Greeting.fromJson(data) as T; + } + if (t == _i5.Model) { + return _i5.Model.fromJson(data) as T; + } + if (t == _i6.Run) { + return _i6.Run.fromJson(data) as T; + } + if (t == _i7.RunSummary) { + return _i7.RunSummary.fromJson(data) as T; + } + if (t == _i8.Sample) { + return _i8.Sample.fromJson(data) as T; + } + if (t == _i9.SampleTagXref) { + return _i9.SampleTagXref.fromJson(data) as T; + } + if (t == _i10.Scorer) { + return _i10.Scorer.fromJson(data) as T; + } + if (t == _i11.ScorerResult) { + return _i11.ScorerResult.fromJson(data) as T; + } + if (t == _i12.Status) { + return _i12.Status.fromJson(data) as T; + } + if (t == _i13.Tag) { + return _i13.Tag.fromJson(data) as T; + } + if (t == _i14.Task) { + return _i14.Task.fromJson(data) as T; + } + if (t == _i15.TaskSummary) { + return _i15.TaskSummary.fromJson(data) as T; + } + if (t == _i16.ToolCallData) { + return _i16.ToolCallData.fromJson(data) as T; + } + if (t == _i17.Variant) { + return _i17.Variant.fromJson(data) as T; + } + if (t == _i1.getType<_i2.Dataset?>()) { + return (data != null ? _i2.Dataset.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i3.Evaluation?>()) { + return (data != null ? _i3.Evaluation.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i4.Greeting?>()) { + return (data != null ? _i4.Greeting.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i5.Model?>()) { + return (data != null ? _i5.Model.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i6.Run?>()) { + return (data != null ? _i6.Run.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i7.RunSummary?>()) { + return (data != null ? _i7.RunSummary.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i8.Sample?>()) { + return (data != null ? _i8.Sample.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i9.SampleTagXref?>()) { + return (data != null ? _i9.SampleTagXref.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i10.Scorer?>()) { + return (data != null ? _i10.Scorer.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i11.ScorerResult?>()) { + return (data != null ? _i11.ScorerResult.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i12.Status?>()) { + return (data != null ? _i12.Status.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i13.Tag?>()) { + return (data != null ? _i13.Tag.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i14.Task?>()) { + return (data != null ? _i14.Task.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i15.TaskSummary?>()) { + return (data != null ? _i15.TaskSummary.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i16.ToolCallData?>()) { + return (data != null ? _i16.ToolCallData.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i17.Variant?>()) { + return (data != null ? _i17.Variant.fromJson(data) : null) as T; + } + if (t == List<_i17.Variant>) { + return (data as List).map((e) => deserialize<_i17.Variant>(e)).toList() + as T; + } + if (t == List<_i16.ToolCallData>) { + return (data as List) + .map((e) => deserialize<_i16.ToolCallData>(e)) + .toList() + as T; + } + if (t == List) { + return (data as List).map((e) => deserialize(e)).toList() as T; + } + if (t == List<_i5.Model>) { + return (data as List).map((e) => deserialize<_i5.Model>(e)).toList() as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i5.Model>(e)).toList() + : null) + as T; + } + if (t == List<_i2.Dataset>) { + return (data as List).map((e) => deserialize<_i2.Dataset>(e)).toList() + as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i2.Dataset>(e)).toList() + : null) + as T; + } + if (t == List<_i14.Task>) { + return (data as List).map((e) => deserialize<_i14.Task>(e)).toList() as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i14.Task>(e)).toList() + : null) + as T; + } + if (t == List<_i9.SampleTagXref>) { + return (data as List) + .map((e) => deserialize<_i9.SampleTagXref>(e)) + .toList() + as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List) + .map((e) => deserialize<_i9.SampleTagXref>(e)) + .toList() + : null) + as T; + } + if (t == _i18.ScorerResultData) { + return _i18.ScorerResultData.fromJson(data) as T; + } + if (t == Map) { + return (data as Map).map( + (k, v) => MapEntry(deserialize(k), deserialize(v)), + ) + as T; + } + if (t == _i1.getType<_i18.ScorerResultData?>()) { + return (data != null ? _i18.ScorerResultData.fromJson(data) : null) as T; + } + try { + return _i19.Protocol().deserialize(data, t); + } on _i1.DeserializationTypeNotFoundException catch (_) {} + try { + return _i20.Protocol().deserialize(data, t); + } on _i1.DeserializationTypeNotFoundException catch (_) {} + return super.deserialize(data, t); + } + + static String? getClassNameForType(Type type) { + return switch (type) { + _i18.ScorerResultData => 'ScorerResultData', + _i2.Dataset => 'Dataset', + _i3.Evaluation => 'Evaluation', + _i4.Greeting => 'Greeting', + _i5.Model => 'Model', + _i6.Run => 'Run', + _i7.RunSummary => 'RunSummary', + _i8.Sample => 'Sample', + _i9.SampleTagXref => 'SampleTagXref', + _i10.Scorer => 'Scorer', + _i11.ScorerResult => 'ScorerResult', + _i12.Status => 'Status', + _i13.Tag => 'Tag', + _i14.Task => 'Task', + _i15.TaskSummary => 'TaskSummary', + _i16.ToolCallData => 'ToolCallData', + _i17.Variant => 'Variant', + _ => null, + }; + } + + @override + String? getClassNameForObject(Object? data) { + String? className = super.getClassNameForObject(data); + if (className != null) return className; + + if (data is Map && data['__className__'] is String) { + return (data['__className__'] as String).replaceFirst( + 'eval_explorer.', + '', + ); + } + + switch (data) { + case _i18.ScorerResultData(): + return 'ScorerResultData'; + case _i2.Dataset(): + return 'Dataset'; + case _i3.Evaluation(): + return 'Evaluation'; + case _i4.Greeting(): + return 'Greeting'; + case _i5.Model(): + return 'Model'; + case _i6.Run(): + return 'Run'; + case _i7.RunSummary(): + return 'RunSummary'; + case _i8.Sample(): + return 'Sample'; + case _i9.SampleTagXref(): + return 'SampleTagXref'; + case _i10.Scorer(): + return 'Scorer'; + case _i11.ScorerResult(): + return 'ScorerResult'; + case _i12.Status(): + return 'Status'; + case _i13.Tag(): + return 'Tag'; + case _i14.Task(): + return 'Task'; + case _i15.TaskSummary(): + return 'TaskSummary'; + case _i16.ToolCallData(): + return 'ToolCallData'; + case _i17.Variant(): + return 'Variant'; + } + className = _i19.Protocol().getClassNameForObject(data); + if (className != null) { + return 'serverpod_auth_idp.$className'; + } + className = _i20.Protocol().getClassNameForObject(data); + if (className != null) { + return 'serverpod_auth_core.$className'; + } + return null; + } + + @override + dynamic deserializeByClassName(Map data) { + var dataClassName = data['className']; + if (dataClassName is! String) { + return super.deserializeByClassName(data); + } + if (dataClassName == 'ScorerResultData') { + return deserialize<_i18.ScorerResultData>(data['data']); + } + if (dataClassName == 'Dataset') { + return deserialize<_i2.Dataset>(data['data']); + } + if (dataClassName == 'Evaluation') { + return deserialize<_i3.Evaluation>(data['data']); + } + if (dataClassName == 'Greeting') { + return deserialize<_i4.Greeting>(data['data']); + } + if (dataClassName == 'Model') { + return deserialize<_i5.Model>(data['data']); + } + if (dataClassName == 'Run') { + return deserialize<_i6.Run>(data['data']); + } + if (dataClassName == 'RunSummary') { + return deserialize<_i7.RunSummary>(data['data']); + } + if (dataClassName == 'Sample') { + return deserialize<_i8.Sample>(data['data']); + } + if (dataClassName == 'SampleTagXref') { + return deserialize<_i9.SampleTagXref>(data['data']); + } + if (dataClassName == 'Scorer') { + return deserialize<_i10.Scorer>(data['data']); + } + if (dataClassName == 'ScorerResult') { + return deserialize<_i11.ScorerResult>(data['data']); + } + if (dataClassName == 'Status') { + return deserialize<_i12.Status>(data['data']); + } + if (dataClassName == 'Tag') { + return deserialize<_i13.Tag>(data['data']); + } + if (dataClassName == 'Task') { + return deserialize<_i14.Task>(data['data']); + } + if (dataClassName == 'TaskSummary') { + return deserialize<_i15.TaskSummary>(data['data']); + } + if (dataClassName == 'ToolCallData') { + return deserialize<_i16.ToolCallData>(data['data']); + } + if (dataClassName == 'Variant') { + return deserialize<_i17.Variant>(data['data']); + } + if (dataClassName.startsWith('serverpod_auth_idp.')) { + data['className'] = dataClassName.substring(19); + return _i19.Protocol().deserializeByClassName(data); + } + if (dataClassName.startsWith('serverpod_auth_core.')) { + data['className'] = dataClassName.substring(20); + return _i20.Protocol().deserializeByClassName(data); + } + return super.deserializeByClassName(data); + } + + /// Maps any `Record`s known to this [Protocol] to their JSON representation + /// + /// Throws in case the record type is not known. + /// + /// This method will return `null` (only) for `null` inputs. + Map? mapRecordToJson(Record? record) { + if (record == null) { + return null; + } + try { + return _i19.Protocol().mapRecordToJson(record); + } catch (_) {} + try { + return _i20.Protocol().mapRecordToJson(record); + } catch (_) {} + throw Exception('Unsupported record type ${record.runtimeType}'); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run.dart new file mode 100644 index 0000000..159a35e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run.dart @@ -0,0 +1,215 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'status_enum.dart' as _i2; +import 'model.dart' as _i3; +import 'dataset.dart' as _i4; +import 'task.dart' as _i5; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i6; + +/// A collection of tasks executed together. +abstract class Run implements _i1.SerializableModel { + Run._({ + this.id, + required this.inspectId, + required this.status, + required this.variants, + required this.mcpServerVersion, + required this.batchRuntimeSeconds, + this.models, + this.datasets, + this.tasks, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory Run({ + _i1.UuidValue? id, + required String inspectId, + required _i2.Status status, + required List variants, + required String mcpServerVersion, + required int batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }) = _RunImpl; + + factory Run.fromJson(Map jsonSerialization) { + return Run( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + inspectId: jsonSerialization['inspectId'] as String, + status: _i2.Status.fromJson((jsonSerialization['status'] as String)), + variants: _i6.Protocol().deserialize>( + jsonSerialization['variants'], + ), + mcpServerVersion: jsonSerialization['mcpServerVersion'] as String, + batchRuntimeSeconds: jsonSerialization['batchRuntimeSeconds'] as int, + models: jsonSerialization['models'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['models'], + ), + datasets: jsonSerialization['datasets'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['datasets'], + ), + tasks: jsonSerialization['tasks'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['tasks'], + ), + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// InspectAI-generated Id. + String inspectId; + + /// Run status (e.g., "complete", "inProgress", "failed"). + _i2.Status status; + + /// The variant configurations used in this run. + List variants; + + /// Version of the MCP server used during evaluation. + String mcpServerVersion; + + /// Total script runtime in seconds. + int batchRuntimeSeconds; + + /// List of models evaluated in this run. + List<_i3.Model>? models; + + /// List of datasets evaluated in this run. + List<_i4.Dataset>? datasets; + + /// List of Inspect AI task names that were run. + List<_i5.Task>? tasks; + + /// Creation time for this record. + DateTime createdAt; + + /// Returns a shallow copy of this [Run] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Run copyWith({ + _i1.UuidValue? id, + String? inspectId, + _i2.Status? status, + List? variants, + String? mcpServerVersion, + int? batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Run', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'status': status.toJson(), + 'variants': variants.toJson(), + 'mcpServerVersion': mcpServerVersion, + 'batchRuntimeSeconds': batchRuntimeSeconds, + if (models != null) + 'models': models?.toJson(valueToJson: (v) => v.toJson()), + if (datasets != null) + 'datasets': datasets?.toJson(valueToJson: (v) => v.toJson()), + if (tasks != null) 'tasks': tasks?.toJson(valueToJson: (v) => v.toJson()), + 'createdAt': createdAt.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _RunImpl extends Run { + _RunImpl({ + _i1.UuidValue? id, + required String inspectId, + required _i2.Status status, + required List variants, + required String mcpServerVersion, + required int batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }) : super._( + id: id, + inspectId: inspectId, + status: status, + variants: variants, + mcpServerVersion: mcpServerVersion, + batchRuntimeSeconds: batchRuntimeSeconds, + models: models, + datasets: datasets, + tasks: tasks, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Run] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Run copyWith({ + Object? id = _Undefined, + String? inspectId, + _i2.Status? status, + List? variants, + String? mcpServerVersion, + int? batchRuntimeSeconds, + Object? models = _Undefined, + Object? datasets = _Undefined, + Object? tasks = _Undefined, + DateTime? createdAt, + }) { + return Run( + id: id is _i1.UuidValue? ? id : this.id, + inspectId: inspectId ?? this.inspectId, + status: status ?? this.status, + variants: variants ?? this.variants.map((e0) => e0).toList(), + mcpServerVersion: mcpServerVersion ?? this.mcpServerVersion, + batchRuntimeSeconds: batchRuntimeSeconds ?? this.batchRuntimeSeconds, + models: models is List<_i3.Model>? + ? models + : this.models?.map((e0) => e0.copyWith()).toList(), + datasets: datasets is List<_i4.Dataset>? + ? datasets + : this.datasets?.map((e0) => e0.copyWith()).toList(), + tasks: tasks is List<_i5.Task>? + ? tasks + : this.tasks?.map((e0) => e0.copyWith()).toList(), + createdAt: createdAt ?? this.createdAt, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run_summary.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run_summary.dart new file mode 100644 index 0000000..07867f6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/run_summary.dart @@ -0,0 +1,205 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'run.dart' as _i2; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i3; + +/// Metadata for the outcomes of a given [Run]. This is a separate table from [Run] because +/// otherwise each of these columns would have to be nullable on [Run], as they are generated +/// after the run is completed. +abstract class RunSummary implements _i1.SerializableModel { + RunSummary._({ + this.id, + required this.runId, + this.run, + required this.totalTasks, + required this.totalSamples, + required this.avgAccuracy, + required this.totalTokens, + required this.inputTokens, + required this.outputTokens, + required this.reasoningTokens, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory RunSummary({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required int totalTasks, + required int totalSamples, + required double avgAccuracy, + required int totalTokens, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) = _RunSummaryImpl; + + factory RunSummary.fromJson(Map jsonSerialization) { + return RunSummary( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i3.Protocol().deserialize<_i2.Run>(jsonSerialization['run']), + totalTasks: jsonSerialization['totalTasks'] as int, + totalSamples: jsonSerialization['totalSamples'] as int, + avgAccuracy: (jsonSerialization['avgAccuracy'] as num).toDouble(), + totalTokens: jsonSerialization['totalTokens'] as int, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + _i1.UuidValue runId; + + /// Run this summary belongs to. + _i2.Run? run; + + /// Number of tasks in this run. + int totalTasks; + + /// Total number of samples evaluated. + int totalSamples; + + /// Average accuracy across all tasks (0.0 to 1.0). + double avgAccuracy; + + /// Total token usage. + int totalTokens; + + /// Input tokens used. + int inputTokens; + + /// Output tokens generated. + int outputTokens; + + /// Reasoning tokens used (for models that support it). + int reasoningTokens; + + /// Creation time for this record. + DateTime createdAt; + + /// Returns a shallow copy of this [RunSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + RunSummary copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? runId, + _i2.Run? run, + int? totalTasks, + int? totalSamples, + double? avgAccuracy, + int? totalTokens, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'RunSummary', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'totalTasks': totalTasks, + 'totalSamples': totalSamples, + 'avgAccuracy': avgAccuracy, + 'totalTokens': totalTokens, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _RunSummaryImpl extends RunSummary { + _RunSummaryImpl({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required int totalTasks, + required int totalSamples, + required double avgAccuracy, + required int totalTokens, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) : super._( + id: id, + runId: runId, + run: run, + totalTasks: totalTasks, + totalSamples: totalSamples, + avgAccuracy: avgAccuracy, + totalTokens: totalTokens, + inputTokens: inputTokens, + outputTokens: outputTokens, + reasoningTokens: reasoningTokens, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [RunSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + RunSummary copyWith({ + Object? id = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + int? totalTasks, + int? totalSamples, + double? avgAccuracy, + int? totalTokens, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }) { + return RunSummary( + id: id is _i1.UuidValue? ? id : this.id, + runId: runId ?? this.runId, + run: run is _i2.Run? ? run : this.run?.copyWith(), + totalTasks: totalTasks ?? this.totalTasks, + totalSamples: totalSamples ?? this.totalSamples, + avgAccuracy: avgAccuracy ?? this.avgAccuracy, + totalTokens: totalTokens ?? this.totalTokens, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + createdAt: createdAt ?? this.createdAt, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample.dart new file mode 100644 index 0000000..6492997 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample.dart @@ -0,0 +1,194 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'dataset.dart' as _i2; +import 'sample_tag_xref.dart' as _i3; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i4; + +/// A single challenge to be presented to a [Model] and evaluated by one or more [Scorer]s. +abstract class Sample implements _i1.SerializableModel { + Sample._({ + this.id, + required this.name, + required this.datasetId, + this.dataset, + required this.input, + required this.target, + this.tagsXref, + bool? isActive, + DateTime? createdAt, + }) : isActive = isActive ?? true, + createdAt = createdAt ?? DateTime.now(); + + factory Sample({ + _i1.UuidValue? id, + required String name, + required _i1.UuidValue datasetId, + _i2.Dataset? dataset, + required String input, + required String target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }) = _SampleImpl; + + factory Sample.fromJson(Map jsonSerialization) { + return Sample( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i4.Protocol().deserialize<_i2.Dataset>( + jsonSerialization['dataset'], + ), + input: jsonSerialization['input'] as String, + target: jsonSerialization['target'] as String, + tagsXref: jsonSerialization['tagsXref'] == null + ? null + : _i4.Protocol().deserialize>( + jsonSerialization['tagsXref'], + ), + isActive: jsonSerialization['isActive'] as bool?, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// Short sample name/ID (e.g., "dart_futures_vs_streams"). + String name; + + _i1.UuidValue datasetId; + + /// The dataset this sample belongs to (e.g., "dart_qa_dataset"). + _i2.Dataset? dataset; + + /// The input prompt/question for the model. + String input; + + /// The expected answer or grading guidance. + String target; + + /// Tags associated with this sample (e.g., ["dart", "flutter"]). + /// Technically, this relationship only reaches the cross-reference table, + /// not the tags themselves. + List<_i3.SampleTagXref>? tagsXref; + + /// True if the sample is still active and included in eval runs. + bool isActive; + + /// Creation time for this record. + DateTime createdAt; + + /// Returns a shallow copy of this [Sample] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Sample copyWith({ + _i1.UuidValue? id, + String? name, + _i1.UuidValue? datasetId, + _i2.Dataset? dataset, + String? input, + String? target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Sample', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'input': input, + 'target': target, + if (tagsXref != null) + 'tagsXref': tagsXref?.toJson(valueToJson: (v) => v.toJson()), + 'isActive': isActive, + 'createdAt': createdAt.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _SampleImpl extends Sample { + _SampleImpl({ + _i1.UuidValue? id, + required String name, + required _i1.UuidValue datasetId, + _i2.Dataset? dataset, + required String input, + required String target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }) : super._( + id: id, + name: name, + datasetId: datasetId, + dataset: dataset, + input: input, + target: target, + tagsXref: tagsXref, + isActive: isActive, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Sample] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Sample copyWith({ + Object? id = _Undefined, + String? name, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + String? input, + String? target, + Object? tagsXref = _Undefined, + bool? isActive, + DateTime? createdAt, + }) { + return Sample( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i2.Dataset? ? dataset : this.dataset?.copyWith(), + input: input ?? this.input, + target: target ?? this.target, + tagsXref: tagsXref is List<_i3.SampleTagXref>? + ? tagsXref + : this.tagsXref?.map((e0) => e0.copyWith()).toList(), + isActive: isActive ?? this.isActive, + createdAt: createdAt ?? this.createdAt, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample_tag_xref.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample_tag_xref.dart new file mode 100644 index 0000000..4ac9c0d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/sample_tag_xref.dart @@ -0,0 +1,129 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'sample.dart' as _i2; +import 'tag.dart' as _i3; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i4; + +/// Cross reference table for samples and tags. +abstract class SampleTagXref implements _i1.SerializableModel { + SampleTagXref._({ + this.id, + required this.sampleId, + this.sample, + required this.tagId, + this.tag, + }); + + factory SampleTagXref({ + int? id, + required _i1.UuidValue sampleId, + _i2.Sample? sample, + required _i1.UuidValue tagId, + _i3.Tag? tag, + }) = _SampleTagXrefImpl; + + factory SampleTagXref.fromJson(Map jsonSerialization) { + return SampleTagXref( + id: jsonSerialization['id'] as int?, + sampleId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['sampleId'], + ), + sample: jsonSerialization['sample'] == null + ? null + : _i4.Protocol().deserialize<_i2.Sample>(jsonSerialization['sample']), + tagId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['tagId']), + tag: jsonSerialization['tag'] == null + ? null + : _i4.Protocol().deserialize<_i3.Tag>(jsonSerialization['tag']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + int? id; + + _i1.UuidValue sampleId; + + _i2.Sample? sample; + + _i1.UuidValue tagId; + + _i3.Tag? tag; + + /// Returns a shallow copy of this [SampleTagXref] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + SampleTagXref copyWith({ + int? id, + _i1.UuidValue? sampleId, + _i2.Sample? sample, + _i1.UuidValue? tagId, + _i3.Tag? tag, + }); + @override + Map toJson() { + return { + '__className__': 'SampleTagXref', + if (id != null) 'id': id, + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJson(), + 'tagId': tagId.toJson(), + if (tag != null) 'tag': tag?.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _SampleTagXrefImpl extends SampleTagXref { + _SampleTagXrefImpl({ + int? id, + required _i1.UuidValue sampleId, + _i2.Sample? sample, + required _i1.UuidValue tagId, + _i3.Tag? tag, + }) : super._( + id: id, + sampleId: sampleId, + sample: sample, + tagId: tagId, + tag: tag, + ); + + /// Returns a shallow copy of this [SampleTagXref] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + SampleTagXref copyWith({ + Object? id = _Undefined, + _i1.UuidValue? sampleId, + Object? sample = _Undefined, + _i1.UuidValue? tagId, + Object? tag = _Undefined, + }) { + return SampleTagXref( + id: id is int? ? id : this.id, + sampleId: sampleId ?? this.sampleId, + sample: sample is _i2.Sample? ? sample : this.sample?.copyWith(), + tagId: tagId ?? this.tagId, + tag: tag is _i3.Tag? ? tag : this.tag?.copyWith(), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer.dart new file mode 100644 index 0000000..b20eb55 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer.dart @@ -0,0 +1,90 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +/// Ye who watch the watchers. +abstract class Scorer implements _i1.SerializableModel { + Scorer._({ + this.id, + required this.name, + }); + + factory Scorer({ + _i1.UuidValue? id, + required String name, + }) = _ScorerImpl; + + factory Scorer.fromJson(Map jsonSerialization) { + return Scorer( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// Name of the scorer (e.g., "bleu"). + String name; + + /// Returns a shallow copy of this [Scorer] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Scorer copyWith({ + _i1.UuidValue? id, + String? name, + }); + @override + Map toJson() { + return { + '__className__': 'Scorer', + if (id != null) 'id': id?.toJson(), + 'name': name, + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ScorerImpl extends Scorer { + _ScorerImpl({ + _i1.UuidValue? id, + required String name, + }) : super._( + id: id, + name: name, + ); + + /// Returns a shallow copy of this [Scorer] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Scorer copyWith({ + Object? id = _Undefined, + String? name, + }) { + return Scorer( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer_result.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer_result.dart new file mode 100644 index 0000000..a709cb8 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/scorer_result.dart @@ -0,0 +1,152 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'scorer.dart' as _i2; +import 'evaluation.dart' as _i3; +import 'package:eval_explorer_shared/eval_explorer_shared.dart' as _i4; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i5; + +/// A scorer's assessment of a task. +abstract class ScorerResult implements _i1.SerializableModel { + ScorerResult._({ + this.id, + required this.scorerId, + this.scorer, + required this.evaluationId, + this.evaluation, + required this.data, + }); + + factory ScorerResult({ + _i1.UuidValue? id, + required _i1.UuidValue scorerId, + _i2.Scorer? scorer, + required _i1.UuidValue evaluationId, + _i3.Evaluation? evaluation, + required _i4.ScorerResultData data, + }) = _ScorerResultImpl; + + factory ScorerResult.fromJson(Map jsonSerialization) { + return ScorerResult( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + scorerId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['scorerId'], + ), + scorer: jsonSerialization['scorer'] == null + ? null + : _i5.Protocol().deserialize<_i2.Scorer>(jsonSerialization['scorer']), + evaluationId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['evaluationId'], + ), + evaluation: jsonSerialization['evaluation'] == null + ? null + : _i5.Protocol().deserialize<_i3.Evaluation>( + jsonSerialization['evaluation'], + ), + data: _i4.ScorerResultData.fromJson(jsonSerialization['data']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + _i1.UuidValue scorerId; + + /// Scorer this summary belongs to. + _i2.Scorer? scorer; + + _i1.UuidValue evaluationId; + + /// Whether this scorer data is for a baseline run. + _i3.Evaluation? evaluation; + + /// Flexible data archived by the scorer. + _i4.ScorerResultData data; + + /// Returns a shallow copy of this [ScorerResult] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + ScorerResult copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? scorerId, + _i2.Scorer? scorer, + _i1.UuidValue? evaluationId, + _i3.Evaluation? evaluation, + _i4.ScorerResultData? data, + }); + @override + Map toJson() { + return { + '__className__': 'ScorerResult', + if (id != null) 'id': id?.toJson(), + 'scorerId': scorerId.toJson(), + if (scorer != null) 'scorer': scorer?.toJson(), + 'evaluationId': evaluationId.toJson(), + if (evaluation != null) 'evaluation': evaluation?.toJson(), + 'data': data.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ScorerResultImpl extends ScorerResult { + _ScorerResultImpl({ + _i1.UuidValue? id, + required _i1.UuidValue scorerId, + _i2.Scorer? scorer, + required _i1.UuidValue evaluationId, + _i3.Evaluation? evaluation, + required _i4.ScorerResultData data, + }) : super._( + id: id, + scorerId: scorerId, + scorer: scorer, + evaluationId: evaluationId, + evaluation: evaluation, + data: data, + ); + + /// Returns a shallow copy of this [ScorerResult] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + ScorerResult copyWith({ + Object? id = _Undefined, + _i1.UuidValue? scorerId, + Object? scorer = _Undefined, + _i1.UuidValue? evaluationId, + Object? evaluation = _Undefined, + _i4.ScorerResultData? data, + }) { + return ScorerResult( + id: id is _i1.UuidValue? ? id : this.id, + scorerId: scorerId ?? this.scorerId, + scorer: scorer is _i2.Scorer? ? scorer : this.scorer?.copyWith(), + evaluationId: evaluationId ?? this.evaluationId, + evaluation: evaluation is _i3.Evaluation? + ? evaluation + : this.evaluation?.copyWith(), + data: data ?? this.data.copyWith(), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/status_enum.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/status_enum.dart new file mode 100644 index 0000000..8d6d5e9 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/status_enum.dart @@ -0,0 +1,39 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +enum Status implements _i1.SerializableModel { + complete, + inProgress, + failed + ; + + static Status fromJson(String name) { + switch (name) { + case 'complete': + return Status.complete; + case 'inProgress': + return Status.inProgress; + case 'failed': + return Status.failed; + default: + throw ArgumentError('Value "$name" cannot be converted to "Status"'); + } + } + + @override + String toJson() => name; + + @override + String toString() => name; +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tag.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tag.dart new file mode 100644 index 0000000..80afffd --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tag.dart @@ -0,0 +1,113 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'sample_tag_xref.dart' as _i2; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i3; + +/// Category for a sample. +abstract class Tag implements _i1.SerializableModel { + Tag._({ + this.id, + required this.name, + this.samplesXref, + }); + + factory Tag({ + _i1.UuidValue? id, + required String name, + List<_i2.SampleTagXref>? samplesXref, + }) = _TagImpl; + + factory Tag.fromJson(Map jsonSerialization) { + return Tag( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + samplesXref: jsonSerialization['samplesXref'] == null + ? null + : _i3.Protocol().deserialize>( + jsonSerialization['samplesXref'], + ), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// Unique identifier for the tag. + String name; + + /// Samples associated with this tag. + /// Technically, this relationship only reaches the cross-reference table, + /// not the samples themselves. + List<_i2.SampleTagXref>? samplesXref; + + /// Returns a shallow copy of this [Tag] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Tag copyWith({ + _i1.UuidValue? id, + String? name, + List<_i2.SampleTagXref>? samplesXref, + }); + @override + Map toJson() { + return { + '__className__': 'Tag', + if (id != null) 'id': id?.toJson(), + 'name': name, + if (samplesXref != null) + 'samplesXref': samplesXref?.toJson(valueToJson: (v) => v.toJson()), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TagImpl extends Tag { + _TagImpl({ + _i1.UuidValue? id, + required String name, + List<_i2.SampleTagXref>? samplesXref, + }) : super._( + id: id, + name: name, + samplesXref: samplesXref, + ); + + /// Returns a shallow copy of this [Tag] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Tag copyWith({ + Object? id = _Undefined, + String? name, + Object? samplesXref = _Undefined, + }) { + return Tag( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + samplesXref: samplesXref is List<_i2.SampleTagXref>? + ? samplesXref + : this.samplesXref?.map((e0) => e0.copyWith()).toList(), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task.dart new file mode 100644 index 0000000..a9664e6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task.dart @@ -0,0 +1,189 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'model.dart' as _i2; +import 'dataset.dart' as _i3; +import 'run.dart' as _i4; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i5; + +/// Results from evaluating one model against one dataset. +abstract class Task implements _i1.SerializableModel { + Task._({ + this.id, + required this.inspectId, + required this.modelId, + this.model, + required this.datasetId, + this.dataset, + required this.runId, + this.run, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory Task({ + _i1.UuidValue? id, + required String inspectId, + required _i1.UuidValue modelId, + _i2.Model? model, + required _i1.UuidValue datasetId, + _i3.Dataset? dataset, + required _i1.UuidValue runId, + _i4.Run? run, + DateTime? createdAt, + }) = _TaskImpl; + + factory Task.fromJson(Map jsonSerialization) { + return Task( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + inspectId: jsonSerialization['inspectId'] as String, + modelId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['modelId'], + ), + model: jsonSerialization['model'] == null + ? null + : _i5.Protocol().deserialize<_i2.Model>(jsonSerialization['model']), + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i5.Protocol().deserialize<_i3.Dataset>( + jsonSerialization['dataset'], + ), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i5.Protocol().deserialize<_i4.Run>(jsonSerialization['run']), + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + /// InspectAI-generated Id. + String inspectId; + + _i1.UuidValue modelId; + + /// Model identifier (e.g., "google/gemini-2.5-pro"). + _i2.Model? model; + + _i1.UuidValue datasetId; + + /// Dataset identifier (e.g., "flutter_qa_dataset"). + _i3.Dataset? dataset; + + _i1.UuidValue runId; + + /// Run this task belongs to. + _i4.Run? run; + + /// When this task was evaluated. + DateTime createdAt; + + /// Returns a shallow copy of this [Task] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Task copyWith({ + _i1.UuidValue? id, + String? inspectId, + _i1.UuidValue? modelId, + _i2.Model? model, + _i1.UuidValue? datasetId, + _i3.Dataset? dataset, + _i1.UuidValue? runId, + _i4.Run? run, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Task', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJson(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'createdAt': createdAt.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TaskImpl extends Task { + _TaskImpl({ + _i1.UuidValue? id, + required String inspectId, + required _i1.UuidValue modelId, + _i2.Model? model, + required _i1.UuidValue datasetId, + _i3.Dataset? dataset, + required _i1.UuidValue runId, + _i4.Run? run, + DateTime? createdAt, + }) : super._( + id: id, + inspectId: inspectId, + modelId: modelId, + model: model, + datasetId: datasetId, + dataset: dataset, + runId: runId, + run: run, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Task] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Task copyWith({ + Object? id = _Undefined, + String? inspectId, + _i1.UuidValue? modelId, + Object? model = _Undefined, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + DateTime? createdAt, + }) { + return Task( + id: id is _i1.UuidValue? ? id : this.id, + inspectId: inspectId ?? this.inspectId, + modelId: modelId ?? this.modelId, + model: model is _i2.Model? ? model : this.model?.copyWith(), + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i3.Dataset? ? dataset : this.dataset?.copyWith(), + runId: runId ?? this.runId, + run: run is _i4.Run? ? run : this.run?.copyWith(), + createdAt: createdAt ?? this.createdAt, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task_summary.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task_summary.dart new file mode 100644 index 0000000..bb2030b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/task_summary.dart @@ -0,0 +1,261 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'task.dart' as _i2; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i3; + +abstract class TaskSummary implements _i1.SerializableModel { + TaskSummary._({ + this.id, + required this.taskId, + this.task, + required this.totalSamples, + required this.passedSamples, + required this.accuracy, + this.taskName, + required this.inputTokens, + required this.outputTokens, + required this.totalTokens, + required this.reasoningTokens, + this.variant, + required this.executionTimeSeconds, + required this.samplesWithRetries, + required this.samplesNeverSucceeded, + required this.totalRetries, + }); + + factory TaskSummary({ + _i1.UuidValue? id, + required _i1.UuidValue taskId, + _i2.Task? task, + required int totalSamples, + required int passedSamples, + required double accuracy, + String? taskName, + required int inputTokens, + required int outputTokens, + required int totalTokens, + required int reasoningTokens, + String? variant, + required int executionTimeSeconds, + required int samplesWithRetries, + required int samplesNeverSucceeded, + required int totalRetries, + }) = _TaskSummaryImpl; + + factory TaskSummary.fromJson(Map jsonSerialization) { + return TaskSummary( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + taskId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['taskId']), + task: jsonSerialization['task'] == null + ? null + : _i3.Protocol().deserialize<_i2.Task>(jsonSerialization['task']), + totalSamples: jsonSerialization['totalSamples'] as int, + passedSamples: jsonSerialization['passedSamples'] as int, + accuracy: (jsonSerialization['accuracy'] as num).toDouble(), + taskName: jsonSerialization['taskName'] as String?, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + totalTokens: jsonSerialization['totalTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + variant: jsonSerialization['variant'] as String?, + executionTimeSeconds: jsonSerialization['executionTimeSeconds'] as int, + samplesWithRetries: jsonSerialization['samplesWithRetries'] as int, + samplesNeverSucceeded: jsonSerialization['samplesNeverSucceeded'] as int, + totalRetries: jsonSerialization['totalRetries'] as int, + ); + } + + /// The database id, set if the object has been inserted into the + /// database or if it has been fetched from the database. Otherwise, + /// the id will be null. + _i1.UuidValue? id; + + _i1.UuidValue taskId; + + /// Task this summary belongs to. + _i2.Task? task; + + /// Total number of samples in this task. + int totalSamples; + + /// Number of samples that passed. + int passedSamples; + + /// Accuracy as a value from 0.0 to 1.0. + double accuracy; + + /// The Inspect AI task function name (e.g., "qa_task"). + String? taskName; + + /// Input tokens used. + int inputTokens; + + /// Output tokens generated. + int outputTokens; + + /// Total tokens used. + int totalTokens; + + /// Reasoning tokens used (for models that support it). + int reasoningTokens; + + /// Variant configuration used (e.g., "baseline", "dart_mcp"). + String? variant; + + /// Total execution time in seconds. + int executionTimeSeconds; + + /// Number of samples that needed retries. + int samplesWithRetries; + + /// Number of samples that failed all retries (excluded from accuracy). + int samplesNeverSucceeded; + + /// Total number of retries across all samples. + int totalRetries; + + /// Returns a shallow copy of this [TaskSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + TaskSummary copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? taskId, + _i2.Task? task, + int? totalSamples, + int? passedSamples, + double? accuracy, + String? taskName, + int? inputTokens, + int? outputTokens, + int? totalTokens, + int? reasoningTokens, + String? variant, + int? executionTimeSeconds, + int? samplesWithRetries, + int? samplesNeverSucceeded, + int? totalRetries, + }); + @override + Map toJson() { + return { + '__className__': 'TaskSummary', + if (id != null) 'id': id?.toJson(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJson(), + 'totalSamples': totalSamples, + 'passedSamples': passedSamples, + 'accuracy': accuracy, + if (taskName != null) 'taskName': taskName, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'totalTokens': totalTokens, + 'reasoningTokens': reasoningTokens, + if (variant != null) 'variant': variant, + 'executionTimeSeconds': executionTimeSeconds, + 'samplesWithRetries': samplesWithRetries, + 'samplesNeverSucceeded': samplesNeverSucceeded, + 'totalRetries': totalRetries, + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TaskSummaryImpl extends TaskSummary { + _TaskSummaryImpl({ + _i1.UuidValue? id, + required _i1.UuidValue taskId, + _i2.Task? task, + required int totalSamples, + required int passedSamples, + required double accuracy, + String? taskName, + required int inputTokens, + required int outputTokens, + required int totalTokens, + required int reasoningTokens, + String? variant, + required int executionTimeSeconds, + required int samplesWithRetries, + required int samplesNeverSucceeded, + required int totalRetries, + }) : super._( + id: id, + taskId: taskId, + task: task, + totalSamples: totalSamples, + passedSamples: passedSamples, + accuracy: accuracy, + taskName: taskName, + inputTokens: inputTokens, + outputTokens: outputTokens, + totalTokens: totalTokens, + reasoningTokens: reasoningTokens, + variant: variant, + executionTimeSeconds: executionTimeSeconds, + samplesWithRetries: samplesWithRetries, + samplesNeverSucceeded: samplesNeverSucceeded, + totalRetries: totalRetries, + ); + + /// Returns a shallow copy of this [TaskSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + TaskSummary copyWith({ + Object? id = _Undefined, + _i1.UuidValue? taskId, + Object? task = _Undefined, + int? totalSamples, + int? passedSamples, + double? accuracy, + Object? taskName = _Undefined, + int? inputTokens, + int? outputTokens, + int? totalTokens, + int? reasoningTokens, + Object? variant = _Undefined, + int? executionTimeSeconds, + int? samplesWithRetries, + int? samplesNeverSucceeded, + int? totalRetries, + }) { + return TaskSummary( + id: id is _i1.UuidValue? ? id : this.id, + taskId: taskId ?? this.taskId, + task: task is _i2.Task? ? task : this.task?.copyWith(), + totalSamples: totalSamples ?? this.totalSamples, + passedSamples: passedSamples ?? this.passedSamples, + accuracy: accuracy ?? this.accuracy, + taskName: taskName is String? ? taskName : this.taskName, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + totalTokens: totalTokens ?? this.totalTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + variant: variant is String? ? variant : this.variant, + executionTimeSeconds: executionTimeSeconds ?? this.executionTimeSeconds, + samplesWithRetries: samplesWithRetries ?? this.samplesWithRetries, + samplesNeverSucceeded: + samplesNeverSucceeded ?? this.samplesNeverSucceeded, + totalRetries: totalRetries ?? this.totalRetries, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tool_call_data.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tool_call_data.dart new file mode 100644 index 0000000..87e0dd2 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/tool_call_data.dart @@ -0,0 +1,97 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; +import 'package:eval_explorer_client/src/protocol/protocol.dart' as _i2; + +/// Result of a tool call made during evaluation. Not a database table. +abstract class ToolCallData implements _i1.SerializableModel { + ToolCallData._({ + required this.name, + required this.arguments, + }); + + factory ToolCallData({ + required String name, + required Map arguments, + }) = _ToolCallDataImpl; + + factory ToolCallData.fromJson(Map jsonSerialization) { + return ToolCallData( + name: jsonSerialization['name'] as String, + arguments: _i2.Protocol().deserialize>( + jsonSerialization['arguments'], + ), + ); + } + + /// Name of the tool. + String name; + + /// Arguments passed to the tool. + Map arguments; + + /// Returns a shallow copy of this [ToolCallData] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + ToolCallData copyWith({ + String? name, + Map? arguments, + }); + @override + Map toJson() { + return { + '__className__': 'ToolCallData', + 'name': name, + 'arguments': arguments.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _ToolCallDataImpl extends ToolCallData { + _ToolCallDataImpl({ + required String name, + required Map arguments, + }) : super._( + name: name, + arguments: arguments, + ); + + /// Returns a shallow copy of this [ToolCallData] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + ToolCallData copyWith({ + String? name, + Map? arguments, + }) { + return ToolCallData( + name: name ?? this.name, + arguments: + arguments ?? + this.arguments.map( + ( + key0, + value0, + ) => MapEntry( + key0, + value0, + ), + ), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_client/lib/src/protocol/variant.dart b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/variant.dart new file mode 100644 index 0000000..44fa107 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/lib/src/protocol/variant.dart @@ -0,0 +1,36 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_client/serverpod_client.dart' as _i1; + +enum Variant implements _i1.SerializableModel { + mcp, + rules + ; + + static Variant fromJson(String name) { + switch (name) { + case 'mcp': + return Variant.mcp; + case 'rules': + return Variant.rules; + default: + throw ArgumentError('Value "$name" cannot be converted to "Variant"'); + } + } + + @override + String toJson() => name; + + @override + String toString() => name; +} diff --git a/packages/eval_explorer/eval_explorer_client/pubspec.yaml b/packages/eval_explorer/eval_explorer_client/pubspec.yaml new file mode 100644 index 0000000..1fc249f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_client/pubspec.yaml @@ -0,0 +1,11 @@ +name: eval_explorer_client +description: Starting point for a Serverpod client. +resolution: workspace + +environment: + sdk: ^3.10.0 + +dependencies: + serverpod_auth_idp_client: any + serverpod_client: any + diff --git a/packages/eval_explorer/eval_explorer_flutter/.gitignore b/packages/eval_explorer/eval_explorer_flutter/.gitignore new file mode 100644 index 0000000..c6e0212 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related + +# Symbolization related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + diff --git a/packages/eval_explorer/eval_explorer_flutter/README.md b/packages/eval_explorer/eval_explorer_flutter/README.md new file mode 100644 index 0000000..173285c --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/README.md @@ -0,0 +1,5 @@ +# eval_explorer_flutter + +Flutter web/mobile app for exploring evaluation results. + +📖 **[eval_explorer documentation](../../../docs/eval_explorer.md)** diff --git a/packages/eval_explorer/eval_explorer_flutter/analysis_options.yaml b/packages/eval_explorer/eval_explorer_flutter/analysis_options.yaml new file mode 100644 index 0000000..e2badd7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/analysis_options.yaml @@ -0,0 +1 @@ +include: ../../../analysis_options.yaml diff --git a/packages/eval_explorer/eval_explorer_flutter/assets/config.json b/packages/eval_explorer/eval_explorer_flutter/assets/config.json new file mode 100644 index 0000000..d6274b4 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/assets/config.json @@ -0,0 +1,3 @@ +{ + "apiUrl": "http://localhost:8080" +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/config/app_config.dart b/packages/eval_explorer/eval_explorer_flutter/lib/config/app_config.dart new file mode 100644 index 0000000..794e052 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/config/app_config.dart @@ -0,0 +1,26 @@ +import 'dart:convert'; + +import 'package:flutter/services.dart'; + +class AppConfig { + final String? apiUrl; + + AppConfig({ + required this.apiUrl, + }); + + static Future loadConfig() async { + final config = await _loadJsonConfig(); + final String? apiUrl = config['apiUrl']; + + return AppConfig(apiUrl: apiUrl); + } + + static Future> _loadJsonConfig() async { + final data = await rootBundle.loadString( + 'assets/config.json', + ); + + return jsonDecode(data); + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app.dart new file mode 100644 index 0000000..f8f58a2 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app.dart @@ -0,0 +1 @@ +export 'app_view.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app_view.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app_view.dart new file mode 100644 index 0000000..a5c1490 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/app/app_view.dart @@ -0,0 +1,56 @@ +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class App extends StatefulWidget { + const App({ + super.key, + required this.client, + this.appRouter, + this.authBloc, + }); + + final Client client; + final AppRouter? appRouter; + final AuthBloc? authBloc; + + @override + State createState() => _AppState(); +} + +class _AppState extends State { + late final AuthBloc authBloc; + late final AppRouter appRouter; + + @override + void initState() { + super.initState(); + authBloc = + widget.authBloc ?? // + AuthBloc(ServerpodAuthService(widget.client)); + appRouter = + widget.appRouter ?? // + AppRouter(authBloc: authBloc); + } + + @override + Widget build(BuildContext context) { + return MultiProvider( + providers: [ + Provider.value(value: widget.client), + ], + child: MultiBlocProvider( + providers: [ + BlocProvider.value(value: authBloc), + ], + child: MaterialApp.router( + title: 'Dash Evals', + theme: ThemeData(primarySwatch: Colors.blue), + routerConfig: appRouter.router, + ), + ), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth.dart new file mode 100644 index 0000000..9a69a7d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth.dart @@ -0,0 +1,2 @@ +export 'auth_bloc.dart'; +export 'auth_service.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_bloc.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_bloc.dart new file mode 100644 index 0000000..be07099 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_bloc.dart @@ -0,0 +1,71 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +import 'auth_service.dart'; + +part '../auth_bloc.freezed.dart'; + +typedef _Emit = Emitter; + +/// {@template AuthBloc} +/// Application wide authentication BLoC. +/// {@endtemplate} +class AuthBloc extends Bloc { + /// {@macro AuthBloc} + AuthBloc(this._authService) : super(AuthState.initial()) { + on( + (event, _Emit emit) => switch (event) { + NewUserEvent() => _onNewUserEvent(event, emit), + LoggedOutEvent() => _onLoggedOutEvent(event, emit), + }, + ); + + // Listen to authentication changes + _authService.listen(_onAuthChanges); + } + final AuthService _authService; + + Future _onAuthChanges(UserProfileModel? profile) async { + if (profile != null) { + add(NewUserEvent(profile)); + } else { + add(LoggedOutEvent()); + } + } + + void _onNewUserEvent(NewUserEvent event, _Emit emit) => + emit(AuthState(profile: event.profile)); + + Future _onLoggedOutEvent(LoggedOutEvent event, _Emit emit) async { + emit(AuthState(profile: null)); + } + + @override + Future close() async { + _authService.close(); + super.close(); + } +} + +/// Actions that can be taken on the auth page. +@Freezed() +sealed class AuthEvent with _$AuthEvent { + const factory AuthEvent.newUser(UserProfileModel profile) = NewUserEvent; + const factory AuthEvent.loggedOut() = LoggedOutEvent; +} + +/// {@template AuthState} +/// Complete representation of the auth page's state. +/// {@endtemplate +@Freezed() +sealed class AuthState with _$AuthState { + /// {@macro AuthState} + const factory AuthState({ + UserProfileModel? profile, + }) = _AuthState; + const AuthState._(); + + /// Starter state fed to the [AuthBloc]. + factory AuthState.initial() => const AuthState(); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_service.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_service.dart new file mode 100644 index 0000000..ab8da4a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth/auth_service.dart @@ -0,0 +1,68 @@ +import 'dart:async'; + +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +/// {@template AuthService} +/// Abstraction around actual authentication mechanisms. +/// {@endtemplate} +abstract class AuthService { + /// Stream which emits new user models, or [null] if a user logs out. + /// + /// The subscribing function is called immediately with the current value. + StreamSubscription listen( + Function(UserProfileModel? profile) onUserChanged, + ); + + /// Terminates the active session. If there was an active session, this will + /// lead to any callbacks registered via [listen] to receive a `null` value. + Future logOut(); + + /// Closes the service, releasing any resources. + void close(); +} + +class ServerpodAuthService implements AuthService { + ServerpodAuthService(this._client) { + _client.authSessionManager.authInfoListenable.addListener( + _onServerpodAuthChanged, + ); + } + + UserProfileModel? profile; + final Client _client; + final StreamController _controller = + StreamController.broadcast(); + + @override + StreamSubscription listen( + Function(UserProfileModel? profile) onUserChanged, + ) { + final sub = _controller.stream.listen(onUserChanged); + // Emit the current value immediately. + onUserChanged(profile); + return sub; + } + + Future _onServerpodAuthChanged() async { + if (_client.authSessionManager.isAuthenticated) { + profile = await _client.modules.serverpod_auth_core.userProfileInfo.get(); + } else { + profile = null; + } + _controller.add(profile); + } + + @override + Future logOut() async { + await _client.authSessionManager.signOutDevice(); + } + + @override + void close() { + _client.authSessionManager.authInfoListenable.removeListener( + _onServerpodAuthChanged, + ); + _controller.close(); + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/auth_bloc.freezed.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth_bloc.freezed.dart new file mode 100644 index 0000000..e3ee7f7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/auth_bloc.freezed.dart @@ -0,0 +1,523 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'auth/auth_bloc.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$AuthEvent { + + + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is AuthEvent); +} + + +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString() { + return 'AuthEvent()'; +} + + +} + +/// @nodoc +class $AuthEventCopyWith<$Res> { +$AuthEventCopyWith(AuthEvent _, $Res Function(AuthEvent) __); +} + + +/// Adds pattern-matching-related methods to [AuthEvent]. +extension AuthEventPatterns on AuthEvent { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap({TResult Function( NewUserEvent value)? newUser,TResult Function( LoggedOutEvent value)? loggedOut,required TResult orElse(),}){ +final _that = this; +switch (_that) { +case NewUserEvent() when newUser != null: +return newUser(_that);case LoggedOutEvent() when loggedOut != null: +return loggedOut(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map({required TResult Function( NewUserEvent value) newUser,required TResult Function( LoggedOutEvent value) loggedOut,}){ +final _that = this; +switch (_that) { +case NewUserEvent(): +return newUser(_that);case LoggedOutEvent(): +return loggedOut(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull({TResult? Function( NewUserEvent value)? newUser,TResult? Function( LoggedOutEvent value)? loggedOut,}){ +final _that = this; +switch (_that) { +case NewUserEvent() when newUser != null: +return newUser(_that);case LoggedOutEvent() when loggedOut != null: +return loggedOut(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen({TResult Function( UserProfileModel profile)? newUser,TResult Function()? loggedOut,required TResult orElse(),}) {final _that = this; +switch (_that) { +case NewUserEvent() when newUser != null: +return newUser(_that.profile);case LoggedOutEvent() when loggedOut != null: +return loggedOut();case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when({required TResult Function( UserProfileModel profile) newUser,required TResult Function() loggedOut,}) {final _that = this; +switch (_that) { +case NewUserEvent(): +return newUser(_that.profile);case LoggedOutEvent(): +return loggedOut();} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull({TResult? Function( UserProfileModel profile)? newUser,TResult? Function()? loggedOut,}) {final _that = this; +switch (_that) { +case NewUserEvent() when newUser != null: +return newUser(_that.profile);case LoggedOutEvent() when loggedOut != null: +return loggedOut();case _: + return null; + +} +} + +} + +/// @nodoc + + +class NewUserEvent implements AuthEvent { + const NewUserEvent(this.profile); + + + final UserProfileModel profile; + +/// Create a copy of AuthEvent +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$NewUserEventCopyWith get copyWith => _$NewUserEventCopyWithImpl(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is NewUserEvent&&(identical(other.profile, profile) || other.profile == profile)); +} + + +@override +int get hashCode => Object.hash(runtimeType,profile); + +@override +String toString() { + return 'AuthEvent.newUser(profile: $profile)'; +} + + +} + +/// @nodoc +abstract mixin class $NewUserEventCopyWith<$Res> implements $AuthEventCopyWith<$Res> { + factory $NewUserEventCopyWith(NewUserEvent value, $Res Function(NewUserEvent) _then) = _$NewUserEventCopyWithImpl; +@useResult +$Res call({ + UserProfileModel profile +}); + + + + +} +/// @nodoc +class _$NewUserEventCopyWithImpl<$Res> + implements $NewUserEventCopyWith<$Res> { + _$NewUserEventCopyWithImpl(this._self, this._then); + + final NewUserEvent _self; + final $Res Function(NewUserEvent) _then; + +/// Create a copy of AuthEvent +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') $Res call({Object? profile = null,}) { + return _then(NewUserEvent( +null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as UserProfileModel, + )); +} + + +} + +/// @nodoc + + +class LoggedOutEvent implements AuthEvent { + const LoggedOutEvent(); + + + + + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is LoggedOutEvent); +} + + +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString() { + return 'AuthEvent.loggedOut()'; +} + + +} + + + + +/// @nodoc +mixin _$AuthState { + + UserProfileModel? get profile; +/// Create a copy of AuthState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$AuthStateCopyWith get copyWith => _$AuthStateCopyWithImpl(this as AuthState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is AuthState&&(identical(other.profile, profile) || other.profile == profile)); +} + + +@override +int get hashCode => Object.hash(runtimeType,profile); + +@override +String toString() { + return 'AuthState(profile: $profile)'; +} + + +} + +/// @nodoc +abstract mixin class $AuthStateCopyWith<$Res> { + factory $AuthStateCopyWith(AuthState value, $Res Function(AuthState) _then) = _$AuthStateCopyWithImpl; +@useResult +$Res call({ + UserProfileModel? profile +}); + + + + +} +/// @nodoc +class _$AuthStateCopyWithImpl<$Res> + implements $AuthStateCopyWith<$Res> { + _$AuthStateCopyWithImpl(this._self, this._then); + + final AuthState _self; + final $Res Function(AuthState) _then; + +/// Create a copy of AuthState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? profile = freezed,}) { + return _then(_self.copyWith( +profile: freezed == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as UserProfileModel?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [AuthState]. +extension AuthStatePatterns on AuthState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _AuthState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _AuthState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _AuthState value) $default,){ +final _that = this; +switch (_that) { +case _AuthState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _AuthState value)? $default,){ +final _that = this; +switch (_that) { +case _AuthState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( UserProfileModel? profile)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _AuthState() when $default != null: +return $default(_that.profile);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( UserProfileModel? profile) $default,) {final _that = this; +switch (_that) { +case _AuthState(): +return $default(_that.profile);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( UserProfileModel? profile)? $default,) {final _that = this; +switch (_that) { +case _AuthState() when $default != null: +return $default(_that.profile);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _AuthState extends AuthState { + const _AuthState({this.profile}): super._(); + + +@override final UserProfileModel? profile; + +/// Create a copy of AuthState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$AuthStateCopyWith<_AuthState> get copyWith => __$AuthStateCopyWithImpl<_AuthState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _AuthState&&(identical(other.profile, profile) || other.profile == profile)); +} + + +@override +int get hashCode => Object.hash(runtimeType,profile); + +@override +String toString() { + return 'AuthState(profile: $profile)'; +} + + +} + +/// @nodoc +abstract mixin class _$AuthStateCopyWith<$Res> implements $AuthStateCopyWith<$Res> { + factory _$AuthStateCopyWith(_AuthState value, $Res Function(_AuthState) _then) = __$AuthStateCopyWithImpl; +@override @useResult +$Res call({ + UserProfileModel? profile +}); + + + + +} +/// @nodoc +class __$AuthStateCopyWithImpl<$Res> + implements _$AuthStateCopyWith<$Res> { + __$AuthStateCopyWithImpl(this._self, this._then); + + final _AuthState _self; + final $Res Function(_AuthState) _then; + +/// Create a copy of AuthState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? profile = freezed,}) { + return _then(_AuthState( +profile: freezed == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as UserProfileModel?, + )); +} + + +} + +// dart format on diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/core.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/core.dart new file mode 100644 index 0000000..deee3f7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/core.dart @@ -0,0 +1,2 @@ +export 'auth/auth.dart'; +export 'routing/routing.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/redirection.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/redirection.dart new file mode 100644 index 0000000..edd8c01 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/redirection.dart @@ -0,0 +1,182 @@ +// ignore_for_file: avoid_redundant_argument_values +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:logging/logging.dart'; +import 'package:go_router/go_router.dart'; + +final _log = Logger('Redirection'); + +typedef Params = Map; + +/// {@template GoRouterRedirector} +/// Validates that the user's current location within the app is allowed by +/// their authentication state and other details like app health. +/// {@endtemplate} +class GoRouterRedirector { + /// Singleton instance of the [GoRouterRedirector]. This class is always + /// stateless, so there is no value in ever having separate instances. + factory GoRouterRedirector() => const GoRouterRedirector._([ + AnonymousUsersToLogin(), + AuthenticatedUsersAwayFromLogin(), + ]); + + const GoRouterRedirector._(this._redirects); + final List _redirects; + + /// Forced dead-end paths that, once routed to, cannot be routed away from by + /// any other redirect rules; but instead, only by the undoing of the + /// conditions that led to redirecting here in the first place. + final doNotLeave = const [ + // maintenance / upgrade routes, if they ever exist + ]; + + /// Compares the current [RouteState] against the [AppState] and returns a + /// string to navigate to if required. Returns null if the current + /// [RouteState] and [AppState] are compatible. + String? redirect({ + required RouteState routeState, + required AuthState authState, + }) { + _log.finest( + 'Considering redirect for "${routeState.path}" with user ' + '${authState.profile}', + ); + if (doNotLeave.contains(routeState.path)) { + _log.finest( + 'Not navigating away from ${routeState.path} for DO NOT LEAVE', + ); + return null; + } + final current = Uri( + path: routeState.path, + queryParameters: + routeState + .uri + .queryParameters + .isNotEmpty // + ? routeState.uri.queryParameters + : null, + ); + for (final redirect in _redirects) { + if (redirect.predicate(routeState, authState)) { + final newRouteState = redirect.getNewRouteState(routeState, authState); + final uriString = newRouteState.uri.toString(); + + if (uriString == current.toString()) { + _log.warning( + '$redirect attempted to redirect to itself at $uriString. ' + 'This should have been caught earlier!', + ); + continue; + } + + _log.finer('$redirect redirecting from $current to $uriString'); + return uriString; + } else { + _log.finest( + '$redirect declined to redirect away from ${routeState.path}', + ); + } + } + _log.finer('Not redirecting away from ${routeState.path}'); + return null; + } +} + +/// {@template RouteState} +/// Simplified representation of the user's location within the app. Exists to +/// contain an individual routing solution from leaking its logic all across +/// the app's codebase. +/// {@endtemplate} +class RouteState { + const RouteState({ + required this.uri, + this.route, + }); + + final Uri uri; + final GoRoute? route; + + String get path => uri.path; + + /// Converts a [GoRouterState] object into the values the rest of our app will + /// care about. + factory RouteState.fromGoRouterState(GoRouterState? state) => + state != null && state.fullPath != null + ? // + RouteState( + uri: state.uri, + route: state.topRoute, + ) + : RouteState.initial(); + + /// Builds a GoRouterState value from a given route. + /// Useful for the initial route. + factory RouteState.fromRoute(GoRoute route, {Params? pathParameters}) { + String path = route.path; + if (pathParameters != null) { + for (final key in pathParameters.keys) { + path = path.replaceAll(':$key', pathParameters[key]!); + } + } + return RouteState( + uri: Uri(path: path), + route: route, + ); + } + + /// Initial RouteState for the start of the app. + factory RouteState.initial() => RouteState.fromRoute(Routes.initialRoute); +} + +/// Individual utility within a [GoRouterRedirector] to enforce a single rule. +abstract class Redirector { + /// Const constructor. + const Redirector(); + + /// Determines whether this redirection should take place. + bool predicate(RouteState routeState, AuthState authState); + + /// Returns the desired [Uri] to send the user based on current app state. + RouteState getNewRouteState(RouteState routeState, AuthState appState); + + @override + String toString() => '$runtimeType()'; +} + +/// {@template AnonymousUsersToLogin} +/// Sends anonymous users to the login screen. +/// {@endtemplate} +class AnonymousUsersToLogin extends Redirector { + /// {@macro AnonymousUsersToLogin} + const AnonymousUsersToLogin(); + @override + bool predicate( + RouteState routeState, + AuthState authState, + ) => routeState.path != Routes.login.path && authState.profile == null; + + @override + RouteState getNewRouteState( + RouteState routeState, + AuthState authState, + ) => RouteState.fromRoute(Routes.login); +} + +/// {@template AuthenticatedUsersAwayFromLogin} +/// Sends authenticated users away from the login screen. +/// {@endtemplate} +class AuthenticatedUsersAwayFromLogin extends Redirector { + /// {@macro AuthenticatedUsersAwayFromLogin} + const AuthenticatedUsersAwayFromLogin(); + @override + bool predicate( + RouteState routeState, + AuthState authState, + ) => routeState.path == Routes.login.path && authState.profile != null; + + @override + RouteState getNewRouteState( + RouteState routeState, + AuthState authState, + ) => RouteState.fromRoute(Routes.home); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/router.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/router.dart new file mode 100644 index 0000000..799f3e8 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/router.dart @@ -0,0 +1,64 @@ +import 'dart:async'; + +import 'package:eval_explorer_flutter/core/auth/auth_bloc.dart'; +import 'package:eval_explorer_flutter/core/routing/routes.dart'; +import 'package:logging/logging.dart'; +import 'package:go_router/go_router.dart'; +import 'package:meta/meta.dart'; + +import 'redirection.dart'; + +final _log = Logger('AppRouter'); + +class AppRouter { + AppRouter({required this.authBloc}) { + redirection = GoRouterRedirector(); + + router = GoRouter( + routes: [ + Routes.login, + Routes.home, + ], + initialLocation: Routes.initialRoute.path, + redirect: (context, GoRouterState state) { + lastRouteState = RouteState.fromGoRouterState(state); + return _redirect(authBloc.state); + }, + ); + + authBloc.stream.listen((authState) { + _log.finest('AuthState: $authState'); + final redirection = _redirect(authState); + if (redirection != null) { + lastRouteState = RouteState( + uri: Uri.parse(redirection), + ); + router.go(redirection); + } + }); + } + + final AuthBloc authBloc; + + /// [GoRouter] instance. + late final GoRouter router; + late final GoRouterRedirector redirection; + + /// Cache of the last known [RouteState]. + RouteState? lastRouteState; + + final _redirections = StreamController.broadcast(); + + /// Emits redirection decisions + @visibleForTesting + Stream get allRedirects => _redirections.stream; + + String? _redirect(AuthState authState) { + final redirect = redirection.redirect( + routeState: lastRouteState ?? RouteState.initial(), + authState: authState, + ); + _redirections.add(redirect); + return redirect; + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routes.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routes.dart new file mode 100644 index 0000000..bcfe7f6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routes.dart @@ -0,0 +1,27 @@ +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:go_router/go_router.dart'; +import 'package:eval_explorer_flutter/screens/screens.dart'; +import 'package:provider/provider.dart'; + +class Routes { + const Routes._(); + + static final login = GoRoute( + path: '/login', + name: 'login', + builder: (context, state) => SignInScreen( + client: context.read(), + ), + ); + static final home = GoRoute( + path: '/', + name: 'home', + builder: (context, state) => HomeScreen( + client: context.read(), + profile: context.read().state.profile!, + ), + ); + + static final initialRoute = login; +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routing.dart b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routing.dart new file mode 100644 index 0000000..d1fc9cb --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/core/routing/routing.dart @@ -0,0 +1,3 @@ +export 'redirection.dart'; +export 'router.dart'; +export 'routes.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/main.dart b/packages/eval_explorer/eval_explorer_flutter/lib/main.dart new file mode 100644 index 0000000..17e6acb --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/main.dart @@ -0,0 +1,10 @@ +import 'package:eval_explorer_flutter/core/app/app.dart'; +import 'package:eval_explorer_flutter/serverpod_client.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_web_plugins/url_strategy.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + usePathUrlStrategy(); + runApp(App(client: await getClient())); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home.dart new file mode 100644 index 0000000..97d8c87 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home.dart @@ -0,0 +1,2 @@ +export 'home_bloc.dart'; +export 'home_view.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.dart new file mode 100644 index 0000000..b5e4434 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.dart @@ -0,0 +1,51 @@ +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +part 'home_bloc.freezed.dart'; + +typedef _Emit = Emitter; + +/// {@template HomeBloc} +/// Application state manager for the [HomeScreen] widget. +/// {@endtemplate} +class HomeBloc extends Bloc { + /// {@macro HomeBloc} + HomeBloc(this._client, {required this.profile}) + : super(HomeState.initial(profile: profile)) { + on( + (event, _Emit emit) => switch (event) { + InitializeHome() => _onInitializeHome(event, emit), + }, + ); + } + // ignore: unused_field + final Client _client; + final UserProfileModel profile; + + Future _onInitializeHome(InitializeHome event, _Emit emit) async {} +} + +/// Actions that can be taken on the Home page. +@Freezed() +sealed class HomeEvent with _$HomeEvent { + /// Placeholder event. + const factory HomeEvent.init() = InitializeHome; +} + +/// {@template HomeState} +/// Complete representation of the Home page's state. +/// {@endtemplate +@Freezed() +sealed class HomeState with _$HomeState { + /// {@macro HomeState} + const factory HomeState({ + required UserProfileModel profile, + }) = _HomeState; + const HomeState._(); + + /// Starter state fed to the [HomeBloc]. + factory HomeState.initial({required UserProfileModel profile}) => + HomeState(profile: profile); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.freezed.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.freezed.dart new file mode 100644 index 0000000..bb855d3 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_bloc.freezed.dart @@ -0,0 +1,451 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'home_bloc.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$HomeEvent { + + + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is HomeEvent); +} + + +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString() { + return 'HomeEvent()'; +} + + +} + +/// @nodoc +class $HomeEventCopyWith<$Res> { +$HomeEventCopyWith(HomeEvent _, $Res Function(HomeEvent) __); +} + + +/// Adds pattern-matching-related methods to [HomeEvent]. +extension HomeEventPatterns on HomeEvent { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap({TResult Function( InitializeHome value)? init,required TResult orElse(),}){ +final _that = this; +switch (_that) { +case InitializeHome() when init != null: +return init(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map({required TResult Function( InitializeHome value) init,}){ +final _that = this; +switch (_that) { +case InitializeHome(): +return init(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull({TResult? Function( InitializeHome value)? init,}){ +final _that = this; +switch (_that) { +case InitializeHome() when init != null: +return init(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen({TResult Function()? init,required TResult orElse(),}) {final _that = this; +switch (_that) { +case InitializeHome() when init != null: +return init();case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when({required TResult Function() init,}) {final _that = this; +switch (_that) { +case InitializeHome(): +return init();} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull({TResult? Function()? init,}) {final _that = this; +switch (_that) { +case InitializeHome() when init != null: +return init();case _: + return null; + +} +} + +} + +/// @nodoc + + +class InitializeHome implements HomeEvent { + const InitializeHome(); + + + + + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is InitializeHome); +} + + +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString() { + return 'HomeEvent.init()'; +} + + +} + + + + +/// @nodoc +mixin _$HomeState { + + UserProfileModel get profile; +/// Create a copy of HomeState +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$HomeStateCopyWith get copyWith => _$HomeStateCopyWithImpl(this as HomeState, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is HomeState&&(identical(other.profile, profile) || other.profile == profile)); +} + + +@override +int get hashCode => Object.hash(runtimeType,profile); + +@override +String toString() { + return 'HomeState(profile: $profile)'; +} + + +} + +/// @nodoc +abstract mixin class $HomeStateCopyWith<$Res> { + factory $HomeStateCopyWith(HomeState value, $Res Function(HomeState) _then) = _$HomeStateCopyWithImpl; +@useResult +$Res call({ + UserProfileModel profile +}); + + + + +} +/// @nodoc +class _$HomeStateCopyWithImpl<$Res> + implements $HomeStateCopyWith<$Res> { + _$HomeStateCopyWithImpl(this._self, this._then); + + final HomeState _self; + final $Res Function(HomeState) _then; + +/// Create a copy of HomeState +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? profile = null,}) { + return _then(_self.copyWith( +profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as UserProfileModel, + )); +} + +} + + +/// Adds pattern-matching-related methods to [HomeState]. +extension HomeStatePatterns on HomeState { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _HomeState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _HomeState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _HomeState value) $default,){ +final _that = this; +switch (_that) { +case _HomeState(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _HomeState value)? $default,){ +final _that = this; +switch (_that) { +case _HomeState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( UserProfileModel profile)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _HomeState() when $default != null: +return $default(_that.profile);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( UserProfileModel profile) $default,) {final _that = this; +switch (_that) { +case _HomeState(): +return $default(_that.profile);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( UserProfileModel profile)? $default,) {final _that = this; +switch (_that) { +case _HomeState() when $default != null: +return $default(_that.profile);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _HomeState extends HomeState { + const _HomeState({required this.profile}): super._(); + + +@override final UserProfileModel profile; + +/// Create a copy of HomeState +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$HomeStateCopyWith<_HomeState> get copyWith => __$HomeStateCopyWithImpl<_HomeState>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _HomeState&&(identical(other.profile, profile) || other.profile == profile)); +} + + +@override +int get hashCode => Object.hash(runtimeType,profile); + +@override +String toString() { + return 'HomeState(profile: $profile)'; +} + + +} + +/// @nodoc +abstract mixin class _$HomeStateCopyWith<$Res> implements $HomeStateCopyWith<$Res> { + factory _$HomeStateCopyWith(_HomeState value, $Res Function(_HomeState) _then) = __$HomeStateCopyWithImpl; +@override @useResult +$Res call({ + UserProfileModel profile +}); + + + + +} +/// @nodoc +class __$HomeStateCopyWithImpl<$Res> + implements _$HomeStateCopyWith<$Res> { + __$HomeStateCopyWithImpl(this._self, this._then); + + final _HomeState _self; + final $Res Function(_HomeState) _then; + +/// Create a copy of HomeState +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? profile = null,}) { + return _then(_HomeState( +profile: null == profile ? _self.profile : profile // ignore: cast_nullable_to_non_nullable +as UserProfileModel, + )); +} + + +} + +// dart format on diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_view.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_view.dart new file mode 100644 index 0000000..d7936ef --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/home/home_view.dart @@ -0,0 +1,68 @@ +import 'dart:async'; + +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:flutter/material.dart'; +import 'package:eval_explorer_flutter/screens/home/home.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart' + show UserProfileModel; + +/// {@template HomeScreen} +/// Initial Home screen. +/// {@endtemplate} +class HomeScreen extends StatefulWidget { + /// {@macro HomeScreen} + const HomeScreen({super.key, required this.client, required this.profile}); + + final Client client; + final UserProfileModel profile; + + @override + State createState() => _HomeScreenState(); +} + +class _HomeScreenState extends State { + late final HomeBloc bloc = HomeBloc(widget.client, profile: widget.profile); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + bloc: bloc, + builder: (context, state) { + return Scaffold( + appBar: AppBar(title: const Text('Home')), + body: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + TextButton( + onPressed: () => {}, + child: Text( + 'Home :: ' + '${state.profile.userName ?? state.profile.email ?? state.profile.authUserId}', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyLarge, + ), + ), + TextButton( + onPressed: () => context.read().add(LoggedOutEvent()), + child: Text( + 'Logout', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyLarge, + ), + ), + ], + ), + ); + }, + ); + } + + @override + void dispose() { + super.dispose(); + unawaited(bloc.close()); + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/screens.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/screens.dart new file mode 100644 index 0000000..63303c7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/screens.dart @@ -0,0 +1,2 @@ +export 'home/home.dart'; +export 'sign_in_screen.dart'; diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/screens/sign_in_screen.dart b/packages/eval_explorer/eval_explorer_flutter/lib/screens/sign_in_screen.dart new file mode 100644 index 0000000..260cd0e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/screens/sign_in_screen.dart @@ -0,0 +1,22 @@ +import 'package:eval_explorer_client/eval_explorer_client.dart' show Client; +import 'package:flutter/material.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +class SignInScreen extends StatelessWidget { + const SignInScreen({super.key, required this.client}); + + final Client client; + + @override + Widget build(BuildContext context) { + return Material( + child: Center( + child: SignInWidget( + client: client, + disableEmailSignInWidget: true, + disableAppleSignInWidget: true, + ), + ), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_flutter/lib/serverpod_client.dart b/packages/eval_explorer/eval_explorer_flutter/lib/serverpod_client.dart new file mode 100644 index 0000000..bb0e35e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/lib/serverpod_client.dart @@ -0,0 +1,32 @@ +import 'package:eval_explorer_client/eval_explorer_client.dart'; +import 'package:serverpod_flutter/serverpod_flutter.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; +import 'config/app_config.dart'; + +Client? _client; + +Future getClient() async { + if (_client == null) { + // When you are running the app on a physical device, you need to set the + // server URL to the IP address of your computer. You can find the IP + // address by running `ipconfig` on Windows or `ifconfig` on Mac/Linux. + // You can set the variable when running or building your app like this: + // E.g. `flutter run --dart-define=SERVER_URL=https://api.example.com/` + const serverUrlFromEnv = String.fromEnvironment('SERVER_URL'); + // AppConfig loads the API server URL from the assets/config.json file. + // When the app runs in a browser, this file is fetched from the server, + // allowing the server to change the API URL at runtime. + // This ensures the app always uses the correct API URL, + // no matter which environment it is running in. + final config = await AppConfig.loadConfig(); + final serverUrl = serverUrlFromEnv.isEmpty + ? config.apiUrl ?? 'http://$localhost:8080/' + : serverUrlFromEnv; + _client = Client(serverUrl) + ..connectivityMonitor = FlutterConnectivityMonitor() + ..authSessionManager = FlutterAuthSessionManager(); + await _client!.auth.initialize(); + } + + return _client!; +} diff --git a/packages/eval_explorer/eval_explorer_flutter/pubspec.yaml b/packages/eval_explorer/eval_explorer_flutter/pubspec.yaml new file mode 100644 index 0000000..06d0ed7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/pubspec.yaml @@ -0,0 +1,47 @@ +name: eval_explorer_flutter +description: A new Flutter project with Serverpod. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev +version: 1.0.0+1 +resolution: workspace + +environment: + sdk: ^3.10.0 + +dependencies: + cupertino_icons: ^1.0.5 + eval_explorer_client: + path: ../eval_explorer_client + eval_explorer_shared: + path: ../eval_explorer_shared + flutter: + sdk: flutter + flutter_bloc: any + flutter_web_plugins: + sdk: flutter + freezed_annotation: any + go_router: ^17.0.1 + json_annotation: any + logging: any + meta: any + provider: any + serverpod_auth_idp_flutter: any + serverpod_flutter: any + +dev_dependencies: + build_runner: any + flutter_lints: ">=3.0.0 <7.0.0" + flutter_test: + sdk: flutter + freezed: any + json_serializable: any + mocktail: any + +flutter: + + uses-material-design: true + + assets: + - assets/config.json + +dependency_overrides: + flutter_secure_storage: ^10.0.0 diff --git a/packages/eval_explorer/eval_explorer_flutter/test/core/app_router_test.dart b/packages/eval_explorer/eval_explorer_flutter/test/core/app_router_test.dart new file mode 100644 index 0000000..839b50a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/test/core/app_router_test.dart @@ -0,0 +1,59 @@ +import 'dart:async'; + +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +class MockAuthBloc extends Mock implements AuthBloc {} + +void main() { + late MockAuthBloc authBloc; + late AppRouter appRouter; + late StreamController authStateController; + + setUp(() { + authBloc = MockAuthBloc(); + authStateController = StreamController.broadcast(); + + when(() => authBloc.state).thenReturn(AuthState.initial()); + when(() => authBloc.stream).thenAnswer((_) => authStateController.stream); + }); + + tearDown(() { + authStateController.close(); + }); + + group('When logging in then out, AppRouter should', () { + test( + 'redirect to the home screen then login screen', + () async { + appRouter = AppRouter(authBloc: authBloc); + + // Expect redirect to home + final expectation = expectLater( + appRouter.allRedirects, + emitsInOrder([ + Routes.home.path, + Routes.login.path, + ]), + ); + + // Simulate user logging in + final profile = UserProfileModel( + authUserId: UuidValue.fromString(Uuid().v4()), + ); + final newState = AuthState(profile: profile); + when(() => authBloc.state).thenReturn(newState); + authStateController.add(newState); + + final loggedOutState = AuthState(profile: null); + when(() => authBloc.state).thenReturn(loggedOutState); + authStateController.add(loggedOutState); + + await expectation; + }, + timeout: const Timeout(Duration(seconds: 1)), + ); + }); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/test/core/redirection_test.dart b/packages/eval_explorer/eval_explorer_flutter/test/core/redirection_test.dart new file mode 100644 index 0000000..7dfe65f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/test/core/redirection_test.dart @@ -0,0 +1,51 @@ +import 'package:eval_explorer_flutter/core/core.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:serverpod_auth_idp_flutter/serverpod_auth_idp_flutter.dart'; + +void main() { + group('Redirection', () { + test('should keep anonymous users on login screen', () { + final redirection = GoRouterRedirector(); + final result = redirection.redirect( + routeState: RouteState.initial(), + authState: AuthState(profile: null), + ); + expect(result, null); + }); + + test('should redirect logged in users to home screen', () { + final redirection = GoRouterRedirector(); + final result = redirection.redirect( + routeState: RouteState.initial(), + authState: AuthState( + profile: UserProfileModel( + authUserId: UuidValue.fromString(Uuid().v4()), + ), + ), + ); + expect(result, Routes.home.path); + }); + + test('should keep logged in users on home screen', () { + final redirection = GoRouterRedirector(); + final result = redirection.redirect( + routeState: RouteState.fromRoute(Routes.home), + authState: AuthState( + profile: UserProfileModel( + authUserId: UuidValue.fromString(Uuid().v4()), + ), + ), + ); + expect(result, null); + }); + + test('should return logging out users to the login page', () { + final redirection = GoRouterRedirector(); + final result = redirection.redirect( + routeState: RouteState.fromRoute(Routes.home), + authState: AuthState(profile: null), + ); + expect(result, Routes.login.path); + }); + }); +} diff --git a/packages/eval_explorer/eval_explorer_flutter/web/favicon.png b/packages/eval_explorer/eval_explorer_flutter/web/favicon.png new file mode 100644 index 0000000..8aaa46a Binary files /dev/null and b/packages/eval_explorer/eval_explorer_flutter/web/favicon.png differ diff --git a/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-192.png b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-192.png new file mode 100644 index 0000000..b749bfe Binary files /dev/null and b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-192.png differ diff --git a/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-512.png b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-512.png new file mode 100644 index 0000000..88cfd48 Binary files /dev/null and b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-512.png differ diff --git a/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-192.png b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-192.png differ diff --git a/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-512.png b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/packages/eval_explorer/eval_explorer_flutter/web/icons/Icon-maskable-512.png differ diff --git a/packages/eval_explorer/eval_explorer_flutter/web/index.html b/packages/eval_explorer/eval_explorer_flutter/web/index.html new file mode 100644 index 0000000..df57ac6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/web/index.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + eval_explorer_flutter + + + + + + + + + \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_flutter/web/manifest.json b/packages/eval_explorer/eval_explorer_flutter/web/manifest.json new file mode 100644 index 0000000..c09b9bb --- /dev/null +++ b/packages/eval_explorer/eval_explorer_flutter/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "eval_explorer_flutter", + "short_name": "eval_explorer_flutter", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/eval_explorer/eval_explorer_server/.gitignore b/packages/eval_explorer/eval_explorer_server/.gitignore new file mode 100644 index 0000000..857db80 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/.gitignore @@ -0,0 +1,18 @@ +# Files and directories created by pub +.dart_tool/ +.packages + +# Conventional directory for build outputs +build/ + +# Ignore the flutter web app directory +web/app + +# Directory created by dartdoc +doc/api/ + +# Passwords file +config/passwords.yaml + +# Firebase service account key for Firebase auth +config/firebase_service_account_key.json diff --git a/packages/eval_explorer/eval_explorer_server/CHANGELOG.md b/packages/eval_explorer/eval_explorer_server/CHANGELOG.md new file mode 100644 index 0000000..687440b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version, created by Stagehand diff --git a/packages/eval_explorer/eval_explorer_server/Dockerfile b/packages/eval_explorer/eval_explorer_server/Dockerfile new file mode 100644 index 0000000..fbdcd89 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/Dockerfile @@ -0,0 +1,39 @@ +# Build stage +FROM dart:3.8.0 AS build +WORKDIR /app +COPY . . + +# Install dependencies and compile the server executable +RUN dart pub get +RUN dart compile exe bin/main.dart -o bin/server + +# Final stage +FROM alpine:latest + +# Environment variables +ENV runmode=production +ENV serverid=default +ENV logging=normal +ENV role=monolith + +# Copy runtime dependencies +COPY --from=build /runtime/ / + +# Copy compiled server executable +COPY --from=build /app/bin/server server + +# Copy configuration files and resources +COPY --from=build /app/config/ config/ +COPY --from=build /app/web/ web/ +COPY --from=build /app/migrations/ migrations/ + +# This file is required to enable the endpoint log filter in Insights. +COPY --from=build /app/lib/src/generated/protocol.yaml lib/src/generated/protocol.yaml + +# Expose ports +EXPOSE 8080 +EXPOSE 8081 +EXPOSE 8082 + +# Define the entrypoint command +ENTRYPOINT ./server --mode=$runmode --server-id=$serverid --logging=$logging --role=$role diff --git a/packages/eval_explorer/eval_explorer_server/README.md b/packages/eval_explorer/eval_explorer_server/README.md new file mode 100644 index 0000000..10ebaaa --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/README.md @@ -0,0 +1,5 @@ +# eval_explorer_server + +Serverpod backend for the eval_explorer application. + +📖 **[Full documentation](../../../docs/eval_explorer.md)** — prerequisites, running the server, and installing fixtures. \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/analysis_options.yaml b/packages/eval_explorer/eval_explorer_server/analysis_options.yaml new file mode 100644 index 0000000..395f493 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/analysis_options.yaml @@ -0,0 +1,21 @@ +include: ../../../analysis_options.yaml + +# Uncomment the following section to specify additional rules. + +linter: + rules: + unawaited_futures: true + avoid_print: true + +analyzer: + exclude: + - lib/src/generated/** + - test/integration/test_tools/serverpod_test_tools.dart +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options + +formatter: + trailing_commas: preserve diff --git a/packages/eval_explorer/eval_explorer_server/bin/command.dart b/packages/eval_explorer/eval_explorer_server/bin/command.dart new file mode 100644 index 0000000..42cf42d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/bin/command.dart @@ -0,0 +1,76 @@ +import 'dart:async'; +import 'package:args/command_runner.dart'; +import 'package:eval_explorer_server/src/business/fixtures/fixtures.dart'; +import 'package:eval_explorer_server/src/generated/endpoints.dart'; +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:serverpod/serverpod.dart'; + +/// This file should not be invoked directly. Instead, register commands in +/// the serverpod section of pubspec.yaml and run those via +/// `serverpod run `. +/// +/// Of course, you *can* invoke this file via the same command registered in +/// the serverpod section of pubspec.yaml, but it is not recommended. +void main(List args) async { + final runner = CommandRunner('evals', 'Serverpod server') + // $ serverpod run fixtures + // OR + // $ dart bin/command.dart fixtures --path lib/datasets + ..addCommand(FixturesCommand()); + + await runner.run(args); +} + +class FixturesCommand extends Command { + FixturesCommand() { + argParser.addOption( + 'path', + abbr: 'p', + help: 'Path to the datasets directory', + ); + argParser.addFlag( + 'verbose', + abbr: 'v', + help: 'Verbose output', + ); + } + + @override + String get name => 'fixtures'; + + @override + String get description => 'Imports fixtures from the given directory'; + + @override + FutureOr run() async { + final path = argResults!.option('path'); + + if (path == null || path.isEmpty) { + throw UsageException( + 'Path to the datasets directory is required', + '--path ', + ); + } + + final pod = Serverpod( + [], + Protocol(), + Endpoints(), + ); + + await pod.start(); + + FixturesParser parser = FixturesParser( + datasetsPath: path, + ); + + final datasets = await parser.parse(); + + final session = await pod.server.serverpod.createSession(); + final importer = DatabaseFixturesImporter(session: session); + await importer.import(datasets, verbose: argResults!.flag('verbose')); + await session.close(); + + await pod.shutdown(); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/bin/main.dart b/packages/eval_explorer/eval_explorer_server/bin/main.dart new file mode 100644 index 0000000..4c9f15a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/bin/main.dart @@ -0,0 +1,7 @@ +import 'package:eval_explorer_server/server.dart'; + +/// This is the starting point for your Serverpod server. Typically, there is +/// no need to modify this file. +void main(List args) { + run(args); +} diff --git a/packages/eval_explorer/eval_explorer_server/config/development.yaml b/packages/eval_explorer/eval_explorer_server/config/development.yaml new file mode 100644 index 0000000..83f37da --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/config/development.yaml @@ -0,0 +1,59 @@ +# This is the configuration file for your local development environment. By +# default, it runs a single server on port 8080. To set up your server, you will +# need to add the name of the database you are connecting to and the user name. +# The password for the database is stored in the config/passwords.yaml. +# +# When running your server locally, the server ports are the same as the public +# facing ports. + +# Configuration for the main API server. +apiServer: + port: 8080 + publicHost: localhost + publicPort: 8080 + publicScheme: http + +# Configuration for the Insights server. +insightsServer: + port: 8081 + publicHost: localhost + publicPort: 8081 + publicScheme: http + +# Configuration for the web server. +webServer: + port: 8082 + publicHost: localhost + publicPort: 8082 + publicScheme: http + +# This is the database setup for your server. +database: + host: localhost + port: 8090 + name: eval_explorer + user: postgres + #requireSsl: true # defaults to false + #isUnixSocket: true # defaults to false + #maxConnectionCount: 10 # Defaults to 10, a negative or null value removes the limit + +# This is the setup for Redis. +redis: + enabled: false + host: localhost + port: 8091 + #user: # defaults to empty + #requireSsl: true # defaults to false + +maxRequestSize: 524288 # The maximum size of requests allowed in bytes + +sessionLogs: + persistentEnabled: true + consoleEnabled: true + consoleLogFormat: text # Defaults to "json", options are "text" or "json" + +# futureCallExecutionEnabled: true # Defaults to true + +#futureCall: +# concurrencyLimit: 1 # Defaults to 1, a negative or null value removes the limit +# scanInterval: 5000 # Unit in milliseconds, defaults to 5000 diff --git a/packages/eval_explorer/eval_explorer_server/config/generator.yaml b/packages/eval_explorer/eval_explorer_server/config/generator.yaml new file mode 100644 index 0000000..5d08eab --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/config/generator.yaml @@ -0,0 +1,7 @@ +type: server + +client_package_path: ../eval_explorer_client +server_test_tools_path: test/integration/test_tools + +extraClasses: + - package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/config/production.yaml b/packages/eval_explorer/eval_explorer_server/config/production.yaml new file mode 100644 index 0000000..c8f728e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/config/production.yaml @@ -0,0 +1,63 @@ +# This is the configuration file for your production environment. +# Typically, you will want to route the traffic through a load balancer +# which adds SSL security through https. If you use Serverpod's standard +# Terraform scripts to deploy your server, all you need to change in +# this file is the examplepod.com domain name. + +# Configuration for the main API server. +apiServer: + port: 8080 + publicHost: api.examplepod.com + publicPort: 443 + publicScheme: https + +# Configuration for the Insights server. +insightsServer: + port: 8081 + publicHost: insights.examplepod.com + publicPort: 443 + publicScheme: https + +# Configuration for the web server. +webServer: + port: 8082 + publicHost: app.examplepod.com + publicPort: 443 + publicScheme: https + +# This is the database setup for your servers. The default for the Google Cloud +# Engine Terraform configuration is to connect on a private IP address. +# If you are connecting on a public IP (e.g. on AWS or Google Cloud Run), you +# connect on the public IP of the database e.g. database.examplepod.com. +database: + host: database.private-production.examplepod.com + port: 5432 + name: serverpod + user: postgres + requireSsl: true + #isUnixSocket: true # defaults to false + #maxConnectionCount: 10 # Defaults to 10, a negative or null value removes the limit + +# This is the setup for Redis. The default for the Google Cloud Engine Terraform +# configuration is to connect on a private IP address. +# If you are connecting on a public IP (e.g. on AWS or Google Cloud Run), you +# connect on the public IP of the database e.g. redis.examplepod.com. +redis: + enabled: false + host: redis.private-production.examplepod.com + port: 6379 + #user: # defaults to empty + #requireSsl: true # defaults to false + +maxRequestSize: 524288 # The maximum size of requests allowed in bytes + +sessionLogs: + consoleEnabled: false +# persistentEnabled: true +# consoleLogFormat: json # Defaults to "json", options are "text" or "json" + +# futureCallExecutionEnabled: true # Defaults to true + +#futureCall: +# concurrencyLimit: 1 # Defaults to 1, a negative or null value removes the limit +# scanInterval: 5000 # Unit in milliseconds, defaults to 5000 diff --git a/packages/eval_explorer/eval_explorer_server/config/staging.yaml b/packages/eval_explorer/eval_explorer_server/config/staging.yaml new file mode 100644 index 0000000..1510724 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/config/staging.yaml @@ -0,0 +1,67 @@ +# This is the configuration file for your staging environment. The staging +# environment is meant to resemble the production environment as much as +# possible and may connect to production databases services and data. You use it +# for final testing before deploying the production server. +# +# Typically, you will want to route the traffic through a load balancer +# which adds SSL security through https. If you use Serverpod's standard +# Terraform scripts to deploy your server, all you need to change in +# this file is the examplepod.com domain name. + +# Configuration for the main API server. +apiServer: + port: 8080 + publicHost: api-staging.examplepod.com + publicPort: 443 + publicScheme: https + +# Configuration for the Insights server. +insightsServer: + port: 8081 + publicHost: insights-staging.examplepod.com + publicPort: 443 + publicScheme: https + +# Configuration for the web server. +webServer: + port: 8082 + publicHost: app-staging.examplepod.com + publicPort: 443 + publicScheme: https + +# This is the database setup for your servers. The default for the Google Cloud +# Engine Terraform configuration is to connect on a private IP address. +# If you are connecting on a public IP (e.g. on AWS or Google Cloud Run), you +# connect on the public IP of the database e.g. database-staging.examplepod.com. +database: + host: database.private-staging.examplepod.com + port: 5432 + name: serverpod + user: postgres + requireSsl: true + #isUnixSocket: true # defaults to false + #maxConnectionCount: 10 # Defaults to 10, a negative or null value removes the limit + +# This is the setup for Redis. The default for the Google Cloud Engine Terraform +# configuration is to connect on a private IP address. +# If you are connecting on a public IP (e.g. on AWS or Google Cloud Run), you +# connect on the public IP of the database e.g. redis-staging.examplepod.com. +redis: + enabled: false + host: redis.private-staging.examplepod.com + port: 6379 + #user: # defaults to empty + #requireSsl: true # defaults to false + +maxRequestSize: 524288 # The maximum size of requests allowed in bytes + +sessionLogs: +# persistentEnabled: true +# consoleEnabled: true +# consoleLogFormat: json # Defaults to "json", options are "text" or "json" + +# futureCallExecutionEnabled: true # Defaults to true + +#futureCall: +# concurrencyLimit: 1 # Defaults to 1, a negative or null value removes the limit +# scanInterval: 5000 # Unit in milliseconds, defaults to 5000 diff --git a/packages/eval_explorer/eval_explorer_server/config/test.yaml b/packages/eval_explorer/eval_explorer_server/config/test.yaml new file mode 100644 index 0000000..6b1a44a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/config/test.yaml @@ -0,0 +1,56 @@ +# This is the configuration file for your test environment. +# All ports are set to zero in this file which makes the server find the next available port. +# This is needed to enable running tests concurrently. To set up your server, you will +# need to add the name of the database you are connecting to and the user name. +# The password for the database is stored in the config/passwords.yaml. +# +# When running your server locally, the server ports are the same as the public +# facing ports. + +# Configuration for the main API test server. +apiServer: + port: 0 + publicHost: localhost + publicPort: 0 + publicScheme: http + +# Configuration for the Insights test server. +insightsServer: + port: 0 + publicHost: localhost + publicPort: 0 + publicScheme: http + +# Configuration for the web test server. +webServer: + port: 0 + publicHost: localhost + publicPort: 0 + publicScheme: http + +# This is the database setup for your test server. +database: + host: localhost + port: 9090 + name: eval_explorer_test + user: postgres + #maxConnectionCount: 10 # Defaults to 10, a negative or null value removes the limit + +# This is the setup for your Redis test instance. +redis: + enabled: false + host: localhost + port: 9091 + #user: # defaults to empty + #requireSsl: true # defaults to false + +sessionLogs: + persistentEnabled: true + consoleEnabled: true +# consoleLogFormat: json # Defaults to "json", options are "text" or "json" + +# futureCallExecutionEnabled: true # Defaults to true + +#futureCall: +# concurrencyLimit: 1 # Defaults to 1, a negative or null value removes the limit +# scanInterval: 5000 # Unit in milliseconds, defaults to 5000 diff --git a/packages/eval_explorer/eval_explorer_server/dart_test.yaml b/packages/eval_explorer/eval_explorer_server/dart_test.yaml new file mode 100644 index 0000000..2b60c7d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/dart_test.yaml @@ -0,0 +1,2 @@ +tags: + integration: {} diff --git a/packages/eval_explorer/eval_explorer_server/docker-compose.yaml b/packages/eval_explorer/eval_explorer_server/docker-compose.yaml new file mode 100644 index 0000000..5941120 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/docker-compose.yaml @@ -0,0 +1,44 @@ +services: + # Development services + postgres: + image: pgvector/pgvector:pg16 + ports: + - "8090:5432" + environment: + POSTGRES_USER: postgres + POSTGRES_DB: eval_explorer + POSTGRES_PASSWORD: "EUQ_q-rb4kc7XNLNYbvx-VfsHo5azZlb" + volumes: + - eval_explorer_data:/var/lib/postgresql/data + + redis: + image: redis:6.2.6 + ports: + - "8091:6379" + command: redis-server --requirepass "6ZIo9zJxRq-_Lm3Yw9CXYf1R4FEjgphL" + environment: + - REDIS_REPLICATION_MODE=master + + # Test services + postgres_test: + image: pgvector/pgvector:pg16 + ports: + - "9090:5432" + environment: + POSTGRES_USER: postgres + POSTGRES_DB: eval_explorer_test + POSTGRES_PASSWORD: "bSHGKL1oWXcZpXxDyx7m0B-ONg-xo-Tl" + volumes: + - eval_explorer_test_data:/var/lib/postgresql/data + + redis_test: + image: redis:6.2.6 + ports: + - "9091:6379" + command: redis-server --requirepass "onSS_GYAL4GwJsARIM_-iOS2c5P5A7Ky" + environment: + - REDIS_REPLICATION_MODE=master + +volumes: + eval_explorer_data: + eval_explorer_test_data: diff --git a/packages/eval_explorer/eval_explorer_server/lib/datasets b/packages/eval_explorer/eval_explorer_server/lib/datasets new file mode 120000 index 0000000..84bd18b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/datasets @@ -0,0 +1 @@ +../../../../datasets \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/server.dart b/packages/eval_explorer/eval_explorer_server/lib/server.dart new file mode 100644 index 0000000..e85daa2 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/server.dart @@ -0,0 +1,84 @@ +import 'dart:io'; + +import 'package:serverpod/serverpod.dart'; +import 'package:serverpod_auth_idp_server/core.dart'; +import 'package:serverpod_auth_idp_server/providers/google.dart'; + +import 'src/generated/endpoints.dart'; +import 'src/generated/protocol.dart'; +import 'src/web/routes/app_config_route.dart'; +import 'src/web/routes/root.dart'; + +/// The starting point of the Serverpod server. +void run(List args) async { + // Initialize Serverpod and connect it with your generated code. + final pod = Serverpod( + args, + Protocol(), + Endpoints(), + ); + + final googleIdpConfig = GoogleIdpConfig( + clientSecret: GoogleClientSecret.fromJsonString( + pod.getPassword('googleClientSecret')!, + ), + ); + + // Initialize authentication services for the server. + // Token managers will be used to validate and issue authentication keys, + // and the identity providers will be the authentication options available for users. + pod.initializeAuthServices( + tokenManagerBuilders: [ + // Use JWT for authentication keys towards the server. + JwtConfigFromPasswords(), + ], + identityProviderBuilders: [ + googleIdpConfig, + ], + ); + + // Setup a default page at the web root. + // These are used by the default page. + pod.webServer.addRoute(RootRoute(), '/'); + pod.webServer.addRoute(RootRoute(), '/index.html'); + + // Serve all files in the web/static relative directory under /. + // These are used by the default web page. + final root = Directory(Uri(path: 'web/static').toFilePath()); + pod.webServer.addRoute(StaticRoute.directory(root)); + + // Setup the app config route. + // We build this configuration based on the servers api url and serve it to + // the flutter app. + pod.webServer.addRoute( + AppConfigRoute(apiConfig: pod.config.apiServer), + '/app/assets/assets/config.json', + ); + + // Checks if the flutter web app has been built and serves it if it has. + final appDir = Directory(Uri(path: 'web/app').toFilePath()); + if (appDir.existsSync()) { + // Serve the flutter web app under the /app path. + pod.webServer.addRoute( + FlutterRoute( + Directory( + Uri(path: 'web/app').toFilePath(), + ), + ), + '/app', + ); + } else { + // If the flutter web app has not been built, serve the build app page. + pod.webServer.addRoute( + StaticRoute.file( + File( + Uri(path: 'web/pages/build_flutter_app.html').toFilePath(), + ), + ), + '/app/**', + ); + } + + // Start the server. + await pod.start(); +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/auth/email_idp_endpoint.dart b/packages/eval_explorer/eval_explorer_server/lib/src/auth/email_idp_endpoint.dart new file mode 100644 index 0000000..bca90a6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/auth/email_idp_endpoint.dart @@ -0,0 +1,6 @@ +import 'package:serverpod_auth_idp_server/providers/email.dart'; + +/// By extending [EmailIdpBaseEndpoint], the email identity provider endpoints +/// are made available on the server and enable the corresponding sign-in widget +/// on the client. +class EmailIdpEndpoint extends EmailIdpBaseEndpoint {} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/auth/jwt_refresh_endpoint.dart b/packages/eval_explorer/eval_explorer_server/lib/src/auth/jwt_refresh_endpoint.dart new file mode 100644 index 0000000..84946c1 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/auth/jwt_refresh_endpoint.dart @@ -0,0 +1,5 @@ +import 'package:serverpod_auth_idp_server/core.dart'; + +/// By extending [RefreshJwtTokensEndpoint], the JWT token refresh endpoint +/// is made available on the server and enables automatic token refresh on the client. +class JwtRefreshEndpoint extends RefreshJwtTokensEndpoint {} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/controllers.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/controllers.dart new file mode 100644 index 0000000..00be00f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/controllers.dart @@ -0,0 +1,2 @@ +export 'samples_controller.dart'; +export 'tags_controller.dart'; diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/samples_controller.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/samples_controller.dart new file mode 100644 index 0000000..e37bdbd --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/samples_controller.dart @@ -0,0 +1,14 @@ +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:serverpod/serverpod.dart'; + +class SamplesController { + SamplesController(this._session); + + final Session _session; + + /// Persists a new sample to the database. + Future create(Sample sample) { + assert(sample.id == null, 'Sample.id must be null when creating'); + return Sample.db.insertRow(_session, sample); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/tags_controller.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/tags_controller.dart new file mode 100644 index 0000000..5c86f94 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/controllers/tags_controller.dart @@ -0,0 +1,84 @@ +import 'package:eval_explorer_server/src/business/utils.dart'; +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:serverpod/serverpod.dart'; + +class TagsController { + TagsController(this._session); + + final Session _session; + + /// Upserts a list of tags from their names. + /// + /// Returns the complete list of tags that were created or already existed. + Future> createMissingFromNames(Iterable names) async { + final allNamesSet = names.toSet(); + final existingTags = await Tag.db.find( + _session, + where: (t) => t.name.inSet(allNamesSet), + ); + if (existingTags.length == allNamesSet.length) { + return existingTags; + } + + final existingNamesSet = existingTags.map((t) => t.name).toSet(); + final missingNames = allNamesSet.difference(existingNamesSet); + final newTags = await Tag.db.insert( + _session, + missingNames.map((name) => Tag(name: name)).toList(), + ); + return [...existingTags, ...newTags]; + } + + /// Links a list of tags to a sample, adding any missing and removing any + /// stale tags. + /// + /// The sample and all tags must already exist in the database. + Future linkToSample(Sample sample, List tags) async { + assert(sample.id != null, 'Sample.id must not be null when linking tags'); + assert( + tags.every((tag) => tag.id != null), + 'All tags must have an id when linking to a sample', + ); + + // Get the current state of this sample's tags. + final alreadyLinkedTags = await SampleTagXref.db.find( + _session, + where: (t) => t.sampleId.equals(sample.id!), + ); + final alreadyLinkedTagIds = alreadyLinkedTags.map((t) => t.tagId).toSet(); + + // Flatten the desired list of Ids. + final desiredTagIds = tags.map((t) => t.id!).toSet(); + + // Get the Ids to link. + final tagIdsToLink = desiredTagIds.difference(alreadyLinkedTagIds); + if (tagIdsToLink.isNotEmpty) { + await SampleTagXref.db.insert( + _session, + tagIdsToLink + .map((tagId) => SampleTagXref(sampleId: sample.id!, tagId: tagId)) + .toList(), + ); + } + + // Get the Ids to unlink. + final tagsToUnlink = alreadyLinkedTagIds.difference(desiredTagIds); + if (tagsToUnlink.isNotEmpty) { + final deleted = await SampleTagXref.db.deleteWhere( + _session, + where: (t) => + t.sampleId.equals(sample.id!) & t.tagId.inSet(tagsToUnlink), + ); + assert( + deleted.length == tagsToUnlink.length, + 'Unexpectedly unlinked ${deleted.length} tags from sample ${sample.id} ' + 'while expected to unlink ${tagsToUnlink.length} tags', + ); + } + + return XrefModification( + added: tagIdsToLink.length, + removed: tagsToUnlink.length, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures.dart new file mode 100644 index 0000000..8b97ce0 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures.dart @@ -0,0 +1,2 @@ +export 'fixtures_importer.dart'; +export 'fixtures_parser.dart'; diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_importer.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_importer.dart new file mode 100644 index 0000000..f1a242a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_importer.dart @@ -0,0 +1,483 @@ +import 'dart:io'; +import 'package:ansicolor/ansicolor.dart'; +import 'package:eval_explorer_server/src/business/controllers/controllers.dart'; +import 'package:eval_explorer_server/src/business/utils.dart'; +import 'package:serverpod/serverpod.dart'; +import '../../generated/protocol.dart'; +import 'fixtures_parser.dart'; + +final greenText = AnsiPen()..green(bold: true); +final redText = AnsiPen()..red(bold: true); + +abstract class FixturesImporter { + Future import( + Iterable datasets, { + bool verbose = false, + }) async { + // All of the datasets defined in the fixture files, used to delete + // deprecated / removed datasets. + final fixtureDatasetNames = {}; + List updatedDatasets = []; + List createdDatasets = []; + + for (final fixtureDataset in datasets) { + fixtureDatasetNames.add(fixtureDataset.name); + + // Look for the existing row + Dataset? dataset = await getDatasetByName(fixtureDataset.name); + + if (dataset == null) { + // If not found, create it + dataset = await createDataset( + Dataset( + name: fixtureDataset.name, + ), + ); + createdDatasets.add(dataset); + } else { + final updateResult = await updateDataset(dataset, fixtureDataset); + dataset = updateResult.$1; + if (updateResult.$2) { + updatedDatasets.add(updateResult.$1); + } + } + + // All of the samples defined in the fixture files, used to delete + // deprecated / removed samples. + final fixtureSampleNames = {}; + List updatedSamples = []; + List createdSamples = []; + + // Now that we have the dataset, we can import the evals + for (final fixtureSample in fixtureDataset.samples) { + final tagNames = fixtureSample.metadata.tags != null + ? fixtureSample.metadata.tags! + .split(',') + .map((s) => s.trim()) + .toList() + : []; + + // In the YAML files, "id" is a human readable slug + fixtureSampleNames.add(fixtureSample.id); + + final existingSample = await getSampleByName( + fixtureSample.id, // human readable slug + dataset.id!.toString(), // actual database Uuid.v7 + ); + + if (existingSample != null) { + final updateResult = await updateSample( + existingSample, + fixtureSample, + tagNames: tagNames, + ); + if (updateResult.$2) { + updatedSamples.add(updateResult.$1); + } + } else { + final creationResult = await createSample( + Sample( + datasetId: dataset.id!, + name: fixtureSample.id, + input: fixtureSample.input, + target: fixtureSample.target, + ), + tagNames: tagNames, + ); + createdSamples.add(creationResult.$1); + } + } + + // Now remove any samples that are no longer in the fixture files + final deactivatedSamples = await deactivateSamples( + datasetId: dataset.id!.toString(), + namesToSave: fixtureSampleNames, + ); + + if (verbose) { + if (createdSamples.isNotEmpty) { + stdout.writeln( + greenText( + 'Created samples from dataset ${dataset.name}: ' + '{${createdSamples.map((s) => s.name).join(', ')}}', + ), + ); + } + if (updatedSamples.isNotEmpty) { + stdout.writeln( + greenText( + 'Updated samples from dataset ${dataset.name}: ' + '{${updatedSamples.map((s) => s.name).join(', ')}}', + ), + ); + } + if (deactivatedSamples.isNotEmpty) { + stdout.writeln( + redText( + 'Deactivated samples from dataset ${dataset.name}: ' + '{${deactivatedSamples.map((s) => s.name).join(', ')}}', + ), + ); + } + if (updatedSamples.isEmpty && deactivatedSamples.isEmpty) { + stdout.writeln('No changes to existing samples for ${dataset.name}'); + } + } + } + + final deactivatedDatasets = await deactivateDatasets( + namesToSave: fixtureDatasetNames, + ); + + if (verbose) { + if (createdDatasets.isNotEmpty) { + stdout.writeln( + greenText( + 'Created datasets: ' + '{${createdDatasets.map((s) => s.name).join(', ')}}', + ), + ); + } + if (updatedDatasets.isNotEmpty) { + stdout.writeln( + greenText( + 'Updated datasets: ' + '{${updatedDatasets.map((s) => s.name).join(', ')}}', + ), + ); + } + if (deactivatedDatasets.isNotEmpty) { + stdout.writeln( + redText( + 'Deactivated datasets: ' + '{${deactivatedDatasets.map((d) => d.name).join(', ')}}', + ), + ); + } + if (updatedDatasets.isEmpty && deactivatedDatasets.isEmpty) { + stdout.writeln('No changes to existing datasets'); + } + } + } + + /// Load a dataset by its `name` column. + Future getDatasetByName(String name); + + /// Create a new dataset. + Future createDataset(Dataset dataset); + + /// Update an existing dataset against the latest fixture values. Returns + /// a tuple of the updated dataset and a boolean indicating whether the + /// dataset was modified by the update. + Future<(Dataset, bool)> updateDataset( + Dataset dataset, + FixtureDataset fixtureDataset, + ); + + /// Load a sample by its `name` column. + Future getSampleByName(String name, String datasetId); + + /// Create a new sample. + Future<(Sample, XrefModification)> createSample( + Sample sample, { + required List tagNames, + }); + + /// Update an existing sample against the latest fixture values. Returns + /// a tuple of the updated sample and a boolean indicating whether the sample + /// was modified by the update. + Future<(Sample, bool, XrefModification)> updateSample( + Sample sample, + FixtureSample fixtureSample, { + required List tagNames, + }); + + /// Deactivate datasets satisfying the conditions. + Future> deactivateDatasets({ + required Set namesToSave, + }); + + /// Deactivate samples satisfying the conditions. + Future> deactivateSamples({ + required String datasetId, + required Set namesToSave, + }); +} + +class DatabaseFixturesImporter extends FixturesImporter { + DatabaseFixturesImporter({required this.session}) + : _samplesController = SamplesController(session), + _tagsController = TagsController(session); + + final Session session; + + final SamplesController _samplesController; + final TagsController _tagsController; + + @override + Future getDatasetByName(String name) async => + Dataset.db.findFirstRow( + session, + where: (t) => t.name.equals(name), + ); + + @override + Future createDataset(Dataset dataset) { + assert(dataset.id == null, 'Dataset.id must be null when creating'); + return Dataset.db.insertRow(session, dataset); + } + + @override + Future<(Dataset, bool)> updateDataset( + Dataset dataset, + FixtureDataset fixtureDataset, + ) async { + assert(dataset.id != null, 'Dataset.id must not be null when updating'); + + bool isUpdated = false; + if (dataset.name != fixtureDataset.name) { + dataset.name = fixtureDataset.name; + isUpdated = true; + } + if (dataset.isActive == false) { + dataset.isActive = true; + isUpdated = true; + } + return (await Dataset.db.updateRow(session, dataset), isUpdated); + } + + @override + Future getSampleByName(String name, String datasetId) async => + // + Sample.db.findFirstRow( + session, + where: (t) => + t.name.equals(name) & + t.datasetId.equals(UuidValue.fromString(datasetId)), + ); + + @override + Future<(Sample, XrefModification)> createSample( + Sample sample, { + required List tagNames, + }) async { + final savedSample = await _samplesController.create(sample); + final tags = await _tagsController.createMissingFromNames(tagNames); + final tagsDelta = await _tagsController.linkToSample(savedSample, tags); + return (savedSample, tagsDelta); + } + + @override + Future<(Sample, bool, XrefModification)> updateSample( + Sample sample, + FixtureSample fixtureSample, { + required List tagNames, + }) async { + assert(sample.id != null, 'Sample.id must not be null when updating'); + bool isUpdated = false; + if (sample.name != fixtureSample.id) { + sample.name = fixtureSample.id; + isUpdated = true; + } + if (sample.input != fixtureSample.input) { + sample.input = fixtureSample.input; + isUpdated = true; + } + if (sample.target != fixtureSample.target) { + sample.target = fixtureSample.target; + isUpdated = true; + } + if (!sample.isActive) { + sample.isActive = true; + isUpdated = true; + } + + final tags = await _tagsController.createMissingFromNames(tagNames); + final tagsDelta = await _tagsController.linkToSample(sample, tags); + + return (await Sample.db.updateRow(session, sample), isUpdated, tagsDelta); + } + + @override + Future> deactivateDatasets({ + required Set namesToSave, + }) async { + final datasetsToDeactivate = await Dataset.db.find( + session, + where: (t) => t.name.notInSet(namesToSave) & t.isActive.equals(true), + ); + return Dataset.db.updateWhere( + session, + columnValues: (t) => [t.isActive(false)], + where: (t) => t.id.inSet( + // Only deactivate datasets that are active, so as to not continuously + // report the same old info on every subsequent operation. + datasetsToDeactivate.map((d) => d.id!).toSet(), + ), + ); + } + + @override + Future> deactivateSamples({ + required String datasetId, + required Set namesToSave, + }) async { + final samplesToDeactivate = await Sample.db.find( + session, + where: (t) => + t.datasetId.equals(UuidValue.fromString(datasetId)) & + t.name.notInSet(namesToSave) & + t.isActive.equals(true), + ); + return Sample.db.updateWhere( + session, + columnValues: (t) => [t.isActive(false)], + where: (t) => t.id.inSet( + // Only deactivate samples that are active, so as to not continuously + // report the same old info on every subsequent operation. + samplesToDeactivate.map((s) => s.id!).toSet(), + ), + ); + } +} + +/// Test-friendly implementation of [FixturesImporter] that stores datasets +/// in local memory. Useful to test all of the abstract [FixturesImporter], +/// including that the right CRUD methods are invoked. Of course, this does not +/// help with testing the database layer, as that would require integration +/// tests in CI. +class InMemoryFixturesImporter extends FixturesImporter { + final datasets = {}; + final samples = {}; + int _idCounter = 0; + + UuidValue _generateId() { + _idCounter++; + // format: 00000000-0000-0000-0000-000000000001 + final idStr = _idCounter.toString().padLeft(12, '0'); + return UuidValue.fromString('00000000-0000-0000-0000-$idStr'); + } + + @override + Future getDatasetByName(String name) async { + return datasets.values.cast().firstWhere( + (d) => d!.name == name, + orElse: () => null, + ); + } + + @override + Future createDataset(Dataset dataset) async { + assert(dataset.id == null, 'Dataset.id must be null when creating'); + final newDataset = dataset.copyWith(id: _generateId()); + datasets[newDataset.id!.toString()] = newDataset; + return newDataset; + } + + @override + Future<(Dataset, bool)> updateDataset( + Dataset dataset, + FixtureDataset fixtureDataset, + ) async { + assert(dataset.id != null, 'Dataset.id must not be null when updating'); + bool isUpdated = false; + + if (dataset.name != fixtureDataset.name) { + dataset.name = fixtureDataset.name; + isUpdated = true; + } + if (!dataset.isActive) { + dataset.isActive = true; + isUpdated = true; + } + datasets[dataset.id!.toString()] = dataset; + return (dataset, isUpdated); + } + + @override + Future getSampleByName(String name, String datasetId) async { + return samples.values.cast().firstWhere( + (s) => s!.name == name && s.datasetId.toString() == datasetId, + orElse: () => null, + ); + } + + @override + Future<(Sample, XrefModification)> createSample( + Sample sample, { + required List tagNames, + }) async { + assert(sample.id == null, 'Sample.id must be null when creating'); + final newSample = sample.copyWith(id: _generateId()); + samples[newSample.id!.toString()] = newSample; + return (newSample, XrefModification.zero); + } + + @override + Future<(Sample, bool, XrefModification)> updateSample( + Sample sample, + FixtureSample fixtureSample, { + required List tagNames, + }) async { + assert(sample.id != null, 'Sample.id must not be null when updating'); + bool isUpdated = false; + if (sample.name != fixtureSample.id) { + sample.name = fixtureSample.id; + isUpdated = true; + } + if (sample.input != fixtureSample.input) { + sample.input = fixtureSample.input; + isUpdated = true; + } + if (sample.target != fixtureSample.target) { + sample.target = fixtureSample.target; + isUpdated = true; + } + if (!sample.isActive) { + sample.isActive = true; + isUpdated = true; + } + samples[sample.id!.toString()] = sample; + return (sample, isUpdated, XrefModification.zero); + } + + @override + Future> deactivateDatasets({ + required Set namesToSave, + }) async { + final deactivated = []; + for (final id in datasets.keys) { + final dataset = datasets[id]!; + if (namesToSave.contains(dataset.name)) { + continue; + } + if (dataset.isActive) { + final updated = dataset.copyWith(isActive: false); + datasets[id] = updated; + deactivated.add(updated); + } + } + return deactivated; + } + + @override + Future> deactivateSamples({ + required String datasetId, + required Set namesToSave, + }) async { + final deactivated = []; + final dsId = UuidValue.fromString(datasetId); + + for (final id in samples.keys) { + final sample = samples[id]!; + if (sample.datasetId == dsId && !namesToSave.contains(sample.name)) { + if (sample.isActive) { + final updated = sample.copyWith(isActive: false); + samples[id] = updated; + deactivated.add(updated); + } + } + } + return deactivated; + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_parser.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_parser.dart new file mode 100644 index 0000000..60f0509 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/fixtures/fixtures_parser.dart @@ -0,0 +1,98 @@ +import 'dart:io'; +import 'package:yaml/yaml.dart'; + +class FixtureSample { + final String id; + final String input; + final String target; + final SampleMetadata metadata; + + FixtureSample({ + required this.id, + required this.input, + required this.target, + required this.metadata, + }); + + factory FixtureSample.fromYaml(Map yaml) { + return FixtureSample( + id: yaml['id'] as String, + input: yaml['input'] as String, + target: yaml['target'] as String, + metadata: SampleMetadata.fromYaml(yaml['metadata'] as Map), + ); + } +} + +class SampleMetadata { + final String? added; + final String? tags; + final String? difficulty; + final String? estimatedLines; + final List? requiredWidgets; + final String? testFile; + + SampleMetadata({ + this.added, + this.tags, + this.difficulty, + this.estimatedLines, + this.requiredWidgets, + this.testFile, + }); + + factory SampleMetadata.fromYaml(Map yaml) { + return SampleMetadata( + added: yaml['added']?.toString(), + tags: yaml['tags']?.toString(), + difficulty: yaml['difficulty']?.toString(), + estimatedLines: yaml['estimated_lines']?.toString(), + requiredWidgets: (yaml['required_widgets'] as List?) + ?.map((e) => e.toString()) + .toList(), + testFile: yaml['test_file']?.toString(), + ); + } +} + +class FixtureDataset { + final String name; + final List samples; + + FixtureDataset({required this.name, required this.samples}); +} + +class FixturesParser { + final String datasetsPath; + + FixturesParser({required this.datasetsPath}); + + Future> parse() async { + final datasets = []; + final dir = Directory(datasetsPath); + if (!await dir.exists()) { + throw FileSystemException('Datasets directory not found', datasetsPath); + } + + await for (final entity in dir.list()) { + if (entity is File && + (entity.path.endsWith('.yaml') || entity.path.endsWith('.yml'))) { + final content = await entity.readAsString(); + final documents = loadYamlStream(content); + final samples = []; + for (final doc in documents) { + if (doc is Map) { + samples.add(FixtureSample.fromYaml(doc)); + } + } + + // Extract filename without extension + final filename = entity.uri.pathSegments.last; + final name = filename.substring(0, filename.lastIndexOf('.')); + + datasets.add(FixtureDataset(name: name, samples: samples)); + } + } + return datasets; + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/business/utils.dart b/packages/eval_explorer/eval_explorer_server/lib/src/business/utils.dart new file mode 100644 index 0000000..0dba755 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/business/utils.dart @@ -0,0 +1,17 @@ +/// The result of a set operation on a cross reference table. +class XrefModification { + const XrefModification({ + required this.added, + required this.removed, + }); + + /// Stub value for tests non-database tests that do not evaluate cross + /// references. + static const XrefModification zero = XrefModification(added: 0, removed: 0); + + /// Number of added cross references from a set operation. + final int added; + + /// Number of removed cross references from a set operation. + final int removed; +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/endpoints/google_endpoint.dart b/packages/eval_explorer/eval_explorer_server/lib/src/endpoints/google_endpoint.dart new file mode 100644 index 0000000..8c8ab43 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/endpoints/google_endpoint.dart @@ -0,0 +1,3 @@ +import 'package:serverpod_auth_idp_server/providers/google.dart'; + +class GoogleIdpEndpoint extends GoogleIdpBaseEndpoint {} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/dataset.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/dataset.dart new file mode 100644 index 0000000..947d069 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/dataset.dart @@ -0,0 +1,531 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +/// A dataset is an Inspect AI term that refers to a collection of samples. +/// +/// In our case, each dataset corresponds to a collection of sample types. +/// (i.e. "dart_qa_dataset", "flutter_code_execution") And each sample type +/// refers to a specific file in the /datasets directory. +abstract class Dataset + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Dataset._({ + this.id, + required this.name, + bool? isActive, + }) : isActive = isActive ?? true, + _evalsRunsDatasetsEvalsRunsId = null; + + factory Dataset({ + _i1.UuidValue? id, + required String name, + bool? isActive, + }) = _DatasetImpl; + + factory Dataset.fromJson(Map jsonSerialization) { + return DatasetImplicit._( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + isActive: jsonSerialization['isActive'] as bool?, + $_evalsRunsDatasetsEvalsRunsId: + jsonSerialization['_evalsRunsDatasetsEvalsRunsId'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['_evalsRunsDatasetsEvalsRunsId'], + ), + ); + } + + static final t = DatasetTable(); + + static const db = DatasetRepository._(); + + @override + _i1.UuidValue? id; + + String name; + + bool isActive; + + final _i1.UuidValue? _evalsRunsDatasetsEvalsRunsId; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Dataset] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Dataset copyWith({ + _i1.UuidValue? id, + String? name, + bool? isActive, + }); + @override + Map toJson() { + return { + '__className__': 'Dataset', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'isActive': isActive, + if (_evalsRunsDatasetsEvalsRunsId != null) + '_evalsRunsDatasetsEvalsRunsId': _evalsRunsDatasetsEvalsRunsId.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Dataset', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'isActive': isActive, + }; + } + + static DatasetInclude include() { + return DatasetInclude._(); + } + + static DatasetIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + DatasetInclude? include, + }) { + return DatasetIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Dataset.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Dataset.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _DatasetImpl extends Dataset { + _DatasetImpl({ + _i1.UuidValue? id, + required String name, + bool? isActive, + }) : super._( + id: id, + name: name, + isActive: isActive, + ); + + /// Returns a shallow copy of this [Dataset] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Dataset copyWith({ + Object? id = _Undefined, + String? name, + bool? isActive, + }) { + return DatasetImplicit._( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + isActive: isActive ?? this.isActive, + $_evalsRunsDatasetsEvalsRunsId: this._evalsRunsDatasetsEvalsRunsId, + ); + } +} + +class DatasetImplicit extends _DatasetImpl { + DatasetImplicit._({ + _i1.UuidValue? id, + required String name, + bool? isActive, + _i1.UuidValue? $_evalsRunsDatasetsEvalsRunsId, + }) : _evalsRunsDatasetsEvalsRunsId = $_evalsRunsDatasetsEvalsRunsId, + super( + id: id, + name: name, + isActive: isActive, + ); + + factory DatasetImplicit( + Dataset dataset, { + _i1.UuidValue? $_evalsRunsDatasetsEvalsRunsId, + }) { + return DatasetImplicit._( + id: dataset.id, + name: dataset.name, + isActive: dataset.isActive, + $_evalsRunsDatasetsEvalsRunsId: $_evalsRunsDatasetsEvalsRunsId, + ); + } + + @override + final _i1.UuidValue? _evalsRunsDatasetsEvalsRunsId; +} + +class DatasetUpdateTable extends _i1.UpdateTable { + DatasetUpdateTable(super.table); + + _i1.ColumnValue name(String value) => _i1.ColumnValue( + table.name, + value, + ); + + _i1.ColumnValue isActive(bool value) => _i1.ColumnValue( + table.isActive, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> $_evalsRunsDatasetsEvalsRunsId( + _i1.UuidValue? value, + ) => _i1.ColumnValue( + table.$_evalsRunsDatasetsEvalsRunsId, + value, + ); +} + +class DatasetTable extends _i1.Table<_i1.UuidValue?> { + DatasetTable({super.tableRelation}) : super(tableName: 'evals_datasets') { + updateTable = DatasetUpdateTable(this); + name = _i1.ColumnString( + 'name', + this, + ); + isActive = _i1.ColumnBool( + 'isActive', + this, + hasDefault: true, + ); + $_evalsRunsDatasetsEvalsRunsId = _i1.ColumnUuid( + '_evalsRunsDatasetsEvalsRunsId', + this, + ); + } + + late final DatasetUpdateTable updateTable; + + late final _i1.ColumnString name; + + late final _i1.ColumnBool isActive; + + late final _i1.ColumnUuid $_evalsRunsDatasetsEvalsRunsId; + + @override + List<_i1.Column> get columns => [ + id, + name, + isActive, + $_evalsRunsDatasetsEvalsRunsId, + ]; + + @override + List<_i1.Column> get managedColumns => [ + id, + name, + isActive, + ]; +} + +class DatasetInclude extends _i1.IncludeObject { + DatasetInclude._(); + + @override + Map get includes => {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Dataset.t; +} + +class DatasetIncludeList extends _i1.IncludeList { + DatasetIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Dataset.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Dataset.t; +} + +class DatasetRepository { + const DatasetRepository._(); + + /// Returns a list of [Dataset]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.find( + where: where?.call(Dataset.t), + orderBy: orderBy?.call(Dataset.t), + orderByList: orderByList?.call(Dataset.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + ); + } + + /// Returns the first matching [Dataset] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.findFirstRow( + where: where?.call(Dataset.t), + orderBy: orderBy?.call(Dataset.t), + orderByList: orderByList?.call(Dataset.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + ); + } + + /// Finds a single [Dataset] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + }) async { + return session.db.findById( + id, + transaction: transaction, + ); + } + + /// Inserts all [Dataset]s in the list and returns the inserted rows. + /// + /// The returned [Dataset]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Dataset] and returns the inserted row. + /// + /// The returned [Dataset] will have its `id` field set. + Future insertRow( + _i1.Session session, + Dataset row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Dataset]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Dataset.t), + transaction: transaction, + ); + } + + /// Updates a single [Dataset]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Dataset row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Dataset.t), + transaction: transaction, + ); + } + + /// Updates a single [Dataset] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Dataset.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Dataset]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Dataset.t.updateTable), + where: where(Dataset.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Dataset.t), + orderByList: orderByList?.call(Dataset.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Dataset]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Dataset]. + Future deleteRow( + _i1.Session session, + Dataset row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Dataset.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Dataset.t), + limit: limit, + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/endpoints.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/endpoints.dart new file mode 100644 index 0000000..d2c6e4f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/endpoints.dart @@ -0,0 +1,275 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import '../auth/email_idp_endpoint.dart' as _i2; +import '../auth/jwt_refresh_endpoint.dart' as _i3; +import '../endpoints/google_endpoint.dart' as _i4; +import 'package:serverpod_auth_idp_server/serverpod_auth_idp_server.dart' + as _i5; +import 'package:serverpod_auth_core_server/serverpod_auth_core_server.dart' + as _i6; + +class Endpoints extends _i1.EndpointDispatch { + @override + void initializeEndpoints(_i1.Server server) { + var endpoints = { + 'emailIdp': _i2.EmailIdpEndpoint() + ..initialize( + server, + 'emailIdp', + null, + ), + 'jwtRefresh': _i3.JwtRefreshEndpoint() + ..initialize( + server, + 'jwtRefresh', + null, + ), + 'googleIdp': _i4.GoogleIdpEndpoint() + ..initialize( + server, + 'googleIdp', + null, + ), + }; + connectors['emailIdp'] = _i1.EndpointConnector( + name: 'emailIdp', + endpoint: endpoints['emailIdp']!, + methodConnectors: { + 'login': _i1.MethodConnector( + name: 'login', + params: { + 'email': _i1.ParameterDescription( + name: 'email', + type: _i1.getType(), + nullable: false, + ), + 'password': _i1.ParameterDescription( + name: 'password', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint).login( + session, + email: params['email'], + password: params['password'], + ), + ), + 'startRegistration': _i1.MethodConnector( + name: 'startRegistration', + params: { + 'email': _i1.ParameterDescription( + name: 'email', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .startRegistration( + session, + email: params['email'], + ), + ), + 'verifyRegistrationCode': _i1.MethodConnector( + name: 'verifyRegistrationCode', + params: { + 'accountRequestId': _i1.ParameterDescription( + name: 'accountRequestId', + type: _i1.getType<_i1.UuidValue>(), + nullable: false, + ), + 'verificationCode': _i1.ParameterDescription( + name: 'verificationCode', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .verifyRegistrationCode( + session, + accountRequestId: params['accountRequestId'], + verificationCode: params['verificationCode'], + ), + ), + 'finishRegistration': _i1.MethodConnector( + name: 'finishRegistration', + params: { + 'registrationToken': _i1.ParameterDescription( + name: 'registrationToken', + type: _i1.getType(), + nullable: false, + ), + 'password': _i1.ParameterDescription( + name: 'password', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .finishRegistration( + session, + registrationToken: params['registrationToken'], + password: params['password'], + ), + ), + 'startPasswordReset': _i1.MethodConnector( + name: 'startPasswordReset', + params: { + 'email': _i1.ParameterDescription( + name: 'email', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .startPasswordReset( + session, + email: params['email'], + ), + ), + 'verifyPasswordResetCode': _i1.MethodConnector( + name: 'verifyPasswordResetCode', + params: { + 'passwordResetRequestId': _i1.ParameterDescription( + name: 'passwordResetRequestId', + type: _i1.getType<_i1.UuidValue>(), + nullable: false, + ), + 'verificationCode': _i1.ParameterDescription( + name: 'verificationCode', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .verifyPasswordResetCode( + session, + passwordResetRequestId: params['passwordResetRequestId'], + verificationCode: params['verificationCode'], + ), + ), + 'finishPasswordReset': _i1.MethodConnector( + name: 'finishPasswordReset', + params: { + 'finishPasswordResetToken': _i1.ParameterDescription( + name: 'finishPasswordResetToken', + type: _i1.getType(), + nullable: false, + ), + 'newPassword': _i1.ParameterDescription( + name: 'newPassword', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['emailIdp'] as _i2.EmailIdpEndpoint) + .finishPasswordReset( + session, + finishPasswordResetToken: + params['finishPasswordResetToken'], + newPassword: params['newPassword'], + ), + ), + }, + ); + connectors['jwtRefresh'] = _i1.EndpointConnector( + name: 'jwtRefresh', + endpoint: endpoints['jwtRefresh']!, + methodConnectors: { + 'refreshAccessToken': _i1.MethodConnector( + name: 'refreshAccessToken', + params: { + 'refreshToken': _i1.ParameterDescription( + name: 'refreshToken', + type: _i1.getType(), + nullable: false, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => (endpoints['jwtRefresh'] as _i3.JwtRefreshEndpoint) + .refreshAccessToken( + session, + refreshToken: params['refreshToken'], + ), + ), + }, + ); + connectors['googleIdp'] = _i1.EndpointConnector( + name: 'googleIdp', + endpoint: endpoints['googleIdp']!, + methodConnectors: { + 'login': _i1.MethodConnector( + name: 'login', + params: { + 'idToken': _i1.ParameterDescription( + name: 'idToken', + type: _i1.getType(), + nullable: false, + ), + 'accessToken': _i1.ParameterDescription( + name: 'accessToken', + type: _i1.getType(), + nullable: true, + ), + }, + call: + ( + _i1.Session session, + Map params, + ) async => + (endpoints['googleIdp'] as _i4.GoogleIdpEndpoint).login( + session, + idToken: params['idToken'], + accessToken: params['accessToken'], + ), + ), + }, + ); + modules['serverpod_auth_idp'] = _i5.Endpoints() + ..initializeEndpoints(server); + modules['serverpod_auth_core'] = _i6.Endpoints() + ..initializeEndpoints(server); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/evaluation.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/evaluation.dart new file mode 100644 index 0000000..90d931f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/evaluation.dart @@ -0,0 +1,1340 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'run.dart' as _i2; +import 'task.dart' as _i3; +import 'sample.dart' as _i4; +import 'model.dart' as _i5; +import 'dataset.dart' as _i6; +import 'variant.dart' as _i7; +import 'tool_call_data.dart' as _i8; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i9; + +/// Result of evaluating one sample. +abstract class Evaluation + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Evaluation._({ + this.id, + required this.runId, + this.run, + required this.taskId, + this.task, + required this.sampleId, + this.sample, + required this.modelId, + this.model, + required this.datasetId, + this.dataset, + required this.variant, + required this.output, + required this.toolCalls, + required this.retryCount, + this.error, + required this.neverSucceeded, + required this.durationSeconds, + this.analyzerPassed, + this.testsPassed, + this.testsTotal, + this.structureScore, + this.failureReason, + required this.inputTokens, + required this.outputTokens, + required this.reasoningTokens, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory Evaluation({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required _i1.UuidValue taskId, + _i3.Task? task, + required _i1.UuidValue sampleId, + _i4.Sample? sample, + required _i1.UuidValue modelId, + _i5.Model? model, + required _i1.UuidValue datasetId, + _i6.Dataset? dataset, + required List<_i7.Variant> variant, + required String output, + required List<_i8.ToolCallData> toolCalls, + required int retryCount, + String? error, + required bool neverSucceeded, + required double durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) = _EvaluationImpl; + + factory Evaluation.fromJson(Map jsonSerialization) { + return Evaluation( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i9.Protocol().deserialize<_i2.Run>(jsonSerialization['run']), + taskId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['taskId']), + task: jsonSerialization['task'] == null + ? null + : _i9.Protocol().deserialize<_i3.Task>(jsonSerialization['task']), + sampleId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['sampleId'], + ), + sample: jsonSerialization['sample'] == null + ? null + : _i9.Protocol().deserialize<_i4.Sample>(jsonSerialization['sample']), + modelId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['modelId'], + ), + model: jsonSerialization['model'] == null + ? null + : _i9.Protocol().deserialize<_i5.Model>(jsonSerialization['model']), + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i9.Protocol().deserialize<_i6.Dataset>( + jsonSerialization['dataset'], + ), + variant: _i9.Protocol().deserialize>( + jsonSerialization['variant'], + ), + output: jsonSerialization['output'] as String, + toolCalls: _i9.Protocol().deserialize>( + jsonSerialization['toolCalls'], + ), + retryCount: jsonSerialization['retryCount'] as int, + error: jsonSerialization['error'] as String?, + neverSucceeded: jsonSerialization['neverSucceeded'] as bool, + durationSeconds: (jsonSerialization['durationSeconds'] as num).toDouble(), + analyzerPassed: jsonSerialization['analyzerPassed'] as bool?, + testsPassed: jsonSerialization['testsPassed'] as int?, + testsTotal: jsonSerialization['testsTotal'] as int?, + structureScore: (jsonSerialization['structureScore'] as num?)?.toDouble(), + failureReason: jsonSerialization['failureReason'] as String?, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + static final t = EvaluationTable(); + + static const db = EvaluationRepository._(); + + @override + _i1.UuidValue? id; + + _i1.UuidValue runId; + + /// The parent run. + _i2.Run? run; + + _i1.UuidValue taskId; + + /// The parent task. + _i3.Task? task; + + _i1.UuidValue sampleId; + + /// The sample that was evaluated. + _i4.Sample? sample; + + _i1.UuidValue modelId; + + /// The model that was evaluated. + _i5.Model? model; + + _i1.UuidValue datasetId; + + /// The dataset this sample belongs to (e.g., "flutter_qa_dataset"). + _i6.Dataset? dataset; + + /// Variant configuration. + List<_i7.Variant> variant; + + /// The actual output generated by the model. + String output; + + /// Tool calls made during evaluation. + List<_i8.ToolCallData> toolCalls; + + /// Number of times this sample was retried. + int retryCount; + + /// Error message if sample failed. + String? error; + + /// True if all retries failed (exclude from accuracy calculations). + bool neverSucceeded; + + /// Total time for this sample in seconds. + double durationSeconds; + + /// Did flutter analyze pass? + bool? analyzerPassed; + + /// Number of tests passed. + int? testsPassed; + + /// Total number of tests. + int? testsTotal; + + /// Code structure validation score (0.0-1.0). + double? structureScore; + + /// Categorized failure reason: "analyzer_error", "test_failure", "missing_structure". + String? failureReason; + + /// Input tokens for this sample. + int inputTokens; + + /// Output tokens for this sample. + int outputTokens; + + /// Reasoning tokens for this sample. + int reasoningTokens; + + /// When this evaluation was run. + DateTime createdAt; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Evaluation] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Evaluation copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? runId, + _i2.Run? run, + _i1.UuidValue? taskId, + _i3.Task? task, + _i1.UuidValue? sampleId, + _i4.Sample? sample, + _i1.UuidValue? modelId, + _i5.Model? model, + _i1.UuidValue? datasetId, + _i6.Dataset? dataset, + List<_i7.Variant>? variant, + String? output, + List<_i8.ToolCallData>? toolCalls, + int? retryCount, + String? error, + bool? neverSucceeded, + double? durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Evaluation', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJson(), + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJson(), + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJson(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'variant': variant.toJson(valueToJson: (v) => v.toJson()), + 'output': output, + 'toolCalls': toolCalls.toJson(valueToJson: (v) => v.toJson()), + 'retryCount': retryCount, + if (error != null) 'error': error, + 'neverSucceeded': neverSucceeded, + 'durationSeconds': durationSeconds, + if (analyzerPassed != null) 'analyzerPassed': analyzerPassed, + if (testsPassed != null) 'testsPassed': testsPassed, + if (testsTotal != null) 'testsTotal': testsTotal, + if (structureScore != null) 'structureScore': structureScore, + if (failureReason != null) 'failureReason': failureReason, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Evaluation', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJsonForProtocol(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJsonForProtocol(), + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJsonForProtocol(), + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJsonForProtocol(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJsonForProtocol(), + 'variant': variant.toJson(valueToJson: (v) => v.toJson()), + 'output': output, + 'toolCalls': toolCalls.toJson(valueToJson: (v) => v.toJsonForProtocol()), + 'retryCount': retryCount, + if (error != null) 'error': error, + 'neverSucceeded': neverSucceeded, + 'durationSeconds': durationSeconds, + if (analyzerPassed != null) 'analyzerPassed': analyzerPassed, + if (testsPassed != null) 'testsPassed': testsPassed, + if (testsTotal != null) 'testsTotal': testsTotal, + if (structureScore != null) 'structureScore': structureScore, + if (failureReason != null) 'failureReason': failureReason, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + static EvaluationInclude include({ + _i2.RunInclude? run, + _i3.TaskInclude? task, + _i4.SampleInclude? sample, + _i5.ModelInclude? model, + _i6.DatasetInclude? dataset, + }) { + return EvaluationInclude._( + run: run, + task: task, + sample: sample, + model: model, + dataset: dataset, + ); + } + + static EvaluationIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + EvaluationInclude? include, + }) { + return EvaluationIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Evaluation.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Evaluation.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _EvaluationImpl extends Evaluation { + _EvaluationImpl({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required _i1.UuidValue taskId, + _i3.Task? task, + required _i1.UuidValue sampleId, + _i4.Sample? sample, + required _i1.UuidValue modelId, + _i5.Model? model, + required _i1.UuidValue datasetId, + _i6.Dataset? dataset, + required List<_i7.Variant> variant, + required String output, + required List<_i8.ToolCallData> toolCalls, + required int retryCount, + String? error, + required bool neverSucceeded, + required double durationSeconds, + bool? analyzerPassed, + int? testsPassed, + int? testsTotal, + double? structureScore, + String? failureReason, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) : super._( + id: id, + runId: runId, + run: run, + taskId: taskId, + task: task, + sampleId: sampleId, + sample: sample, + modelId: modelId, + model: model, + datasetId: datasetId, + dataset: dataset, + variant: variant, + output: output, + toolCalls: toolCalls, + retryCount: retryCount, + error: error, + neverSucceeded: neverSucceeded, + durationSeconds: durationSeconds, + analyzerPassed: analyzerPassed, + testsPassed: testsPassed, + testsTotal: testsTotal, + structureScore: structureScore, + failureReason: failureReason, + inputTokens: inputTokens, + outputTokens: outputTokens, + reasoningTokens: reasoningTokens, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Evaluation] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Evaluation copyWith({ + Object? id = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + _i1.UuidValue? taskId, + Object? task = _Undefined, + _i1.UuidValue? sampleId, + Object? sample = _Undefined, + _i1.UuidValue? modelId, + Object? model = _Undefined, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + List<_i7.Variant>? variant, + String? output, + List<_i8.ToolCallData>? toolCalls, + int? retryCount, + Object? error = _Undefined, + bool? neverSucceeded, + double? durationSeconds, + Object? analyzerPassed = _Undefined, + Object? testsPassed = _Undefined, + Object? testsTotal = _Undefined, + Object? structureScore = _Undefined, + Object? failureReason = _Undefined, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }) { + return Evaluation( + id: id is _i1.UuidValue? ? id : this.id, + runId: runId ?? this.runId, + run: run is _i2.Run? ? run : this.run?.copyWith(), + taskId: taskId ?? this.taskId, + task: task is _i3.Task? ? task : this.task?.copyWith(), + sampleId: sampleId ?? this.sampleId, + sample: sample is _i4.Sample? ? sample : this.sample?.copyWith(), + modelId: modelId ?? this.modelId, + model: model is _i5.Model? ? model : this.model?.copyWith(), + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i6.Dataset? ? dataset : this.dataset?.copyWith(), + variant: variant ?? this.variant.map((e0) => e0).toList(), + output: output ?? this.output, + toolCalls: + toolCalls ?? this.toolCalls.map((e0) => e0.copyWith()).toList(), + retryCount: retryCount ?? this.retryCount, + error: error is String? ? error : this.error, + neverSucceeded: neverSucceeded ?? this.neverSucceeded, + durationSeconds: durationSeconds ?? this.durationSeconds, + analyzerPassed: analyzerPassed is bool? + ? analyzerPassed + : this.analyzerPassed, + testsPassed: testsPassed is int? ? testsPassed : this.testsPassed, + testsTotal: testsTotal is int? ? testsTotal : this.testsTotal, + structureScore: structureScore is double? + ? structureScore + : this.structureScore, + failureReason: failureReason is String? + ? failureReason + : this.failureReason, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + createdAt: createdAt ?? this.createdAt, + ); + } +} + +class EvaluationUpdateTable extends _i1.UpdateTable { + EvaluationUpdateTable(super.table); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> runId(_i1.UuidValue value) => + _i1.ColumnValue( + table.runId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> taskId(_i1.UuidValue value) => + _i1.ColumnValue( + table.taskId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> sampleId(_i1.UuidValue value) => + _i1.ColumnValue( + table.sampleId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> modelId(_i1.UuidValue value) => + _i1.ColumnValue( + table.modelId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> datasetId( + _i1.UuidValue value, + ) => _i1.ColumnValue( + table.datasetId, + value, + ); + + _i1.ColumnValue, List<_i7.Variant>> variant( + List<_i7.Variant> value, + ) => _i1.ColumnValue( + table.variant, + value, + ); + + _i1.ColumnValue output(String value) => _i1.ColumnValue( + table.output, + value, + ); + + _i1.ColumnValue, List<_i8.ToolCallData>> toolCalls( + List<_i8.ToolCallData> value, + ) => _i1.ColumnValue( + table.toolCalls, + value, + ); + + _i1.ColumnValue retryCount(int value) => _i1.ColumnValue( + table.retryCount, + value, + ); + + _i1.ColumnValue error(String? value) => _i1.ColumnValue( + table.error, + value, + ); + + _i1.ColumnValue neverSucceeded(bool value) => _i1.ColumnValue( + table.neverSucceeded, + value, + ); + + _i1.ColumnValue durationSeconds(double value) => + _i1.ColumnValue( + table.durationSeconds, + value, + ); + + _i1.ColumnValue analyzerPassed(bool? value) => _i1.ColumnValue( + table.analyzerPassed, + value, + ); + + _i1.ColumnValue testsPassed(int? value) => _i1.ColumnValue( + table.testsPassed, + value, + ); + + _i1.ColumnValue testsTotal(int? value) => _i1.ColumnValue( + table.testsTotal, + value, + ); + + _i1.ColumnValue structureScore(double? value) => + _i1.ColumnValue( + table.structureScore, + value, + ); + + _i1.ColumnValue failureReason(String? value) => + _i1.ColumnValue( + table.failureReason, + value, + ); + + _i1.ColumnValue inputTokens(int value) => _i1.ColumnValue( + table.inputTokens, + value, + ); + + _i1.ColumnValue outputTokens(int value) => _i1.ColumnValue( + table.outputTokens, + value, + ); + + _i1.ColumnValue reasoningTokens(int value) => _i1.ColumnValue( + table.reasoningTokens, + value, + ); + + _i1.ColumnValue createdAt(DateTime value) => + _i1.ColumnValue( + table.createdAt, + value, + ); +} + +class EvaluationTable extends _i1.Table<_i1.UuidValue?> { + EvaluationTable({super.tableRelation}) + : super(tableName: 'evals_evaluations') { + updateTable = EvaluationUpdateTable(this); + runId = _i1.ColumnUuid( + 'runId', + this, + ); + taskId = _i1.ColumnUuid( + 'taskId', + this, + ); + sampleId = _i1.ColumnUuid( + 'sampleId', + this, + ); + modelId = _i1.ColumnUuid( + 'modelId', + this, + ); + datasetId = _i1.ColumnUuid( + 'datasetId', + this, + ); + variant = _i1.ColumnSerializable>( + 'variant', + this, + ); + output = _i1.ColumnString( + 'output', + this, + ); + toolCalls = _i1.ColumnSerializable>( + 'toolCalls', + this, + ); + retryCount = _i1.ColumnInt( + 'retryCount', + this, + ); + error = _i1.ColumnString( + 'error', + this, + ); + neverSucceeded = _i1.ColumnBool( + 'neverSucceeded', + this, + ); + durationSeconds = _i1.ColumnDouble( + 'durationSeconds', + this, + ); + analyzerPassed = _i1.ColumnBool( + 'analyzerPassed', + this, + ); + testsPassed = _i1.ColumnInt( + 'testsPassed', + this, + ); + testsTotal = _i1.ColumnInt( + 'testsTotal', + this, + ); + structureScore = _i1.ColumnDouble( + 'structureScore', + this, + ); + failureReason = _i1.ColumnString( + 'failureReason', + this, + ); + inputTokens = _i1.ColumnInt( + 'inputTokens', + this, + ); + outputTokens = _i1.ColumnInt( + 'outputTokens', + this, + ); + reasoningTokens = _i1.ColumnInt( + 'reasoningTokens', + this, + ); + createdAt = _i1.ColumnDateTime( + 'createdAt', + this, + hasDefault: true, + ); + } + + late final EvaluationUpdateTable updateTable; + + late final _i1.ColumnUuid runId; + + /// The parent run. + _i2.RunTable? _run; + + late final _i1.ColumnUuid taskId; + + /// The parent task. + _i3.TaskTable? _task; + + late final _i1.ColumnUuid sampleId; + + /// The sample that was evaluated. + _i4.SampleTable? _sample; + + late final _i1.ColumnUuid modelId; + + /// The model that was evaluated. + _i5.ModelTable? _model; + + late final _i1.ColumnUuid datasetId; + + /// The dataset this sample belongs to (e.g., "flutter_qa_dataset"). + _i6.DatasetTable? _dataset; + + /// Variant configuration. + late final _i1.ColumnSerializable> variant; + + /// The actual output generated by the model. + late final _i1.ColumnString output; + + /// Tool calls made during evaluation. + late final _i1.ColumnSerializable> toolCalls; + + /// Number of times this sample was retried. + late final _i1.ColumnInt retryCount; + + /// Error message if sample failed. + late final _i1.ColumnString error; + + /// True if all retries failed (exclude from accuracy calculations). + late final _i1.ColumnBool neverSucceeded; + + /// Total time for this sample in seconds. + late final _i1.ColumnDouble durationSeconds; + + /// Did flutter analyze pass? + late final _i1.ColumnBool analyzerPassed; + + /// Number of tests passed. + late final _i1.ColumnInt testsPassed; + + /// Total number of tests. + late final _i1.ColumnInt testsTotal; + + /// Code structure validation score (0.0-1.0). + late final _i1.ColumnDouble structureScore; + + /// Categorized failure reason: "analyzer_error", "test_failure", "missing_structure". + late final _i1.ColumnString failureReason; + + /// Input tokens for this sample. + late final _i1.ColumnInt inputTokens; + + /// Output tokens for this sample. + late final _i1.ColumnInt outputTokens; + + /// Reasoning tokens for this sample. + late final _i1.ColumnInt reasoningTokens; + + /// When this evaluation was run. + late final _i1.ColumnDateTime createdAt; + + _i2.RunTable get run { + if (_run != null) return _run!; + _run = _i1.createRelationTable( + relationFieldName: 'run', + field: Evaluation.t.runId, + foreignField: _i2.Run.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.RunTable(tableRelation: foreignTableRelation), + ); + return _run!; + } + + _i3.TaskTable get task { + if (_task != null) return _task!; + _task = _i1.createRelationTable( + relationFieldName: 'task', + field: Evaluation.t.taskId, + foreignField: _i3.Task.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.TaskTable(tableRelation: foreignTableRelation), + ); + return _task!; + } + + _i4.SampleTable get sample { + if (_sample != null) return _sample!; + _sample = _i1.createRelationTable( + relationFieldName: 'sample', + field: Evaluation.t.sampleId, + foreignField: _i4.Sample.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i4.SampleTable(tableRelation: foreignTableRelation), + ); + return _sample!; + } + + _i5.ModelTable get model { + if (_model != null) return _model!; + _model = _i1.createRelationTable( + relationFieldName: 'model', + field: Evaluation.t.modelId, + foreignField: _i5.Model.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i5.ModelTable(tableRelation: foreignTableRelation), + ); + return _model!; + } + + _i6.DatasetTable get dataset { + if (_dataset != null) return _dataset!; + _dataset = _i1.createRelationTable( + relationFieldName: 'dataset', + field: Evaluation.t.datasetId, + foreignField: _i6.Dataset.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i6.DatasetTable(tableRelation: foreignTableRelation), + ); + return _dataset!; + } + + @override + List<_i1.Column> get columns => [ + id, + runId, + taskId, + sampleId, + modelId, + datasetId, + variant, + output, + toolCalls, + retryCount, + error, + neverSucceeded, + durationSeconds, + analyzerPassed, + testsPassed, + testsTotal, + structureScore, + failureReason, + inputTokens, + outputTokens, + reasoningTokens, + createdAt, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'run') { + return run; + } + if (relationField == 'task') { + return task; + } + if (relationField == 'sample') { + return sample; + } + if (relationField == 'model') { + return model; + } + if (relationField == 'dataset') { + return dataset; + } + return null; + } +} + +class EvaluationInclude extends _i1.IncludeObject { + EvaluationInclude._({ + _i2.RunInclude? run, + _i3.TaskInclude? task, + _i4.SampleInclude? sample, + _i5.ModelInclude? model, + _i6.DatasetInclude? dataset, + }) { + _run = run; + _task = task; + _sample = sample; + _model = model; + _dataset = dataset; + } + + _i2.RunInclude? _run; + + _i3.TaskInclude? _task; + + _i4.SampleInclude? _sample; + + _i5.ModelInclude? _model; + + _i6.DatasetInclude? _dataset; + + @override + Map get includes => { + 'run': _run, + 'task': _task, + 'sample': _sample, + 'model': _model, + 'dataset': _dataset, + }; + + @override + _i1.Table<_i1.UuidValue?> get table => Evaluation.t; +} + +class EvaluationIncludeList extends _i1.IncludeList { + EvaluationIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Evaluation.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Evaluation.t; +} + +class EvaluationRepository { + const EvaluationRepository._(); + + final attachRow = const EvaluationAttachRowRepository._(); + + /// Returns a list of [Evaluation]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + EvaluationInclude? include, + }) async { + return session.db.find( + where: where?.call(Evaluation.t), + orderBy: orderBy?.call(Evaluation.t), + orderByList: orderByList?.call(Evaluation.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [Evaluation] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + EvaluationInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(Evaluation.t), + orderBy: orderBy?.call(Evaluation.t), + orderByList: orderByList?.call(Evaluation.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [Evaluation] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + EvaluationInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [Evaluation]s in the list and returns the inserted rows. + /// + /// The returned [Evaluation]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Evaluation] and returns the inserted row. + /// + /// The returned [Evaluation] will have its `id` field set. + Future insertRow( + _i1.Session session, + Evaluation row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Evaluation]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Evaluation.t), + transaction: transaction, + ); + } + + /// Updates a single [Evaluation]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Evaluation row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Evaluation.t), + transaction: transaction, + ); + } + + /// Updates a single [Evaluation] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Evaluation.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Evaluation]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Evaluation.t.updateTable), + where: where(Evaluation.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Evaluation.t), + orderByList: orderByList?.call(Evaluation.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Evaluation]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Evaluation]. + Future deleteRow( + _i1.Session session, + Evaluation row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Evaluation.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Evaluation.t), + limit: limit, + transaction: transaction, + ); + } +} + +class EvaluationAttachRowRepository { + const EvaluationAttachRowRepository._(); + + /// Creates a relation between the given [Evaluation] and [Run] + /// by setting the [Evaluation]'s foreign key `runId` to refer to the [Run]. + Future run( + _i1.Session session, + Evaluation evaluation, + _i2.Run run, { + _i1.Transaction? transaction, + }) async { + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $evaluation = evaluation.copyWith(runId: run.id); + await session.db.updateRow( + $evaluation, + columns: [Evaluation.t.runId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Evaluation] and [Task] + /// by setting the [Evaluation]'s foreign key `taskId` to refer to the [Task]. + Future task( + _i1.Session session, + Evaluation evaluation, + _i3.Task task, { + _i1.Transaction? transaction, + }) async { + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + + var $evaluation = evaluation.copyWith(taskId: task.id); + await session.db.updateRow( + $evaluation, + columns: [Evaluation.t.taskId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Evaluation] and [Sample] + /// by setting the [Evaluation]'s foreign key `sampleId` to refer to the [Sample]. + Future sample( + _i1.Session session, + Evaluation evaluation, + _i4.Sample sample, { + _i1.Transaction? transaction, + }) async { + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + if (sample.id == null) { + throw ArgumentError.notNull('sample.id'); + } + + var $evaluation = evaluation.copyWith(sampleId: sample.id); + await session.db.updateRow( + $evaluation, + columns: [Evaluation.t.sampleId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Evaluation] and [Model] + /// by setting the [Evaluation]'s foreign key `modelId` to refer to the [Model]. + Future model( + _i1.Session session, + Evaluation evaluation, + _i5.Model model, { + _i1.Transaction? transaction, + }) async { + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + if (model.id == null) { + throw ArgumentError.notNull('model.id'); + } + + var $evaluation = evaluation.copyWith(modelId: model.id); + await session.db.updateRow( + $evaluation, + columns: [Evaluation.t.modelId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Evaluation] and [Dataset] + /// by setting the [Evaluation]'s foreign key `datasetId` to refer to the [Dataset]. + Future dataset( + _i1.Session session, + Evaluation evaluation, + _i6.Dataset dataset, { + _i1.Transaction? transaction, + }) async { + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + if (dataset.id == null) { + throw ArgumentError.notNull('dataset.id'); + } + + var $evaluation = evaluation.copyWith(datasetId: dataset.id); + await session.db.updateRow( + $evaluation, + columns: [Evaluation.t.datasetId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/greetings/greeting.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/greetings/greeting.dart new file mode 100644 index 0000000..7f394de --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/greetings/greeting.dart @@ -0,0 +1,109 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +/// A greeting message which can be sent to or from the server. +abstract class Greeting + implements _i1.SerializableModel, _i1.ProtocolSerialization { + Greeting._({ + required this.message, + required this.author, + required this.timestamp, + }); + + factory Greeting({ + required String message, + required String author, + required DateTime timestamp, + }) = _GreetingImpl; + + factory Greeting.fromJson(Map jsonSerialization) { + return Greeting( + message: jsonSerialization['message'] as String, + author: jsonSerialization['author'] as String, + timestamp: _i1.DateTimeJsonExtension.fromJson( + jsonSerialization['timestamp'], + ), + ); + } + + /// The greeting message. + String message; + + /// The author of the greeting message. + String author; + + /// The time when the message was created. + DateTime timestamp; + + /// Returns a shallow copy of this [Greeting] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Greeting copyWith({ + String? message, + String? author, + DateTime? timestamp, + }); + @override + Map toJson() { + return { + '__className__': 'Greeting', + 'message': message, + 'author': author, + 'timestamp': timestamp.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Greeting', + 'message': message, + 'author': author, + 'timestamp': timestamp.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _GreetingImpl extends Greeting { + _GreetingImpl({ + required String message, + required String author, + required DateTime timestamp, + }) : super._( + message: message, + author: author, + timestamp: timestamp, + ); + + /// Returns a shallow copy of this [Greeting] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Greeting copyWith({ + String? message, + String? author, + DateTime? timestamp, + }) { + return Greeting( + message: message ?? this.message, + author: author ?? this.author, + timestamp: timestamp ?? this.timestamp, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/model.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/model.dart new file mode 100644 index 0000000..7b90127 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/model.dart @@ -0,0 +1,499 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +/// An LLM being evaluated. +abstract class Model + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Model._({ + this.id, + required this.name, + }) : _evalsRunsModelsEvalsRunsId = null; + + factory Model({ + _i1.UuidValue? id, + required String name, + }) = _ModelImpl; + + factory Model.fromJson(Map jsonSerialization) { + return ModelImplicit._( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + $_evalsRunsModelsEvalsRunsId: + jsonSerialization['_evalsRunsModelsEvalsRunsId'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['_evalsRunsModelsEvalsRunsId'], + ), + ); + } + + static final t = ModelTable(); + + static const db = ModelRepository._(); + + @override + _i1.UuidValue? id; + + /// Unique identifier for the model. + String name; + + final _i1.UuidValue? _evalsRunsModelsEvalsRunsId; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Model] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Model copyWith({ + _i1.UuidValue? id, + String? name, + }); + @override + Map toJson() { + return { + '__className__': 'Model', + if (id != null) 'id': id?.toJson(), + 'name': name, + if (_evalsRunsModelsEvalsRunsId != null) + '_evalsRunsModelsEvalsRunsId': _evalsRunsModelsEvalsRunsId.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Model', + if (id != null) 'id': id?.toJson(), + 'name': name, + }; + } + + static ModelInclude include() { + return ModelInclude._(); + } + + static ModelIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + ModelInclude? include, + }) { + return ModelIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Model.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Model.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ModelImpl extends Model { + _ModelImpl({ + _i1.UuidValue? id, + required String name, + }) : super._( + id: id, + name: name, + ); + + /// Returns a shallow copy of this [Model] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Model copyWith({ + Object? id = _Undefined, + String? name, + }) { + return ModelImplicit._( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + $_evalsRunsModelsEvalsRunsId: this._evalsRunsModelsEvalsRunsId, + ); + } +} + +class ModelImplicit extends _ModelImpl { + ModelImplicit._({ + _i1.UuidValue? id, + required String name, + _i1.UuidValue? $_evalsRunsModelsEvalsRunsId, + }) : _evalsRunsModelsEvalsRunsId = $_evalsRunsModelsEvalsRunsId, + super( + id: id, + name: name, + ); + + factory ModelImplicit( + Model model, { + _i1.UuidValue? $_evalsRunsModelsEvalsRunsId, + }) { + return ModelImplicit._( + id: model.id, + name: model.name, + $_evalsRunsModelsEvalsRunsId: $_evalsRunsModelsEvalsRunsId, + ); + } + + @override + final _i1.UuidValue? _evalsRunsModelsEvalsRunsId; +} + +class ModelUpdateTable extends _i1.UpdateTable { + ModelUpdateTable(super.table); + + _i1.ColumnValue name(String value) => _i1.ColumnValue( + table.name, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> $_evalsRunsModelsEvalsRunsId( + _i1.UuidValue? value, + ) => _i1.ColumnValue( + table.$_evalsRunsModelsEvalsRunsId, + value, + ); +} + +class ModelTable extends _i1.Table<_i1.UuidValue?> { + ModelTable({super.tableRelation}) : super(tableName: 'evals_models') { + updateTable = ModelUpdateTable(this); + name = _i1.ColumnString( + 'name', + this, + ); + $_evalsRunsModelsEvalsRunsId = _i1.ColumnUuid( + '_evalsRunsModelsEvalsRunsId', + this, + ); + } + + late final ModelUpdateTable updateTable; + + /// Unique identifier for the model. + late final _i1.ColumnString name; + + late final _i1.ColumnUuid $_evalsRunsModelsEvalsRunsId; + + @override + List<_i1.Column> get columns => [ + id, + name, + $_evalsRunsModelsEvalsRunsId, + ]; + + @override + List<_i1.Column> get managedColumns => [ + id, + name, + ]; +} + +class ModelInclude extends _i1.IncludeObject { + ModelInclude._(); + + @override + Map get includes => {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Model.t; +} + +class ModelIncludeList extends _i1.IncludeList { + ModelIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Model.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Model.t; +} + +class ModelRepository { + const ModelRepository._(); + + /// Returns a list of [Model]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.find( + where: where?.call(Model.t), + orderBy: orderBy?.call(Model.t), + orderByList: orderByList?.call(Model.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + ); + } + + /// Returns the first matching [Model] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.findFirstRow( + where: where?.call(Model.t), + orderBy: orderBy?.call(Model.t), + orderByList: orderByList?.call(Model.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + ); + } + + /// Finds a single [Model] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + }) async { + return session.db.findById( + id, + transaction: transaction, + ); + } + + /// Inserts all [Model]s in the list and returns the inserted rows. + /// + /// The returned [Model]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Model] and returns the inserted row. + /// + /// The returned [Model] will have its `id` field set. + Future insertRow( + _i1.Session session, + Model row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Model]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Model.t), + transaction: transaction, + ); + } + + /// Updates a single [Model]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Model row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Model.t), + transaction: transaction, + ); + } + + /// Updates a single [Model] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Model.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Model]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Model.t.updateTable), + where: where(Model.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Model.t), + orderByList: orderByList?.call(Model.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Model]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Model]. + Future deleteRow( + _i1.Session session, + Model row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Model.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Model.t), + limit: limit, + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.dart new file mode 100644 index 0000000..a344c54 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.dart @@ -0,0 +1,1854 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'package:serverpod/protocol.dart' as _i2; +import 'package:serverpod_auth_idp_server/serverpod_auth_idp_server.dart' + as _i3; +import 'package:serverpod_auth_core_server/serverpod_auth_core_server.dart' + as _i4; +import 'dataset.dart' as _i5; +import 'evaluation.dart' as _i6; +import 'greetings/greeting.dart' as _i7; +import 'model.dart' as _i8; +import 'run.dart' as _i9; +import 'run_summary.dart' as _i10; +import 'sample.dart' as _i11; +import 'sample_tag_xref.dart' as _i12; +import 'scorer.dart' as _i13; +import 'scorer_result.dart' as _i14; +import 'status_enum.dart' as _i15; +import 'tag.dart' as _i16; +import 'task.dart' as _i17; +import 'task_summary.dart' as _i18; +import 'tool_call_data.dart' as _i19; +import 'variant.dart' as _i20; +import 'package:eval_explorer_shared/eval_explorer_shared.dart' as _i21; +export 'dataset.dart'; +export 'evaluation.dart'; +export 'greetings/greeting.dart'; +export 'model.dart'; +export 'run.dart'; +export 'run_summary.dart'; +export 'sample.dart'; +export 'sample_tag_xref.dart'; +export 'scorer.dart'; +export 'scorer_result.dart'; +export 'status_enum.dart'; +export 'tag.dart'; +export 'task.dart'; +export 'task_summary.dart'; +export 'tool_call_data.dart'; +export 'variant.dart'; + +class Protocol extends _i1.SerializationManagerServer { + Protocol._(); + + factory Protocol() => _instance; + + static final Protocol _instance = Protocol._(); + + static final List<_i2.TableDefinition> targetTableDefinitions = [ + _i2.TableDefinition( + name: 'evals_datasets', + dartName: 'Dataset', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'name', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'isActive', + columnType: _i2.ColumnType.boolean, + isNullable: false, + dartType: 'bool', + columnDefault: 'true', + ), + _i2.ColumnDefinition( + name: '_evalsRunsDatasetsEvalsRunsId', + columnType: _i2.ColumnType.uuid, + isNullable: true, + dartType: 'UuidValue?', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_datasets_fk_0', + columns: ['_evalsRunsDatasetsEvalsRunsId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.noAction, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_datasets_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'datasets_unique_name', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'name', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_evaluations', + dartName: 'Evaluation', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'runId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'taskId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'sampleId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'modelId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'datasetId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'variant', + columnType: _i2.ColumnType.json, + isNullable: false, + dartType: 'List', + ), + _i2.ColumnDefinition( + name: 'output', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'toolCalls', + columnType: _i2.ColumnType.json, + isNullable: false, + dartType: 'List', + ), + _i2.ColumnDefinition( + name: 'retryCount', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'error', + columnType: _i2.ColumnType.text, + isNullable: true, + dartType: 'String?', + ), + _i2.ColumnDefinition( + name: 'neverSucceeded', + columnType: _i2.ColumnType.boolean, + isNullable: false, + dartType: 'bool', + ), + _i2.ColumnDefinition( + name: 'durationSeconds', + columnType: _i2.ColumnType.doublePrecision, + isNullable: false, + dartType: 'double', + ), + _i2.ColumnDefinition( + name: 'analyzerPassed', + columnType: _i2.ColumnType.boolean, + isNullable: true, + dartType: 'bool?', + ), + _i2.ColumnDefinition( + name: 'testsPassed', + columnType: _i2.ColumnType.bigint, + isNullable: true, + dartType: 'int?', + ), + _i2.ColumnDefinition( + name: 'testsTotal', + columnType: _i2.ColumnType.bigint, + isNullable: true, + dartType: 'int?', + ), + _i2.ColumnDefinition( + name: 'structureScore', + columnType: _i2.ColumnType.doublePrecision, + isNullable: true, + dartType: 'double?', + ), + _i2.ColumnDefinition( + name: 'failureReason', + columnType: _i2.ColumnType.text, + isNullable: true, + dartType: 'String?', + ), + _i2.ColumnDefinition( + name: 'inputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'outputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'reasoningTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'createdAt', + columnType: _i2.ColumnType.timestampWithoutTimeZone, + isNullable: false, + dartType: 'DateTime', + columnDefault: 'CURRENT_TIMESTAMP', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_evaluations_fk_0', + columns: ['runId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_evaluations_fk_1', + columns: ['taskId'], + referenceTable: 'evals_tasks', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_evaluations_fk_2', + columns: ['sampleId'], + referenceTable: 'evals_samples', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_evaluations_fk_3', + columns: ['modelId'], + referenceTable: 'evals_models', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_evaluations_fk_4', + columns: ['datasetId'], + referenceTable: 'evals_datasets', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_evaluations_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_run_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'runId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_task_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'taskId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_sample_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'sampleId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_model_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'modelId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_dataset_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'datasetId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_evaluation_created_at_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'createdAt', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_models', + dartName: 'Model', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'name', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: '_evalsRunsModelsEvalsRunsId', + columnType: _i2.ColumnType.uuid, + isNullable: true, + dartType: 'UuidValue?', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_models_fk_0', + columns: ['_evalsRunsModelsEvalsRunsId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.noAction, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_models_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'evals_models_unique_name', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'name', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_run_summaries', + dartName: 'RunSummary', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'runId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'totalTasks', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'totalSamples', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'avgAccuracy', + columnType: _i2.ColumnType.doublePrecision, + isNullable: false, + dartType: 'double', + ), + _i2.ColumnDefinition( + name: 'totalTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'inputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'outputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'reasoningTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'createdAt', + columnType: _i2.ColumnType.timestampWithoutTimeZone, + isNullable: false, + dartType: 'DateTime', + columnDefault: 'CURRENT_TIMESTAMP', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_run_summaries_fk_0', + columns: ['runId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_run_summaries_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'run_summaries_unique_run', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'runId', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'run_summaries_created_at_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'createdAt', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_runs', + dartName: 'Run', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'inspectId', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'status', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'protocol:Status', + ), + _i2.ColumnDefinition( + name: 'variants', + columnType: _i2.ColumnType.json, + isNullable: false, + dartType: 'List', + ), + _i2.ColumnDefinition( + name: 'mcpServerVersion', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'batchRuntimeSeconds', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'createdAt', + columnType: _i2.ColumnType.timestampWithoutTimeZone, + isNullable: false, + dartType: 'DateTime', + columnDefault: 'CURRENT_TIMESTAMP', + ), + ], + foreignKeys: [], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_runs_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'runs_status_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'status', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'runs_inspect_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'inspectId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'runs_created_at_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'createdAt', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_samples', + dartName: 'Sample', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'name', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'datasetId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'input', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'target', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'isActive', + columnType: _i2.ColumnType.boolean, + isNullable: false, + dartType: 'bool', + columnDefault: 'true', + ), + _i2.ColumnDefinition( + name: 'createdAt', + columnType: _i2.ColumnType.timestampWithoutTimeZone, + isNullable: false, + dartType: 'DateTime', + columnDefault: 'CURRENT_TIMESTAMP', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_samples_fk_0', + columns: ['datasetId'], + referenceTable: 'evals_datasets', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_samples_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'evals_sample_dataset_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'datasetId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_sample_created_at_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'createdAt', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_samples_tags_xref', + dartName: 'SampleTagXref', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int?', + columnDefault: + 'nextval(\'evals_samples_tags_xref_id_seq\'::regclass)', + ), + _i2.ColumnDefinition( + name: 'sampleId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'tagId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_samples_tags_xref_fk_0', + columns: ['sampleId'], + referenceTable: 'evals_samples', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.noAction, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_samples_tags_xref_fk_1', + columns: ['tagId'], + referenceTable: 'evals_tags', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.noAction, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_samples_tags_xref_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'sample_tag_index_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'sampleId', + ), + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'tagId', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_scorer_results', + dartName: 'ScorerResult', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'scorerId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'evaluationId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'data', + columnType: _i2.ColumnType.json, + isNullable: false, + dartType: + 'package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_scorer_results_fk_0', + columns: ['scorerId'], + referenceTable: 'evals_scorers', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_scorer_results_fk_1', + columns: ['evaluationId'], + referenceTable: 'evals_evaluations', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_scorer_results_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'scorer_result_scorer_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'scorerId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'scorer_result_evaluation_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'evaluationId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_scorers', + dartName: 'Scorer', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'name', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + ], + foreignKeys: [], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_scorers_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'scorers_unique_name', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'name', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_tags', + dartName: 'Tag', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'name', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + ], + foreignKeys: [], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_tags_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'tags_unique_name', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'name', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: false, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_task_summaries', + dartName: 'TaskSummary', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'taskId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'totalSamples', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'passedSamples', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'accuracy', + columnType: _i2.ColumnType.doublePrecision, + isNullable: false, + dartType: 'double', + ), + _i2.ColumnDefinition( + name: 'taskName', + columnType: _i2.ColumnType.text, + isNullable: true, + dartType: 'String?', + ), + _i2.ColumnDefinition( + name: 'inputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'outputTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'totalTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'reasoningTokens', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'variant', + columnType: _i2.ColumnType.text, + isNullable: true, + dartType: 'String?', + ), + _i2.ColumnDefinition( + name: 'executionTimeSeconds', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'samplesWithRetries', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'samplesNeverSucceeded', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + _i2.ColumnDefinition( + name: 'totalRetries', + columnType: _i2.ColumnType.bigint, + isNullable: false, + dartType: 'int', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_task_summaries_fk_0', + columns: ['taskId'], + referenceTable: 'evals_tasks', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_task_summaries_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + ], + managed: true, + ), + _i2.TableDefinition( + name: 'evals_tasks', + dartName: 'Task', + schema: 'public', + module: 'eval_explorer', + columns: [ + _i2.ColumnDefinition( + name: 'id', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue?', + columnDefault: 'gen_random_uuid_v7()', + ), + _i2.ColumnDefinition( + name: 'inspectId', + columnType: _i2.ColumnType.text, + isNullable: false, + dartType: 'String', + ), + _i2.ColumnDefinition( + name: 'modelId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'datasetId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'runId', + columnType: _i2.ColumnType.uuid, + isNullable: false, + dartType: 'UuidValue', + ), + _i2.ColumnDefinition( + name: 'createdAt', + columnType: _i2.ColumnType.timestampWithoutTimeZone, + isNullable: false, + dartType: 'DateTime', + columnDefault: 'CURRENT_TIMESTAMP', + ), + _i2.ColumnDefinition( + name: '_evalsRunsTasksEvalsRunsId', + columnType: _i2.ColumnType.uuid, + isNullable: true, + dartType: 'UuidValue?', + ), + ], + foreignKeys: [ + _i2.ForeignKeyDefinition( + constraintName: 'evals_tasks_fk_0', + columns: ['modelId'], + referenceTable: 'evals_models', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_tasks_fk_1', + columns: ['datasetId'], + referenceTable: 'evals_datasets', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_tasks_fk_2', + columns: ['runId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.cascade, + matchType: null, + ), + _i2.ForeignKeyDefinition( + constraintName: 'evals_tasks_fk_3', + columns: ['_evalsRunsTasksEvalsRunsId'], + referenceTable: 'evals_runs', + referenceTableSchema: 'public', + referenceColumns: ['id'], + onUpdate: _i2.ForeignKeyAction.noAction, + onDelete: _i2.ForeignKeyAction.noAction, + matchType: null, + ), + ], + indexes: [ + _i2.IndexDefinition( + indexName: 'evals_tasks_pkey', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'id', + ), + ], + type: 'btree', + isUnique: true, + isPrimary: true, + ), + _i2.IndexDefinition( + indexName: 'evals_task_run_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'runId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_task_inspect_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'inspectId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_task_model_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'modelId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_task_dataset_id_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'datasetId', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + _i2.IndexDefinition( + indexName: 'evals_task_created_at_idx', + tableSpace: null, + elements: [ + _i2.IndexElementDefinition( + type: _i2.IndexElementDefinitionType.column, + definition: 'createdAt', + ), + ], + type: 'btree', + isUnique: false, + isPrimary: false, + ), + ], + managed: true, + ), + ..._i3.Protocol.targetTableDefinitions, + ..._i4.Protocol.targetTableDefinitions, + ..._i2.Protocol.targetTableDefinitions, + ]; + + static String? getClassNameFromObjectJson(dynamic data) { + if (data is! Map) return null; + final className = data['__className__'] as String?; + return className; + } + + @override + T deserialize( + dynamic data, [ + Type? t, + ]) { + t ??= T; + + final dataClassName = getClassNameFromObjectJson(data); + if (dataClassName != null && dataClassName != getClassNameForType(t)) { + try { + return deserializeByClassName({ + 'className': dataClassName, + 'data': data, + }); + } on FormatException catch (_) { + // If the className is not recognized (e.g., older client receiving + // data with a new subtype), fall back to deserializing without the + // className, using the expected type T. + } + } + + if (t == _i5.Dataset) { + return _i5.Dataset.fromJson(data) as T; + } + if (t == _i6.Evaluation) { + return _i6.Evaluation.fromJson(data) as T; + } + if (t == _i7.Greeting) { + return _i7.Greeting.fromJson(data) as T; + } + if (t == _i8.Model) { + return _i8.Model.fromJson(data) as T; + } + if (t == _i9.Run) { + return _i9.Run.fromJson(data) as T; + } + if (t == _i10.RunSummary) { + return _i10.RunSummary.fromJson(data) as T; + } + if (t == _i11.Sample) { + return _i11.Sample.fromJson(data) as T; + } + if (t == _i12.SampleTagXref) { + return _i12.SampleTagXref.fromJson(data) as T; + } + if (t == _i13.Scorer) { + return _i13.Scorer.fromJson(data) as T; + } + if (t == _i14.ScorerResult) { + return _i14.ScorerResult.fromJson(data) as T; + } + if (t == _i15.Status) { + return _i15.Status.fromJson(data) as T; + } + if (t == _i16.Tag) { + return _i16.Tag.fromJson(data) as T; + } + if (t == _i17.Task) { + return _i17.Task.fromJson(data) as T; + } + if (t == _i18.TaskSummary) { + return _i18.TaskSummary.fromJson(data) as T; + } + if (t == _i19.ToolCallData) { + return _i19.ToolCallData.fromJson(data) as T; + } + if (t == _i20.Variant) { + return _i20.Variant.fromJson(data) as T; + } + if (t == _i1.getType<_i5.Dataset?>()) { + return (data != null ? _i5.Dataset.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i6.Evaluation?>()) { + return (data != null ? _i6.Evaluation.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i7.Greeting?>()) { + return (data != null ? _i7.Greeting.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i8.Model?>()) { + return (data != null ? _i8.Model.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i9.Run?>()) { + return (data != null ? _i9.Run.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i10.RunSummary?>()) { + return (data != null ? _i10.RunSummary.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i11.Sample?>()) { + return (data != null ? _i11.Sample.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i12.SampleTagXref?>()) { + return (data != null ? _i12.SampleTagXref.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i13.Scorer?>()) { + return (data != null ? _i13.Scorer.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i14.ScorerResult?>()) { + return (data != null ? _i14.ScorerResult.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i15.Status?>()) { + return (data != null ? _i15.Status.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i16.Tag?>()) { + return (data != null ? _i16.Tag.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i17.Task?>()) { + return (data != null ? _i17.Task.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i18.TaskSummary?>()) { + return (data != null ? _i18.TaskSummary.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i19.ToolCallData?>()) { + return (data != null ? _i19.ToolCallData.fromJson(data) : null) as T; + } + if (t == _i1.getType<_i20.Variant?>()) { + return (data != null ? _i20.Variant.fromJson(data) : null) as T; + } + if (t == List<_i20.Variant>) { + return (data as List).map((e) => deserialize<_i20.Variant>(e)).toList() + as T; + } + if (t == List<_i19.ToolCallData>) { + return (data as List) + .map((e) => deserialize<_i19.ToolCallData>(e)) + .toList() + as T; + } + if (t == List) { + return (data as List).map((e) => deserialize(e)).toList() as T; + } + if (t == List<_i8.Model>) { + return (data as List).map((e) => deserialize<_i8.Model>(e)).toList() as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i8.Model>(e)).toList() + : null) + as T; + } + if (t == List<_i5.Dataset>) { + return (data as List).map((e) => deserialize<_i5.Dataset>(e)).toList() + as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i5.Dataset>(e)).toList() + : null) + as T; + } + if (t == List<_i17.Task>) { + return (data as List).map((e) => deserialize<_i17.Task>(e)).toList() as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List).map((e) => deserialize<_i17.Task>(e)).toList() + : null) + as T; + } + if (t == List<_i12.SampleTagXref>) { + return (data as List) + .map((e) => deserialize<_i12.SampleTagXref>(e)) + .toList() + as T; + } + if (t == _i1.getType?>()) { + return (data != null + ? (data as List) + .map((e) => deserialize<_i12.SampleTagXref>(e)) + .toList() + : null) + as T; + } + if (t == _i21.ScorerResultData) { + return _i21.ScorerResultData.fromJson(data) as T; + } + if (t == Map) { + return (data as Map).map( + (k, v) => MapEntry(deserialize(k), deserialize(v)), + ) + as T; + } + if (t == _i1.getType<_i21.ScorerResultData?>()) { + return (data != null ? _i21.ScorerResultData.fromJson(data) : null) as T; + } + try { + return _i3.Protocol().deserialize(data, t); + } on _i1.DeserializationTypeNotFoundException catch (_) {} + try { + return _i4.Protocol().deserialize(data, t); + } on _i1.DeserializationTypeNotFoundException catch (_) {} + try { + return _i2.Protocol().deserialize(data, t); + } on _i1.DeserializationTypeNotFoundException catch (_) {} + return super.deserialize(data, t); + } + + static String? getClassNameForType(Type type) { + return switch (type) { + _i21.ScorerResultData => 'ScorerResultData', + _i5.Dataset => 'Dataset', + _i6.Evaluation => 'Evaluation', + _i7.Greeting => 'Greeting', + _i8.Model => 'Model', + _i9.Run => 'Run', + _i10.RunSummary => 'RunSummary', + _i11.Sample => 'Sample', + _i12.SampleTagXref => 'SampleTagXref', + _i13.Scorer => 'Scorer', + _i14.ScorerResult => 'ScorerResult', + _i15.Status => 'Status', + _i16.Tag => 'Tag', + _i17.Task => 'Task', + _i18.TaskSummary => 'TaskSummary', + _i19.ToolCallData => 'ToolCallData', + _i20.Variant => 'Variant', + _ => null, + }; + } + + @override + String? getClassNameForObject(Object? data) { + String? className = super.getClassNameForObject(data); + if (className != null) return className; + + if (data is Map && data['__className__'] is String) { + return (data['__className__'] as String).replaceFirst( + 'eval_explorer.', + '', + ); + } + + switch (data) { + case _i21.ScorerResultData(): + return 'ScorerResultData'; + case _i5.Dataset(): + return 'Dataset'; + case _i6.Evaluation(): + return 'Evaluation'; + case _i7.Greeting(): + return 'Greeting'; + case _i8.Model(): + return 'Model'; + case _i9.Run(): + return 'Run'; + case _i10.RunSummary(): + return 'RunSummary'; + case _i11.Sample(): + return 'Sample'; + case _i12.SampleTagXref(): + return 'SampleTagXref'; + case _i13.Scorer(): + return 'Scorer'; + case _i14.ScorerResult(): + return 'ScorerResult'; + case _i15.Status(): + return 'Status'; + case _i16.Tag(): + return 'Tag'; + case _i17.Task(): + return 'Task'; + case _i18.TaskSummary(): + return 'TaskSummary'; + case _i19.ToolCallData(): + return 'ToolCallData'; + case _i20.Variant(): + return 'Variant'; + } + className = _i2.Protocol().getClassNameForObject(data); + if (className != null) { + return 'serverpod.$className'; + } + className = _i3.Protocol().getClassNameForObject(data); + if (className != null) { + return 'serverpod_auth_idp.$className'; + } + className = _i4.Protocol().getClassNameForObject(data); + if (className != null) { + return 'serverpod_auth_core.$className'; + } + return null; + } + + @override + dynamic deserializeByClassName(Map data) { + var dataClassName = data['className']; + if (dataClassName is! String) { + return super.deserializeByClassName(data); + } + if (dataClassName == 'ScorerResultData') { + return deserialize<_i21.ScorerResultData>(data['data']); + } + if (dataClassName == 'Dataset') { + return deserialize<_i5.Dataset>(data['data']); + } + if (dataClassName == 'Evaluation') { + return deserialize<_i6.Evaluation>(data['data']); + } + if (dataClassName == 'Greeting') { + return deserialize<_i7.Greeting>(data['data']); + } + if (dataClassName == 'Model') { + return deserialize<_i8.Model>(data['data']); + } + if (dataClassName == 'Run') { + return deserialize<_i9.Run>(data['data']); + } + if (dataClassName == 'RunSummary') { + return deserialize<_i10.RunSummary>(data['data']); + } + if (dataClassName == 'Sample') { + return deserialize<_i11.Sample>(data['data']); + } + if (dataClassName == 'SampleTagXref') { + return deserialize<_i12.SampleTagXref>(data['data']); + } + if (dataClassName == 'Scorer') { + return deserialize<_i13.Scorer>(data['data']); + } + if (dataClassName == 'ScorerResult') { + return deserialize<_i14.ScorerResult>(data['data']); + } + if (dataClassName == 'Status') { + return deserialize<_i15.Status>(data['data']); + } + if (dataClassName == 'Tag') { + return deserialize<_i16.Tag>(data['data']); + } + if (dataClassName == 'Task') { + return deserialize<_i17.Task>(data['data']); + } + if (dataClassName == 'TaskSummary') { + return deserialize<_i18.TaskSummary>(data['data']); + } + if (dataClassName == 'ToolCallData') { + return deserialize<_i19.ToolCallData>(data['data']); + } + if (dataClassName == 'Variant') { + return deserialize<_i20.Variant>(data['data']); + } + if (dataClassName.startsWith('serverpod.')) { + data['className'] = dataClassName.substring(10); + return _i2.Protocol().deserializeByClassName(data); + } + if (dataClassName.startsWith('serverpod_auth_idp.')) { + data['className'] = dataClassName.substring(19); + return _i3.Protocol().deserializeByClassName(data); + } + if (dataClassName.startsWith('serverpod_auth_core.')) { + data['className'] = dataClassName.substring(20); + return _i4.Protocol().deserializeByClassName(data); + } + return super.deserializeByClassName(data); + } + + @override + _i1.Table? getTableForType(Type t) { + { + var table = _i3.Protocol().getTableForType(t); + if (table != null) { + return table; + } + } + { + var table = _i4.Protocol().getTableForType(t); + if (table != null) { + return table; + } + } + { + var table = _i2.Protocol().getTableForType(t); + if (table != null) { + return table; + } + } + switch (t) { + case _i5.Dataset: + return _i5.Dataset.t; + case _i6.Evaluation: + return _i6.Evaluation.t; + case _i8.Model: + return _i8.Model.t; + case _i9.Run: + return _i9.Run.t; + case _i10.RunSummary: + return _i10.RunSummary.t; + case _i11.Sample: + return _i11.Sample.t; + case _i12.SampleTagXref: + return _i12.SampleTagXref.t; + case _i13.Scorer: + return _i13.Scorer.t; + case _i14.ScorerResult: + return _i14.ScorerResult.t; + case _i16.Tag: + return _i16.Tag.t; + case _i17.Task: + return _i17.Task.t; + case _i18.TaskSummary: + return _i18.TaskSummary.t; + } + return null; + } + + @override + List<_i2.TableDefinition> getTargetTableDefinitions() => + targetTableDefinitions; + + @override + String getModuleName() => 'eval_explorer'; + + /// Maps any `Record`s known to this [Protocol] to their JSON representation + /// + /// Throws in case the record type is not known. + /// + /// This method will return `null` (only) for `null` inputs. + Map? mapRecordToJson(Record? record) { + if (record == null) { + return null; + } + try { + return _i3.Protocol().mapRecordToJson(record); + } catch (_) {} + try { + return _i4.Protocol().mapRecordToJson(record); + } catch (_) {} + throw Exception('Unsupported record type ${record.runtimeType}'); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.yaml new file mode 100644 index 0000000..57b3557 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/protocol.yaml @@ -0,0 +1,12 @@ +emailIdp: + - login: + - startRegistration: + - verifyRegistrationCode: + - finishRegistration: + - startPasswordReset: + - verifyPasswordResetCode: + - finishPasswordReset: +jwtRefresh: + - refreshAccessToken: +googleIdp: + - login: diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/run.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/run.dart new file mode 100644 index 0000000..5e4970d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/run.dart @@ -0,0 +1,1164 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'status_enum.dart' as _i2; +import 'model.dart' as _i3; +import 'dataset.dart' as _i4; +import 'task.dart' as _i5; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i6; + +/// A collection of tasks executed together. +abstract class Run + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Run._({ + this.id, + required this.inspectId, + required this.status, + required this.variants, + required this.mcpServerVersion, + required this.batchRuntimeSeconds, + this.models, + this.datasets, + this.tasks, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory Run({ + _i1.UuidValue? id, + required String inspectId, + required _i2.Status status, + required List variants, + required String mcpServerVersion, + required int batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }) = _RunImpl; + + factory Run.fromJson(Map jsonSerialization) { + return Run( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + inspectId: jsonSerialization['inspectId'] as String, + status: _i2.Status.fromJson((jsonSerialization['status'] as String)), + variants: _i6.Protocol().deserialize>( + jsonSerialization['variants'], + ), + mcpServerVersion: jsonSerialization['mcpServerVersion'] as String, + batchRuntimeSeconds: jsonSerialization['batchRuntimeSeconds'] as int, + models: jsonSerialization['models'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['models'], + ), + datasets: jsonSerialization['datasets'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['datasets'], + ), + tasks: jsonSerialization['tasks'] == null + ? null + : _i6.Protocol().deserialize>( + jsonSerialization['tasks'], + ), + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + static final t = RunTable(); + + static const db = RunRepository._(); + + @override + _i1.UuidValue? id; + + /// InspectAI-generated Id. + String inspectId; + + /// Run status (e.g., "complete", "inProgress", "failed"). + _i2.Status status; + + /// The variant configurations used in this run. + List variants; + + /// Version of the MCP server used during evaluation. + String mcpServerVersion; + + /// Total script runtime in seconds. + int batchRuntimeSeconds; + + /// List of models evaluated in this run. + List<_i3.Model>? models; + + /// List of datasets evaluated in this run. + List<_i4.Dataset>? datasets; + + /// List of Inspect AI task names that were run. + List<_i5.Task>? tasks; + + /// Creation time for this record. + DateTime createdAt; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Run] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Run copyWith({ + _i1.UuidValue? id, + String? inspectId, + _i2.Status? status, + List? variants, + String? mcpServerVersion, + int? batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Run', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'status': status.toJson(), + 'variants': variants.toJson(), + 'mcpServerVersion': mcpServerVersion, + 'batchRuntimeSeconds': batchRuntimeSeconds, + if (models != null) + 'models': models?.toJson(valueToJson: (v) => v.toJson()), + if (datasets != null) + 'datasets': datasets?.toJson(valueToJson: (v) => v.toJson()), + if (tasks != null) 'tasks': tasks?.toJson(valueToJson: (v) => v.toJson()), + 'createdAt': createdAt.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Run', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'status': status.toJson(), + 'variants': variants.toJson(), + 'mcpServerVersion': mcpServerVersion, + 'batchRuntimeSeconds': batchRuntimeSeconds, + if (models != null) + 'models': models?.toJson(valueToJson: (v) => v.toJsonForProtocol()), + if (datasets != null) + 'datasets': datasets?.toJson(valueToJson: (v) => v.toJsonForProtocol()), + if (tasks != null) + 'tasks': tasks?.toJson(valueToJson: (v) => v.toJsonForProtocol()), + 'createdAt': createdAt.toJson(), + }; + } + + static RunInclude include({ + _i3.ModelIncludeList? models, + _i4.DatasetIncludeList? datasets, + _i5.TaskIncludeList? tasks, + }) { + return RunInclude._( + models: models, + datasets: datasets, + tasks: tasks, + ); + } + + static RunIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + RunInclude? include, + }) { + return RunIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Run.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Run.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _RunImpl extends Run { + _RunImpl({ + _i1.UuidValue? id, + required String inspectId, + required _i2.Status status, + required List variants, + required String mcpServerVersion, + required int batchRuntimeSeconds, + List<_i3.Model>? models, + List<_i4.Dataset>? datasets, + List<_i5.Task>? tasks, + DateTime? createdAt, + }) : super._( + id: id, + inspectId: inspectId, + status: status, + variants: variants, + mcpServerVersion: mcpServerVersion, + batchRuntimeSeconds: batchRuntimeSeconds, + models: models, + datasets: datasets, + tasks: tasks, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Run] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Run copyWith({ + Object? id = _Undefined, + String? inspectId, + _i2.Status? status, + List? variants, + String? mcpServerVersion, + int? batchRuntimeSeconds, + Object? models = _Undefined, + Object? datasets = _Undefined, + Object? tasks = _Undefined, + DateTime? createdAt, + }) { + return Run( + id: id is _i1.UuidValue? ? id : this.id, + inspectId: inspectId ?? this.inspectId, + status: status ?? this.status, + variants: variants ?? this.variants.map((e0) => e0).toList(), + mcpServerVersion: mcpServerVersion ?? this.mcpServerVersion, + batchRuntimeSeconds: batchRuntimeSeconds ?? this.batchRuntimeSeconds, + models: models is List<_i3.Model>? + ? models + : this.models?.map((e0) => e0.copyWith()).toList(), + datasets: datasets is List<_i4.Dataset>? + ? datasets + : this.datasets?.map((e0) => e0.copyWith()).toList(), + tasks: tasks is List<_i5.Task>? + ? tasks + : this.tasks?.map((e0) => e0.copyWith()).toList(), + createdAt: createdAt ?? this.createdAt, + ); + } +} + +class RunUpdateTable extends _i1.UpdateTable { + RunUpdateTable(super.table); + + _i1.ColumnValue inspectId(String value) => _i1.ColumnValue( + table.inspectId, + value, + ); + + _i1.ColumnValue<_i2.Status, _i2.Status> status(_i2.Status value) => + _i1.ColumnValue( + table.status, + value, + ); + + _i1.ColumnValue, List> variants(List value) => + _i1.ColumnValue( + table.variants, + value, + ); + + _i1.ColumnValue mcpServerVersion(String value) => + _i1.ColumnValue( + table.mcpServerVersion, + value, + ); + + _i1.ColumnValue batchRuntimeSeconds(int value) => _i1.ColumnValue( + table.batchRuntimeSeconds, + value, + ); + + _i1.ColumnValue createdAt(DateTime value) => + _i1.ColumnValue( + table.createdAt, + value, + ); +} + +class RunTable extends _i1.Table<_i1.UuidValue?> { + RunTable({super.tableRelation}) : super(tableName: 'evals_runs') { + updateTable = RunUpdateTable(this); + inspectId = _i1.ColumnString( + 'inspectId', + this, + ); + status = _i1.ColumnEnum( + 'status', + this, + _i1.EnumSerialization.byName, + ); + variants = _i1.ColumnSerializable>( + 'variants', + this, + ); + mcpServerVersion = _i1.ColumnString( + 'mcpServerVersion', + this, + ); + batchRuntimeSeconds = _i1.ColumnInt( + 'batchRuntimeSeconds', + this, + ); + createdAt = _i1.ColumnDateTime( + 'createdAt', + this, + hasDefault: true, + ); + } + + late final RunUpdateTable updateTable; + + /// InspectAI-generated Id. + late final _i1.ColumnString inspectId; + + /// Run status (e.g., "complete", "inProgress", "failed"). + late final _i1.ColumnEnum<_i2.Status> status; + + /// The variant configurations used in this run. + late final _i1.ColumnSerializable> variants; + + /// Version of the MCP server used during evaluation. + late final _i1.ColumnString mcpServerVersion; + + /// Total script runtime in seconds. + late final _i1.ColumnInt batchRuntimeSeconds; + + /// List of models evaluated in this run. + _i3.ModelTable? ___models; + + /// List of models evaluated in this run. + _i1.ManyRelation<_i3.ModelTable>? _models; + + /// List of datasets evaluated in this run. + _i4.DatasetTable? ___datasets; + + /// List of datasets evaluated in this run. + _i1.ManyRelation<_i4.DatasetTable>? _datasets; + + /// List of Inspect AI task names that were run. + _i5.TaskTable? ___tasks; + + /// List of Inspect AI task names that were run. + _i1.ManyRelation<_i5.TaskTable>? _tasks; + + /// Creation time for this record. + late final _i1.ColumnDateTime createdAt; + + _i3.ModelTable get __models { + if (___models != null) return ___models!; + ___models = _i1.createRelationTable( + relationFieldName: '__models', + field: Run.t.id, + foreignField: _i3.Model.t.$_evalsRunsModelsEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.ModelTable(tableRelation: foreignTableRelation), + ); + return ___models!; + } + + _i4.DatasetTable get __datasets { + if (___datasets != null) return ___datasets!; + ___datasets = _i1.createRelationTable( + relationFieldName: '__datasets', + field: Run.t.id, + foreignField: _i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i4.DatasetTable(tableRelation: foreignTableRelation), + ); + return ___datasets!; + } + + _i5.TaskTable get __tasks { + if (___tasks != null) return ___tasks!; + ___tasks = _i1.createRelationTable( + relationFieldName: '__tasks', + field: Run.t.id, + foreignField: _i5.Task.t.$_evalsRunsTasksEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i5.TaskTable(tableRelation: foreignTableRelation), + ); + return ___tasks!; + } + + _i1.ManyRelation<_i3.ModelTable> get models { + if (_models != null) return _models!; + var relationTable = _i1.createRelationTable( + relationFieldName: 'models', + field: Run.t.id, + foreignField: _i3.Model.t.$_evalsRunsModelsEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.ModelTable(tableRelation: foreignTableRelation), + ); + _models = _i1.ManyRelation<_i3.ModelTable>( + tableWithRelations: relationTable, + table: _i3.ModelTable( + tableRelation: relationTable.tableRelation!.lastRelation, + ), + ); + return _models!; + } + + _i1.ManyRelation<_i4.DatasetTable> get datasets { + if (_datasets != null) return _datasets!; + var relationTable = _i1.createRelationTable( + relationFieldName: 'datasets', + field: Run.t.id, + foreignField: _i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i4.DatasetTable(tableRelation: foreignTableRelation), + ); + _datasets = _i1.ManyRelation<_i4.DatasetTable>( + tableWithRelations: relationTable, + table: _i4.DatasetTable( + tableRelation: relationTable.tableRelation!.lastRelation, + ), + ); + return _datasets!; + } + + _i1.ManyRelation<_i5.TaskTable> get tasks { + if (_tasks != null) return _tasks!; + var relationTable = _i1.createRelationTable( + relationFieldName: 'tasks', + field: Run.t.id, + foreignField: _i5.Task.t.$_evalsRunsTasksEvalsRunsId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i5.TaskTable(tableRelation: foreignTableRelation), + ); + _tasks = _i1.ManyRelation<_i5.TaskTable>( + tableWithRelations: relationTable, + table: _i5.TaskTable( + tableRelation: relationTable.tableRelation!.lastRelation, + ), + ); + return _tasks!; + } + + @override + List<_i1.Column> get columns => [ + id, + inspectId, + status, + variants, + mcpServerVersion, + batchRuntimeSeconds, + createdAt, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'models') { + return __models; + } + if (relationField == 'datasets') { + return __datasets; + } + if (relationField == 'tasks') { + return __tasks; + } + return null; + } +} + +class RunInclude extends _i1.IncludeObject { + RunInclude._({ + _i3.ModelIncludeList? models, + _i4.DatasetIncludeList? datasets, + _i5.TaskIncludeList? tasks, + }) { + _models = models; + _datasets = datasets; + _tasks = tasks; + } + + _i3.ModelIncludeList? _models; + + _i4.DatasetIncludeList? _datasets; + + _i5.TaskIncludeList? _tasks; + + @override + Map get includes => { + 'models': _models, + 'datasets': _datasets, + 'tasks': _tasks, + }; + + @override + _i1.Table<_i1.UuidValue?> get table => Run.t; +} + +class RunIncludeList extends _i1.IncludeList { + RunIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Run.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Run.t; +} + +class RunRepository { + const RunRepository._(); + + final attach = const RunAttachRepository._(); + + final attachRow = const RunAttachRowRepository._(); + + final detach = const RunDetachRepository._(); + + final detachRow = const RunDetachRowRepository._(); + + /// Returns a list of [Run]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + RunInclude? include, + }) async { + return session.db.find( + where: where?.call(Run.t), + orderBy: orderBy?.call(Run.t), + orderByList: orderByList?.call(Run.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [Run] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + RunInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(Run.t), + orderBy: orderBy?.call(Run.t), + orderByList: orderByList?.call(Run.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [Run] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + RunInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [Run]s in the list and returns the inserted rows. + /// + /// The returned [Run]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Run] and returns the inserted row. + /// + /// The returned [Run] will have its `id` field set. + Future insertRow( + _i1.Session session, + Run row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Run]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Run.t), + transaction: transaction, + ); + } + + /// Updates a single [Run]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Run row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Run.t), + transaction: transaction, + ); + } + + /// Updates a single [Run] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Run.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Run]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Run.t.updateTable), + where: where(Run.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Run.t), + orderByList: orderByList?.call(Run.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Run]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Run]. + Future deleteRow( + _i1.Session session, + Run row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Run.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Run.t), + limit: limit, + transaction: transaction, + ); + } +} + +class RunAttachRepository { + const RunAttachRepository._(); + + /// Creates a relation between this [Run] and the given [Model]s + /// by setting each [Model]'s foreign key `_evalsRunsModelsEvalsRunsId` to refer to this [Run]. + Future models( + _i1.Session session, + Run run, + List<_i3.Model> model, { + _i1.Transaction? transaction, + }) async { + if (model.any((e) => e.id == null)) { + throw ArgumentError.notNull('model.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $model = model + .map( + (e) => _i3.ModelImplicit( + e, + $_evalsRunsModelsEvalsRunsId: run.id, + ), + ) + .toList(); + await session.db.update<_i3.Model>( + $model, + columns: [_i3.Model.t.$_evalsRunsModelsEvalsRunsId], + transaction: transaction, + ); + } + + /// Creates a relation between this [Run] and the given [Dataset]s + /// by setting each [Dataset]'s foreign key `_evalsRunsDatasetsEvalsRunsId` to refer to this [Run]. + Future datasets( + _i1.Session session, + Run run, + List<_i4.Dataset> dataset, { + _i1.Transaction? transaction, + }) async { + if (dataset.any((e) => e.id == null)) { + throw ArgumentError.notNull('dataset.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $dataset = dataset + .map( + (e) => _i4.DatasetImplicit( + e, + $_evalsRunsDatasetsEvalsRunsId: run.id, + ), + ) + .toList(); + await session.db.update<_i4.Dataset>( + $dataset, + columns: [_i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId], + transaction: transaction, + ); + } + + /// Creates a relation between this [Run] and the given [Task]s + /// by setting each [Task]'s foreign key `_evalsRunsTasksEvalsRunsId` to refer to this [Run]. + Future tasks( + _i1.Session session, + Run run, + List<_i5.Task> task, { + _i1.Transaction? transaction, + }) async { + if (task.any((e) => e.id == null)) { + throw ArgumentError.notNull('task.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $task = task + .map( + (e) => _i5.TaskImplicit( + e, + $_evalsRunsTasksEvalsRunsId: run.id, + ), + ) + .toList(); + await session.db.update<_i5.Task>( + $task, + columns: [_i5.Task.t.$_evalsRunsTasksEvalsRunsId], + transaction: transaction, + ); + } +} + +class RunAttachRowRepository { + const RunAttachRowRepository._(); + + /// Creates a relation between this [Run] and the given [Model] + /// by setting the [Model]'s foreign key `_evalsRunsModelsEvalsRunsId` to refer to this [Run]. + Future models( + _i1.Session session, + Run run, + _i3.Model model, { + _i1.Transaction? transaction, + }) async { + if (model.id == null) { + throw ArgumentError.notNull('model.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $model = _i3.ModelImplicit( + model, + $_evalsRunsModelsEvalsRunsId: run.id, + ); + await session.db.updateRow<_i3.Model>( + $model, + columns: [_i3.Model.t.$_evalsRunsModelsEvalsRunsId], + transaction: transaction, + ); + } + + /// Creates a relation between this [Run] and the given [Dataset] + /// by setting the [Dataset]'s foreign key `_evalsRunsDatasetsEvalsRunsId` to refer to this [Run]. + Future datasets( + _i1.Session session, + Run run, + _i4.Dataset dataset, { + _i1.Transaction? transaction, + }) async { + if (dataset.id == null) { + throw ArgumentError.notNull('dataset.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $dataset = _i4.DatasetImplicit( + dataset, + $_evalsRunsDatasetsEvalsRunsId: run.id, + ); + await session.db.updateRow<_i4.Dataset>( + $dataset, + columns: [_i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId], + transaction: transaction, + ); + } + + /// Creates a relation between this [Run] and the given [Task] + /// by setting the [Task]'s foreign key `_evalsRunsTasksEvalsRunsId` to refer to this [Run]. + Future tasks( + _i1.Session session, + Run run, + _i5.Task task, { + _i1.Transaction? transaction, + }) async { + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $task = _i5.TaskImplicit( + task, + $_evalsRunsTasksEvalsRunsId: run.id, + ); + await session.db.updateRow<_i5.Task>( + $task, + columns: [_i5.Task.t.$_evalsRunsTasksEvalsRunsId], + transaction: transaction, + ); + } +} + +class RunDetachRepository { + const RunDetachRepository._(); + + /// Detaches the relation between this [Run] and the given [Model] + /// by setting the [Model]'s foreign key `_evalsRunsModelsEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future models( + _i1.Session session, + List<_i3.Model> model, { + _i1.Transaction? transaction, + }) async { + if (model.any((e) => e.id == null)) { + throw ArgumentError.notNull('model.id'); + } + + var $model = model + .map( + (e) => _i3.ModelImplicit( + e, + $_evalsRunsModelsEvalsRunsId: null, + ), + ) + .toList(); + await session.db.update<_i3.Model>( + $model, + columns: [_i3.Model.t.$_evalsRunsModelsEvalsRunsId], + transaction: transaction, + ); + } + + /// Detaches the relation between this [Run] and the given [Dataset] + /// by setting the [Dataset]'s foreign key `_evalsRunsDatasetsEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future datasets( + _i1.Session session, + List<_i4.Dataset> dataset, { + _i1.Transaction? transaction, + }) async { + if (dataset.any((e) => e.id == null)) { + throw ArgumentError.notNull('dataset.id'); + } + + var $dataset = dataset + .map( + (e) => _i4.DatasetImplicit( + e, + $_evalsRunsDatasetsEvalsRunsId: null, + ), + ) + .toList(); + await session.db.update<_i4.Dataset>( + $dataset, + columns: [_i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId], + transaction: transaction, + ); + } + + /// Detaches the relation between this [Run] and the given [Task] + /// by setting the [Task]'s foreign key `_evalsRunsTasksEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future tasks( + _i1.Session session, + List<_i5.Task> task, { + _i1.Transaction? transaction, + }) async { + if (task.any((e) => e.id == null)) { + throw ArgumentError.notNull('task.id'); + } + + var $task = task + .map( + (e) => _i5.TaskImplicit( + e, + $_evalsRunsTasksEvalsRunsId: null, + ), + ) + .toList(); + await session.db.update<_i5.Task>( + $task, + columns: [_i5.Task.t.$_evalsRunsTasksEvalsRunsId], + transaction: transaction, + ); + } +} + +class RunDetachRowRepository { + const RunDetachRowRepository._(); + + /// Detaches the relation between this [Run] and the given [Model] + /// by setting the [Model]'s foreign key `_evalsRunsModelsEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future models( + _i1.Session session, + _i3.Model model, { + _i1.Transaction? transaction, + }) async { + if (model.id == null) { + throw ArgumentError.notNull('model.id'); + } + + var $model = _i3.ModelImplicit( + model, + $_evalsRunsModelsEvalsRunsId: null, + ); + await session.db.updateRow<_i3.Model>( + $model, + columns: [_i3.Model.t.$_evalsRunsModelsEvalsRunsId], + transaction: transaction, + ); + } + + /// Detaches the relation between this [Run] and the given [Dataset] + /// by setting the [Dataset]'s foreign key `_evalsRunsDatasetsEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future datasets( + _i1.Session session, + _i4.Dataset dataset, { + _i1.Transaction? transaction, + }) async { + if (dataset.id == null) { + throw ArgumentError.notNull('dataset.id'); + } + + var $dataset = _i4.DatasetImplicit( + dataset, + $_evalsRunsDatasetsEvalsRunsId: null, + ); + await session.db.updateRow<_i4.Dataset>( + $dataset, + columns: [_i4.Dataset.t.$_evalsRunsDatasetsEvalsRunsId], + transaction: transaction, + ); + } + + /// Detaches the relation between this [Run] and the given [Task] + /// by setting the [Task]'s foreign key `_evalsRunsTasksEvalsRunsId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future tasks( + _i1.Session session, + _i5.Task task, { + _i1.Transaction? transaction, + }) async { + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + + var $task = _i5.TaskImplicit( + task, + $_evalsRunsTasksEvalsRunsId: null, + ); + await session.db.updateRow<_i5.Task>( + $task, + columns: [_i5.Task.t.$_evalsRunsTasksEvalsRunsId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/run_summary.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/run_summary.dart new file mode 100644 index 0000000..2406312 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/run_summary.dart @@ -0,0 +1,737 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'run.dart' as _i2; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i3; + +/// Metadata for the outcomes of a given [Run]. This is a separate table from [Run] because +/// otherwise each of these columns would have to be nullable on [Run], as they are generated +/// after the run is completed. +abstract class RunSummary + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + RunSummary._({ + this.id, + required this.runId, + this.run, + required this.totalTasks, + required this.totalSamples, + required this.avgAccuracy, + required this.totalTokens, + required this.inputTokens, + required this.outputTokens, + required this.reasoningTokens, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(); + + factory RunSummary({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required int totalTasks, + required int totalSamples, + required double avgAccuracy, + required int totalTokens, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) = _RunSummaryImpl; + + factory RunSummary.fromJson(Map jsonSerialization) { + return RunSummary( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i3.Protocol().deserialize<_i2.Run>(jsonSerialization['run']), + totalTasks: jsonSerialization['totalTasks'] as int, + totalSamples: jsonSerialization['totalSamples'] as int, + avgAccuracy: (jsonSerialization['avgAccuracy'] as num).toDouble(), + totalTokens: jsonSerialization['totalTokens'] as int, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + static final t = RunSummaryTable(); + + static const db = RunSummaryRepository._(); + + @override + _i1.UuidValue? id; + + _i1.UuidValue runId; + + /// Run this summary belongs to. + _i2.Run? run; + + /// Number of tasks in this run. + int totalTasks; + + /// Total number of samples evaluated. + int totalSamples; + + /// Average accuracy across all tasks (0.0 to 1.0). + double avgAccuracy; + + /// Total token usage. + int totalTokens; + + /// Input tokens used. + int inputTokens; + + /// Output tokens generated. + int outputTokens; + + /// Reasoning tokens used (for models that support it). + int reasoningTokens; + + /// Creation time for this record. + DateTime createdAt; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [RunSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + RunSummary copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? runId, + _i2.Run? run, + int? totalTasks, + int? totalSamples, + double? avgAccuracy, + int? totalTokens, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'RunSummary', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'totalTasks': totalTasks, + 'totalSamples': totalSamples, + 'avgAccuracy': avgAccuracy, + 'totalTokens': totalTokens, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'RunSummary', + if (id != null) 'id': id?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJsonForProtocol(), + 'totalTasks': totalTasks, + 'totalSamples': totalSamples, + 'avgAccuracy': avgAccuracy, + 'totalTokens': totalTokens, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'reasoningTokens': reasoningTokens, + 'createdAt': createdAt.toJson(), + }; + } + + static RunSummaryInclude include({_i2.RunInclude? run}) { + return RunSummaryInclude._(run: run); + } + + static RunSummaryIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + RunSummaryInclude? include, + }) { + return RunSummaryIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(RunSummary.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(RunSummary.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _RunSummaryImpl extends RunSummary { + _RunSummaryImpl({ + _i1.UuidValue? id, + required _i1.UuidValue runId, + _i2.Run? run, + required int totalTasks, + required int totalSamples, + required double avgAccuracy, + required int totalTokens, + required int inputTokens, + required int outputTokens, + required int reasoningTokens, + DateTime? createdAt, + }) : super._( + id: id, + runId: runId, + run: run, + totalTasks: totalTasks, + totalSamples: totalSamples, + avgAccuracy: avgAccuracy, + totalTokens: totalTokens, + inputTokens: inputTokens, + outputTokens: outputTokens, + reasoningTokens: reasoningTokens, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [RunSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + RunSummary copyWith({ + Object? id = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + int? totalTasks, + int? totalSamples, + double? avgAccuracy, + int? totalTokens, + int? inputTokens, + int? outputTokens, + int? reasoningTokens, + DateTime? createdAt, + }) { + return RunSummary( + id: id is _i1.UuidValue? ? id : this.id, + runId: runId ?? this.runId, + run: run is _i2.Run? ? run : this.run?.copyWith(), + totalTasks: totalTasks ?? this.totalTasks, + totalSamples: totalSamples ?? this.totalSamples, + avgAccuracy: avgAccuracy ?? this.avgAccuracy, + totalTokens: totalTokens ?? this.totalTokens, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + createdAt: createdAt ?? this.createdAt, + ); + } +} + +class RunSummaryUpdateTable extends _i1.UpdateTable { + RunSummaryUpdateTable(super.table); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> runId(_i1.UuidValue value) => + _i1.ColumnValue( + table.runId, + value, + ); + + _i1.ColumnValue totalTasks(int value) => _i1.ColumnValue( + table.totalTasks, + value, + ); + + _i1.ColumnValue totalSamples(int value) => _i1.ColumnValue( + table.totalSamples, + value, + ); + + _i1.ColumnValue avgAccuracy(double value) => _i1.ColumnValue( + table.avgAccuracy, + value, + ); + + _i1.ColumnValue totalTokens(int value) => _i1.ColumnValue( + table.totalTokens, + value, + ); + + _i1.ColumnValue inputTokens(int value) => _i1.ColumnValue( + table.inputTokens, + value, + ); + + _i1.ColumnValue outputTokens(int value) => _i1.ColumnValue( + table.outputTokens, + value, + ); + + _i1.ColumnValue reasoningTokens(int value) => _i1.ColumnValue( + table.reasoningTokens, + value, + ); + + _i1.ColumnValue createdAt(DateTime value) => + _i1.ColumnValue( + table.createdAt, + value, + ); +} + +class RunSummaryTable extends _i1.Table<_i1.UuidValue?> { + RunSummaryTable({super.tableRelation}) + : super(tableName: 'evals_run_summaries') { + updateTable = RunSummaryUpdateTable(this); + runId = _i1.ColumnUuid( + 'runId', + this, + ); + totalTasks = _i1.ColumnInt( + 'totalTasks', + this, + ); + totalSamples = _i1.ColumnInt( + 'totalSamples', + this, + ); + avgAccuracy = _i1.ColumnDouble( + 'avgAccuracy', + this, + ); + totalTokens = _i1.ColumnInt( + 'totalTokens', + this, + ); + inputTokens = _i1.ColumnInt( + 'inputTokens', + this, + ); + outputTokens = _i1.ColumnInt( + 'outputTokens', + this, + ); + reasoningTokens = _i1.ColumnInt( + 'reasoningTokens', + this, + ); + createdAt = _i1.ColumnDateTime( + 'createdAt', + this, + hasDefault: true, + ); + } + + late final RunSummaryUpdateTable updateTable; + + late final _i1.ColumnUuid runId; + + /// Run this summary belongs to. + _i2.RunTable? _run; + + /// Number of tasks in this run. + late final _i1.ColumnInt totalTasks; + + /// Total number of samples evaluated. + late final _i1.ColumnInt totalSamples; + + /// Average accuracy across all tasks (0.0 to 1.0). + late final _i1.ColumnDouble avgAccuracy; + + /// Total token usage. + late final _i1.ColumnInt totalTokens; + + /// Input tokens used. + late final _i1.ColumnInt inputTokens; + + /// Output tokens generated. + late final _i1.ColumnInt outputTokens; + + /// Reasoning tokens used (for models that support it). + late final _i1.ColumnInt reasoningTokens; + + /// Creation time for this record. + late final _i1.ColumnDateTime createdAt; + + _i2.RunTable get run { + if (_run != null) return _run!; + _run = _i1.createRelationTable( + relationFieldName: 'run', + field: RunSummary.t.runId, + foreignField: _i2.Run.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.RunTable(tableRelation: foreignTableRelation), + ); + return _run!; + } + + @override + List<_i1.Column> get columns => [ + id, + runId, + totalTasks, + totalSamples, + avgAccuracy, + totalTokens, + inputTokens, + outputTokens, + reasoningTokens, + createdAt, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'run') { + return run; + } + return null; + } +} + +class RunSummaryInclude extends _i1.IncludeObject { + RunSummaryInclude._({_i2.RunInclude? run}) { + _run = run; + } + + _i2.RunInclude? _run; + + @override + Map get includes => {'run': _run}; + + @override + _i1.Table<_i1.UuidValue?> get table => RunSummary.t; +} + +class RunSummaryIncludeList extends _i1.IncludeList { + RunSummaryIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(RunSummary.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => RunSummary.t; +} + +class RunSummaryRepository { + const RunSummaryRepository._(); + + final attachRow = const RunSummaryAttachRowRepository._(); + + /// Returns a list of [RunSummary]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + RunSummaryInclude? include, + }) async { + return session.db.find( + where: where?.call(RunSummary.t), + orderBy: orderBy?.call(RunSummary.t), + orderByList: orderByList?.call(RunSummary.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [RunSummary] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + RunSummaryInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(RunSummary.t), + orderBy: orderBy?.call(RunSummary.t), + orderByList: orderByList?.call(RunSummary.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [RunSummary] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + RunSummaryInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [RunSummary]s in the list and returns the inserted rows. + /// + /// The returned [RunSummary]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [RunSummary] and returns the inserted row. + /// + /// The returned [RunSummary] will have its `id` field set. + Future insertRow( + _i1.Session session, + RunSummary row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [RunSummary]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(RunSummary.t), + transaction: transaction, + ); + } + + /// Updates a single [RunSummary]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + RunSummary row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(RunSummary.t), + transaction: transaction, + ); + } + + /// Updates a single [RunSummary] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(RunSummary.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [RunSummary]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(RunSummary.t.updateTable), + where: where(RunSummary.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(RunSummary.t), + orderByList: orderByList?.call(RunSummary.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [RunSummary]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [RunSummary]. + Future deleteRow( + _i1.Session session, + RunSummary row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(RunSummary.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(RunSummary.t), + limit: limit, + transaction: transaction, + ); + } +} + +class RunSummaryAttachRowRepository { + const RunSummaryAttachRowRepository._(); + + /// Creates a relation between the given [RunSummary] and [Run] + /// by setting the [RunSummary]'s foreign key `runId` to refer to the [Run]. + Future run( + _i1.Session session, + RunSummary runSummary, + _i2.Run run, { + _i1.Transaction? transaction, + }) async { + if (runSummary.id == null) { + throw ArgumentError.notNull('runSummary.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $runSummary = runSummary.copyWith(runId: run.id); + await session.db.updateRow( + $runSummary, + columns: [RunSummary.t.runId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample.dart new file mode 100644 index 0000000..48fe7d6 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample.dart @@ -0,0 +1,859 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'dataset.dart' as _i2; +import 'sample_tag_xref.dart' as _i3; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i4; + +/// A single challenge to be presented to a [Model] and evaluated by one or more [Scorer]s. +abstract class Sample + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Sample._({ + this.id, + required this.name, + required this.datasetId, + this.dataset, + required this.input, + required this.target, + this.tagsXref, + bool? isActive, + DateTime? createdAt, + }) : isActive = isActive ?? true, + createdAt = createdAt ?? DateTime.now(); + + factory Sample({ + _i1.UuidValue? id, + required String name, + required _i1.UuidValue datasetId, + _i2.Dataset? dataset, + required String input, + required String target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }) = _SampleImpl; + + factory Sample.fromJson(Map jsonSerialization) { + return Sample( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i4.Protocol().deserialize<_i2.Dataset>( + jsonSerialization['dataset'], + ), + input: jsonSerialization['input'] as String, + target: jsonSerialization['target'] as String, + tagsXref: jsonSerialization['tagsXref'] == null + ? null + : _i4.Protocol().deserialize>( + jsonSerialization['tagsXref'], + ), + isActive: jsonSerialization['isActive'] as bool?, + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + ); + } + + static final t = SampleTable(); + + static const db = SampleRepository._(); + + @override + _i1.UuidValue? id; + + /// Short sample name/ID (e.g., "dart_futures_vs_streams"). + String name; + + _i1.UuidValue datasetId; + + /// The dataset this sample belongs to (e.g., "dart_qa_dataset"). + _i2.Dataset? dataset; + + /// The input prompt/question for the model. + String input; + + /// The expected answer or grading guidance. + String target; + + /// Tags associated with this sample (e.g., ["dart", "flutter"]). + /// Technically, this relationship only reaches the cross-reference table, + /// not the tags themselves. + List<_i3.SampleTagXref>? tagsXref; + + /// True if the sample is still active and included in eval runs. + bool isActive; + + /// Creation time for this record. + DateTime createdAt; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Sample] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Sample copyWith({ + _i1.UuidValue? id, + String? name, + _i1.UuidValue? datasetId, + _i2.Dataset? dataset, + String? input, + String? target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Sample', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'input': input, + 'target': target, + if (tagsXref != null) + 'tagsXref': tagsXref?.toJson(valueToJson: (v) => v.toJson()), + 'isActive': isActive, + 'createdAt': createdAt.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Sample', + if (id != null) 'id': id?.toJson(), + 'name': name, + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJsonForProtocol(), + 'input': input, + 'target': target, + if (tagsXref != null) + 'tagsXref': tagsXref?.toJson(valueToJson: (v) => v.toJsonForProtocol()), + 'isActive': isActive, + 'createdAt': createdAt.toJson(), + }; + } + + static SampleInclude include({ + _i2.DatasetInclude? dataset, + _i3.SampleTagXrefIncludeList? tagsXref, + }) { + return SampleInclude._( + dataset: dataset, + tagsXref: tagsXref, + ); + } + + static SampleIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + SampleInclude? include, + }) { + return SampleIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Sample.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Sample.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _SampleImpl extends Sample { + _SampleImpl({ + _i1.UuidValue? id, + required String name, + required _i1.UuidValue datasetId, + _i2.Dataset? dataset, + required String input, + required String target, + List<_i3.SampleTagXref>? tagsXref, + bool? isActive, + DateTime? createdAt, + }) : super._( + id: id, + name: name, + datasetId: datasetId, + dataset: dataset, + input: input, + target: target, + tagsXref: tagsXref, + isActive: isActive, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Sample] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Sample copyWith({ + Object? id = _Undefined, + String? name, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + String? input, + String? target, + Object? tagsXref = _Undefined, + bool? isActive, + DateTime? createdAt, + }) { + return Sample( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i2.Dataset? ? dataset : this.dataset?.copyWith(), + input: input ?? this.input, + target: target ?? this.target, + tagsXref: tagsXref is List<_i3.SampleTagXref>? + ? tagsXref + : this.tagsXref?.map((e0) => e0.copyWith()).toList(), + isActive: isActive ?? this.isActive, + createdAt: createdAt ?? this.createdAt, + ); + } +} + +class SampleUpdateTable extends _i1.UpdateTable { + SampleUpdateTable(super.table); + + _i1.ColumnValue name(String value) => _i1.ColumnValue( + table.name, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> datasetId( + _i1.UuidValue value, + ) => _i1.ColumnValue( + table.datasetId, + value, + ); + + _i1.ColumnValue input(String value) => _i1.ColumnValue( + table.input, + value, + ); + + _i1.ColumnValue target(String value) => _i1.ColumnValue( + table.target, + value, + ); + + _i1.ColumnValue isActive(bool value) => _i1.ColumnValue( + table.isActive, + value, + ); + + _i1.ColumnValue createdAt(DateTime value) => + _i1.ColumnValue( + table.createdAt, + value, + ); +} + +class SampleTable extends _i1.Table<_i1.UuidValue?> { + SampleTable({super.tableRelation}) : super(tableName: 'evals_samples') { + updateTable = SampleUpdateTable(this); + name = _i1.ColumnString( + 'name', + this, + ); + datasetId = _i1.ColumnUuid( + 'datasetId', + this, + ); + input = _i1.ColumnString( + 'input', + this, + ); + target = _i1.ColumnString( + 'target', + this, + ); + isActive = _i1.ColumnBool( + 'isActive', + this, + hasDefault: true, + ); + createdAt = _i1.ColumnDateTime( + 'createdAt', + this, + hasDefault: true, + ); + } + + late final SampleUpdateTable updateTable; + + /// Short sample name/ID (e.g., "dart_futures_vs_streams"). + late final _i1.ColumnString name; + + late final _i1.ColumnUuid datasetId; + + /// The dataset this sample belongs to (e.g., "dart_qa_dataset"). + _i2.DatasetTable? _dataset; + + /// The input prompt/question for the model. + late final _i1.ColumnString input; + + /// The expected answer or grading guidance. + late final _i1.ColumnString target; + + /// Tags associated with this sample (e.g., ["dart", "flutter"]). + /// Technically, this relationship only reaches the cross-reference table, + /// not the tags themselves. + _i3.SampleTagXrefTable? ___tagsXref; + + /// Tags associated with this sample (e.g., ["dart", "flutter"]). + /// Technically, this relationship only reaches the cross-reference table, + /// not the tags themselves. + _i1.ManyRelation<_i3.SampleTagXrefTable>? _tagsXref; + + /// True if the sample is still active and included in eval runs. + late final _i1.ColumnBool isActive; + + /// Creation time for this record. + late final _i1.ColumnDateTime createdAt; + + _i2.DatasetTable get dataset { + if (_dataset != null) return _dataset!; + _dataset = _i1.createRelationTable( + relationFieldName: 'dataset', + field: Sample.t.datasetId, + foreignField: _i2.Dataset.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.DatasetTable(tableRelation: foreignTableRelation), + ); + return _dataset!; + } + + _i3.SampleTagXrefTable get __tagsXref { + if (___tagsXref != null) return ___tagsXref!; + ___tagsXref = _i1.createRelationTable( + relationFieldName: '__tagsXref', + field: Sample.t.id, + foreignField: _i3.SampleTagXref.t.sampleId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.SampleTagXrefTable(tableRelation: foreignTableRelation), + ); + return ___tagsXref!; + } + + _i1.ManyRelation<_i3.SampleTagXrefTable> get tagsXref { + if (_tagsXref != null) return _tagsXref!; + var relationTable = _i1.createRelationTable( + relationFieldName: 'tagsXref', + field: Sample.t.id, + foreignField: _i3.SampleTagXref.t.sampleId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.SampleTagXrefTable(tableRelation: foreignTableRelation), + ); + _tagsXref = _i1.ManyRelation<_i3.SampleTagXrefTable>( + tableWithRelations: relationTable, + table: _i3.SampleTagXrefTable( + tableRelation: relationTable.tableRelation!.lastRelation, + ), + ); + return _tagsXref!; + } + + @override + List<_i1.Column> get columns => [ + id, + name, + datasetId, + input, + target, + isActive, + createdAt, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'dataset') { + return dataset; + } + if (relationField == 'tagsXref') { + return __tagsXref; + } + return null; + } +} + +class SampleInclude extends _i1.IncludeObject { + SampleInclude._({ + _i2.DatasetInclude? dataset, + _i3.SampleTagXrefIncludeList? tagsXref, + }) { + _dataset = dataset; + _tagsXref = tagsXref; + } + + _i2.DatasetInclude? _dataset; + + _i3.SampleTagXrefIncludeList? _tagsXref; + + @override + Map get includes => { + 'dataset': _dataset, + 'tagsXref': _tagsXref, + }; + + @override + _i1.Table<_i1.UuidValue?> get table => Sample.t; +} + +class SampleIncludeList extends _i1.IncludeList { + SampleIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Sample.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Sample.t; +} + +class SampleRepository { + const SampleRepository._(); + + final attach = const SampleAttachRepository._(); + + final attachRow = const SampleAttachRowRepository._(); + + final detach = const SampleDetachRepository._(); + + final detachRow = const SampleDetachRowRepository._(); + + /// Returns a list of [Sample]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + SampleInclude? include, + }) async { + return session.db.find( + where: where?.call(Sample.t), + orderBy: orderBy?.call(Sample.t), + orderByList: orderByList?.call(Sample.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [Sample] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + SampleInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(Sample.t), + orderBy: orderBy?.call(Sample.t), + orderByList: orderByList?.call(Sample.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [Sample] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + SampleInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [Sample]s in the list and returns the inserted rows. + /// + /// The returned [Sample]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Sample] and returns the inserted row. + /// + /// The returned [Sample] will have its `id` field set. + Future insertRow( + _i1.Session session, + Sample row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Sample]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Sample.t), + transaction: transaction, + ); + } + + /// Updates a single [Sample]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Sample row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Sample.t), + transaction: transaction, + ); + } + + /// Updates a single [Sample] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Sample.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Sample]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Sample.t.updateTable), + where: where(Sample.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Sample.t), + orderByList: orderByList?.call(Sample.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Sample]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Sample]. + Future deleteRow( + _i1.Session session, + Sample row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Sample.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Sample.t), + limit: limit, + transaction: transaction, + ); + } +} + +class SampleAttachRepository { + const SampleAttachRepository._(); + + /// Creates a relation between this [Sample] and the given [SampleTagXref]s + /// by setting each [SampleTagXref]'s foreign key `sampleId` to refer to this [Sample]. + Future tagsXref( + _i1.Session session, + Sample sample, + List<_i3.SampleTagXref> sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.any((e) => e.id == null)) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (sample.id == null) { + throw ArgumentError.notNull('sample.id'); + } + + var $sampleTagXref = sampleTagXref + .map((e) => e.copyWith(sampleId: sample.id)) + .toList(); + await session.db.update<_i3.SampleTagXref>( + $sampleTagXref, + columns: [_i3.SampleTagXref.t.sampleId], + transaction: transaction, + ); + } +} + +class SampleAttachRowRepository { + const SampleAttachRowRepository._(); + + /// Creates a relation between the given [Sample] and [Dataset] + /// by setting the [Sample]'s foreign key `datasetId` to refer to the [Dataset]. + Future dataset( + _i1.Session session, + Sample sample, + _i2.Dataset dataset, { + _i1.Transaction? transaction, + }) async { + if (sample.id == null) { + throw ArgumentError.notNull('sample.id'); + } + if (dataset.id == null) { + throw ArgumentError.notNull('dataset.id'); + } + + var $sample = sample.copyWith(datasetId: dataset.id); + await session.db.updateRow( + $sample, + columns: [Sample.t.datasetId], + transaction: transaction, + ); + } + + /// Creates a relation between this [Sample] and the given [SampleTagXref] + /// by setting the [SampleTagXref]'s foreign key `sampleId` to refer to this [Sample]. + Future tagsXref( + _i1.Session session, + Sample sample, + _i3.SampleTagXref sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.id == null) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (sample.id == null) { + throw ArgumentError.notNull('sample.id'); + } + + var $sampleTagXref = sampleTagXref.copyWith(sampleId: sample.id); + await session.db.updateRow<_i3.SampleTagXref>( + $sampleTagXref, + columns: [_i3.SampleTagXref.t.sampleId], + transaction: transaction, + ); + } +} + +class SampleDetachRepository { + const SampleDetachRepository._(); + + /// Detaches the relation between this [Sample] and the given [SampleTagXref] + /// by setting the [SampleTagXref]'s foreign key `sampleId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future tagsXref( + _i1.Session session, + List<_i3.SampleTagXref> sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.any((e) => e.id == null)) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + + var $sampleTagXref = sampleTagXref + .map((e) => e.copyWith(sampleId: null)) + .toList(); + await session.db.update<_i3.SampleTagXref>( + $sampleTagXref, + columns: [_i3.SampleTagXref.t.sampleId], + transaction: transaction, + ); + } +} + +class SampleDetachRowRepository { + const SampleDetachRowRepository._(); + + /// Detaches the relation between this [Sample] and the given [SampleTagXref] + /// by setting the [SampleTagXref]'s foreign key `sampleId` to `null`. + /// + /// This removes the association between the two models without deleting + /// the related record. + Future tagsXref( + _i1.Session session, + _i3.SampleTagXref sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.id == null) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + + var $sampleTagXref = sampleTagXref.copyWith(sampleId: null); + await session.db.updateRow<_i3.SampleTagXref>( + $sampleTagXref, + columns: [_i3.SampleTagXref.t.sampleId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample_tag_xref.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample_tag_xref.dart new file mode 100644 index 0000000..9b2909c --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/sample_tag_xref.dart @@ -0,0 +1,617 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'sample.dart' as _i2; +import 'tag.dart' as _i3; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i4; + +/// Cross reference table for samples and tags. +abstract class SampleTagXref + implements _i1.TableRow, _i1.ProtocolSerialization { + SampleTagXref._({ + this.id, + required this.sampleId, + this.sample, + required this.tagId, + this.tag, + }); + + factory SampleTagXref({ + int? id, + required _i1.UuidValue sampleId, + _i2.Sample? sample, + required _i1.UuidValue tagId, + _i3.Tag? tag, + }) = _SampleTagXrefImpl; + + factory SampleTagXref.fromJson(Map jsonSerialization) { + return SampleTagXref( + id: jsonSerialization['id'] as int?, + sampleId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['sampleId'], + ), + sample: jsonSerialization['sample'] == null + ? null + : _i4.Protocol().deserialize<_i2.Sample>(jsonSerialization['sample']), + tagId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['tagId']), + tag: jsonSerialization['tag'] == null + ? null + : _i4.Protocol().deserialize<_i3.Tag>(jsonSerialization['tag']), + ); + } + + static final t = SampleTagXrefTable(); + + static const db = SampleTagXrefRepository._(); + + @override + int? id; + + _i1.UuidValue sampleId; + + _i2.Sample? sample; + + _i1.UuidValue tagId; + + _i3.Tag? tag; + + @override + _i1.Table get table => t; + + /// Returns a shallow copy of this [SampleTagXref] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + SampleTagXref copyWith({ + int? id, + _i1.UuidValue? sampleId, + _i2.Sample? sample, + _i1.UuidValue? tagId, + _i3.Tag? tag, + }); + @override + Map toJson() { + return { + '__className__': 'SampleTagXref', + if (id != null) 'id': id, + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJson(), + 'tagId': tagId.toJson(), + if (tag != null) 'tag': tag?.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'SampleTagXref', + if (id != null) 'id': id, + 'sampleId': sampleId.toJson(), + if (sample != null) 'sample': sample?.toJsonForProtocol(), + 'tagId': tagId.toJson(), + if (tag != null) 'tag': tag?.toJsonForProtocol(), + }; + } + + static SampleTagXrefInclude include({ + _i2.SampleInclude? sample, + _i3.TagInclude? tag, + }) { + return SampleTagXrefInclude._( + sample: sample, + tag: tag, + ); + } + + static SampleTagXrefIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + SampleTagXrefInclude? include, + }) { + return SampleTagXrefIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(SampleTagXref.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(SampleTagXref.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _SampleTagXrefImpl extends SampleTagXref { + _SampleTagXrefImpl({ + int? id, + required _i1.UuidValue sampleId, + _i2.Sample? sample, + required _i1.UuidValue tagId, + _i3.Tag? tag, + }) : super._( + id: id, + sampleId: sampleId, + sample: sample, + tagId: tagId, + tag: tag, + ); + + /// Returns a shallow copy of this [SampleTagXref] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + SampleTagXref copyWith({ + Object? id = _Undefined, + _i1.UuidValue? sampleId, + Object? sample = _Undefined, + _i1.UuidValue? tagId, + Object? tag = _Undefined, + }) { + return SampleTagXref( + id: id is int? ? id : this.id, + sampleId: sampleId ?? this.sampleId, + sample: sample is _i2.Sample? ? sample : this.sample?.copyWith(), + tagId: tagId ?? this.tagId, + tag: tag is _i3.Tag? ? tag : this.tag?.copyWith(), + ); + } +} + +class SampleTagXrefUpdateTable extends _i1.UpdateTable { + SampleTagXrefUpdateTable(super.table); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> sampleId(_i1.UuidValue value) => + _i1.ColumnValue( + table.sampleId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> tagId(_i1.UuidValue value) => + _i1.ColumnValue( + table.tagId, + value, + ); +} + +class SampleTagXrefTable extends _i1.Table { + SampleTagXrefTable({super.tableRelation}) + : super(tableName: 'evals_samples_tags_xref') { + updateTable = SampleTagXrefUpdateTable(this); + sampleId = _i1.ColumnUuid( + 'sampleId', + this, + ); + tagId = _i1.ColumnUuid( + 'tagId', + this, + ); + } + + late final SampleTagXrefUpdateTable updateTable; + + late final _i1.ColumnUuid sampleId; + + _i2.SampleTable? _sample; + + late final _i1.ColumnUuid tagId; + + _i3.TagTable? _tag; + + _i2.SampleTable get sample { + if (_sample != null) return _sample!; + _sample = _i1.createRelationTable( + relationFieldName: 'sample', + field: SampleTagXref.t.sampleId, + foreignField: _i2.Sample.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.SampleTable(tableRelation: foreignTableRelation), + ); + return _sample!; + } + + _i3.TagTable get tag { + if (_tag != null) return _tag!; + _tag = _i1.createRelationTable( + relationFieldName: 'tag', + field: SampleTagXref.t.tagId, + foreignField: _i3.Tag.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.TagTable(tableRelation: foreignTableRelation), + ); + return _tag!; + } + + @override + List<_i1.Column> get columns => [ + id, + sampleId, + tagId, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'sample') { + return sample; + } + if (relationField == 'tag') { + return tag; + } + return null; + } +} + +class SampleTagXrefInclude extends _i1.IncludeObject { + SampleTagXrefInclude._({ + _i2.SampleInclude? sample, + _i3.TagInclude? tag, + }) { + _sample = sample; + _tag = tag; + } + + _i2.SampleInclude? _sample; + + _i3.TagInclude? _tag; + + @override + Map get includes => { + 'sample': _sample, + 'tag': _tag, + }; + + @override + _i1.Table get table => SampleTagXref.t; +} + +class SampleTagXrefIncludeList extends _i1.IncludeList { + SampleTagXrefIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(SampleTagXref.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table get table => SampleTagXref.t; +} + +class SampleTagXrefRepository { + const SampleTagXrefRepository._(); + + final attachRow = const SampleTagXrefAttachRowRepository._(); + + /// Returns a list of [SampleTagXref]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + SampleTagXrefInclude? include, + }) async { + return session.db.find( + where: where?.call(SampleTagXref.t), + orderBy: orderBy?.call(SampleTagXref.t), + orderByList: orderByList?.call(SampleTagXref.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [SampleTagXref] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + SampleTagXrefInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(SampleTagXref.t), + orderBy: orderBy?.call(SampleTagXref.t), + orderByList: orderByList?.call(SampleTagXref.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [SampleTagXref] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + int id, { + _i1.Transaction? transaction, + SampleTagXrefInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [SampleTagXref]s in the list and returns the inserted rows. + /// + /// The returned [SampleTagXref]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [SampleTagXref] and returns the inserted row. + /// + /// The returned [SampleTagXref] will have its `id` field set. + Future insertRow( + _i1.Session session, + SampleTagXref row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [SampleTagXref]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(SampleTagXref.t), + transaction: transaction, + ); + } + + /// Updates a single [SampleTagXref]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + SampleTagXref row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(SampleTagXref.t), + transaction: transaction, + ); + } + + /// Updates a single [SampleTagXref] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + int id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(SampleTagXref.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [SampleTagXref]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(SampleTagXref.t.updateTable), + where: where(SampleTagXref.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(SampleTagXref.t), + orderByList: orderByList?.call(SampleTagXref.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [SampleTagXref]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [SampleTagXref]. + Future deleteRow( + _i1.Session session, + SampleTagXref row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(SampleTagXref.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(SampleTagXref.t), + limit: limit, + transaction: transaction, + ); + } +} + +class SampleTagXrefAttachRowRepository { + const SampleTagXrefAttachRowRepository._(); + + /// Creates a relation between the given [SampleTagXref] and [Sample] + /// by setting the [SampleTagXref]'s foreign key `sampleId` to refer to the [Sample]. + Future sample( + _i1.Session session, + SampleTagXref sampleTagXref, + _i2.Sample sample, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.id == null) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (sample.id == null) { + throw ArgumentError.notNull('sample.id'); + } + + var $sampleTagXref = sampleTagXref.copyWith(sampleId: sample.id); + await session.db.updateRow( + $sampleTagXref, + columns: [SampleTagXref.t.sampleId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [SampleTagXref] and [Tag] + /// by setting the [SampleTagXref]'s foreign key `tagId` to refer to the [Tag]. + Future tag( + _i1.Session session, + SampleTagXref sampleTagXref, + _i3.Tag tag, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.id == null) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (tag.id == null) { + throw ArgumentError.notNull('tag.id'); + } + + var $sampleTagXref = sampleTagXref.copyWith(tagId: tag.id); + await session.db.updateRow( + $sampleTagXref, + columns: [SampleTagXref.t.tagId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer.dart new file mode 100644 index 0000000..dab16db --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer.dart @@ -0,0 +1,442 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +/// Ye who watch the watchers. +abstract class Scorer + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Scorer._({ + this.id, + required this.name, + }); + + factory Scorer({ + _i1.UuidValue? id, + required String name, + }) = _ScorerImpl; + + factory Scorer.fromJson(Map jsonSerialization) { + return Scorer( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + ); + } + + static final t = ScorerTable(); + + static const db = ScorerRepository._(); + + @override + _i1.UuidValue? id; + + /// Name of the scorer (e.g., "bleu"). + String name; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Scorer] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Scorer copyWith({ + _i1.UuidValue? id, + String? name, + }); + @override + Map toJson() { + return { + '__className__': 'Scorer', + if (id != null) 'id': id?.toJson(), + 'name': name, + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Scorer', + if (id != null) 'id': id?.toJson(), + 'name': name, + }; + } + + static ScorerInclude include() { + return ScorerInclude._(); + } + + static ScorerIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + ScorerInclude? include, + }) { + return ScorerIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Scorer.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Scorer.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ScorerImpl extends Scorer { + _ScorerImpl({ + _i1.UuidValue? id, + required String name, + }) : super._( + id: id, + name: name, + ); + + /// Returns a shallow copy of this [Scorer] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Scorer copyWith({ + Object? id = _Undefined, + String? name, + }) { + return Scorer( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + ); + } +} + +class ScorerUpdateTable extends _i1.UpdateTable { + ScorerUpdateTable(super.table); + + _i1.ColumnValue name(String value) => _i1.ColumnValue( + table.name, + value, + ); +} + +class ScorerTable extends _i1.Table<_i1.UuidValue?> { + ScorerTable({super.tableRelation}) : super(tableName: 'evals_scorers') { + updateTable = ScorerUpdateTable(this); + name = _i1.ColumnString( + 'name', + this, + ); + } + + late final ScorerUpdateTable updateTable; + + /// Name of the scorer (e.g., "bleu"). + late final _i1.ColumnString name; + + @override + List<_i1.Column> get columns => [ + id, + name, + ]; +} + +class ScorerInclude extends _i1.IncludeObject { + ScorerInclude._(); + + @override + Map get includes => {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Scorer.t; +} + +class ScorerIncludeList extends _i1.IncludeList { + ScorerIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Scorer.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Scorer.t; +} + +class ScorerRepository { + const ScorerRepository._(); + + /// Returns a list of [Scorer]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.find( + where: where?.call(Scorer.t), + orderBy: orderBy?.call(Scorer.t), + orderByList: orderByList?.call(Scorer.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + ); + } + + /// Returns the first matching [Scorer] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + }) async { + return session.db.findFirstRow( + where: where?.call(Scorer.t), + orderBy: orderBy?.call(Scorer.t), + orderByList: orderByList?.call(Scorer.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + ); + } + + /// Finds a single [Scorer] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + }) async { + return session.db.findById( + id, + transaction: transaction, + ); + } + + /// Inserts all [Scorer]s in the list and returns the inserted rows. + /// + /// The returned [Scorer]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Scorer] and returns the inserted row. + /// + /// The returned [Scorer] will have its `id` field set. + Future insertRow( + _i1.Session session, + Scorer row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Scorer]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Scorer.t), + transaction: transaction, + ); + } + + /// Updates a single [Scorer]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Scorer row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Scorer.t), + transaction: transaction, + ); + } + + /// Updates a single [Scorer] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Scorer.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Scorer]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Scorer.t.updateTable), + where: where(Scorer.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Scorer.t), + orderByList: orderByList?.call(Scorer.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Scorer]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Scorer]. + Future deleteRow( + _i1.Session session, + Scorer row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Scorer.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Scorer.t), + limit: limit, + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer_result.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer_result.dart new file mode 100644 index 0000000..cf4cd49 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/scorer_result.dart @@ -0,0 +1,663 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'scorer.dart' as _i2; +import 'evaluation.dart' as _i3; +import 'package:eval_explorer_shared/eval_explorer_shared.dart' as _i4; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i5; + +/// A scorer's assessment of a task. +abstract class ScorerResult + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + ScorerResult._({ + this.id, + required this.scorerId, + this.scorer, + required this.evaluationId, + this.evaluation, + required this.data, + }); + + factory ScorerResult({ + _i1.UuidValue? id, + required _i1.UuidValue scorerId, + _i2.Scorer? scorer, + required _i1.UuidValue evaluationId, + _i3.Evaluation? evaluation, + required _i4.ScorerResultData data, + }) = _ScorerResultImpl; + + factory ScorerResult.fromJson(Map jsonSerialization) { + return ScorerResult( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + scorerId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['scorerId'], + ), + scorer: jsonSerialization['scorer'] == null + ? null + : _i5.Protocol().deserialize<_i2.Scorer>(jsonSerialization['scorer']), + evaluationId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['evaluationId'], + ), + evaluation: jsonSerialization['evaluation'] == null + ? null + : _i5.Protocol().deserialize<_i3.Evaluation>( + jsonSerialization['evaluation'], + ), + data: _i4.ScorerResultData.fromJson(jsonSerialization['data']), + ); + } + + static final t = ScorerResultTable(); + + static const db = ScorerResultRepository._(); + + @override + _i1.UuidValue? id; + + _i1.UuidValue scorerId; + + /// Scorer this summary belongs to. + _i2.Scorer? scorer; + + _i1.UuidValue evaluationId; + + /// Whether this scorer data is for a baseline run. + _i3.Evaluation? evaluation; + + /// Flexible data archived by the scorer. + _i4.ScorerResultData data; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [ScorerResult] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + ScorerResult copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? scorerId, + _i2.Scorer? scorer, + _i1.UuidValue? evaluationId, + _i3.Evaluation? evaluation, + _i4.ScorerResultData? data, + }); + @override + Map toJson() { + return { + '__className__': 'ScorerResult', + if (id != null) 'id': id?.toJson(), + 'scorerId': scorerId.toJson(), + if (scorer != null) 'scorer': scorer?.toJson(), + 'evaluationId': evaluationId.toJson(), + if (evaluation != null) 'evaluation': evaluation?.toJson(), + 'data': data.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'ScorerResult', + if (id != null) 'id': id?.toJson(), + 'scorerId': scorerId.toJson(), + if (scorer != null) 'scorer': scorer?.toJsonForProtocol(), + 'evaluationId': evaluationId.toJson(), + if (evaluation != null) 'evaluation': evaluation?.toJsonForProtocol(), + 'data': + // ignore: unnecessary_type_check + data is _i1.ProtocolSerialization + ? (data as _i1.ProtocolSerialization).toJsonForProtocol() + : data.toJson(), + }; + } + + static ScorerResultInclude include({ + _i2.ScorerInclude? scorer, + _i3.EvaluationInclude? evaluation, + }) { + return ScorerResultInclude._( + scorer: scorer, + evaluation: evaluation, + ); + } + + static ScorerResultIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + ScorerResultInclude? include, + }) { + return ScorerResultIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(ScorerResult.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(ScorerResult.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _ScorerResultImpl extends ScorerResult { + _ScorerResultImpl({ + _i1.UuidValue? id, + required _i1.UuidValue scorerId, + _i2.Scorer? scorer, + required _i1.UuidValue evaluationId, + _i3.Evaluation? evaluation, + required _i4.ScorerResultData data, + }) : super._( + id: id, + scorerId: scorerId, + scorer: scorer, + evaluationId: evaluationId, + evaluation: evaluation, + data: data, + ); + + /// Returns a shallow copy of this [ScorerResult] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + ScorerResult copyWith({ + Object? id = _Undefined, + _i1.UuidValue? scorerId, + Object? scorer = _Undefined, + _i1.UuidValue? evaluationId, + Object? evaluation = _Undefined, + _i4.ScorerResultData? data, + }) { + return ScorerResult( + id: id is _i1.UuidValue? ? id : this.id, + scorerId: scorerId ?? this.scorerId, + scorer: scorer is _i2.Scorer? ? scorer : this.scorer?.copyWith(), + evaluationId: evaluationId ?? this.evaluationId, + evaluation: evaluation is _i3.Evaluation? + ? evaluation + : this.evaluation?.copyWith(), + data: data ?? this.data.copyWith(), + ); + } +} + +class ScorerResultUpdateTable extends _i1.UpdateTable { + ScorerResultUpdateTable(super.table); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> scorerId(_i1.UuidValue value) => + _i1.ColumnValue( + table.scorerId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> evaluationId( + _i1.UuidValue value, + ) => _i1.ColumnValue( + table.evaluationId, + value, + ); + + _i1.ColumnValue<_i4.ScorerResultData, _i4.ScorerResultData> data( + _i4.ScorerResultData value, + ) => _i1.ColumnValue( + table.data, + value, + ); +} + +class ScorerResultTable extends _i1.Table<_i1.UuidValue?> { + ScorerResultTable({super.tableRelation}) + : super(tableName: 'evals_scorer_results') { + updateTable = ScorerResultUpdateTable(this); + scorerId = _i1.ColumnUuid( + 'scorerId', + this, + ); + evaluationId = _i1.ColumnUuid( + 'evaluationId', + this, + ); + data = _i1.ColumnSerializable<_i4.ScorerResultData>( + 'data', + this, + ); + } + + late final ScorerResultUpdateTable updateTable; + + late final _i1.ColumnUuid scorerId; + + /// Scorer this summary belongs to. + _i2.ScorerTable? _scorer; + + late final _i1.ColumnUuid evaluationId; + + /// Whether this scorer data is for a baseline run. + _i3.EvaluationTable? _evaluation; + + /// Flexible data archived by the scorer. + late final _i1.ColumnSerializable<_i4.ScorerResultData> data; + + _i2.ScorerTable get scorer { + if (_scorer != null) return _scorer!; + _scorer = _i1.createRelationTable( + relationFieldName: 'scorer', + field: ScorerResult.t.scorerId, + foreignField: _i2.Scorer.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.ScorerTable(tableRelation: foreignTableRelation), + ); + return _scorer!; + } + + _i3.EvaluationTable get evaluation { + if (_evaluation != null) return _evaluation!; + _evaluation = _i1.createRelationTable( + relationFieldName: 'evaluation', + field: ScorerResult.t.evaluationId, + foreignField: _i3.Evaluation.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.EvaluationTable(tableRelation: foreignTableRelation), + ); + return _evaluation!; + } + + @override + List<_i1.Column> get columns => [ + id, + scorerId, + evaluationId, + data, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'scorer') { + return scorer; + } + if (relationField == 'evaluation') { + return evaluation; + } + return null; + } +} + +class ScorerResultInclude extends _i1.IncludeObject { + ScorerResultInclude._({ + _i2.ScorerInclude? scorer, + _i3.EvaluationInclude? evaluation, + }) { + _scorer = scorer; + _evaluation = evaluation; + } + + _i2.ScorerInclude? _scorer; + + _i3.EvaluationInclude? _evaluation; + + @override + Map get includes => { + 'scorer': _scorer, + 'evaluation': _evaluation, + }; + + @override + _i1.Table<_i1.UuidValue?> get table => ScorerResult.t; +} + +class ScorerResultIncludeList extends _i1.IncludeList { + ScorerResultIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(ScorerResult.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => ScorerResult.t; +} + +class ScorerResultRepository { + const ScorerResultRepository._(); + + final attachRow = const ScorerResultAttachRowRepository._(); + + /// Returns a list of [ScorerResult]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + ScorerResultInclude? include, + }) async { + return session.db.find( + where: where?.call(ScorerResult.t), + orderBy: orderBy?.call(ScorerResult.t), + orderByList: orderByList?.call(ScorerResult.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [ScorerResult] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + ScorerResultInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(ScorerResult.t), + orderBy: orderBy?.call(ScorerResult.t), + orderByList: orderByList?.call(ScorerResult.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [ScorerResult] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + ScorerResultInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [ScorerResult]s in the list and returns the inserted rows. + /// + /// The returned [ScorerResult]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [ScorerResult] and returns the inserted row. + /// + /// The returned [ScorerResult] will have its `id` field set. + Future insertRow( + _i1.Session session, + ScorerResult row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [ScorerResult]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(ScorerResult.t), + transaction: transaction, + ); + } + + /// Updates a single [ScorerResult]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + ScorerResult row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(ScorerResult.t), + transaction: transaction, + ); + } + + /// Updates a single [ScorerResult] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(ScorerResult.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [ScorerResult]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(ScorerResult.t.updateTable), + where: where(ScorerResult.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(ScorerResult.t), + orderByList: orderByList?.call(ScorerResult.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [ScorerResult]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [ScorerResult]. + Future deleteRow( + _i1.Session session, + ScorerResult row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(ScorerResult.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(ScorerResult.t), + limit: limit, + transaction: transaction, + ); + } +} + +class ScorerResultAttachRowRepository { + const ScorerResultAttachRowRepository._(); + + /// Creates a relation between the given [ScorerResult] and [Scorer] + /// by setting the [ScorerResult]'s foreign key `scorerId` to refer to the [Scorer]. + Future scorer( + _i1.Session session, + ScorerResult scorerResult, + _i2.Scorer scorer, { + _i1.Transaction? transaction, + }) async { + if (scorerResult.id == null) { + throw ArgumentError.notNull('scorerResult.id'); + } + if (scorer.id == null) { + throw ArgumentError.notNull('scorer.id'); + } + + var $scorerResult = scorerResult.copyWith(scorerId: scorer.id); + await session.db.updateRow( + $scorerResult, + columns: [ScorerResult.t.scorerId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [ScorerResult] and [Evaluation] + /// by setting the [ScorerResult]'s foreign key `evaluationId` to refer to the [Evaluation]. + Future evaluation( + _i1.Session session, + ScorerResult scorerResult, + _i3.Evaluation evaluation, { + _i1.Transaction? transaction, + }) async { + if (scorerResult.id == null) { + throw ArgumentError.notNull('scorerResult.id'); + } + if (evaluation.id == null) { + throw ArgumentError.notNull('evaluation.id'); + } + + var $scorerResult = scorerResult.copyWith(evaluationId: evaluation.id); + await session.db.updateRow( + $scorerResult, + columns: [ScorerResult.t.evaluationId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/status_enum.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/status_enum.dart new file mode 100644 index 0000000..fdeea3a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/status_enum.dart @@ -0,0 +1,39 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +enum Status implements _i1.SerializableModel { + complete, + inProgress, + failed + ; + + static Status fromJson(String name) { + switch (name) { + case 'complete': + return Status.complete; + case 'inProgress': + return Status.inProgress; + case 'failed': + return Status.failed; + default: + throw ArgumentError('Value "$name" cannot be converted to "Status"'); + } + } + + @override + String toJson() => name; + + @override + String toString() => name; +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/tag.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/tag.dart new file mode 100644 index 0000000..02b3687 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/tag.dart @@ -0,0 +1,590 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'sample_tag_xref.dart' as _i2; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i3; + +/// Category for a sample. +abstract class Tag + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Tag._({ + this.id, + required this.name, + this.samplesXref, + }); + + factory Tag({ + _i1.UuidValue? id, + required String name, + List<_i2.SampleTagXref>? samplesXref, + }) = _TagImpl; + + factory Tag.fromJson(Map jsonSerialization) { + return Tag( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + name: jsonSerialization['name'] as String, + samplesXref: jsonSerialization['samplesXref'] == null + ? null + : _i3.Protocol().deserialize>( + jsonSerialization['samplesXref'], + ), + ); + } + + static final t = TagTable(); + + static const db = TagRepository._(); + + @override + _i1.UuidValue? id; + + /// Unique identifier for the tag. + String name; + + /// Samples associated with this tag. + /// Technically, this relationship only reaches the cross-reference table, + /// not the samples themselves. + List<_i2.SampleTagXref>? samplesXref; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Tag] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Tag copyWith({ + _i1.UuidValue? id, + String? name, + List<_i2.SampleTagXref>? samplesXref, + }); + @override + Map toJson() { + return { + '__className__': 'Tag', + if (id != null) 'id': id?.toJson(), + 'name': name, + if (samplesXref != null) + 'samplesXref': samplesXref?.toJson(valueToJson: (v) => v.toJson()), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Tag', + if (id != null) 'id': id?.toJson(), + 'name': name, + if (samplesXref != null) + 'samplesXref': samplesXref?.toJson( + valueToJson: (v) => v.toJsonForProtocol(), + ), + }; + } + + static TagInclude include({_i2.SampleTagXrefIncludeList? samplesXref}) { + return TagInclude._(samplesXref: samplesXref); + } + + static TagIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + TagInclude? include, + }) { + return TagIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Tag.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Tag.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TagImpl extends Tag { + _TagImpl({ + _i1.UuidValue? id, + required String name, + List<_i2.SampleTagXref>? samplesXref, + }) : super._( + id: id, + name: name, + samplesXref: samplesXref, + ); + + /// Returns a shallow copy of this [Tag] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Tag copyWith({ + Object? id = _Undefined, + String? name, + Object? samplesXref = _Undefined, + }) { + return Tag( + id: id is _i1.UuidValue? ? id : this.id, + name: name ?? this.name, + samplesXref: samplesXref is List<_i2.SampleTagXref>? + ? samplesXref + : this.samplesXref?.map((e0) => e0.copyWith()).toList(), + ); + } +} + +class TagUpdateTable extends _i1.UpdateTable { + TagUpdateTable(super.table); + + _i1.ColumnValue name(String value) => _i1.ColumnValue( + table.name, + value, + ); +} + +class TagTable extends _i1.Table<_i1.UuidValue?> { + TagTable({super.tableRelation}) : super(tableName: 'evals_tags') { + updateTable = TagUpdateTable(this); + name = _i1.ColumnString( + 'name', + this, + ); + } + + late final TagUpdateTable updateTable; + + /// Unique identifier for the tag. + late final _i1.ColumnString name; + + /// Samples associated with this tag. + /// Technically, this relationship only reaches the cross-reference table, + /// not the samples themselves. + _i2.SampleTagXrefTable? ___samplesXref; + + /// Samples associated with this tag. + /// Technically, this relationship only reaches the cross-reference table, + /// not the samples themselves. + _i1.ManyRelation<_i2.SampleTagXrefTable>? _samplesXref; + + _i2.SampleTagXrefTable get __samplesXref { + if (___samplesXref != null) return ___samplesXref!; + ___samplesXref = _i1.createRelationTable( + relationFieldName: '__samplesXref', + field: Tag.t.id, + foreignField: _i2.SampleTagXref.t.tagId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.SampleTagXrefTable(tableRelation: foreignTableRelation), + ); + return ___samplesXref!; + } + + _i1.ManyRelation<_i2.SampleTagXrefTable> get samplesXref { + if (_samplesXref != null) return _samplesXref!; + var relationTable = _i1.createRelationTable( + relationFieldName: 'samplesXref', + field: Tag.t.id, + foreignField: _i2.SampleTagXref.t.tagId, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.SampleTagXrefTable(tableRelation: foreignTableRelation), + ); + _samplesXref = _i1.ManyRelation<_i2.SampleTagXrefTable>( + tableWithRelations: relationTable, + table: _i2.SampleTagXrefTable( + tableRelation: relationTable.tableRelation!.lastRelation, + ), + ); + return _samplesXref!; + } + + @override + List<_i1.Column> get columns => [ + id, + name, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'samplesXref') { + return __samplesXref; + } + return null; + } +} + +class TagInclude extends _i1.IncludeObject { + TagInclude._({_i2.SampleTagXrefIncludeList? samplesXref}) { + _samplesXref = samplesXref; + } + + _i2.SampleTagXrefIncludeList? _samplesXref; + + @override + Map get includes => {'samplesXref': _samplesXref}; + + @override + _i1.Table<_i1.UuidValue?> get table => Tag.t; +} + +class TagIncludeList extends _i1.IncludeList { + TagIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Tag.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Tag.t; +} + +class TagRepository { + const TagRepository._(); + + final attach = const TagAttachRepository._(); + + final attachRow = const TagAttachRowRepository._(); + + /// Returns a list of [Tag]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TagInclude? include, + }) async { + return session.db.find( + where: where?.call(Tag.t), + orderBy: orderBy?.call(Tag.t), + orderByList: orderByList?.call(Tag.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [Tag] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TagInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(Tag.t), + orderBy: orderBy?.call(Tag.t), + orderByList: orderByList?.call(Tag.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [Tag] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + TagInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [Tag]s in the list and returns the inserted rows. + /// + /// The returned [Tag]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Tag] and returns the inserted row. + /// + /// The returned [Tag] will have its `id` field set. + Future insertRow( + _i1.Session session, + Tag row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Tag]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Tag.t), + transaction: transaction, + ); + } + + /// Updates a single [Tag]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Tag row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Tag.t), + transaction: transaction, + ); + } + + /// Updates a single [Tag] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Tag.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Tag]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Tag.t.updateTable), + where: where(Tag.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Tag.t), + orderByList: orderByList?.call(Tag.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Tag]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Tag]. + Future deleteRow( + _i1.Session session, + Tag row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Tag.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Tag.t), + limit: limit, + transaction: transaction, + ); + } +} + +class TagAttachRepository { + const TagAttachRepository._(); + + /// Creates a relation between this [Tag] and the given [SampleTagXref]s + /// by setting each [SampleTagXref]'s foreign key `tagId` to refer to this [Tag]. + Future samplesXref( + _i1.Session session, + Tag tag, + List<_i2.SampleTagXref> sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.any((e) => e.id == null)) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (tag.id == null) { + throw ArgumentError.notNull('tag.id'); + } + + var $sampleTagXref = sampleTagXref + .map((e) => e.copyWith(tagId: tag.id)) + .toList(); + await session.db.update<_i2.SampleTagXref>( + $sampleTagXref, + columns: [_i2.SampleTagXref.t.tagId], + transaction: transaction, + ); + } +} + +class TagAttachRowRepository { + const TagAttachRowRepository._(); + + /// Creates a relation between this [Tag] and the given [SampleTagXref] + /// by setting the [SampleTagXref]'s foreign key `tagId` to refer to this [Tag]. + Future samplesXref( + _i1.Session session, + Tag tag, + _i2.SampleTagXref sampleTagXref, { + _i1.Transaction? transaction, + }) async { + if (sampleTagXref.id == null) { + throw ArgumentError.notNull('sampleTagXref.id'); + } + if (tag.id == null) { + throw ArgumentError.notNull('tag.id'); + } + + var $sampleTagXref = sampleTagXref.copyWith(tagId: tag.id); + await session.db.updateRow<_i2.SampleTagXref>( + $sampleTagXref, + columns: [_i2.SampleTagXref.t.tagId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/task.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/task.dart new file mode 100644 index 0000000..faed826 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/task.dart @@ -0,0 +1,856 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'model.dart' as _i2; +import 'dataset.dart' as _i3; +import 'run.dart' as _i4; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i5; + +/// Results from evaluating one model against one dataset. +abstract class Task + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + Task._({ + this.id, + required this.inspectId, + required this.modelId, + this.model, + required this.datasetId, + this.dataset, + required this.runId, + this.run, + DateTime? createdAt, + }) : createdAt = createdAt ?? DateTime.now(), + _evalsRunsTasksEvalsRunsId = null; + + factory Task({ + _i1.UuidValue? id, + required String inspectId, + required _i1.UuidValue modelId, + _i2.Model? model, + required _i1.UuidValue datasetId, + _i3.Dataset? dataset, + required _i1.UuidValue runId, + _i4.Run? run, + DateTime? createdAt, + }) = _TaskImpl; + + factory Task.fromJson(Map jsonSerialization) { + return TaskImplicit._( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + inspectId: jsonSerialization['inspectId'] as String, + modelId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['modelId'], + ), + model: jsonSerialization['model'] == null + ? null + : _i5.Protocol().deserialize<_i2.Model>(jsonSerialization['model']), + datasetId: _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['datasetId'], + ), + dataset: jsonSerialization['dataset'] == null + ? null + : _i5.Protocol().deserialize<_i3.Dataset>( + jsonSerialization['dataset'], + ), + runId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['runId']), + run: jsonSerialization['run'] == null + ? null + : _i5.Protocol().deserialize<_i4.Run>(jsonSerialization['run']), + createdAt: jsonSerialization['createdAt'] == null + ? null + : _i1.DateTimeJsonExtension.fromJson(jsonSerialization['createdAt']), + $_evalsRunsTasksEvalsRunsId: + jsonSerialization['_evalsRunsTasksEvalsRunsId'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson( + jsonSerialization['_evalsRunsTasksEvalsRunsId'], + ), + ); + } + + static final t = TaskTable(); + + static const db = TaskRepository._(); + + @override + _i1.UuidValue? id; + + /// InspectAI-generated Id. + String inspectId; + + _i1.UuidValue modelId; + + /// Model identifier (e.g., "google/gemini-2.5-pro"). + _i2.Model? model; + + _i1.UuidValue datasetId; + + /// Dataset identifier (e.g., "flutter_qa_dataset"). + _i3.Dataset? dataset; + + _i1.UuidValue runId; + + /// Run this task belongs to. + _i4.Run? run; + + /// When this task was evaluated. + DateTime createdAt; + + final _i1.UuidValue? _evalsRunsTasksEvalsRunsId; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [Task] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + Task copyWith({ + _i1.UuidValue? id, + String? inspectId, + _i1.UuidValue? modelId, + _i2.Model? model, + _i1.UuidValue? datasetId, + _i3.Dataset? dataset, + _i1.UuidValue? runId, + _i4.Run? run, + DateTime? createdAt, + }); + @override + Map toJson() { + return { + '__className__': 'Task', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJson(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJson(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJson(), + 'createdAt': createdAt.toJson(), + if (_evalsRunsTasksEvalsRunsId != null) + '_evalsRunsTasksEvalsRunsId': _evalsRunsTasksEvalsRunsId.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'Task', + if (id != null) 'id': id?.toJson(), + 'inspectId': inspectId, + 'modelId': modelId.toJson(), + if (model != null) 'model': model?.toJsonForProtocol(), + 'datasetId': datasetId.toJson(), + if (dataset != null) 'dataset': dataset?.toJsonForProtocol(), + 'runId': runId.toJson(), + if (run != null) 'run': run?.toJsonForProtocol(), + 'createdAt': createdAt.toJson(), + }; + } + + static TaskInclude include({ + _i2.ModelInclude? model, + _i3.DatasetInclude? dataset, + _i4.RunInclude? run, + }) { + return TaskInclude._( + model: model, + dataset: dataset, + run: run, + ); + } + + static TaskIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + TaskInclude? include, + }) { + return TaskIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(Task.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(Task.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TaskImpl extends Task { + _TaskImpl({ + _i1.UuidValue? id, + required String inspectId, + required _i1.UuidValue modelId, + _i2.Model? model, + required _i1.UuidValue datasetId, + _i3.Dataset? dataset, + required _i1.UuidValue runId, + _i4.Run? run, + DateTime? createdAt, + }) : super._( + id: id, + inspectId: inspectId, + modelId: modelId, + model: model, + datasetId: datasetId, + dataset: dataset, + runId: runId, + run: run, + createdAt: createdAt, + ); + + /// Returns a shallow copy of this [Task] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + Task copyWith({ + Object? id = _Undefined, + String? inspectId, + _i1.UuidValue? modelId, + Object? model = _Undefined, + _i1.UuidValue? datasetId, + Object? dataset = _Undefined, + _i1.UuidValue? runId, + Object? run = _Undefined, + DateTime? createdAt, + }) { + return TaskImplicit._( + id: id is _i1.UuidValue? ? id : this.id, + inspectId: inspectId ?? this.inspectId, + modelId: modelId ?? this.modelId, + model: model is _i2.Model? ? model : this.model?.copyWith(), + datasetId: datasetId ?? this.datasetId, + dataset: dataset is _i3.Dataset? ? dataset : this.dataset?.copyWith(), + runId: runId ?? this.runId, + run: run is _i4.Run? ? run : this.run?.copyWith(), + createdAt: createdAt ?? this.createdAt, + $_evalsRunsTasksEvalsRunsId: this._evalsRunsTasksEvalsRunsId, + ); + } +} + +class TaskImplicit extends _TaskImpl { + TaskImplicit._({ + _i1.UuidValue? id, + required String inspectId, + required _i1.UuidValue modelId, + _i2.Model? model, + required _i1.UuidValue datasetId, + _i3.Dataset? dataset, + required _i1.UuidValue runId, + _i4.Run? run, + DateTime? createdAt, + _i1.UuidValue? $_evalsRunsTasksEvalsRunsId, + }) : _evalsRunsTasksEvalsRunsId = $_evalsRunsTasksEvalsRunsId, + super( + id: id, + inspectId: inspectId, + modelId: modelId, + model: model, + datasetId: datasetId, + dataset: dataset, + runId: runId, + run: run, + createdAt: createdAt, + ); + + factory TaskImplicit( + Task task, { + _i1.UuidValue? $_evalsRunsTasksEvalsRunsId, + }) { + return TaskImplicit._( + id: task.id, + inspectId: task.inspectId, + modelId: task.modelId, + model: task.model, + datasetId: task.datasetId, + dataset: task.dataset, + runId: task.runId, + run: task.run, + createdAt: task.createdAt, + $_evalsRunsTasksEvalsRunsId: $_evalsRunsTasksEvalsRunsId, + ); + } + + @override + final _i1.UuidValue? _evalsRunsTasksEvalsRunsId; +} + +class TaskUpdateTable extends _i1.UpdateTable { + TaskUpdateTable(super.table); + + _i1.ColumnValue inspectId(String value) => _i1.ColumnValue( + table.inspectId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> modelId(_i1.UuidValue value) => + _i1.ColumnValue( + table.modelId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> datasetId( + _i1.UuidValue value, + ) => _i1.ColumnValue( + table.datasetId, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> runId(_i1.UuidValue value) => + _i1.ColumnValue( + table.runId, + value, + ); + + _i1.ColumnValue createdAt(DateTime value) => + _i1.ColumnValue( + table.createdAt, + value, + ); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> $_evalsRunsTasksEvalsRunsId( + _i1.UuidValue? value, + ) => _i1.ColumnValue( + table.$_evalsRunsTasksEvalsRunsId, + value, + ); +} + +class TaskTable extends _i1.Table<_i1.UuidValue?> { + TaskTable({super.tableRelation}) : super(tableName: 'evals_tasks') { + updateTable = TaskUpdateTable(this); + inspectId = _i1.ColumnString( + 'inspectId', + this, + ); + modelId = _i1.ColumnUuid( + 'modelId', + this, + ); + datasetId = _i1.ColumnUuid( + 'datasetId', + this, + ); + runId = _i1.ColumnUuid( + 'runId', + this, + ); + createdAt = _i1.ColumnDateTime( + 'createdAt', + this, + hasDefault: true, + ); + $_evalsRunsTasksEvalsRunsId = _i1.ColumnUuid( + '_evalsRunsTasksEvalsRunsId', + this, + ); + } + + late final TaskUpdateTable updateTable; + + /// InspectAI-generated Id. + late final _i1.ColumnString inspectId; + + late final _i1.ColumnUuid modelId; + + /// Model identifier (e.g., "google/gemini-2.5-pro"). + _i2.ModelTable? _model; + + late final _i1.ColumnUuid datasetId; + + /// Dataset identifier (e.g., "flutter_qa_dataset"). + _i3.DatasetTable? _dataset; + + late final _i1.ColumnUuid runId; + + /// Run this task belongs to. + _i4.RunTable? _run; + + /// When this task was evaluated. + late final _i1.ColumnDateTime createdAt; + + late final _i1.ColumnUuid $_evalsRunsTasksEvalsRunsId; + + _i2.ModelTable get model { + if (_model != null) return _model!; + _model = _i1.createRelationTable( + relationFieldName: 'model', + field: Task.t.modelId, + foreignField: _i2.Model.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.ModelTable(tableRelation: foreignTableRelation), + ); + return _model!; + } + + _i3.DatasetTable get dataset { + if (_dataset != null) return _dataset!; + _dataset = _i1.createRelationTable( + relationFieldName: 'dataset', + field: Task.t.datasetId, + foreignField: _i3.Dataset.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i3.DatasetTable(tableRelation: foreignTableRelation), + ); + return _dataset!; + } + + _i4.RunTable get run { + if (_run != null) return _run!; + _run = _i1.createRelationTable( + relationFieldName: 'run', + field: Task.t.runId, + foreignField: _i4.Run.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i4.RunTable(tableRelation: foreignTableRelation), + ); + return _run!; + } + + @override + List<_i1.Column> get columns => [ + id, + inspectId, + modelId, + datasetId, + runId, + createdAt, + $_evalsRunsTasksEvalsRunsId, + ]; + + @override + List<_i1.Column> get managedColumns => [ + id, + inspectId, + modelId, + datasetId, + runId, + createdAt, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'model') { + return model; + } + if (relationField == 'dataset') { + return dataset; + } + if (relationField == 'run') { + return run; + } + return null; + } +} + +class TaskInclude extends _i1.IncludeObject { + TaskInclude._({ + _i2.ModelInclude? model, + _i3.DatasetInclude? dataset, + _i4.RunInclude? run, + }) { + _model = model; + _dataset = dataset; + _run = run; + } + + _i2.ModelInclude? _model; + + _i3.DatasetInclude? _dataset; + + _i4.RunInclude? _run; + + @override + Map get includes => { + 'model': _model, + 'dataset': _dataset, + 'run': _run, + }; + + @override + _i1.Table<_i1.UuidValue?> get table => Task.t; +} + +class TaskIncludeList extends _i1.IncludeList { + TaskIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(Task.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => Task.t; +} + +class TaskRepository { + const TaskRepository._(); + + final attachRow = const TaskAttachRowRepository._(); + + /// Returns a list of [Task]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TaskInclude? include, + }) async { + return session.db.find( + where: where?.call(Task.t), + orderBy: orderBy?.call(Task.t), + orderByList: orderByList?.call(Task.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [Task] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TaskInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(Task.t), + orderBy: orderBy?.call(Task.t), + orderByList: orderByList?.call(Task.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [Task] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + TaskInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [Task]s in the list and returns the inserted rows. + /// + /// The returned [Task]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [Task] and returns the inserted row. + /// + /// The returned [Task] will have its `id` field set. + Future insertRow( + _i1.Session session, + Task row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [Task]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(Task.t), + transaction: transaction, + ); + } + + /// Updates a single [Task]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + Task row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(Task.t), + transaction: transaction, + ); + } + + /// Updates a single [Task] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(Task.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [Task]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(Task.t.updateTable), + where: where(Task.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(Task.t), + orderByList: orderByList?.call(Task.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [Task]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [Task]. + Future deleteRow( + _i1.Session session, + Task row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(Task.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(Task.t), + limit: limit, + transaction: transaction, + ); + } +} + +class TaskAttachRowRepository { + const TaskAttachRowRepository._(); + + /// Creates a relation between the given [Task] and [Model] + /// by setting the [Task]'s foreign key `modelId` to refer to the [Model]. + Future model( + _i1.Session session, + Task task, + _i2.Model model, { + _i1.Transaction? transaction, + }) async { + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + if (model.id == null) { + throw ArgumentError.notNull('model.id'); + } + + var $task = task.copyWith(modelId: model.id); + await session.db.updateRow( + $task, + columns: [Task.t.modelId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Task] and [Dataset] + /// by setting the [Task]'s foreign key `datasetId` to refer to the [Dataset]. + Future dataset( + _i1.Session session, + Task task, + _i3.Dataset dataset, { + _i1.Transaction? transaction, + }) async { + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + if (dataset.id == null) { + throw ArgumentError.notNull('dataset.id'); + } + + var $task = task.copyWith(datasetId: dataset.id); + await session.db.updateRow( + $task, + columns: [Task.t.datasetId], + transaction: transaction, + ); + } + + /// Creates a relation between the given [Task] and [Run] + /// by setting the [Task]'s foreign key `runId` to refer to the [Run]. + Future run( + _i1.Session session, + Task task, + _i4.Run run, { + _i1.Transaction? transaction, + }) async { + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + if (run.id == null) { + throw ArgumentError.notNull('run.id'); + } + + var $task = task.copyWith(runId: run.id); + await session.db.updateRow( + $task, + columns: [Task.t.runId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/task_summary.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/task_summary.dart new file mode 100644 index 0000000..055ed49 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/task_summary.dart @@ -0,0 +1,861 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: unnecessary_null_comparison + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'task.dart' as _i2; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i3; + +abstract class TaskSummary + implements _i1.TableRow<_i1.UuidValue?>, _i1.ProtocolSerialization { + TaskSummary._({ + this.id, + required this.taskId, + this.task, + required this.totalSamples, + required this.passedSamples, + required this.accuracy, + this.taskName, + required this.inputTokens, + required this.outputTokens, + required this.totalTokens, + required this.reasoningTokens, + this.variant, + required this.executionTimeSeconds, + required this.samplesWithRetries, + required this.samplesNeverSucceeded, + required this.totalRetries, + }); + + factory TaskSummary({ + _i1.UuidValue? id, + required _i1.UuidValue taskId, + _i2.Task? task, + required int totalSamples, + required int passedSamples, + required double accuracy, + String? taskName, + required int inputTokens, + required int outputTokens, + required int totalTokens, + required int reasoningTokens, + String? variant, + required int executionTimeSeconds, + required int samplesWithRetries, + required int samplesNeverSucceeded, + required int totalRetries, + }) = _TaskSummaryImpl; + + factory TaskSummary.fromJson(Map jsonSerialization) { + return TaskSummary( + id: jsonSerialization['id'] == null + ? null + : _i1.UuidValueJsonExtension.fromJson(jsonSerialization['id']), + taskId: _i1.UuidValueJsonExtension.fromJson(jsonSerialization['taskId']), + task: jsonSerialization['task'] == null + ? null + : _i3.Protocol().deserialize<_i2.Task>(jsonSerialization['task']), + totalSamples: jsonSerialization['totalSamples'] as int, + passedSamples: jsonSerialization['passedSamples'] as int, + accuracy: (jsonSerialization['accuracy'] as num).toDouble(), + taskName: jsonSerialization['taskName'] as String?, + inputTokens: jsonSerialization['inputTokens'] as int, + outputTokens: jsonSerialization['outputTokens'] as int, + totalTokens: jsonSerialization['totalTokens'] as int, + reasoningTokens: jsonSerialization['reasoningTokens'] as int, + variant: jsonSerialization['variant'] as String?, + executionTimeSeconds: jsonSerialization['executionTimeSeconds'] as int, + samplesWithRetries: jsonSerialization['samplesWithRetries'] as int, + samplesNeverSucceeded: jsonSerialization['samplesNeverSucceeded'] as int, + totalRetries: jsonSerialization['totalRetries'] as int, + ); + } + + static final t = TaskSummaryTable(); + + static const db = TaskSummaryRepository._(); + + @override + _i1.UuidValue? id; + + _i1.UuidValue taskId; + + /// Task this summary belongs to. + _i2.Task? task; + + /// Total number of samples in this task. + int totalSamples; + + /// Number of samples that passed. + int passedSamples; + + /// Accuracy as a value from 0.0 to 1.0. + double accuracy; + + /// The Inspect AI task function name (e.g., "qa_task"). + String? taskName; + + /// Input tokens used. + int inputTokens; + + /// Output tokens generated. + int outputTokens; + + /// Total tokens used. + int totalTokens; + + /// Reasoning tokens used (for models that support it). + int reasoningTokens; + + /// Variant configuration used (e.g., "baseline", "dart_mcp"). + String? variant; + + /// Total execution time in seconds. + int executionTimeSeconds; + + /// Number of samples that needed retries. + int samplesWithRetries; + + /// Number of samples that failed all retries (excluded from accuracy). + int samplesNeverSucceeded; + + /// Total number of retries across all samples. + int totalRetries; + + @override + _i1.Table<_i1.UuidValue?> get table => t; + + /// Returns a shallow copy of this [TaskSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + TaskSummary copyWith({ + _i1.UuidValue? id, + _i1.UuidValue? taskId, + _i2.Task? task, + int? totalSamples, + int? passedSamples, + double? accuracy, + String? taskName, + int? inputTokens, + int? outputTokens, + int? totalTokens, + int? reasoningTokens, + String? variant, + int? executionTimeSeconds, + int? samplesWithRetries, + int? samplesNeverSucceeded, + int? totalRetries, + }); + @override + Map toJson() { + return { + '__className__': 'TaskSummary', + if (id != null) 'id': id?.toJson(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJson(), + 'totalSamples': totalSamples, + 'passedSamples': passedSamples, + 'accuracy': accuracy, + if (taskName != null) 'taskName': taskName, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'totalTokens': totalTokens, + 'reasoningTokens': reasoningTokens, + if (variant != null) 'variant': variant, + 'executionTimeSeconds': executionTimeSeconds, + 'samplesWithRetries': samplesWithRetries, + 'samplesNeverSucceeded': samplesNeverSucceeded, + 'totalRetries': totalRetries, + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'TaskSummary', + if (id != null) 'id': id?.toJson(), + 'taskId': taskId.toJson(), + if (task != null) 'task': task?.toJsonForProtocol(), + 'totalSamples': totalSamples, + 'passedSamples': passedSamples, + 'accuracy': accuracy, + if (taskName != null) 'taskName': taskName, + 'inputTokens': inputTokens, + 'outputTokens': outputTokens, + 'totalTokens': totalTokens, + 'reasoningTokens': reasoningTokens, + if (variant != null) 'variant': variant, + 'executionTimeSeconds': executionTimeSeconds, + 'samplesWithRetries': samplesWithRetries, + 'samplesNeverSucceeded': samplesNeverSucceeded, + 'totalRetries': totalRetries, + }; + } + + static TaskSummaryInclude include({_i2.TaskInclude? task}) { + return TaskSummaryInclude._(task: task); + } + + static TaskSummaryIncludeList includeList({ + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + TaskSummaryInclude? include, + }) { + return TaskSummaryIncludeList._( + where: where, + limit: limit, + offset: offset, + orderBy: orderBy?.call(TaskSummary.t), + orderDescending: orderDescending, + orderByList: orderByList?.call(TaskSummary.t), + include: include, + ); + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _Undefined {} + +class _TaskSummaryImpl extends TaskSummary { + _TaskSummaryImpl({ + _i1.UuidValue? id, + required _i1.UuidValue taskId, + _i2.Task? task, + required int totalSamples, + required int passedSamples, + required double accuracy, + String? taskName, + required int inputTokens, + required int outputTokens, + required int totalTokens, + required int reasoningTokens, + String? variant, + required int executionTimeSeconds, + required int samplesWithRetries, + required int samplesNeverSucceeded, + required int totalRetries, + }) : super._( + id: id, + taskId: taskId, + task: task, + totalSamples: totalSamples, + passedSamples: passedSamples, + accuracy: accuracy, + taskName: taskName, + inputTokens: inputTokens, + outputTokens: outputTokens, + totalTokens: totalTokens, + reasoningTokens: reasoningTokens, + variant: variant, + executionTimeSeconds: executionTimeSeconds, + samplesWithRetries: samplesWithRetries, + samplesNeverSucceeded: samplesNeverSucceeded, + totalRetries: totalRetries, + ); + + /// Returns a shallow copy of this [TaskSummary] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + TaskSummary copyWith({ + Object? id = _Undefined, + _i1.UuidValue? taskId, + Object? task = _Undefined, + int? totalSamples, + int? passedSamples, + double? accuracy, + Object? taskName = _Undefined, + int? inputTokens, + int? outputTokens, + int? totalTokens, + int? reasoningTokens, + Object? variant = _Undefined, + int? executionTimeSeconds, + int? samplesWithRetries, + int? samplesNeverSucceeded, + int? totalRetries, + }) { + return TaskSummary( + id: id is _i1.UuidValue? ? id : this.id, + taskId: taskId ?? this.taskId, + task: task is _i2.Task? ? task : this.task?.copyWith(), + totalSamples: totalSamples ?? this.totalSamples, + passedSamples: passedSamples ?? this.passedSamples, + accuracy: accuracy ?? this.accuracy, + taskName: taskName is String? ? taskName : this.taskName, + inputTokens: inputTokens ?? this.inputTokens, + outputTokens: outputTokens ?? this.outputTokens, + totalTokens: totalTokens ?? this.totalTokens, + reasoningTokens: reasoningTokens ?? this.reasoningTokens, + variant: variant is String? ? variant : this.variant, + executionTimeSeconds: executionTimeSeconds ?? this.executionTimeSeconds, + samplesWithRetries: samplesWithRetries ?? this.samplesWithRetries, + samplesNeverSucceeded: + samplesNeverSucceeded ?? this.samplesNeverSucceeded, + totalRetries: totalRetries ?? this.totalRetries, + ); + } +} + +class TaskSummaryUpdateTable extends _i1.UpdateTable { + TaskSummaryUpdateTable(super.table); + + _i1.ColumnValue<_i1.UuidValue, _i1.UuidValue> taskId(_i1.UuidValue value) => + _i1.ColumnValue( + table.taskId, + value, + ); + + _i1.ColumnValue totalSamples(int value) => _i1.ColumnValue( + table.totalSamples, + value, + ); + + _i1.ColumnValue passedSamples(int value) => _i1.ColumnValue( + table.passedSamples, + value, + ); + + _i1.ColumnValue accuracy(double value) => _i1.ColumnValue( + table.accuracy, + value, + ); + + _i1.ColumnValue taskName(String? value) => _i1.ColumnValue( + table.taskName, + value, + ); + + _i1.ColumnValue inputTokens(int value) => _i1.ColumnValue( + table.inputTokens, + value, + ); + + _i1.ColumnValue outputTokens(int value) => _i1.ColumnValue( + table.outputTokens, + value, + ); + + _i1.ColumnValue totalTokens(int value) => _i1.ColumnValue( + table.totalTokens, + value, + ); + + _i1.ColumnValue reasoningTokens(int value) => _i1.ColumnValue( + table.reasoningTokens, + value, + ); + + _i1.ColumnValue variant(String? value) => _i1.ColumnValue( + table.variant, + value, + ); + + _i1.ColumnValue executionTimeSeconds(int value) => _i1.ColumnValue( + table.executionTimeSeconds, + value, + ); + + _i1.ColumnValue samplesWithRetries(int value) => _i1.ColumnValue( + table.samplesWithRetries, + value, + ); + + _i1.ColumnValue samplesNeverSucceeded(int value) => _i1.ColumnValue( + table.samplesNeverSucceeded, + value, + ); + + _i1.ColumnValue totalRetries(int value) => _i1.ColumnValue( + table.totalRetries, + value, + ); +} + +class TaskSummaryTable extends _i1.Table<_i1.UuidValue?> { + TaskSummaryTable({super.tableRelation}) + : super(tableName: 'evals_task_summaries') { + updateTable = TaskSummaryUpdateTable(this); + taskId = _i1.ColumnUuid( + 'taskId', + this, + ); + totalSamples = _i1.ColumnInt( + 'totalSamples', + this, + ); + passedSamples = _i1.ColumnInt( + 'passedSamples', + this, + ); + accuracy = _i1.ColumnDouble( + 'accuracy', + this, + ); + taskName = _i1.ColumnString( + 'taskName', + this, + ); + inputTokens = _i1.ColumnInt( + 'inputTokens', + this, + ); + outputTokens = _i1.ColumnInt( + 'outputTokens', + this, + ); + totalTokens = _i1.ColumnInt( + 'totalTokens', + this, + ); + reasoningTokens = _i1.ColumnInt( + 'reasoningTokens', + this, + ); + variant = _i1.ColumnString( + 'variant', + this, + ); + executionTimeSeconds = _i1.ColumnInt( + 'executionTimeSeconds', + this, + ); + samplesWithRetries = _i1.ColumnInt( + 'samplesWithRetries', + this, + ); + samplesNeverSucceeded = _i1.ColumnInt( + 'samplesNeverSucceeded', + this, + ); + totalRetries = _i1.ColumnInt( + 'totalRetries', + this, + ); + } + + late final TaskSummaryUpdateTable updateTable; + + late final _i1.ColumnUuid taskId; + + /// Task this summary belongs to. + _i2.TaskTable? _task; + + /// Total number of samples in this task. + late final _i1.ColumnInt totalSamples; + + /// Number of samples that passed. + late final _i1.ColumnInt passedSamples; + + /// Accuracy as a value from 0.0 to 1.0. + late final _i1.ColumnDouble accuracy; + + /// The Inspect AI task function name (e.g., "qa_task"). + late final _i1.ColumnString taskName; + + /// Input tokens used. + late final _i1.ColumnInt inputTokens; + + /// Output tokens generated. + late final _i1.ColumnInt outputTokens; + + /// Total tokens used. + late final _i1.ColumnInt totalTokens; + + /// Reasoning tokens used (for models that support it). + late final _i1.ColumnInt reasoningTokens; + + /// Variant configuration used (e.g., "baseline", "dart_mcp"). + late final _i1.ColumnString variant; + + /// Total execution time in seconds. + late final _i1.ColumnInt executionTimeSeconds; + + /// Number of samples that needed retries. + late final _i1.ColumnInt samplesWithRetries; + + /// Number of samples that failed all retries (excluded from accuracy). + late final _i1.ColumnInt samplesNeverSucceeded; + + /// Total number of retries across all samples. + late final _i1.ColumnInt totalRetries; + + _i2.TaskTable get task { + if (_task != null) return _task!; + _task = _i1.createRelationTable( + relationFieldName: 'task', + field: TaskSummary.t.taskId, + foreignField: _i2.Task.t.id, + tableRelation: tableRelation, + createTable: (foreignTableRelation) => + _i2.TaskTable(tableRelation: foreignTableRelation), + ); + return _task!; + } + + @override + List<_i1.Column> get columns => [ + id, + taskId, + totalSamples, + passedSamples, + accuracy, + taskName, + inputTokens, + outputTokens, + totalTokens, + reasoningTokens, + variant, + executionTimeSeconds, + samplesWithRetries, + samplesNeverSucceeded, + totalRetries, + ]; + + @override + _i1.Table? getRelationTable(String relationField) { + if (relationField == 'task') { + return task; + } + return null; + } +} + +class TaskSummaryInclude extends _i1.IncludeObject { + TaskSummaryInclude._({_i2.TaskInclude? task}) { + _task = task; + } + + _i2.TaskInclude? _task; + + @override + Map get includes => {'task': _task}; + + @override + _i1.Table<_i1.UuidValue?> get table => TaskSummary.t; +} + +class TaskSummaryIncludeList extends _i1.IncludeList { + TaskSummaryIncludeList._({ + _i1.WhereExpressionBuilder? where, + super.limit, + super.offset, + super.orderBy, + super.orderDescending, + super.orderByList, + super.include, + }) { + super.where = where?.call(TaskSummary.t); + } + + @override + Map get includes => include?.includes ?? {}; + + @override + _i1.Table<_i1.UuidValue?> get table => TaskSummary.t; +} + +class TaskSummaryRepository { + const TaskSummaryRepository._(); + + final attachRow = const TaskSummaryAttachRowRepository._(); + + /// Returns a list of [TaskSummary]s matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order of the items use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// The maximum number of items can be set by [limit]. If no limit is set, + /// all items matching the query will be returned. + /// + /// [offset] defines how many items to skip, after which [limit] (or all) + /// items are read from the database. + /// + /// ```dart + /// var persons = await Persons.db.find( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.firstName, + /// limit: 100, + /// ); + /// ``` + Future> find( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TaskSummaryInclude? include, + }) async { + return session.db.find( + where: where?.call(TaskSummary.t), + orderBy: orderBy?.call(TaskSummary.t), + orderByList: orderByList?.call(TaskSummary.t), + orderDescending: orderDescending, + limit: limit, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Returns the first matching [TaskSummary] matching the given query parameters. + /// + /// Use [where] to specify which items to include in the return value. + /// If none is specified, all items will be returned. + /// + /// To specify the order use [orderBy] or [orderByList] + /// when sorting by multiple columns. + /// + /// [offset] defines how many items to skip, after which the next one will be picked. + /// + /// ```dart + /// var youngestPerson = await Persons.db.findFirstRow( + /// session, + /// where: (t) => t.lastName.equals('Jones'), + /// orderBy: (t) => t.age, + /// ); + /// ``` + Future findFirstRow( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? offset, + _i1.OrderByBuilder? orderBy, + bool orderDescending = false, + _i1.OrderByListBuilder? orderByList, + _i1.Transaction? transaction, + TaskSummaryInclude? include, + }) async { + return session.db.findFirstRow( + where: where?.call(TaskSummary.t), + orderBy: orderBy?.call(TaskSummary.t), + orderByList: orderByList?.call(TaskSummary.t), + orderDescending: orderDescending, + offset: offset, + transaction: transaction, + include: include, + ); + } + + /// Finds a single [TaskSummary] by its [id] or null if no such row exists. + Future findById( + _i1.Session session, + _i1.UuidValue id, { + _i1.Transaction? transaction, + TaskSummaryInclude? include, + }) async { + return session.db.findById( + id, + transaction: transaction, + include: include, + ); + } + + /// Inserts all [TaskSummary]s in the list and returns the inserted rows. + /// + /// The returned [TaskSummary]s will have their `id` fields set. + /// + /// This is an atomic operation, meaning that if one of the rows fails to + /// insert, none of the rows will be inserted. + Future> insert( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.insert( + rows, + transaction: transaction, + ); + } + + /// Inserts a single [TaskSummary] and returns the inserted row. + /// + /// The returned [TaskSummary] will have its `id` field set. + Future insertRow( + _i1.Session session, + TaskSummary row, { + _i1.Transaction? transaction, + }) async { + return session.db.insertRow( + row, + transaction: transaction, + ); + } + + /// Updates all [TaskSummary]s in the list and returns the updated rows. If + /// [columns] is provided, only those columns will be updated. Defaults to + /// all columns. + /// This is an atomic operation, meaning that if one of the rows fails to + /// update, none of the rows will be updated. + Future> update( + _i1.Session session, + List rows, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.update( + rows, + columns: columns?.call(TaskSummary.t), + transaction: transaction, + ); + } + + /// Updates a single [TaskSummary]. The row needs to have its id set. + /// Optionally, a list of [columns] can be provided to only update those + /// columns. Defaults to all columns. + Future updateRow( + _i1.Session session, + TaskSummary row, { + _i1.ColumnSelections? columns, + _i1.Transaction? transaction, + }) async { + return session.db.updateRow( + row, + columns: columns?.call(TaskSummary.t), + transaction: transaction, + ); + } + + /// Updates a single [TaskSummary] by its [id] with the specified [columnValues]. + /// Returns the updated row or null if no row with the given id exists. + Future updateById( + _i1.Session session, + _i1.UuidValue id, { + required _i1.ColumnValueListBuilder columnValues, + _i1.Transaction? transaction, + }) async { + return session.db.updateById( + id, + columnValues: columnValues(TaskSummary.t.updateTable), + transaction: transaction, + ); + } + + /// Updates all [TaskSummary]s matching the [where] expression with the specified [columnValues]. + /// Returns the list of updated rows. + Future> updateWhere( + _i1.Session session, { + required _i1.ColumnValueListBuilder columnValues, + required _i1.WhereExpressionBuilder where, + int? limit, + int? offset, + _i1.OrderByBuilder? orderBy, + _i1.OrderByListBuilder? orderByList, + bool orderDescending = false, + _i1.Transaction? transaction, + }) async { + return session.db.updateWhere( + columnValues: columnValues(TaskSummary.t.updateTable), + where: where(TaskSummary.t), + limit: limit, + offset: offset, + orderBy: orderBy?.call(TaskSummary.t), + orderByList: orderByList?.call(TaskSummary.t), + orderDescending: orderDescending, + transaction: transaction, + ); + } + + /// Deletes all [TaskSummary]s in the list and returns the deleted rows. + /// This is an atomic operation, meaning that if one of the rows fail to + /// be deleted, none of the rows will be deleted. + Future> delete( + _i1.Session session, + List rows, { + _i1.Transaction? transaction, + }) async { + return session.db.delete( + rows, + transaction: transaction, + ); + } + + /// Deletes a single [TaskSummary]. + Future deleteRow( + _i1.Session session, + TaskSummary row, { + _i1.Transaction? transaction, + }) async { + return session.db.deleteRow( + row, + transaction: transaction, + ); + } + + /// Deletes all rows matching the [where] expression. + Future> deleteWhere( + _i1.Session session, { + required _i1.WhereExpressionBuilder where, + _i1.Transaction? transaction, + }) async { + return session.db.deleteWhere( + where: where(TaskSummary.t), + transaction: transaction, + ); + } + + /// Counts the number of rows matching the [where] expression. If omitted, + /// will return the count of all rows in the table. + Future count( + _i1.Session session, { + _i1.WhereExpressionBuilder? where, + int? limit, + _i1.Transaction? transaction, + }) async { + return session.db.count( + where: where?.call(TaskSummary.t), + limit: limit, + transaction: transaction, + ); + } +} + +class TaskSummaryAttachRowRepository { + const TaskSummaryAttachRowRepository._(); + + /// Creates a relation between the given [TaskSummary] and [Task] + /// by setting the [TaskSummary]'s foreign key `taskId` to refer to the [Task]. + Future task( + _i1.Session session, + TaskSummary taskSummary, + _i2.Task task, { + _i1.Transaction? transaction, + }) async { + if (taskSummary.id == null) { + throw ArgumentError.notNull('taskSummary.id'); + } + if (task.id == null) { + throw ArgumentError.notNull('task.id'); + } + + var $taskSummary = taskSummary.copyWith(taskId: task.id); + await session.db.updateRow( + $taskSummary, + columns: [TaskSummary.t.taskId], + transaction: transaction, + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/tool_call_data.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/tool_call_data.dart new file mode 100644 index 0000000..e45a98e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/tool_call_data.dart @@ -0,0 +1,107 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; +import 'package:eval_explorer_server/src/generated/protocol.dart' as _i2; + +/// Result of a tool call made during evaluation. Not a database table. +abstract class ToolCallData + implements _i1.SerializableModel, _i1.ProtocolSerialization { + ToolCallData._({ + required this.name, + required this.arguments, + }); + + factory ToolCallData({ + required String name, + required Map arguments, + }) = _ToolCallDataImpl; + + factory ToolCallData.fromJson(Map jsonSerialization) { + return ToolCallData( + name: jsonSerialization['name'] as String, + arguments: _i2.Protocol().deserialize>( + jsonSerialization['arguments'], + ), + ); + } + + /// Name of the tool. + String name; + + /// Arguments passed to the tool. + Map arguments; + + /// Returns a shallow copy of this [ToolCallData] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + ToolCallData copyWith({ + String? name, + Map? arguments, + }); + @override + Map toJson() { + return { + '__className__': 'ToolCallData', + 'name': name, + 'arguments': arguments.toJson(), + }; + } + + @override + Map toJsonForProtocol() { + return { + '__className__': 'ToolCallData', + 'name': name, + 'arguments': arguments.toJson(), + }; + } + + @override + String toString() { + return _i1.SerializationManager.encode(this); + } +} + +class _ToolCallDataImpl extends ToolCallData { + _ToolCallDataImpl({ + required String name, + required Map arguments, + }) : super._( + name: name, + arguments: arguments, + ); + + /// Returns a shallow copy of this [ToolCallData] + /// with some or all fields replaced by the given arguments. + @_i1.useResult + @override + ToolCallData copyWith({ + String? name, + Map? arguments, + }) { + return ToolCallData( + name: name ?? this.name, + arguments: + arguments ?? + this.arguments.map( + ( + key0, + value0, + ) => MapEntry( + key0, + value0, + ), + ), + ); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/generated/variant.dart b/packages/eval_explorer/eval_explorer_server/lib/src/generated/variant.dart new file mode 100644 index 0000000..5290ace --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/generated/variant.dart @@ -0,0 +1,36 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod/serverpod.dart' as _i1; + +enum Variant implements _i1.SerializableModel { + mcp, + rules + ; + + static Variant fromJson(String name) { + switch (name) { + case 'mcp': + return Variant.mcp; + case 'rules': + return Variant.rules; + default: + throw ArgumentError('Value "$name" cannot be converted to "Variant"'); + } + } + + @override + String toJson() => name; + + @override + String toString() => name; +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/greetings/greeting.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/greetings/greeting.spy.yaml new file mode 100644 index 0000000..3d08c8b --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/greetings/greeting.spy.yaml @@ -0,0 +1,24 @@ +# Yaml-files in the `models` directory specify which serializable objects +# should be generated. When you add or modify a file, you will need to run +# `serverpod generate` to make the generated classes available in the server and +# client. +# +# Please consult the documentation for more information on what you can add to +# your yaml-files. + +### A greeting message which can be sent to or from the server. +class: Greeting + +# Add the table key, if this class represents a row in the database. +#table: greeting + +# The fields (and columns if connected to the database) of the class. +# For a list of supported types, please see the documentation. +# https://docs.serverpod.dev/concepts/working-with-endpoints +fields: + ### The greeting message. + message: String + ### The author of the greeting message. + author: String + ### The time when the message was created. + timestamp: DateTime diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/dataset.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/dataset.spy.yaml new file mode 100644 index 0000000..2607f4d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/dataset.spy.yaml @@ -0,0 +1,20 @@ +### A dataset is an Inspect AI term that refers to a collection of samples. +### +### In our case, each dataset corresponds to a collection of sample types. +### (i.e. "dart_qa_dataset", "flutter_code_execution") And each sample type +### refers to a specific file in the /datasets directory. +class: Dataset +table: evals_datasets +fields: + id: UuidValue?, defaultPersist=random_v7 + + # Unique identifier for the dataset. + name: String + + # True if the dataset is still active and included in eval runs. + isActive: bool, default=true + +indexes: + datasets_unique_name: + fields: name + unique: true diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/evaluation.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/evaluation.spy.yaml new file mode 100644 index 0000000..3fe8839 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/evaluation.spy.yaml @@ -0,0 +1,86 @@ +### Result of evaluating one sample. +class: Evaluation +table: evals_evaluations +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### The parent run. + run: Run?, relation(onDelete=Cascade) + + ### The parent task. + task: Task?, relation(onDelete=Cascade) + + ### The sample that was evaluated. + sample: Sample?, relation(onDelete=Cascade) + + ### The model that was evaluated. + model: Model?, relation(onDelete=Cascade) + + ### The dataset this sample belongs to (e.g., "flutter_qa_dataset"). + dataset: Dataset?, relation(onDelete=Cascade) + + ### Variant configuration. + variant: List + + ### The actual output generated by the model. + output: String + + ### Tool calls made during evaluation. + toolCalls: List + + ### Number of times this sample was retried. + retryCount: int + + ### Error message if sample failed. + error: String? + + ### True if all retries failed (exclude from accuracy calculations). + neverSucceeded: bool + + ### Total time for this sample in seconds. + durationSeconds: double + + # Scorer Metadata + + ### Did flutter analyze pass? + analyzerPassed: bool? + + ### Number of tests passed. + testsPassed: int? + + ### Total number of tests. + testsTotal: int? + + ### Code structure validation score (0.0-1.0). + structureScore: double? + + ### Categorized failure reason: "analyzer_error", "test_failure", "missing_structure". + failureReason: String? + + # Token Usage + + ### Input tokens for this sample. + inputTokens: int + + ### Output tokens for this sample. + outputTokens: int + + ### Reasoning tokens for this sample. + reasoningTokens: int + + ### When this evaluation was run. + createdAt: DateTime, default=now + +indexes: + evals_evaluation_run_id_idx: + fields: runId + evals_evaluation_task_id_idx: + fields: taskId + evals_evaluation_sample_id_idx: + fields: sampleId + evals_evaluation_model_id_idx: + fields: modelId + evals_evaluation_dataset_id_idx: + fields: datasetId + evals_evaluation_created_at_idx: + fields: createdAt \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/model.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/model.spy.yaml new file mode 100644 index 0000000..9c60c96 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/model.spy.yaml @@ -0,0 +1,13 @@ +### An LLM being evaluated. +class: Model +table: evals_models +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Unique identifier for the model. + name: String + +indexes: + evals_models_unique_name: + fields: name + unique: true \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/run.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/run.spy.yaml new file mode 100644 index 0000000..6bb8b9f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/run.spy.yaml @@ -0,0 +1,40 @@ +### A collection of tasks executed together. +class: Run +table: evals_runs +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### InspectAI-generated Id. + inspectId: String + + ### Run status (e.g., "complete", "inProgress", "failed"). + status: Status + + ### The variant configurations used in this run. + variants: List + + ### Version of the MCP server used during evaluation. + mcpServerVersion: String + + ### Total script runtime in seconds. + batchRuntimeSeconds: int + + ### List of models evaluated in this run. + models: List?, relation + + ### List of datasets evaluated in this run. + datasets: List?, relation + + ### List of Inspect AI task names that were run. + tasks: List?, relation + + ### Creation time for this record. + createdAt: DateTime, default=now + +indexes: + runs_status_idx: + fields: status + runs_inspect_id_idx: + fields: inspectId + runs_created_at_idx: + fields: createdAt \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/run_summary.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/run_summary.spy.yaml new file mode 100644 index 0000000..f0d8818 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/run_summary.spy.yaml @@ -0,0 +1,41 @@ +### Metadata for the outcomes of a given [Run]. This is a separate table from [Run] because +### otherwise each of these columns would have to be nullable on [Run], as they are generated +### after the run is completed. +class: RunSummary +table: evals_run_summaries +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Run this summary belongs to. + run: Run?, relation(onDelete=Cascade) + + ### Number of tasks in this run. + totalTasks: int + + ### Total number of samples evaluated. + totalSamples: int + + ### Average accuracy across all tasks (0.0 to 1.0). + avgAccuracy: double + + ### Total token usage. + totalTokens: int + + ### Input tokens used. + inputTokens: int + + ### Output tokens generated. + outputTokens: int + + ### Reasoning tokens used (for models that support it). + reasoningTokens: int + + ### Creation time for this record. + createdAt: DateTime, default=now + +indexes: + run_summaries_unique_run: + fields: runId + unique: true + run_summaries_created_at_idx: + fields: createdAt \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/sample.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/sample.spy.yaml new file mode 100644 index 0000000..6327b78 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/sample.spy.yaml @@ -0,0 +1,34 @@ +### A single challenge to be presented to a [Model] and evaluated by one or more [Scorer]s. +class: Sample +table: evals_samples +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Short sample name/ID (e.g., "dart_futures_vs_streams"). + name: String + + ### The dataset this sample belongs to (e.g., "dart_qa_dataset"). + dataset: Dataset?, relation(onDelete=Cascade) + + ### The input prompt/question for the model. + input: String + + ### The expected answer or grading guidance. + target: String + + ### Tags associated with this sample (e.g., ["dart", "flutter"]). + ### Technically, this relationship only reaches the cross-reference table, + ### not the tags themselves. + tagsXref: List?, relation(name=sample_tags_xref) + + ### True if the sample is still active and included in eval runs. + isActive: bool, default=true + + ### Creation time for this record. + createdAt: DateTime, default=now + +indexes: + evals_sample_dataset_id_idx: + fields: datasetId + evals_sample_created_at_idx: + fields: createdAt \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/sample_tag_xref.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/sample_tag_xref.spy.yaml new file mode 100644 index 0000000..be2cb1f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/sample_tag_xref.spy.yaml @@ -0,0 +1,10 @@ +### Cross reference table for samples and tags. +class: SampleTagXref +table: evals_samples_tags_xref +fields: + sample: Sample?, relation(name=sample_tags_xref) + tag: Tag?, relation(name=tag_samples_xref) +indexes: + sample_tag_index_idx: + fields: sampleId, tagId + unique: true \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer.spy.yaml new file mode 100644 index 0000000..295068a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer.spy.yaml @@ -0,0 +1,14 @@ +### Ye who watch the watchers. +class: Scorer +table: evals_scorers +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Name of the scorer (e.g., "bleu"). + name: String + +indexes: + scorers_unique_name: + fields: name + unique: true + \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer_result.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer_result.spy.yaml new file mode 100644 index 0000000..f7da7a4 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/scorer_result.spy.yaml @@ -0,0 +1,20 @@ +### A scorer's assessment of a task. +class: ScorerResult +table: evals_scorer_results +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Scorer this summary belongs to. + scorer: Scorer?, relation(onDelete=Cascade) + + ### Whether this scorer data is for a baseline run. + evaluation: Evaluation?, relation(onDelete=Cascade) + + ### Flexible data archived by the scorer. + data: ScorerResultData + +indexes: + scorer_result_scorer_id_idx: + fields: scorerId + scorer_result_evaluation_id_idx: + fields: evaluationId diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/status_enum.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/status_enum.spy.yaml new file mode 100644 index 0000000..1e86d35 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/status_enum.spy.yaml @@ -0,0 +1,6 @@ +enum: Status +serialized: byName +values: + - complete + - inProgress + - failed \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/tag.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/tag.spy.yaml new file mode 100644 index 0000000..ce5090a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/tag.spy.yaml @@ -0,0 +1,18 @@ +### Category for a sample. +class: Tag +table: evals_tags +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Unique identifier for the tag. + name: String + + ### Samples associated with this tag. + ### Technically, this relationship only reaches the cross-reference table, + ### not the samples themselves. + samplesXref: List?, relation(name=tag_samples_xref) + +indexes: + tags_unique_name: + fields: name + unique: true \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/task.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/task.spy.yaml new file mode 100644 index 0000000..0e13e86 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/task.spy.yaml @@ -0,0 +1,32 @@ +### Results from evaluating one model against one dataset. +class: Task +table: evals_tasks +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### InspectAI-generated Id. + inspectId: String + + ### Model identifier (e.g., "google/gemini-2.5-pro"). + model: Model?, relation(onDelete=Cascade) + + ### Dataset identifier (e.g., "flutter_qa_dataset"). + dataset: Dataset?, relation(onDelete=Cascade) + + ### Run this task belongs to. + run: Run?, relation(onDelete=Cascade) + + ### When this task was evaluated. + createdAt: DateTime, default=now + +indexes: + evals_task_run_id_idx: + fields: runId + evals_task_inspect_id_idx: + fields: inspectId + evals_task_model_id_idx: + fields: modelId + evals_task_dataset_id_idx: + fields: datasetId + evals_task_created_at_idx: + fields: createdAt \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/task_summary.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/task_summary.spy.yaml new file mode 100644 index 0000000..6d482d9 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/task_summary.spy.yaml @@ -0,0 +1,46 @@ +class: TaskSummary +table: evals_task_summaries +fields: + id: UuidValue?, defaultPersist=random_v7 + + ### Task this summary belongs to. + task: Task?, relation(onDelete=Cascade) + + ### Total number of samples in this task. + totalSamples: int + + ### Number of samples that passed. + passedSamples: int + + ### Accuracy as a value from 0.0 to 1.0. + accuracy: double + + ### The Inspect AI task function name (e.g., "qa_task"). + taskName: String? + + ### Input tokens used. + inputTokens: int + + ### Output tokens generated. + outputTokens: int + + ### Total tokens used. + totalTokens: int + + ### Reasoning tokens used (for models that support it). + reasoningTokens: int + + ### Variant configuration used (e.g., "baseline", "dart_mcp"). + variant: String? + + ### Total execution time in seconds. + executionTimeSeconds: int + + ### Number of samples that needed retries. + samplesWithRetries: int + + ### Number of samples that failed all retries (excluded from accuracy). + samplesNeverSucceeded: int + + ### Total number of retries across all samples. + totalRetries: int \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/tool_call_data.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/tool_call_data.spy.yaml new file mode 100644 index 0000000..1a102a3 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/tool_call_data.spy.yaml @@ -0,0 +1,9 @@ +### Result of a tool call made during evaluation. Not a database table. +class: ToolCallData +fields: + + ### Name of the tool. + name: String + + ### Arguments passed to the tool. + arguments: Map \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/models/variant.spy.yaml b/packages/eval_explorer/eval_explorer_server/lib/src/models/variant.spy.yaml new file mode 100644 index 0000000..05ccffe --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/models/variant.spy.yaml @@ -0,0 +1,5 @@ +enum: Variant +serialized: byName +values: + - mcp + - rules \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/app_config_route.dart b/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/app_config_route.dart new file mode 100644 index 0000000..3a2631f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/app_config_route.dart @@ -0,0 +1,30 @@ +import 'package:serverpod/serverpod.dart'; + +class AppConfigWidget extends JsonWidget { + final String apiUrl; + + AppConfigWidget({ + required this.apiUrl, + }) : super(object: {'apiUrl': apiUrl}); +} + +class AppConfigRoute extends WidgetRoute { + AppConfigWidget widget; + + AppConfigRoute({ + required final ServerConfig apiConfig, + }) : widget = AppConfigWidget(apiUrl: apiConfig.apiUrl.toString()); + + @override + Future build(Session session, Request request) async { + return widget; + } +} + +extension on ServerConfig { + Uri get apiUrl => Uri( + scheme: publicScheme, + host: publicHost, + port: publicPort, + ); +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/root.dart b/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/root.dart new file mode 100644 index 0000000..fd5cbe4 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/web/routes/root.dart @@ -0,0 +1,9 @@ +import 'package:eval_explorer_server/src/web/widgets/built_with_serverpod_page.dart'; +import 'package:serverpod/serverpod.dart'; + +class RootRoute extends WidgetRoute { + @override + Future build(Session session, Request request) async { + return BuiltWithServerpodPageWidget(); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/lib/src/web/widgets/built_with_serverpod_page.dart b/packages/eval_explorer/eval_explorer_server/lib/src/web/widgets/built_with_serverpod_page.dart new file mode 100644 index 0000000..819d5df --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/lib/src/web/widgets/built_with_serverpod_page.dart @@ -0,0 +1,11 @@ +import 'package:serverpod/serverpod.dart'; + +/// A widget that displays the Serverpod version and the current run mode. +/// It uses the built_with_serverpod.html template to render the page. +/// The [name] of the template should correspond to a template file in your +/// server's web/templates directory. +class BuiltWithServerpodPageWidget extends TemplateWidget { + BuiltWithServerpodPageWidget() : super(name: 'built_with_serverpod') { + values = {'served': DateTime.now(), 'runmode': Serverpod.instance.runMode}; + } +} diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.json b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.json new file mode 100644 index 0000000..4460d00 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.json @@ -0,0 +1,4137 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage", + "dartName": "CloudStorageEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "addedTime", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "byteData", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "verified", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_path_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_expiration", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "expiration" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage_direct_upload", + "dartName": "CloudStorageDirectUploadEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_direct_upload_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authKey", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_storage_path", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_future_call", + "dartName": "FutureCallEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_future_call_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serializedObject", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "identifier", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_time_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "time" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_serverId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_identifier_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "identifier" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_connection_info", + "dartName": "ServerHealthConnectionInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_connection_info_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "active", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "closing", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "idle", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_metric", + "dartName": "ServerHealthMetric", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_metric_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isHealthy", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "value", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_log", + "dartName": "LogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reference", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logLevel", + "columnType": 6, + "isNullable": false, + "dartType": "protocol:LogLevel" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "message", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_message_log", + "dartName": "MessageLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_message_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageName", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_message_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_message_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_method", + "dartName": "MethodInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_method_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_endpoint_method_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "endpoint" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "method" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_migrations", + "dartName": "DatabaseMigrationVersion", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_migrations_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "version", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_ids", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "module" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_query_log", + "dartName": "QueryLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_query_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "query", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numRows", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_query_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_readwrite_test", + "dartName": "ReadWriteTestEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_readwrite_test_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "number", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_readwrite_test_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_runtime_settings", + "dartName": "RuntimeSettings", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_runtime_settings_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettings", + "columnType": 8, + "isNullable": false, + "dartType": "protocol:LogSettings" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettingsOverrides", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logServiceCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logMalformedCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_runtime_settings_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_session_log", + "dartName": "SessionLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_session_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numQueries", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authenticatedUserId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userId", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isOpen", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "touched", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_serverid_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_touched_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "touched" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_isopen_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "isOpen" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_apple_account", + "dartName": "AppleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshToken", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshTokenRequestedWithBundleIdentifier", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastRefreshedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isEmailVerified", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isPrivateEmail", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "firstName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_apple_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_apple_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_apple_account_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account", + "dartName": "EmailAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passwordHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_password_reset_request", + "dartName": "EmailAccountPasswordResetRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "emailAccountId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "setPasswordChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_0", + "columns": [ + "emailAccountId" + ], + "referenceTable": "serverpod_auth_idp_email_account", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_1", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_2", + "columns": [ + "setPasswordChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_password_reset_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_request", + "dartName": "EmailAccountRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createAccountChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_0", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_1", + "columns": [ + "createAccountChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_google_account", + "dartName": "GoogleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_google_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_google_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_google_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_account", + "dartName": "PasskeyAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyId", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyIdBase64", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "clientDataJSON", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attestationObject", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "originalChallenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_passkey_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_key_id_base64", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "keyIdBase64" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_challenge", + "dartName": "PasskeyChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "dartName": "RateLimitedRequestAttempt", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "domain", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "source", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "nonce", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "ipAddress", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attemptedAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraData", + "columnType": 8, + "isNullable": true, + "dartType": "Map?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_domain", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_source", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_nonce", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_secret_challenge", + "dartName": "SecretChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeCodeHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_secret_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_jwt_refresh_token", + "dartName": "RefreshToken", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraClaims", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fixedSecret", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "rotatingSecretHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUpdatedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_jwt_refresh_token_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_last_updated_at", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "lastUpdatedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile", + "dartName": "UserProfile", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fullName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "imageId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_1", + "columns": [ + "imageId" + ], + "referenceTable": "serverpod_auth_core_profile_image", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_profile_user_profile_email_auth_user_id", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "authUserId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile_image", + "dartName": "UserProfileImage", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userProfileId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "url", + "columnType": 0, + "isNullable": false, + "dartType": "Uri" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_image_fk_0", + "columns": [ + "userProfileId" + ], + "referenceTable": "serverpod_auth_core_profile", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_image_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_session", + "dartName": "ServerSideSession", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUsedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiresAt", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expireAfterUnusedFor", + "columnType": 6, + "isNullable": true, + "dartType": "Duration?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeyHash", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeySalt", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_session_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_session_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_user", + "dartName": "AuthUser", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "blocked", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_user_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "eval_explorer", + "version": "20260108211117297" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20251208110420531-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.sql new file mode 100644 index 0000000..f1f3867 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition.sql @@ -0,0 +1,951 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- Class Dataset as table evals_datasets +-- +CREATE TABLE "evals_datasets" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsDatasetsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "datasets_unique_name" ON "evals_datasets" USING btree ("name"); + +-- +-- Class Evaluation as table evals_evaluations +-- +CREATE TABLE "evals_evaluations" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "taskId" uuid NOT NULL, + "sampleId" uuid NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "variant" json NOT NULL, + "output" text NOT NULL, + "toolCalls" json NOT NULL, + "retryCount" bigint NOT NULL, + "error" text, + "neverSucceeded" boolean NOT NULL, + "durationSeconds" double precision NOT NULL, + "analyzerPassed" boolean, + "testsPassed" bigint, + "testsTotal" bigint, + "structureScore" double precision, + "failureReason" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_evaluation_run_id_idx" ON "evals_evaluations" USING btree ("runId"); +CREATE INDEX "evals_evaluation_task_id_idx" ON "evals_evaluations" USING btree ("taskId"); +CREATE INDEX "evals_evaluation_sample_id_idx" ON "evals_evaluations" USING btree ("sampleId"); +CREATE INDEX "evals_evaluation_model_id_idx" ON "evals_evaluations" USING btree ("modelId"); +CREATE INDEX "evals_evaluation_dataset_id_idx" ON "evals_evaluations" USING btree ("datasetId"); +CREATE INDEX "evals_evaluation_created_at_idx" ON "evals_evaluations" USING btree ("createdAt"); + +-- +-- Class Model as table evals_models +-- +CREATE TABLE "evals_models" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsModelsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "evals_models_unique_name" ON "evals_models" USING btree ("name"); + +-- +-- Class RunSummary as table evals_run_summaries +-- +CREATE TABLE "evals_run_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "totalTasks" bigint NOT NULL, + "totalSamples" bigint NOT NULL, + "avgAccuracy" double precision NOT NULL, + "totalTokens" bigint NOT NULL, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE UNIQUE INDEX "run_summaries_unique_run" ON "evals_run_summaries" USING btree ("runId"); +CREATE INDEX "run_summaries_created_at_idx" ON "evals_run_summaries" USING btree ("createdAt"); + +-- +-- Class Run as table evals_runs +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- Class Sample as table evals_samples +-- +CREATE TABLE "evals_samples" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "datasetId" uuid NOT NULL, + "input" text NOT NULL, + "target" text NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_sample_dataset_id_idx" ON "evals_samples" USING btree ("datasetId"); +CREATE INDEX "evals_sample_created_at_idx" ON "evals_samples" USING btree ("createdAt"); + +-- +-- Class ScorerResult as table evals_scorer_results +-- +CREATE TABLE "evals_scorer_results" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "scorerId" uuid NOT NULL, + "evaluationId" uuid NOT NULL, + "data" json NOT NULL +); + +-- Indexes +CREATE INDEX "scorer_result_scorer_id_idx" ON "evals_scorer_results" USING btree ("scorerId"); +CREATE INDEX "scorer_result_evaluation_id_idx" ON "evals_scorer_results" USING btree ("evaluationId"); + +-- +-- Class Scorer as table evals_scorers +-- +CREATE TABLE "evals_scorers" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "scorers_unique_name" ON "evals_scorers" USING btree ("name"); + +-- +-- Class Tag as table evals_tags +-- +CREATE TABLE "evals_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsSamplesTagsEvalsSamplesId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "tags_unique_name" ON "evals_tags" USING btree ("name"); + +-- +-- Class TaskSummary as table evals_task_summaries +-- +CREATE TABLE "evals_task_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "taskId" uuid NOT NULL, + "totalSamples" bigint NOT NULL, + "passedSamples" bigint NOT NULL, + "accuracy" double precision NOT NULL, + "taskName" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "totalTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "variant" text, + "executionTimeSeconds" bigint NOT NULL, + "samplesWithRetries" bigint NOT NULL, + "samplesNeverSucceeded" bigint NOT NULL, + "totalRetries" bigint NOT NULL +); + +-- +-- Class Task as table evals_tasks +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- Class CloudStorageEntry as table serverpod_cloud_storage +-- +CREATE TABLE "serverpod_cloud_storage" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "addedTime" timestamp without time zone NOT NULL, + "expiration" timestamp without time zone, + "byteData" bytea NOT NULL, + "verified" boolean NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_path_idx" ON "serverpod_cloud_storage" USING btree ("storageId", "path"); +CREATE INDEX "serverpod_cloud_storage_expiration" ON "serverpod_cloud_storage" USING btree ("expiration"); + +-- +-- Class CloudStorageDirectUploadEntry as table serverpod_cloud_storage_direct_upload +-- +CREATE TABLE "serverpod_cloud_storage_direct_upload" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "expiration" timestamp without time zone NOT NULL, + "authKey" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_direct_upload_storage_path" ON "serverpod_cloud_storage_direct_upload" USING btree ("storageId", "path"); + +-- +-- Class FutureCallEntry as table serverpod_future_call +-- +CREATE TABLE "serverpod_future_call" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "serializedObject" text, + "serverId" text NOT NULL, + "identifier" text +); + +-- Indexes +CREATE INDEX "serverpod_future_call_time_idx" ON "serverpod_future_call" USING btree ("time"); +CREATE INDEX "serverpod_future_call_serverId_idx" ON "serverpod_future_call" USING btree ("serverId"); +CREATE INDEX "serverpod_future_call_identifier_idx" ON "serverpod_future_call" USING btree ("identifier"); + +-- +-- Class ServerHealthConnectionInfo as table serverpod_health_connection_info +-- +CREATE TABLE "serverpod_health_connection_info" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "active" bigint NOT NULL, + "closing" bigint NOT NULL, + "idle" bigint NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_connection_info_timestamp_idx" ON "serverpod_health_connection_info" USING btree ("timestamp", "serverId", "granularity"); + +-- +-- Class ServerHealthMetric as table serverpod_health_metric +-- +CREATE TABLE "serverpod_health_metric" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "isHealthy" boolean NOT NULL, + "value" double precision NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_metric_timestamp_idx" ON "serverpod_health_metric" USING btree ("timestamp", "serverId", "name", "granularity"); + +-- +-- Class LogEntry as table serverpod_log +-- +CREATE TABLE "serverpod_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "reference" text, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "logLevel" bigint NOT NULL, + "message" text NOT NULL, + "error" text, + "stackTrace" text, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_log_sessionLogId_idx" ON "serverpod_log" USING btree ("sessionLogId"); + +-- +-- Class MessageLogEntry as table serverpod_message_log +-- +CREATE TABLE "serverpod_message_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "serverId" text NOT NULL, + "messageId" bigint NOT NULL, + "endpoint" text NOT NULL, + "messageName" text NOT NULL, + "duration" double precision NOT NULL, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- +-- Class MethodInfo as table serverpod_method +-- +CREATE TABLE "serverpod_method" ( + "id" bigserial PRIMARY KEY, + "endpoint" text NOT NULL, + "method" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_method_endpoint_method_idx" ON "serverpod_method" USING btree ("endpoint", "method"); + +-- +-- Class DatabaseMigrationVersion as table serverpod_migrations +-- +CREATE TABLE "serverpod_migrations" ( + "id" bigserial PRIMARY KEY, + "module" text NOT NULL, + "version" text NOT NULL, + "timestamp" timestamp without time zone +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_migrations_ids" ON "serverpod_migrations" USING btree ("module"); + +-- +-- Class QueryLogEntry as table serverpod_query_log +-- +CREATE TABLE "serverpod_query_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "query" text NOT NULL, + "duration" double precision NOT NULL, + "numRows" bigint, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_query_log_sessionLogId_idx" ON "serverpod_query_log" USING btree ("sessionLogId"); + +-- +-- Class ReadWriteTestEntry as table serverpod_readwrite_test +-- +CREATE TABLE "serverpod_readwrite_test" ( + "id" bigserial PRIMARY KEY, + "number" bigint NOT NULL +); + +-- +-- Class RuntimeSettings as table serverpod_runtime_settings +-- +CREATE TABLE "serverpod_runtime_settings" ( + "id" bigserial PRIMARY KEY, + "logSettings" json NOT NULL, + "logSettingsOverrides" json NOT NULL, + "logServiceCalls" boolean NOT NULL, + "logMalformedCalls" boolean NOT NULL +); + +-- +-- Class SessionLogEntry as table serverpod_session_log +-- +CREATE TABLE "serverpod_session_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "module" text, + "endpoint" text, + "method" text, + "duration" double precision, + "numQueries" bigint, + "slow" boolean, + "error" text, + "stackTrace" text, + "authenticatedUserId" bigint, + "userId" text, + "isOpen" boolean, + "touched" timestamp without time zone NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_session_log_serverid_idx" ON "serverpod_session_log" USING btree ("serverId"); +CREATE INDEX "serverpod_session_log_touched_idx" ON "serverpod_session_log" USING btree ("touched"); +CREATE INDEX "serverpod_session_log_isopen_idx" ON "serverpod_session_log" USING btree ("isOpen"); + +-- +-- Class AppleAccount as table serverpod_auth_idp_apple_account +-- +CREATE TABLE "serverpod_auth_idp_apple_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userIdentifier" text NOT NULL, + "refreshToken" text NOT NULL, + "refreshTokenRequestedWithBundleIdentifier" boolean NOT NULL, + "lastRefreshedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text, + "isEmailVerified" boolean, + "isPrivateEmail" boolean, + "firstName" text, + "lastName" text +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_apple_account_identifier" ON "serverpod_auth_idp_apple_account" USING btree ("userIdentifier"); + +-- +-- Class EmailAccount as table serverpod_auth_idp_email_account +-- +CREATE TABLE "serverpod_auth_idp_email_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "passwordHash" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_email" ON "serverpod_auth_idp_email_account" USING btree ("email"); + +-- +-- Class EmailAccountPasswordResetRequest as table serverpod_auth_idp_email_account_password_reset_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_password_reset_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "emailAccountId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "challengeId" uuid NOT NULL, + "setPasswordChallengeId" uuid +); + +-- +-- Class EmailAccountRequest as table serverpod_auth_idp_email_account_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "email" text NOT NULL, + "challengeId" uuid NOT NULL, + "createAccountChallengeId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_request_email" ON "serverpod_auth_idp_email_account_request" USING btree ("email"); + +-- +-- Class GoogleAccount as table serverpod_auth_idp_google_account +-- +CREATE TABLE "serverpod_auth_idp_google_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_google_account_user_identifier" ON "serverpod_auth_idp_google_account" USING btree ("userIdentifier"); + +-- +-- Class PasskeyAccount as table serverpod_auth_idp_passkey_account +-- +CREATE TABLE "serverpod_auth_idp_passkey_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "keyId" bytea NOT NULL, + "keyIdBase64" text NOT NULL, + "clientDataJSON" bytea NOT NULL, + "attestationObject" bytea NOT NULL, + "originalChallenge" bytea NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_passkey_account_key_id_base64" ON "serverpod_auth_idp_passkey_account" USING btree ("keyIdBase64"); + +-- +-- Class PasskeyChallenge as table serverpod_auth_idp_passkey_challenge +-- +CREATE TABLE "serverpod_auth_idp_passkey_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "challenge" bytea NOT NULL +); + +-- +-- Class RateLimitedRequestAttempt as table serverpod_auth_idp_rate_limited_request_attempt +-- +CREATE TABLE "serverpod_auth_idp_rate_limited_request_attempt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "domain" text NOT NULL, + "source" text NOT NULL, + "nonce" text NOT NULL, + "ipAddress" text, + "attemptedAt" timestamp without time zone NOT NULL, + "extraData" json +); + +-- Indexes +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_domain" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain"); +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_source" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("source"); +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_nonce" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("nonce"); + +-- +-- Class SecretChallenge as table serverpod_auth_idp_secret_challenge +-- +CREATE TABLE "serverpod_auth_idp_secret_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "challengeCodeHash" text NOT NULL +); + +-- +-- Class RefreshToken as table serverpod_auth_core_jwt_refresh_token +-- +CREATE TABLE "serverpod_auth_core_jwt_refresh_token" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "extraClaims" text, + "method" text NOT NULL, + "fixedSecret" bytea NOT NULL, + "rotatingSecretHash" text NOT NULL, + "lastUpdatedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "serverpod_auth_core_jwt_refresh_token_last_updated_at" ON "serverpod_auth_core_jwt_refresh_token" USING btree ("lastUpdatedAt"); + +-- +-- Class UserProfile as table serverpod_auth_core_profile +-- +CREATE TABLE "serverpod_auth_core_profile" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "userName" text, + "fullName" text, + "email" text, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "imageId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_profile_user_profile_email_auth_user_id" ON "serverpod_auth_core_profile" USING btree ("authUserId"); + +-- +-- Class UserProfileImage as table serverpod_auth_core_profile_image +-- +CREATE TABLE "serverpod_auth_core_profile_image" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userProfileId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "storageId" text NOT NULL, + "path" text NOT NULL, + "url" text NOT NULL +); + +-- +-- Class ServerSideSession as table serverpod_auth_core_session +-- +CREATE TABLE "serverpod_auth_core_session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastUsedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresAt" timestamp without time zone, + "expireAfterUnusedFor" bigint, + "sessionKeyHash" bytea NOT NULL, + "sessionKeySalt" bytea NOT NULL, + "method" text NOT NULL +); + +-- +-- Class AuthUser as table serverpod_auth_core_user +-- +CREATE TABLE "serverpod_auth_core_user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "scopeNames" json NOT NULL, + "blocked" boolean NOT NULL +); + +-- +-- Foreign relations for "evals_datasets" table +-- +ALTER TABLE ONLY "evals_datasets" + ADD CONSTRAINT "evals_datasets_fk_0" + FOREIGN KEY("_evalsRunsDatasetsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_evaluations" table +-- +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_1" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_2" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_3" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_4" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_models" table +-- +ALTER TABLE ONLY "evals_models" + ADD CONSTRAINT "evals_models_fk_0" + FOREIGN KEY("_evalsRunsModelsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_run_summaries" table +-- +ALTER TABLE ONLY "evals_run_summaries" + ADD CONSTRAINT "evals_run_summaries_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_samples" table +-- +ALTER TABLE ONLY "evals_samples" + ADD CONSTRAINT "evals_samples_fk_0" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_scorer_results" table +-- +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_0" + FOREIGN KEY("scorerId") + REFERENCES "evals_scorers"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_1" + FOREIGN KEY("evaluationId") + REFERENCES "evals_evaluations"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tags" table +-- +ALTER TABLE ONLY "evals_tags" + ADD CONSTRAINT "evals_tags_fk_0" + FOREIGN KEY("_evalsSamplesTagsEvalsSamplesId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_task_summaries" table +-- +ALTER TABLE ONLY "evals_task_summaries" + ADD CONSTRAINT "evals_task_summaries_fk_0" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tasks" table +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_log" table +-- +ALTER TABLE ONLY "serverpod_log" + ADD CONSTRAINT "serverpod_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_message_log" table +-- +ALTER TABLE ONLY "serverpod_message_log" + ADD CONSTRAINT "serverpod_message_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_query_log" table +-- +ALTER TABLE ONLY "serverpod_query_log" + ADD CONSTRAINT "serverpod_query_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_apple_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_apple_account" + ADD CONSTRAINT "serverpod_auth_idp_apple_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account" + ADD CONSTRAINT "serverpod_auth_idp_email_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_password_reset_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_0" + FOREIGN KEY("emailAccountId") + REFERENCES "serverpod_auth_idp_email_account"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_1" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_2" + FOREIGN KEY("setPasswordChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_0" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_1" + FOREIGN KEY("createAccountChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_google_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_google_account" + ADD CONSTRAINT "serverpod_auth_idp_google_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_passkey_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_passkey_account" + ADD CONSTRAINT "serverpod_auth_idp_passkey_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_jwt_refresh_token" table +-- +ALTER TABLE ONLY "serverpod_auth_core_jwt_refresh_token" + ADD CONSTRAINT "serverpod_auth_core_jwt_refresh_token_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_1" + FOREIGN KEY("imageId") + REFERENCES "serverpod_auth_core_profile_image"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile_image" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile_image" + ADD CONSTRAINT "serverpod_auth_core_profile_image_fk_0" + FOREIGN KEY("userProfileId") + REFERENCES "serverpod_auth_core_profile"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_session" table +-- +ALTER TABLE ONLY "serverpod_auth_core_session" + ADD CONSTRAINT "serverpod_auth_core_session_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260108211117297', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260108211117297', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20251208110420531-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110420531-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition_project.json b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition_project.json new file mode 100644 index 0000000..65fb610 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/definition_project.json @@ -0,0 +1,1452 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20251208110420531-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.json b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.json new file mode 100644 index 0000000..4c37a79 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.json @@ -0,0 +1,4267 @@ +{ + "__className__": "serverpod.DatabaseMigration", + "actions": [ + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage", + "dartName": "CloudStorageEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "addedTime", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "byteData", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "verified", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_path_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_expiration", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "expiration" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage_direct_upload", + "dartName": "CloudStorageDirectUploadEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_direct_upload_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authKey", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_storage_path", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_future_call", + "dartName": "FutureCallEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_future_call_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serializedObject", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "identifier", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_time_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "time" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_serverId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_identifier_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "identifier" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_connection_info", + "dartName": "ServerHealthConnectionInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_connection_info_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "active", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "closing", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "idle", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_metric", + "dartName": "ServerHealthMetric", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_metric_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isHealthy", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "value", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_log", + "dartName": "LogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reference", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logLevel", + "columnType": 6, + "isNullable": false, + "dartType": "protocol:LogLevel" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "message", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_message_log", + "dartName": "MessageLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_message_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageName", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_message_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_message_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_method", + "dartName": "MethodInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_method_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_endpoint_method_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "endpoint" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "method" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_migrations", + "dartName": "DatabaseMigrationVersion", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_migrations_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "version", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_ids", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "module" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_query_log", + "dartName": "QueryLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_query_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "query", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numRows", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_query_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_readwrite_test", + "dartName": "ReadWriteTestEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_readwrite_test_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "number", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_readwrite_test_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_runtime_settings", + "dartName": "RuntimeSettings", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_runtime_settings_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettings", + "columnType": 8, + "isNullable": false, + "dartType": "protocol:LogSettings" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettingsOverrides", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logServiceCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logMalformedCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_runtime_settings_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_session_log", + "dartName": "SessionLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_session_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numQueries", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authenticatedUserId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userId", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isOpen", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "touched", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_serverid_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_touched_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "touched" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_isopen_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "isOpen" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_apple_account", + "dartName": "AppleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshToken", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshTokenRequestedWithBundleIdentifier", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastRefreshedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isEmailVerified", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isPrivateEmail", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "firstName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_apple_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_apple_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_apple_account_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account", + "dartName": "EmailAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passwordHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_password_reset_request", + "dartName": "EmailAccountPasswordResetRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "emailAccountId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "setPasswordChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_0", + "columns": [ + "emailAccountId" + ], + "referenceTable": "serverpod_auth_idp_email_account", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_1", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_2", + "columns": [ + "setPasswordChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_password_reset_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_request", + "dartName": "EmailAccountRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createAccountChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_0", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_1", + "columns": [ + "createAccountChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_google_account", + "dartName": "GoogleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_google_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_google_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_google_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_account", + "dartName": "PasskeyAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyId", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyIdBase64", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "clientDataJSON", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attestationObject", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "originalChallenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_passkey_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_key_id_base64", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "keyIdBase64" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_challenge", + "dartName": "PasskeyChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "dartName": "RateLimitedRequestAttempt", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "domain", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "source", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "nonce", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "ipAddress", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attemptedAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraData", + "columnType": 8, + "isNullable": true, + "dartType": "Map?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_domain", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_source", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_nonce", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_secret_challenge", + "dartName": "SecretChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeCodeHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_secret_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_jwt_refresh_token", + "dartName": "RefreshToken", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraClaims", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fixedSecret", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "rotatingSecretHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUpdatedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_jwt_refresh_token_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_last_updated_at", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "lastUpdatedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile", + "dartName": "UserProfile", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fullName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "imageId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_1", + "columns": [ + "imageId" + ], + "referenceTable": "serverpod_auth_core_profile_image", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_profile_user_profile_email_auth_user_id", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "authUserId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile_image", + "dartName": "UserProfileImage", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userProfileId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "url", + "columnType": 0, + "isNullable": false, + "dartType": "Uri" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_image_fk_0", + "columns": [ + "userProfileId" + ], + "referenceTable": "serverpod_auth_core_profile", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_image_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_session", + "dartName": "ServerSideSession", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUsedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiresAt", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expireAfterUnusedFor", + "columnType": 6, + "isNullable": true, + "dartType": "Duration?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeyHash", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeySalt", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_session_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_session_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_user", + "dartName": "AuthUser", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "blocked", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_user_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + } + ], + "warnings": [], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.sql new file mode 100644 index 0000000..ce35285 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260108211117297/migration.sql @@ -0,0 +1,951 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_datasets" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsDatasetsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "datasets_unique_name" ON "evals_datasets" USING btree ("name"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_evaluations" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "taskId" uuid NOT NULL, + "sampleId" uuid NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "variant" json NOT NULL, + "output" text NOT NULL, + "toolCalls" json NOT NULL, + "retryCount" bigint NOT NULL, + "error" text, + "neverSucceeded" boolean NOT NULL, + "durationSeconds" double precision NOT NULL, + "analyzerPassed" boolean, + "testsPassed" bigint, + "testsTotal" bigint, + "structureScore" double precision, + "failureReason" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_evaluation_run_id_idx" ON "evals_evaluations" USING btree ("runId"); +CREATE INDEX "evals_evaluation_task_id_idx" ON "evals_evaluations" USING btree ("taskId"); +CREATE INDEX "evals_evaluation_sample_id_idx" ON "evals_evaluations" USING btree ("sampleId"); +CREATE INDEX "evals_evaluation_model_id_idx" ON "evals_evaluations" USING btree ("modelId"); +CREATE INDEX "evals_evaluation_dataset_id_idx" ON "evals_evaluations" USING btree ("datasetId"); +CREATE INDEX "evals_evaluation_created_at_idx" ON "evals_evaluations" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_models" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsModelsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "evals_models_unique_name" ON "evals_models" USING btree ("name"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_run_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "totalTasks" bigint NOT NULL, + "totalSamples" bigint NOT NULL, + "avgAccuracy" double precision NOT NULL, + "totalTokens" bigint NOT NULL, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE UNIQUE INDEX "run_summaries_unique_run" ON "evals_run_summaries" USING btree ("runId"); +CREATE INDEX "run_summaries_created_at_idx" ON "evals_run_summaries" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_samples" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "datasetId" uuid NOT NULL, + "input" text NOT NULL, + "target" text NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_sample_dataset_id_idx" ON "evals_samples" USING btree ("datasetId"); +CREATE INDEX "evals_sample_created_at_idx" ON "evals_samples" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_scorer_results" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "scorerId" uuid NOT NULL, + "evaluationId" uuid NOT NULL, + "data" json NOT NULL +); + +-- Indexes +CREATE INDEX "scorer_result_scorer_id_idx" ON "evals_scorer_results" USING btree ("scorerId"); +CREATE INDEX "scorer_result_evaluation_id_idx" ON "evals_scorer_results" USING btree ("evaluationId"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_scorers" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "scorers_unique_name" ON "evals_scorers" USING btree ("name"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsSamplesTagsEvalsSamplesId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "tags_unique_name" ON "evals_tags" USING btree ("name"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_task_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "taskId" uuid NOT NULL, + "totalSamples" bigint NOT NULL, + "passedSamples" bigint NOT NULL, + "accuracy" double precision NOT NULL, + "taskName" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "totalTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "variant" text, + "executionTimeSeconds" bigint NOT NULL, + "samplesWithRetries" bigint NOT NULL, + "samplesNeverSucceeded" bigint NOT NULL, + "totalRetries" bigint NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_cloud_storage" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "addedTime" timestamp without time zone NOT NULL, + "expiration" timestamp without time zone, + "byteData" bytea NOT NULL, + "verified" boolean NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_path_idx" ON "serverpod_cloud_storage" USING btree ("storageId", "path"); +CREATE INDEX "serverpod_cloud_storage_expiration" ON "serverpod_cloud_storage" USING btree ("expiration"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_cloud_storage_direct_upload" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "expiration" timestamp without time zone NOT NULL, + "authKey" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_direct_upload_storage_path" ON "serverpod_cloud_storage_direct_upload" USING btree ("storageId", "path"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_future_call" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "serializedObject" text, + "serverId" text NOT NULL, + "identifier" text +); + +-- Indexes +CREATE INDEX "serverpod_future_call_time_idx" ON "serverpod_future_call" USING btree ("time"); +CREATE INDEX "serverpod_future_call_serverId_idx" ON "serverpod_future_call" USING btree ("serverId"); +CREATE INDEX "serverpod_future_call_identifier_idx" ON "serverpod_future_call" USING btree ("identifier"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_health_connection_info" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "active" bigint NOT NULL, + "closing" bigint NOT NULL, + "idle" bigint NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_connection_info_timestamp_idx" ON "serverpod_health_connection_info" USING btree ("timestamp", "serverId", "granularity"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_health_metric" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "isHealthy" boolean NOT NULL, + "value" double precision NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_metric_timestamp_idx" ON "serverpod_health_metric" USING btree ("timestamp", "serverId", "name", "granularity"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "reference" text, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "logLevel" bigint NOT NULL, + "message" text NOT NULL, + "error" text, + "stackTrace" text, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_log_sessionLogId_idx" ON "serverpod_log" USING btree ("sessionLogId"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_message_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "serverId" text NOT NULL, + "messageId" bigint NOT NULL, + "endpoint" text NOT NULL, + "messageName" text NOT NULL, + "duration" double precision NOT NULL, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_method" ( + "id" bigserial PRIMARY KEY, + "endpoint" text NOT NULL, + "method" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_method_endpoint_method_idx" ON "serverpod_method" USING btree ("endpoint", "method"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_migrations" ( + "id" bigserial PRIMARY KEY, + "module" text NOT NULL, + "version" text NOT NULL, + "timestamp" timestamp without time zone +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_migrations_ids" ON "serverpod_migrations" USING btree ("module"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_query_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "query" text NOT NULL, + "duration" double precision NOT NULL, + "numRows" bigint, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_query_log_sessionLogId_idx" ON "serverpod_query_log" USING btree ("sessionLogId"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_readwrite_test" ( + "id" bigserial PRIMARY KEY, + "number" bigint NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_runtime_settings" ( + "id" bigserial PRIMARY KEY, + "logSettings" json NOT NULL, + "logSettingsOverrides" json NOT NULL, + "logServiceCalls" boolean NOT NULL, + "logMalformedCalls" boolean NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_session_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "module" text, + "endpoint" text, + "method" text, + "duration" double precision, + "numQueries" bigint, + "slow" boolean, + "error" text, + "stackTrace" text, + "authenticatedUserId" bigint, + "userId" text, + "isOpen" boolean, + "touched" timestamp without time zone NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_session_log_serverid_idx" ON "serverpod_session_log" USING btree ("serverId"); +CREATE INDEX "serverpod_session_log_touched_idx" ON "serverpod_session_log" USING btree ("touched"); +CREATE INDEX "serverpod_session_log_isopen_idx" ON "serverpod_session_log" USING btree ("isOpen"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_apple_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userIdentifier" text NOT NULL, + "refreshToken" text NOT NULL, + "refreshTokenRequestedWithBundleIdentifier" boolean NOT NULL, + "lastRefreshedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text, + "isEmailVerified" boolean, + "isPrivateEmail" boolean, + "firstName" text, + "lastName" text +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_apple_account_identifier" ON "serverpod_auth_idp_apple_account" USING btree ("userIdentifier"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_email_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "passwordHash" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_email" ON "serverpod_auth_idp_email_account" USING btree ("email"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_email_account_password_reset_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "emailAccountId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "challengeId" uuid NOT NULL, + "setPasswordChallengeId" uuid +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_email_account_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "email" text NOT NULL, + "challengeId" uuid NOT NULL, + "createAccountChallengeId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_request_email" ON "serverpod_auth_idp_email_account_request" USING btree ("email"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_google_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_google_account_user_identifier" ON "serverpod_auth_idp_google_account" USING btree ("userIdentifier"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_passkey_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "keyId" bytea NOT NULL, + "keyIdBase64" text NOT NULL, + "clientDataJSON" bytea NOT NULL, + "attestationObject" bytea NOT NULL, + "originalChallenge" bytea NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_passkey_account_key_id_base64" ON "serverpod_auth_idp_passkey_account" USING btree ("keyIdBase64"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_passkey_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "challenge" bytea NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_rate_limited_request_attempt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "domain" text NOT NULL, + "source" text NOT NULL, + "nonce" text NOT NULL, + "ipAddress" text, + "attemptedAt" timestamp without time zone NOT NULL, + "extraData" json +); + +-- Indexes +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_domain" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain"); +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_source" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("source"); +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_nonce" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("nonce"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_secret_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "challengeCodeHash" text NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_core_jwt_refresh_token" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "extraClaims" text, + "method" text NOT NULL, + "fixedSecret" bytea NOT NULL, + "rotatingSecretHash" text NOT NULL, + "lastUpdatedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "serverpod_auth_core_jwt_refresh_token_last_updated_at" ON "serverpod_auth_core_jwt_refresh_token" USING btree ("lastUpdatedAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_core_profile" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "userName" text, + "fullName" text, + "email" text, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "imageId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_profile_user_profile_email_auth_user_id" ON "serverpod_auth_core_profile" USING btree ("authUserId"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_core_profile_image" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userProfileId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "storageId" text NOT NULL, + "path" text NOT NULL, + "url" text NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_core_session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastUsedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresAt" timestamp without time zone, + "expireAfterUnusedFor" bigint, + "sessionKeyHash" bytea NOT NULL, + "sessionKeySalt" bytea NOT NULL, + "method" text NOT NULL +); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_core_user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "scopeNames" json NOT NULL, + "blocked" boolean NOT NULL +); + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_datasets" + ADD CONSTRAINT "evals_datasets_fk_0" + FOREIGN KEY("_evalsRunsDatasetsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_1" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_2" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_3" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_4" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_models" + ADD CONSTRAINT "evals_models_fk_0" + FOREIGN KEY("_evalsRunsModelsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_run_summaries" + ADD CONSTRAINT "evals_run_summaries_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_samples" + ADD CONSTRAINT "evals_samples_fk_0" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_0" + FOREIGN KEY("scorerId") + REFERENCES "evals_scorers"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_1" + FOREIGN KEY("evaluationId") + REFERENCES "evals_evaluations"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_tags" + ADD CONSTRAINT "evals_tags_fk_0" + FOREIGN KEY("_evalsSamplesTagsEvalsSamplesId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_task_summaries" + ADD CONSTRAINT "evals_task_summaries_fk_0" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_log" + ADD CONSTRAINT "serverpod_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_message_log" + ADD CONSTRAINT "serverpod_message_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_query_log" + ADD CONSTRAINT "serverpod_query_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_apple_account" + ADD CONSTRAINT "serverpod_auth_idp_apple_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account" + ADD CONSTRAINT "serverpod_auth_idp_email_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_0" + FOREIGN KEY("emailAccountId") + REFERENCES "serverpod_auth_idp_email_account"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_1" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_2" + FOREIGN KEY("setPasswordChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_0" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_1" + FOREIGN KEY("createAccountChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_google_account" + ADD CONSTRAINT "serverpod_auth_idp_google_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_passkey_account" + ADD CONSTRAINT "serverpod_auth_idp_passkey_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_core_jwt_refresh_token" + ADD CONSTRAINT "serverpod_auth_core_jwt_refresh_token_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_1" + FOREIGN KEY("imageId") + REFERENCES "serverpod_auth_core_profile_image"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_core_profile_image" + ADD CONSTRAINT "serverpod_auth_core_profile_image_fk_0" + FOREIGN KEY("userProfileId") + REFERENCES "serverpod_auth_core_profile"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_core_session" + ADD CONSTRAINT "serverpod_auth_core_session_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260108211117297', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260108211117297', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20251208110420531-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110420531-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.json b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.json new file mode 100644 index 0000000..162456a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.json @@ -0,0 +1,4223 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage", + "dartName": "CloudStorageEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "addedTime", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "byteData", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "verified", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_path_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_expiration", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "expiration" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage_direct_upload", + "dartName": "CloudStorageDirectUploadEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_direct_upload_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authKey", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_storage_path", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_future_call", + "dartName": "FutureCallEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_future_call_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serializedObject", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "identifier", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_time_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "time" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_serverId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_identifier_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "identifier" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_connection_info", + "dartName": "ServerHealthConnectionInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_connection_info_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "active", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "closing", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "idle", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_metric", + "dartName": "ServerHealthMetric", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_metric_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isHealthy", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "value", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_log", + "dartName": "LogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reference", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logLevel", + "columnType": 6, + "isNullable": false, + "dartType": "protocol:LogLevel" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "message", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_message_log", + "dartName": "MessageLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_message_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageName", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_message_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_message_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_method", + "dartName": "MethodInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_method_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_endpoint_method_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "endpoint" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "method" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_migrations", + "dartName": "DatabaseMigrationVersion", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_migrations_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "version", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_ids", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "module" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_query_log", + "dartName": "QueryLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_query_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "query", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numRows", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_query_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_readwrite_test", + "dartName": "ReadWriteTestEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_readwrite_test_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "number", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_readwrite_test_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_runtime_settings", + "dartName": "RuntimeSettings", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_runtime_settings_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettings", + "columnType": 8, + "isNullable": false, + "dartType": "protocol:LogSettings" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettingsOverrides", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logServiceCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logMalformedCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_runtime_settings_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_session_log", + "dartName": "SessionLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_session_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numQueries", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authenticatedUserId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userId", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isOpen", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "touched", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_serverid_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_touched_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "touched" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_isopen_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "isOpen" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_apple_account", + "dartName": "AppleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshToken", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshTokenRequestedWithBundleIdentifier", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastRefreshedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isEmailVerified", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isPrivateEmail", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "firstName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_apple_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_apple_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_apple_account_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account", + "dartName": "EmailAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passwordHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_password_reset_request", + "dartName": "EmailAccountPasswordResetRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "emailAccountId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "setPasswordChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_0", + "columns": [ + "emailAccountId" + ], + "referenceTable": "serverpod_auth_idp_email_account", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_1", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_2", + "columns": [ + "setPasswordChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_password_reset_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_request", + "dartName": "EmailAccountRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createAccountChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_0", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_1", + "columns": [ + "createAccountChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_firebase_account", + "dartName": "FirebaseAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "phone", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_firebase_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_firebase_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_firebase_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_google_account", + "dartName": "GoogleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_google_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_google_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_google_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_account", + "dartName": "PasskeyAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyId", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyIdBase64", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "clientDataJSON", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attestationObject", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "originalChallenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_passkey_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_key_id_base64", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "keyIdBase64" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_challenge", + "dartName": "PasskeyChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "dartName": "RateLimitedRequestAttempt", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "domain", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "source", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "nonce", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "ipAddress", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attemptedAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraData", + "columnType": 8, + "isNullable": true, + "dartType": "Map?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_composite", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "attemptedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_secret_challenge", + "dartName": "SecretChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeCodeHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_secret_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_jwt_refresh_token", + "dartName": "RefreshToken", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraClaims", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fixedSecret", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "rotatingSecretHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUpdatedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_jwt_refresh_token_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_last_updated_at", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "lastUpdatedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile", + "dartName": "UserProfile", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fullName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "imageId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_1", + "columns": [ + "imageId" + ], + "referenceTable": "serverpod_auth_core_profile_image", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_profile_user_profile_email_auth_user_id", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "authUserId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile_image", + "dartName": "UserProfileImage", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userProfileId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "url", + "columnType": 0, + "isNullable": false, + "dartType": "Uri" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_image_fk_0", + "columns": [ + "userProfileId" + ], + "referenceTable": "serverpod_auth_core_profile", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_image_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_session", + "dartName": "ServerSideSession", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUsedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiresAt", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expireAfterUnusedFor", + "columnType": 6, + "isNullable": true, + "dartType": "Duration?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeyHash", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeySalt", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_session_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_session_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_user", + "dartName": "AuthUser", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "blocked", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_user_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "eval_explorer", + "version": "20260109222127000" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.sql new file mode 100644 index 0000000..779b366 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition.sql @@ -0,0 +1,974 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- Class Dataset as table evals_datasets +-- +CREATE TABLE "evals_datasets" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsDatasetsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "datasets_unique_name" ON "evals_datasets" USING btree ("name"); + +-- +-- Class Evaluation as table evals_evaluations +-- +CREATE TABLE "evals_evaluations" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "taskId" uuid NOT NULL, + "sampleId" uuid NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "variant" json NOT NULL, + "output" text NOT NULL, + "toolCalls" json NOT NULL, + "retryCount" bigint NOT NULL, + "error" text, + "neverSucceeded" boolean NOT NULL, + "durationSeconds" double precision NOT NULL, + "analyzerPassed" boolean, + "testsPassed" bigint, + "testsTotal" bigint, + "structureScore" double precision, + "failureReason" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_evaluation_run_id_idx" ON "evals_evaluations" USING btree ("runId"); +CREATE INDEX "evals_evaluation_task_id_idx" ON "evals_evaluations" USING btree ("taskId"); +CREATE INDEX "evals_evaluation_sample_id_idx" ON "evals_evaluations" USING btree ("sampleId"); +CREATE INDEX "evals_evaluation_model_id_idx" ON "evals_evaluations" USING btree ("modelId"); +CREATE INDEX "evals_evaluation_dataset_id_idx" ON "evals_evaluations" USING btree ("datasetId"); +CREATE INDEX "evals_evaluation_created_at_idx" ON "evals_evaluations" USING btree ("createdAt"); + +-- +-- Class Model as table evals_models +-- +CREATE TABLE "evals_models" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsModelsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "evals_models_unique_name" ON "evals_models" USING btree ("name"); + +-- +-- Class RunSummary as table evals_run_summaries +-- +CREATE TABLE "evals_run_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "totalTasks" bigint NOT NULL, + "totalSamples" bigint NOT NULL, + "avgAccuracy" double precision NOT NULL, + "totalTokens" bigint NOT NULL, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE UNIQUE INDEX "run_summaries_unique_run" ON "evals_run_summaries" USING btree ("runId"); +CREATE INDEX "run_summaries_created_at_idx" ON "evals_run_summaries" USING btree ("createdAt"); + +-- +-- Class Run as table evals_runs +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- Class Sample as table evals_samples +-- +CREATE TABLE "evals_samples" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "datasetId" uuid NOT NULL, + "input" text NOT NULL, + "target" text NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_sample_dataset_id_idx" ON "evals_samples" USING btree ("datasetId"); +CREATE INDEX "evals_sample_created_at_idx" ON "evals_samples" USING btree ("createdAt"); + +-- +-- Class ScorerResult as table evals_scorer_results +-- +CREATE TABLE "evals_scorer_results" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "scorerId" uuid NOT NULL, + "evaluationId" uuid NOT NULL, + "data" json NOT NULL +); + +-- Indexes +CREATE INDEX "scorer_result_scorer_id_idx" ON "evals_scorer_results" USING btree ("scorerId"); +CREATE INDEX "scorer_result_evaluation_id_idx" ON "evals_scorer_results" USING btree ("evaluationId"); + +-- +-- Class Scorer as table evals_scorers +-- +CREATE TABLE "evals_scorers" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "scorers_unique_name" ON "evals_scorers" USING btree ("name"); + +-- +-- Class Tag as table evals_tags +-- +CREATE TABLE "evals_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsSamplesTagsEvalsSamplesId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "tags_unique_name" ON "evals_tags" USING btree ("name"); + +-- +-- Class TaskSummary as table evals_task_summaries +-- +CREATE TABLE "evals_task_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "taskId" uuid NOT NULL, + "totalSamples" bigint NOT NULL, + "passedSamples" bigint NOT NULL, + "accuracy" double precision NOT NULL, + "taskName" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "totalTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "variant" text, + "executionTimeSeconds" bigint NOT NULL, + "samplesWithRetries" bigint NOT NULL, + "samplesNeverSucceeded" bigint NOT NULL, + "totalRetries" bigint NOT NULL +); + +-- +-- Class Task as table evals_tasks +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- Class CloudStorageEntry as table serverpod_cloud_storage +-- +CREATE TABLE "serverpod_cloud_storage" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "addedTime" timestamp without time zone NOT NULL, + "expiration" timestamp without time zone, + "byteData" bytea NOT NULL, + "verified" boolean NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_path_idx" ON "serverpod_cloud_storage" USING btree ("storageId", "path"); +CREATE INDEX "serverpod_cloud_storage_expiration" ON "serverpod_cloud_storage" USING btree ("expiration"); + +-- +-- Class CloudStorageDirectUploadEntry as table serverpod_cloud_storage_direct_upload +-- +CREATE TABLE "serverpod_cloud_storage_direct_upload" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "expiration" timestamp without time zone NOT NULL, + "authKey" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_direct_upload_storage_path" ON "serverpod_cloud_storage_direct_upload" USING btree ("storageId", "path"); + +-- +-- Class FutureCallEntry as table serverpod_future_call +-- +CREATE TABLE "serverpod_future_call" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "serializedObject" text, + "serverId" text NOT NULL, + "identifier" text +); + +-- Indexes +CREATE INDEX "serverpod_future_call_time_idx" ON "serverpod_future_call" USING btree ("time"); +CREATE INDEX "serverpod_future_call_serverId_idx" ON "serverpod_future_call" USING btree ("serverId"); +CREATE INDEX "serverpod_future_call_identifier_idx" ON "serverpod_future_call" USING btree ("identifier"); + +-- +-- Class ServerHealthConnectionInfo as table serverpod_health_connection_info +-- +CREATE TABLE "serverpod_health_connection_info" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "active" bigint NOT NULL, + "closing" bigint NOT NULL, + "idle" bigint NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_connection_info_timestamp_idx" ON "serverpod_health_connection_info" USING btree ("timestamp", "serverId", "granularity"); + +-- +-- Class ServerHealthMetric as table serverpod_health_metric +-- +CREATE TABLE "serverpod_health_metric" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "isHealthy" boolean NOT NULL, + "value" double precision NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_metric_timestamp_idx" ON "serverpod_health_metric" USING btree ("timestamp", "serverId", "name", "granularity"); + +-- +-- Class LogEntry as table serverpod_log +-- +CREATE TABLE "serverpod_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "reference" text, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "logLevel" bigint NOT NULL, + "message" text NOT NULL, + "error" text, + "stackTrace" text, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_log_sessionLogId_idx" ON "serverpod_log" USING btree ("sessionLogId"); + +-- +-- Class MessageLogEntry as table serverpod_message_log +-- +CREATE TABLE "serverpod_message_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "serverId" text NOT NULL, + "messageId" bigint NOT NULL, + "endpoint" text NOT NULL, + "messageName" text NOT NULL, + "duration" double precision NOT NULL, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- +-- Class MethodInfo as table serverpod_method +-- +CREATE TABLE "serverpod_method" ( + "id" bigserial PRIMARY KEY, + "endpoint" text NOT NULL, + "method" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_method_endpoint_method_idx" ON "serverpod_method" USING btree ("endpoint", "method"); + +-- +-- Class DatabaseMigrationVersion as table serverpod_migrations +-- +CREATE TABLE "serverpod_migrations" ( + "id" bigserial PRIMARY KEY, + "module" text NOT NULL, + "version" text NOT NULL, + "timestamp" timestamp without time zone +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_migrations_ids" ON "serverpod_migrations" USING btree ("module"); + +-- +-- Class QueryLogEntry as table serverpod_query_log +-- +CREATE TABLE "serverpod_query_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "query" text NOT NULL, + "duration" double precision NOT NULL, + "numRows" bigint, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_query_log_sessionLogId_idx" ON "serverpod_query_log" USING btree ("sessionLogId"); + +-- +-- Class ReadWriteTestEntry as table serverpod_readwrite_test +-- +CREATE TABLE "serverpod_readwrite_test" ( + "id" bigserial PRIMARY KEY, + "number" bigint NOT NULL +); + +-- +-- Class RuntimeSettings as table serverpod_runtime_settings +-- +CREATE TABLE "serverpod_runtime_settings" ( + "id" bigserial PRIMARY KEY, + "logSettings" json NOT NULL, + "logSettingsOverrides" json NOT NULL, + "logServiceCalls" boolean NOT NULL, + "logMalformedCalls" boolean NOT NULL +); + +-- +-- Class SessionLogEntry as table serverpod_session_log +-- +CREATE TABLE "serverpod_session_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "module" text, + "endpoint" text, + "method" text, + "duration" double precision, + "numQueries" bigint, + "slow" boolean, + "error" text, + "stackTrace" text, + "authenticatedUserId" bigint, + "userId" text, + "isOpen" boolean, + "touched" timestamp without time zone NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_session_log_serverid_idx" ON "serverpod_session_log" USING btree ("serverId"); +CREATE INDEX "serverpod_session_log_touched_idx" ON "serverpod_session_log" USING btree ("touched"); +CREATE INDEX "serverpod_session_log_isopen_idx" ON "serverpod_session_log" USING btree ("isOpen"); + +-- +-- Class AppleAccount as table serverpod_auth_idp_apple_account +-- +CREATE TABLE "serverpod_auth_idp_apple_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userIdentifier" text NOT NULL, + "refreshToken" text NOT NULL, + "refreshTokenRequestedWithBundleIdentifier" boolean NOT NULL, + "lastRefreshedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text, + "isEmailVerified" boolean, + "isPrivateEmail" boolean, + "firstName" text, + "lastName" text +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_apple_account_identifier" ON "serverpod_auth_idp_apple_account" USING btree ("userIdentifier"); + +-- +-- Class EmailAccount as table serverpod_auth_idp_email_account +-- +CREATE TABLE "serverpod_auth_idp_email_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "passwordHash" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_email" ON "serverpod_auth_idp_email_account" USING btree ("email"); + +-- +-- Class EmailAccountPasswordResetRequest as table serverpod_auth_idp_email_account_password_reset_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_password_reset_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "emailAccountId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "challengeId" uuid NOT NULL, + "setPasswordChallengeId" uuid +); + +-- +-- Class EmailAccountRequest as table serverpod_auth_idp_email_account_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "email" text NOT NULL, + "challengeId" uuid NOT NULL, + "createAccountChallengeId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_request_email" ON "serverpod_auth_idp_email_account_request" USING btree ("email"); + +-- +-- Class FirebaseAccount as table serverpod_auth_idp_firebase_account +-- +CREATE TABLE "serverpod_auth_idp_firebase_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text, + "phone" text, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_firebase_account_user_identifier" ON "serverpod_auth_idp_firebase_account" USING btree ("userIdentifier"); + +-- +-- Class GoogleAccount as table serverpod_auth_idp_google_account +-- +CREATE TABLE "serverpod_auth_idp_google_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_google_account_user_identifier" ON "serverpod_auth_idp_google_account" USING btree ("userIdentifier"); + +-- +-- Class PasskeyAccount as table serverpod_auth_idp_passkey_account +-- +CREATE TABLE "serverpod_auth_idp_passkey_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "keyId" bytea NOT NULL, + "keyIdBase64" text NOT NULL, + "clientDataJSON" bytea NOT NULL, + "attestationObject" bytea NOT NULL, + "originalChallenge" bytea NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_passkey_account_key_id_base64" ON "serverpod_auth_idp_passkey_account" USING btree ("keyIdBase64"); + +-- +-- Class PasskeyChallenge as table serverpod_auth_idp_passkey_challenge +-- +CREATE TABLE "serverpod_auth_idp_passkey_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "challenge" bytea NOT NULL +); + +-- +-- Class RateLimitedRequestAttempt as table serverpod_auth_idp_rate_limited_request_attempt +-- +CREATE TABLE "serverpod_auth_idp_rate_limited_request_attempt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "domain" text NOT NULL, + "source" text NOT NULL, + "nonce" text NOT NULL, + "ipAddress" text, + "attemptedAt" timestamp without time zone NOT NULL, + "extraData" json +); + +-- Indexes +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_composite" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain", "source", "nonce", "attemptedAt"); + +-- +-- Class SecretChallenge as table serverpod_auth_idp_secret_challenge +-- +CREATE TABLE "serverpod_auth_idp_secret_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "challengeCodeHash" text NOT NULL +); + +-- +-- Class RefreshToken as table serverpod_auth_core_jwt_refresh_token +-- +CREATE TABLE "serverpod_auth_core_jwt_refresh_token" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "extraClaims" text, + "method" text NOT NULL, + "fixedSecret" bytea NOT NULL, + "rotatingSecretHash" text NOT NULL, + "lastUpdatedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "serverpod_auth_core_jwt_refresh_token_last_updated_at" ON "serverpod_auth_core_jwt_refresh_token" USING btree ("lastUpdatedAt"); + +-- +-- Class UserProfile as table serverpod_auth_core_profile +-- +CREATE TABLE "serverpod_auth_core_profile" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "userName" text, + "fullName" text, + "email" text, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "imageId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_profile_user_profile_email_auth_user_id" ON "serverpod_auth_core_profile" USING btree ("authUserId"); + +-- +-- Class UserProfileImage as table serverpod_auth_core_profile_image +-- +CREATE TABLE "serverpod_auth_core_profile_image" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userProfileId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "storageId" text NOT NULL, + "path" text NOT NULL, + "url" text NOT NULL +); + +-- +-- Class ServerSideSession as table serverpod_auth_core_session +-- +CREATE TABLE "serverpod_auth_core_session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastUsedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresAt" timestamp without time zone, + "expireAfterUnusedFor" bigint, + "sessionKeyHash" bytea NOT NULL, + "sessionKeySalt" bytea NOT NULL, + "method" text NOT NULL +); + +-- +-- Class AuthUser as table serverpod_auth_core_user +-- +CREATE TABLE "serverpod_auth_core_user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "scopeNames" json NOT NULL, + "blocked" boolean NOT NULL +); + +-- +-- Foreign relations for "evals_datasets" table +-- +ALTER TABLE ONLY "evals_datasets" + ADD CONSTRAINT "evals_datasets_fk_0" + FOREIGN KEY("_evalsRunsDatasetsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_evaluations" table +-- +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_1" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_2" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_3" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_4" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_models" table +-- +ALTER TABLE ONLY "evals_models" + ADD CONSTRAINT "evals_models_fk_0" + FOREIGN KEY("_evalsRunsModelsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_run_summaries" table +-- +ALTER TABLE ONLY "evals_run_summaries" + ADD CONSTRAINT "evals_run_summaries_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_samples" table +-- +ALTER TABLE ONLY "evals_samples" + ADD CONSTRAINT "evals_samples_fk_0" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_scorer_results" table +-- +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_0" + FOREIGN KEY("scorerId") + REFERENCES "evals_scorers"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_1" + FOREIGN KEY("evaluationId") + REFERENCES "evals_evaluations"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tags" table +-- +ALTER TABLE ONLY "evals_tags" + ADD CONSTRAINT "evals_tags_fk_0" + FOREIGN KEY("_evalsSamplesTagsEvalsSamplesId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_task_summaries" table +-- +ALTER TABLE ONLY "evals_task_summaries" + ADD CONSTRAINT "evals_task_summaries_fk_0" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tasks" table +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_log" table +-- +ALTER TABLE ONLY "serverpod_log" + ADD CONSTRAINT "serverpod_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_message_log" table +-- +ALTER TABLE ONLY "serverpod_message_log" + ADD CONSTRAINT "serverpod_message_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_query_log" table +-- +ALTER TABLE ONLY "serverpod_query_log" + ADD CONSTRAINT "serverpod_query_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_apple_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_apple_account" + ADD CONSTRAINT "serverpod_auth_idp_apple_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account" + ADD CONSTRAINT "serverpod_auth_idp_email_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_password_reset_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_0" + FOREIGN KEY("emailAccountId") + REFERENCES "serverpod_auth_idp_email_account"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_1" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_2" + FOREIGN KEY("setPasswordChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_0" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_1" + FOREIGN KEY("createAccountChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_firebase_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_firebase_account" + ADD CONSTRAINT "serverpod_auth_idp_firebase_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_google_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_google_account" + ADD CONSTRAINT "serverpod_auth_idp_google_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_passkey_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_passkey_account" + ADD CONSTRAINT "serverpod_auth_idp_passkey_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_jwt_refresh_token" table +-- +ALTER TABLE ONLY "serverpod_auth_core_jwt_refresh_token" + ADD CONSTRAINT "serverpod_auth_core_jwt_refresh_token_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_1" + FOREIGN KEY("imageId") + REFERENCES "serverpod_auth_core_profile_image"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile_image" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile_image" + ADD CONSTRAINT "serverpod_auth_core_profile_image_fk_0" + FOREIGN KEY("userProfileId") + REFERENCES "serverpod_auth_core_profile"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_session" table +-- +ALTER TABLE ONLY "serverpod_auth_core_session" + ADD CONSTRAINT "serverpod_auth_core_session_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260109222127000', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109222127000', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition_project.json b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition_project.json new file mode 100644 index 0000000..3aff835 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/definition_project.json @@ -0,0 +1,1452 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.json b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.json new file mode 100644 index 0000000..b61ebc7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.json @@ -0,0 +1,161 @@ +{ + "__className__": "serverpod.DatabaseMigration", + "actions": [ + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_firebase_account", + "dartName": "FirebaseAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "phone", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_firebase_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_firebase_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_firebase_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "alterTable", + "alterTable": { + "__className__": "serverpod.TableMigration", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "schema": "public", + "addColumns": [], + "deleteColumns": [], + "modifyColumns": [], + "addIndexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_composite", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "attemptedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "deleteIndexes": [ + "serverpod_auth_idp_rate_limited_request_attempt_domain", + "serverpod_auth_idp_rate_limited_request_attempt_source", + "serverpod_auth_idp_rate_limited_request_attempt_nonce" + ], + "addForeignKeys": [], + "deleteForeignKeys": [], + "warnings": [] + } + } + ], + "warnings": [], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.sql new file mode 100644 index 0000000..6494f07 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260109222127000/migration.sql @@ -0,0 +1,98 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "serverpod_auth_idp_firebase_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text, + "phone" text, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_firebase_account_user_identifier" ON "serverpod_auth_idp_firebase_account" USING btree ("userIdentifier"); + +-- +-- ACTION ALTER TABLE +-- +DROP INDEX "serverpod_auth_idp_rate_limited_request_attempt_domain"; +DROP INDEX "serverpod_auth_idp_rate_limited_request_attempt_source"; +DROP INDEX "serverpod_auth_idp_rate_limited_request_attempt_nonce"; +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_composite" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain", "source", "nonce", "attemptedAt"); +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "serverpod_auth_idp_firebase_account" + ADD CONSTRAINT "serverpod_auth_idp_firebase_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260109222127000', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109222127000', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.json b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.json new file mode 100644 index 0000000..112756e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.json @@ -0,0 +1,4239 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage", + "dartName": "CloudStorageEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "addedTime", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "byteData", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "verified", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_path_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_expiration", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "expiration" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage_direct_upload", + "dartName": "CloudStorageDirectUploadEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_direct_upload_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authKey", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_storage_path", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_future_call", + "dartName": "FutureCallEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_future_call_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serializedObject", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "identifier", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_time_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "time" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_serverId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_identifier_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "identifier" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_connection_info", + "dartName": "ServerHealthConnectionInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_connection_info_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "active", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "closing", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "idle", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_metric", + "dartName": "ServerHealthMetric", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_metric_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isHealthy", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "value", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_log", + "dartName": "LogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reference", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logLevel", + "columnType": 6, + "isNullable": false, + "dartType": "protocol:LogLevel" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "message", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_message_log", + "dartName": "MessageLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_message_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageName", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_message_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_message_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_method", + "dartName": "MethodInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_method_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_endpoint_method_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "endpoint" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "method" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_migrations", + "dartName": "DatabaseMigrationVersion", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_migrations_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "version", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_ids", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "module" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_query_log", + "dartName": "QueryLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_query_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "query", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numRows", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_query_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_readwrite_test", + "dartName": "ReadWriteTestEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_readwrite_test_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "number", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_readwrite_test_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_runtime_settings", + "dartName": "RuntimeSettings", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_runtime_settings_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettings", + "columnType": 8, + "isNullable": false, + "dartType": "protocol:LogSettings" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettingsOverrides", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logServiceCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logMalformedCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_runtime_settings_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_session_log", + "dartName": "SessionLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_session_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numQueries", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authenticatedUserId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userId", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isOpen", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "touched", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_serverid_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_touched_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "touched" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_isopen_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "isOpen" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_apple_account", + "dartName": "AppleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshToken", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshTokenRequestedWithBundleIdentifier", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastRefreshedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isEmailVerified", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isPrivateEmail", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "firstName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_apple_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_apple_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_apple_account_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account", + "dartName": "EmailAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passwordHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_password_reset_request", + "dartName": "EmailAccountPasswordResetRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "emailAccountId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "setPasswordChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_0", + "columns": [ + "emailAccountId" + ], + "referenceTable": "serverpod_auth_idp_email_account", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_1", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_2", + "columns": [ + "setPasswordChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_password_reset_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_request", + "dartName": "EmailAccountRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createAccountChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_0", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_1", + "columns": [ + "createAccountChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_firebase_account", + "dartName": "FirebaseAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "phone", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_firebase_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_firebase_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_firebase_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_google_account", + "dartName": "GoogleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_google_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_google_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_google_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_account", + "dartName": "PasskeyAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyId", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyIdBase64", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "clientDataJSON", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attestationObject", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "originalChallenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_passkey_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_key_id_base64", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "keyIdBase64" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_challenge", + "dartName": "PasskeyChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "dartName": "RateLimitedRequestAttempt", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "domain", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "source", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "nonce", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "ipAddress", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attemptedAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraData", + "columnType": 8, + "isNullable": true, + "dartType": "Map?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_composite", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "attemptedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_secret_challenge", + "dartName": "SecretChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeCodeHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_secret_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_jwt_refresh_token", + "dartName": "RefreshToken", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraClaims", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fixedSecret", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "rotatingSecretHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUpdatedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_jwt_refresh_token_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_last_updated_at", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "lastUpdatedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile", + "dartName": "UserProfile", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fullName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "imageId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_1", + "columns": [ + "imageId" + ], + "referenceTable": "serverpod_auth_core_profile_image", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_profile_user_profile_email_auth_user_id", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "authUserId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile_image", + "dartName": "UserProfileImage", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userProfileId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "url", + "columnType": 0, + "isNullable": false, + "dartType": "Uri" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_image_fk_0", + "columns": [ + "userProfileId" + ], + "referenceTable": "serverpod_auth_core_profile", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_image_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_session", + "dartName": "ServerSideSession", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUsedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiresAt", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expireAfterUnusedFor", + "columnType": 6, + "isNullable": true, + "dartType": "Duration?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeyHash", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeySalt", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_session_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_session_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_user", + "dartName": "AuthUser", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "blocked", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_user_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "eval_explorer", + "version": "20260115201713782" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.sql new file mode 100644 index 0000000..6ca220e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition.sql @@ -0,0 +1,976 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- Class Dataset as table evals_datasets +-- +CREATE TABLE "evals_datasets" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "isActive" boolean NOT NULL DEFAULT true, + "_evalsRunsDatasetsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "datasets_unique_name" ON "evals_datasets" USING btree ("name"); + +-- +-- Class Evaluation as table evals_evaluations +-- +CREATE TABLE "evals_evaluations" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "taskId" uuid NOT NULL, + "sampleId" uuid NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "variant" json NOT NULL, + "output" text NOT NULL, + "toolCalls" json NOT NULL, + "retryCount" bigint NOT NULL, + "error" text, + "neverSucceeded" boolean NOT NULL, + "durationSeconds" double precision NOT NULL, + "analyzerPassed" boolean, + "testsPassed" bigint, + "testsTotal" bigint, + "structureScore" double precision, + "failureReason" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_evaluation_run_id_idx" ON "evals_evaluations" USING btree ("runId"); +CREATE INDEX "evals_evaluation_task_id_idx" ON "evals_evaluations" USING btree ("taskId"); +CREATE INDEX "evals_evaluation_sample_id_idx" ON "evals_evaluations" USING btree ("sampleId"); +CREATE INDEX "evals_evaluation_model_id_idx" ON "evals_evaluations" USING btree ("modelId"); +CREATE INDEX "evals_evaluation_dataset_id_idx" ON "evals_evaluations" USING btree ("datasetId"); +CREATE INDEX "evals_evaluation_created_at_idx" ON "evals_evaluations" USING btree ("createdAt"); + +-- +-- Class Model as table evals_models +-- +CREATE TABLE "evals_models" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsModelsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "evals_models_unique_name" ON "evals_models" USING btree ("name"); + +-- +-- Class RunSummary as table evals_run_summaries +-- +CREATE TABLE "evals_run_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "totalTasks" bigint NOT NULL, + "totalSamples" bigint NOT NULL, + "avgAccuracy" double precision NOT NULL, + "totalTokens" bigint NOT NULL, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE UNIQUE INDEX "run_summaries_unique_run" ON "evals_run_summaries" USING btree ("runId"); +CREATE INDEX "run_summaries_created_at_idx" ON "evals_run_summaries" USING btree ("createdAt"); + +-- +-- Class Run as table evals_runs +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- Class Sample as table evals_samples +-- +CREATE TABLE "evals_samples" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "datasetId" uuid NOT NULL, + "input" text NOT NULL, + "target" text NOT NULL, + "isActive" boolean NOT NULL DEFAULT true, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_sample_dataset_id_idx" ON "evals_samples" USING btree ("datasetId"); +CREATE INDEX "evals_sample_created_at_idx" ON "evals_samples" USING btree ("createdAt"); + +-- +-- Class ScorerResult as table evals_scorer_results +-- +CREATE TABLE "evals_scorer_results" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "scorerId" uuid NOT NULL, + "evaluationId" uuid NOT NULL, + "data" json NOT NULL +); + +-- Indexes +CREATE INDEX "scorer_result_scorer_id_idx" ON "evals_scorer_results" USING btree ("scorerId"); +CREATE INDEX "scorer_result_evaluation_id_idx" ON "evals_scorer_results" USING btree ("evaluationId"); + +-- +-- Class Scorer as table evals_scorers +-- +CREATE TABLE "evals_scorers" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "scorers_unique_name" ON "evals_scorers" USING btree ("name"); + +-- +-- Class Tag as table evals_tags +-- +CREATE TABLE "evals_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsSamplesTagsEvalsSamplesId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "tags_unique_name" ON "evals_tags" USING btree ("name"); + +-- +-- Class TaskSummary as table evals_task_summaries +-- +CREATE TABLE "evals_task_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "taskId" uuid NOT NULL, + "totalSamples" bigint NOT NULL, + "passedSamples" bigint NOT NULL, + "accuracy" double precision NOT NULL, + "taskName" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "totalTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "variant" text, + "executionTimeSeconds" bigint NOT NULL, + "samplesWithRetries" bigint NOT NULL, + "samplesNeverSucceeded" bigint NOT NULL, + "totalRetries" bigint NOT NULL +); + +-- +-- Class Task as table evals_tasks +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- Class CloudStorageEntry as table serverpod_cloud_storage +-- +CREATE TABLE "serverpod_cloud_storage" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "addedTime" timestamp without time zone NOT NULL, + "expiration" timestamp without time zone, + "byteData" bytea NOT NULL, + "verified" boolean NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_path_idx" ON "serverpod_cloud_storage" USING btree ("storageId", "path"); +CREATE INDEX "serverpod_cloud_storage_expiration" ON "serverpod_cloud_storage" USING btree ("expiration"); + +-- +-- Class CloudStorageDirectUploadEntry as table serverpod_cloud_storage_direct_upload +-- +CREATE TABLE "serverpod_cloud_storage_direct_upload" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "expiration" timestamp without time zone NOT NULL, + "authKey" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_direct_upload_storage_path" ON "serverpod_cloud_storage_direct_upload" USING btree ("storageId", "path"); + +-- +-- Class FutureCallEntry as table serverpod_future_call +-- +CREATE TABLE "serverpod_future_call" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "serializedObject" text, + "serverId" text NOT NULL, + "identifier" text +); + +-- Indexes +CREATE INDEX "serverpod_future_call_time_idx" ON "serverpod_future_call" USING btree ("time"); +CREATE INDEX "serverpod_future_call_serverId_idx" ON "serverpod_future_call" USING btree ("serverId"); +CREATE INDEX "serverpod_future_call_identifier_idx" ON "serverpod_future_call" USING btree ("identifier"); + +-- +-- Class ServerHealthConnectionInfo as table serverpod_health_connection_info +-- +CREATE TABLE "serverpod_health_connection_info" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "active" bigint NOT NULL, + "closing" bigint NOT NULL, + "idle" bigint NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_connection_info_timestamp_idx" ON "serverpod_health_connection_info" USING btree ("timestamp", "serverId", "granularity"); + +-- +-- Class ServerHealthMetric as table serverpod_health_metric +-- +CREATE TABLE "serverpod_health_metric" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "isHealthy" boolean NOT NULL, + "value" double precision NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_metric_timestamp_idx" ON "serverpod_health_metric" USING btree ("timestamp", "serverId", "name", "granularity"); + +-- +-- Class LogEntry as table serverpod_log +-- +CREATE TABLE "serverpod_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "reference" text, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "logLevel" bigint NOT NULL, + "message" text NOT NULL, + "error" text, + "stackTrace" text, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_log_sessionLogId_idx" ON "serverpod_log" USING btree ("sessionLogId"); + +-- +-- Class MessageLogEntry as table serverpod_message_log +-- +CREATE TABLE "serverpod_message_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "serverId" text NOT NULL, + "messageId" bigint NOT NULL, + "endpoint" text NOT NULL, + "messageName" text NOT NULL, + "duration" double precision NOT NULL, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- +-- Class MethodInfo as table serverpod_method +-- +CREATE TABLE "serverpod_method" ( + "id" bigserial PRIMARY KEY, + "endpoint" text NOT NULL, + "method" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_method_endpoint_method_idx" ON "serverpod_method" USING btree ("endpoint", "method"); + +-- +-- Class DatabaseMigrationVersion as table serverpod_migrations +-- +CREATE TABLE "serverpod_migrations" ( + "id" bigserial PRIMARY KEY, + "module" text NOT NULL, + "version" text NOT NULL, + "timestamp" timestamp without time zone +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_migrations_ids" ON "serverpod_migrations" USING btree ("module"); + +-- +-- Class QueryLogEntry as table serverpod_query_log +-- +CREATE TABLE "serverpod_query_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "query" text NOT NULL, + "duration" double precision NOT NULL, + "numRows" bigint, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_query_log_sessionLogId_idx" ON "serverpod_query_log" USING btree ("sessionLogId"); + +-- +-- Class ReadWriteTestEntry as table serverpod_readwrite_test +-- +CREATE TABLE "serverpod_readwrite_test" ( + "id" bigserial PRIMARY KEY, + "number" bigint NOT NULL +); + +-- +-- Class RuntimeSettings as table serverpod_runtime_settings +-- +CREATE TABLE "serverpod_runtime_settings" ( + "id" bigserial PRIMARY KEY, + "logSettings" json NOT NULL, + "logSettingsOverrides" json NOT NULL, + "logServiceCalls" boolean NOT NULL, + "logMalformedCalls" boolean NOT NULL +); + +-- +-- Class SessionLogEntry as table serverpod_session_log +-- +CREATE TABLE "serverpod_session_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "module" text, + "endpoint" text, + "method" text, + "duration" double precision, + "numQueries" bigint, + "slow" boolean, + "error" text, + "stackTrace" text, + "authenticatedUserId" bigint, + "userId" text, + "isOpen" boolean, + "touched" timestamp without time zone NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_session_log_serverid_idx" ON "serverpod_session_log" USING btree ("serverId"); +CREATE INDEX "serverpod_session_log_touched_idx" ON "serverpod_session_log" USING btree ("touched"); +CREATE INDEX "serverpod_session_log_isopen_idx" ON "serverpod_session_log" USING btree ("isOpen"); + +-- +-- Class AppleAccount as table serverpod_auth_idp_apple_account +-- +CREATE TABLE "serverpod_auth_idp_apple_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userIdentifier" text NOT NULL, + "refreshToken" text NOT NULL, + "refreshTokenRequestedWithBundleIdentifier" boolean NOT NULL, + "lastRefreshedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text, + "isEmailVerified" boolean, + "isPrivateEmail" boolean, + "firstName" text, + "lastName" text +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_apple_account_identifier" ON "serverpod_auth_idp_apple_account" USING btree ("userIdentifier"); + +-- +-- Class EmailAccount as table serverpod_auth_idp_email_account +-- +CREATE TABLE "serverpod_auth_idp_email_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "passwordHash" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_email" ON "serverpod_auth_idp_email_account" USING btree ("email"); + +-- +-- Class EmailAccountPasswordResetRequest as table serverpod_auth_idp_email_account_password_reset_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_password_reset_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "emailAccountId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "challengeId" uuid NOT NULL, + "setPasswordChallengeId" uuid +); + +-- +-- Class EmailAccountRequest as table serverpod_auth_idp_email_account_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "email" text NOT NULL, + "challengeId" uuid NOT NULL, + "createAccountChallengeId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_request_email" ON "serverpod_auth_idp_email_account_request" USING btree ("email"); + +-- +-- Class FirebaseAccount as table serverpod_auth_idp_firebase_account +-- +CREATE TABLE "serverpod_auth_idp_firebase_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text, + "phone" text, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_firebase_account_user_identifier" ON "serverpod_auth_idp_firebase_account" USING btree ("userIdentifier"); + +-- +-- Class GoogleAccount as table serverpod_auth_idp_google_account +-- +CREATE TABLE "serverpod_auth_idp_google_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_google_account_user_identifier" ON "serverpod_auth_idp_google_account" USING btree ("userIdentifier"); + +-- +-- Class PasskeyAccount as table serverpod_auth_idp_passkey_account +-- +CREATE TABLE "serverpod_auth_idp_passkey_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "keyId" bytea NOT NULL, + "keyIdBase64" text NOT NULL, + "clientDataJSON" bytea NOT NULL, + "attestationObject" bytea NOT NULL, + "originalChallenge" bytea NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_passkey_account_key_id_base64" ON "serverpod_auth_idp_passkey_account" USING btree ("keyIdBase64"); + +-- +-- Class PasskeyChallenge as table serverpod_auth_idp_passkey_challenge +-- +CREATE TABLE "serverpod_auth_idp_passkey_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "challenge" bytea NOT NULL +); + +-- +-- Class RateLimitedRequestAttempt as table serverpod_auth_idp_rate_limited_request_attempt +-- +CREATE TABLE "serverpod_auth_idp_rate_limited_request_attempt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "domain" text NOT NULL, + "source" text NOT NULL, + "nonce" text NOT NULL, + "ipAddress" text, + "attemptedAt" timestamp without time zone NOT NULL, + "extraData" json +); + +-- Indexes +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_composite" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain", "source", "nonce", "attemptedAt"); + +-- +-- Class SecretChallenge as table serverpod_auth_idp_secret_challenge +-- +CREATE TABLE "serverpod_auth_idp_secret_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "challengeCodeHash" text NOT NULL +); + +-- +-- Class RefreshToken as table serverpod_auth_core_jwt_refresh_token +-- +CREATE TABLE "serverpod_auth_core_jwt_refresh_token" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "extraClaims" text, + "method" text NOT NULL, + "fixedSecret" bytea NOT NULL, + "rotatingSecretHash" text NOT NULL, + "lastUpdatedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "serverpod_auth_core_jwt_refresh_token_last_updated_at" ON "serverpod_auth_core_jwt_refresh_token" USING btree ("lastUpdatedAt"); + +-- +-- Class UserProfile as table serverpod_auth_core_profile +-- +CREATE TABLE "serverpod_auth_core_profile" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "userName" text, + "fullName" text, + "email" text, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "imageId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_profile_user_profile_email_auth_user_id" ON "serverpod_auth_core_profile" USING btree ("authUserId"); + +-- +-- Class UserProfileImage as table serverpod_auth_core_profile_image +-- +CREATE TABLE "serverpod_auth_core_profile_image" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userProfileId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "storageId" text NOT NULL, + "path" text NOT NULL, + "url" text NOT NULL +); + +-- +-- Class ServerSideSession as table serverpod_auth_core_session +-- +CREATE TABLE "serverpod_auth_core_session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastUsedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresAt" timestamp without time zone, + "expireAfterUnusedFor" bigint, + "sessionKeyHash" bytea NOT NULL, + "sessionKeySalt" bytea NOT NULL, + "method" text NOT NULL +); + +-- +-- Class AuthUser as table serverpod_auth_core_user +-- +CREATE TABLE "serverpod_auth_core_user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "scopeNames" json NOT NULL, + "blocked" boolean NOT NULL +); + +-- +-- Foreign relations for "evals_datasets" table +-- +ALTER TABLE ONLY "evals_datasets" + ADD CONSTRAINT "evals_datasets_fk_0" + FOREIGN KEY("_evalsRunsDatasetsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_evaluations" table +-- +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_1" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_2" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_3" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_4" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_models" table +-- +ALTER TABLE ONLY "evals_models" + ADD CONSTRAINT "evals_models_fk_0" + FOREIGN KEY("_evalsRunsModelsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_run_summaries" table +-- +ALTER TABLE ONLY "evals_run_summaries" + ADD CONSTRAINT "evals_run_summaries_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_samples" table +-- +ALTER TABLE ONLY "evals_samples" + ADD CONSTRAINT "evals_samples_fk_0" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_scorer_results" table +-- +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_0" + FOREIGN KEY("scorerId") + REFERENCES "evals_scorers"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_1" + FOREIGN KEY("evaluationId") + REFERENCES "evals_evaluations"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tags" table +-- +ALTER TABLE ONLY "evals_tags" + ADD CONSTRAINT "evals_tags_fk_0" + FOREIGN KEY("_evalsSamplesTagsEvalsSamplesId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_task_summaries" table +-- +ALTER TABLE ONLY "evals_task_summaries" + ADD CONSTRAINT "evals_task_summaries_fk_0" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tasks" table +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_log" table +-- +ALTER TABLE ONLY "serverpod_log" + ADD CONSTRAINT "serverpod_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_message_log" table +-- +ALTER TABLE ONLY "serverpod_message_log" + ADD CONSTRAINT "serverpod_message_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_query_log" table +-- +ALTER TABLE ONLY "serverpod_query_log" + ADD CONSTRAINT "serverpod_query_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_apple_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_apple_account" + ADD CONSTRAINT "serverpod_auth_idp_apple_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account" + ADD CONSTRAINT "serverpod_auth_idp_email_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_password_reset_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_0" + FOREIGN KEY("emailAccountId") + REFERENCES "serverpod_auth_idp_email_account"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_1" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_2" + FOREIGN KEY("setPasswordChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_0" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_1" + FOREIGN KEY("createAccountChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_firebase_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_firebase_account" + ADD CONSTRAINT "serverpod_auth_idp_firebase_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_google_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_google_account" + ADD CONSTRAINT "serverpod_auth_idp_google_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_passkey_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_passkey_account" + ADD CONSTRAINT "serverpod_auth_idp_passkey_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_jwt_refresh_token" table +-- +ALTER TABLE ONLY "serverpod_auth_core_jwt_refresh_token" + ADD CONSTRAINT "serverpod_auth_core_jwt_refresh_token_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_1" + FOREIGN KEY("imageId") + REFERENCES "serverpod_auth_core_profile_image"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile_image" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile_image" + ADD CONSTRAINT "serverpod_auth_core_profile_image_fk_0" + FOREIGN KEY("userProfileId") + REFERENCES "serverpod_auth_core_profile"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_session" table +-- +ALTER TABLE ONLY "serverpod_auth_core_session" + ADD CONSTRAINT "serverpod_auth_core_session_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260115201713782', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260115201713782', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition_project.json b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition_project.json new file mode 100644 index 0000000..d5bd7ec --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/definition_project.json @@ -0,0 +1,1468 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsSamplesTagsEvalsSamplesId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tags_fk_0", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.json b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.json new file mode 100644 index 0000000..e1cf792 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.json @@ -0,0 +1,59 @@ +{ + "__className__": "serverpod.DatabaseMigration", + "actions": [ + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "alterTable", + "alterTable": { + "__className__": "serverpod.TableMigration", + "name": "evals_datasets", + "schema": "public", + "addColumns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + } + ], + "deleteColumns": [], + "modifyColumns": [], + "addIndexes": [], + "deleteIndexes": [], + "addForeignKeys": [], + "deleteForeignKeys": [], + "warnings": [] + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "alterTable", + "alterTable": { + "__className__": "serverpod.TableMigration", + "name": "evals_samples", + "schema": "public", + "addColumns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + } + ], + "deleteColumns": [], + "modifyColumns": [], + "addIndexes": [], + "deleteIndexes": [], + "addForeignKeys": [], + "deleteForeignKeys": [], + "warnings": [] + } + } + ], + "warnings": [], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.sql new file mode 100644 index 0000000..f6ad50a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260115201713782/migration.sql @@ -0,0 +1,45 @@ +BEGIN; + +-- +-- ACTION ALTER TABLE +-- +ALTER TABLE "evals_datasets" ADD COLUMN "isActive" boolean NOT NULL DEFAULT true; +-- +-- ACTION ALTER TABLE +-- +ALTER TABLE "evals_samples" ADD COLUMN "isActive" boolean NOT NULL DEFAULT true; + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260115201713782', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260115201713782', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.json b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.json new file mode 100644 index 0000000..734d0fc --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.json @@ -0,0 +1,4356 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples_tags_xref", + "dartName": "SampleTagXref", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('evals_samples_tags_xref_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "tagId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_0", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_1", + "columns": [ + "tagId" + ], + "referenceTable": "evals_tags", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_tags_xref_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "sample_tag_index_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "tagId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage", + "dartName": "CloudStorageEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "addedTime", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "byteData", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "verified", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_path_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_expiration", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "expiration" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_cloud_storage_direct_upload", + "dartName": "CloudStorageDirectUploadEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_cloud_storage_direct_upload_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiration", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authKey", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_cloud_storage_direct_upload_storage_path", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "storageId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "path" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_future_call", + "dartName": "FutureCallEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_future_call_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serializedObject", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "identifier", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_time_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "time" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_serverId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_future_call_identifier_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "identifier" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_connection_info", + "dartName": "ServerHealthConnectionInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_connection_info_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "active", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "closing", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "idle", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_connection_info_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_health_metric", + "dartName": "ServerHealthMetric", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_health_metric_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isHealthy", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "value", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "granularity", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_health_metric_timestamp_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "timestamp" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "granularity" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_log", + "dartName": "LogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reference", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logLevel", + "columnType": 6, + "isNullable": false, + "dartType": "protocol:LogLevel" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "message", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_message_log", + "dartName": "MessageLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_message_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageName", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_message_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_message_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_method", + "dartName": "MethodInfo", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_method_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_method_endpoint_method_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "endpoint" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "method" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_migrations", + "dartName": "DatabaseMigrationVersion", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_migrations_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "version", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "timestamp", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_migrations_ids", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "module" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_query_log", + "dartName": "QueryLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_query_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionLogId", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "messageId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "query", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numRows", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "order", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_query_log_fk_0", + "columns": [ + "sessionLogId" + ], + "referenceTable": "serverpod_session_log", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_query_log_sessionLogId_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sessionLogId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_readwrite_test", + "dartName": "ReadWriteTestEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_readwrite_test_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "number", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_readwrite_test_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_runtime_settings", + "dartName": "RuntimeSettings", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_runtime_settings_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettings", + "columnType": 8, + "isNullable": false, + "dartType": "protocol:LogSettings" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logSettingsOverrides", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logServiceCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "logMalformedCalls", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_runtime_settings_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_session_log", + "dartName": "SessionLogEntry", + "module": "serverpod", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('serverpod_session_log_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "serverId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "time", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "module", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "endpoint", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "duration", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "numQueries", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "slow", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "stackTrace", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authenticatedUserId", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userId", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isOpen", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "touched", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_serverid_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "serverId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_touched_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "touched" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_session_log_isopen_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "isOpen" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_apple_account", + "dartName": "AppleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshToken", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "refreshTokenRequestedWithBundleIdentifier", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastRefreshedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isEmailVerified", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isPrivateEmail", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "firstName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_apple_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_apple_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_apple_account_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account", + "dartName": "EmailAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passwordHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_password_reset_request", + "dartName": "EmailAccountPasswordResetRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "emailAccountId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "setPasswordChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_0", + "columns": [ + "emailAccountId" + ], + "referenceTable": "serverpod_auth_idp_email_account", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_1", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_password_reset_request_fk_2", + "columns": [ + "setPasswordChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_password_reset_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_email_account_request", + "dartName": "EmailAccountRequest", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createAccountChallengeId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_0", + "columns": [ + "challengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_email_account_request_fk_1", + "columns": [ + "createAccountChallengeId" + ], + "referenceTable": "serverpod_auth_idp_secret_challenge", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_email_account_request_email", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "email" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_firebase_account", + "dartName": "FirebaseAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "phone", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_firebase_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_firebase_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_firebase_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_google_account", + "dartName": "GoogleAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "created", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userIdentifier", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_google_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_google_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_google_account_user_identifier", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "userIdentifier" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_account", + "dartName": "PasskeyAccount", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyId", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "keyIdBase64", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "clientDataJSON", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attestationObject", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "originalChallenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_idp_passkey_account_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_account_key_id_base64", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "keyIdBase64" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_passkey_challenge", + "dartName": "PasskeyChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challenge", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_passkey_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_rate_limited_request_attempt", + "dartName": "RateLimitedRequestAttempt", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "domain", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "source", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "nonce", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "ipAddress", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "attemptedAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraData", + "columnType": 8, + "isNullable": true, + "dartType": "Map?" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_rate_limited_request_attempt_composite", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "domain" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "source" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "nonce" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "attemptedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_idp_secret_challenge", + "dartName": "SecretChallenge", + "module": "serverpod_auth_idp", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "challengeCodeHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_idp_secret_challenge_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_jwt_refresh_token", + "dartName": "RefreshToken", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "extraClaims", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fixedSecret", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "rotatingSecretHash", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUpdatedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_jwt_refresh_token_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_jwt_refresh_token_last_updated_at", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "lastUpdatedAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile", + "dartName": "UserProfile", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "fullName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "email", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "imageId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_fk_1", + "columns": [ + "imageId" + ], + "referenceTable": "serverpod_auth_core_profile_image", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_profile_user_profile_email_auth_user_id", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "authUserId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_profile_image", + "dartName": "UserProfileImage", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "userProfileId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "storageId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "path", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "url", + "columnType": 0, + "isNullable": false, + "dartType": "Uri" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_profile_image_fk_0", + "columns": [ + "userProfileId" + ], + "referenceTable": "serverpod_auth_core_profile", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_profile_image_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_session", + "dartName": "ServerSideSession", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "authUserId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "lastUsedAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expiresAt", + "columnType": 4, + "isNullable": true, + "dartType": "DateTime?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "expireAfterUnusedFor", + "columnType": 6, + "isNullable": true, + "dartType": "Duration?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeyHash", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sessionKeySalt", + "columnType": 5, + "isNullable": false, + "dartType": "dart:typed_data:ByteData" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "method", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "serverpod_auth_core_session_fk_0", + "columns": [ + "authUserId" + ], + "referenceTable": "serverpod_auth_core_user", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_session_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "serverpod_auth_core_user", + "dartName": "AuthUser", + "module": "serverpod_auth_core", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scopeNames", + "columnType": 8, + "isNullable": false, + "dartType": "Set" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "blocked", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "serverpod_auth_core_user_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "eval_explorer", + "version": "20260116133701488" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.sql new file mode 100644 index 0000000..634b05a --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition.sql @@ -0,0 +1,997 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- Class Dataset as table evals_datasets +-- +CREATE TABLE "evals_datasets" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "isActive" boolean NOT NULL DEFAULT true, + "_evalsRunsDatasetsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "datasets_unique_name" ON "evals_datasets" USING btree ("name"); + +-- +-- Class Evaluation as table evals_evaluations +-- +CREATE TABLE "evals_evaluations" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "taskId" uuid NOT NULL, + "sampleId" uuid NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "variant" json NOT NULL, + "output" text NOT NULL, + "toolCalls" json NOT NULL, + "retryCount" bigint NOT NULL, + "error" text, + "neverSucceeded" boolean NOT NULL, + "durationSeconds" double precision NOT NULL, + "analyzerPassed" boolean, + "testsPassed" bigint, + "testsTotal" bigint, + "structureScore" double precision, + "failureReason" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_evaluation_run_id_idx" ON "evals_evaluations" USING btree ("runId"); +CREATE INDEX "evals_evaluation_task_id_idx" ON "evals_evaluations" USING btree ("taskId"); +CREATE INDEX "evals_evaluation_sample_id_idx" ON "evals_evaluations" USING btree ("sampleId"); +CREATE INDEX "evals_evaluation_model_id_idx" ON "evals_evaluations" USING btree ("modelId"); +CREATE INDEX "evals_evaluation_dataset_id_idx" ON "evals_evaluations" USING btree ("datasetId"); +CREATE INDEX "evals_evaluation_created_at_idx" ON "evals_evaluations" USING btree ("createdAt"); + +-- +-- Class Model as table evals_models +-- +CREATE TABLE "evals_models" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "_evalsRunsModelsEvalsRunsId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "evals_models_unique_name" ON "evals_models" USING btree ("name"); + +-- +-- Class RunSummary as table evals_run_summaries +-- +CREATE TABLE "evals_run_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "runId" uuid NOT NULL, + "totalTasks" bigint NOT NULL, + "totalSamples" bigint NOT NULL, + "avgAccuracy" double precision NOT NULL, + "totalTokens" bigint NOT NULL, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE UNIQUE INDEX "run_summaries_unique_run" ON "evals_run_summaries" USING btree ("runId"); +CREATE INDEX "run_summaries_created_at_idx" ON "evals_run_summaries" USING btree ("createdAt"); + +-- +-- Class Run as table evals_runs +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "inspectId" text NOT NULL, + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_inspect_id_idx" ON "evals_runs" USING btree ("inspectId"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- Class Sample as table evals_samples +-- +CREATE TABLE "evals_samples" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL, + "datasetId" uuid NOT NULL, + "input" text NOT NULL, + "target" text NOT NULL, + "isActive" boolean NOT NULL DEFAULT true, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "evals_sample_dataset_id_idx" ON "evals_samples" USING btree ("datasetId"); +CREATE INDEX "evals_sample_created_at_idx" ON "evals_samples" USING btree ("createdAt"); + +-- +-- Class SampleTagXref as table evals_samples_tags_xref +-- +CREATE TABLE "evals_samples_tags_xref" ( + "id" bigserial PRIMARY KEY, + "sampleId" uuid NOT NULL, + "tagId" uuid NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "sample_tag_index_idx" ON "evals_samples_tags_xref" USING btree ("sampleId", "tagId"); + +-- +-- Class ScorerResult as table evals_scorer_results +-- +CREATE TABLE "evals_scorer_results" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "scorerId" uuid NOT NULL, + "evaluationId" uuid NOT NULL, + "data" json NOT NULL +); + +-- Indexes +CREATE INDEX "scorer_result_scorer_id_idx" ON "evals_scorer_results" USING btree ("scorerId"); +CREATE INDEX "scorer_result_evaluation_id_idx" ON "evals_scorer_results" USING btree ("evaluationId"); + +-- +-- Class Scorer as table evals_scorers +-- +CREATE TABLE "evals_scorers" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "scorers_unique_name" ON "evals_scorers" USING btree ("name"); + +-- +-- Class Tag as table evals_tags +-- +CREATE TABLE "evals_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "name" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "tags_unique_name" ON "evals_tags" USING btree ("name"); + +-- +-- Class TaskSummary as table evals_task_summaries +-- +CREATE TABLE "evals_task_summaries" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "taskId" uuid NOT NULL, + "totalSamples" bigint NOT NULL, + "passedSamples" bigint NOT NULL, + "accuracy" double precision NOT NULL, + "taskName" text, + "inputTokens" bigint NOT NULL, + "outputTokens" bigint NOT NULL, + "totalTokens" bigint NOT NULL, + "reasoningTokens" bigint NOT NULL, + "variant" text, + "executionTimeSeconds" bigint NOT NULL, + "samplesWithRetries" bigint NOT NULL, + "samplesNeverSucceeded" bigint NOT NULL, + "totalRetries" bigint NOT NULL +); + +-- +-- Class Task as table evals_tasks +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "inspectId" text NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_inspect_id_idx" ON "evals_tasks" USING btree ("inspectId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- Class CloudStorageEntry as table serverpod_cloud_storage +-- +CREATE TABLE "serverpod_cloud_storage" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "addedTime" timestamp without time zone NOT NULL, + "expiration" timestamp without time zone, + "byteData" bytea NOT NULL, + "verified" boolean NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_path_idx" ON "serverpod_cloud_storage" USING btree ("storageId", "path"); +CREATE INDEX "serverpod_cloud_storage_expiration" ON "serverpod_cloud_storage" USING btree ("expiration"); + +-- +-- Class CloudStorageDirectUploadEntry as table serverpod_cloud_storage_direct_upload +-- +CREATE TABLE "serverpod_cloud_storage_direct_upload" ( + "id" bigserial PRIMARY KEY, + "storageId" text NOT NULL, + "path" text NOT NULL, + "expiration" timestamp without time zone NOT NULL, + "authKey" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_cloud_storage_direct_upload_storage_path" ON "serverpod_cloud_storage_direct_upload" USING btree ("storageId", "path"); + +-- +-- Class FutureCallEntry as table serverpod_future_call +-- +CREATE TABLE "serverpod_future_call" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "serializedObject" text, + "serverId" text NOT NULL, + "identifier" text +); + +-- Indexes +CREATE INDEX "serverpod_future_call_time_idx" ON "serverpod_future_call" USING btree ("time"); +CREATE INDEX "serverpod_future_call_serverId_idx" ON "serverpod_future_call" USING btree ("serverId"); +CREATE INDEX "serverpod_future_call_identifier_idx" ON "serverpod_future_call" USING btree ("identifier"); + +-- +-- Class ServerHealthConnectionInfo as table serverpod_health_connection_info +-- +CREATE TABLE "serverpod_health_connection_info" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "active" bigint NOT NULL, + "closing" bigint NOT NULL, + "idle" bigint NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_connection_info_timestamp_idx" ON "serverpod_health_connection_info" USING btree ("timestamp", "serverId", "granularity"); + +-- +-- Class ServerHealthMetric as table serverpod_health_metric +-- +CREATE TABLE "serverpod_health_metric" ( + "id" bigserial PRIMARY KEY, + "name" text NOT NULL, + "serverId" text NOT NULL, + "timestamp" timestamp without time zone NOT NULL, + "isHealthy" boolean NOT NULL, + "value" double precision NOT NULL, + "granularity" bigint NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_health_metric_timestamp_idx" ON "serverpod_health_metric" USING btree ("timestamp", "serverId", "name", "granularity"); + +-- +-- Class LogEntry as table serverpod_log +-- +CREATE TABLE "serverpod_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "reference" text, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "logLevel" bigint NOT NULL, + "message" text NOT NULL, + "error" text, + "stackTrace" text, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_log_sessionLogId_idx" ON "serverpod_log" USING btree ("sessionLogId"); + +-- +-- Class MessageLogEntry as table serverpod_message_log +-- +CREATE TABLE "serverpod_message_log" ( + "id" bigserial PRIMARY KEY, + "sessionLogId" bigint NOT NULL, + "serverId" text NOT NULL, + "messageId" bigint NOT NULL, + "endpoint" text NOT NULL, + "messageName" text NOT NULL, + "duration" double precision NOT NULL, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- +-- Class MethodInfo as table serverpod_method +-- +CREATE TABLE "serverpod_method" ( + "id" bigserial PRIMARY KEY, + "endpoint" text NOT NULL, + "method" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_method_endpoint_method_idx" ON "serverpod_method" USING btree ("endpoint", "method"); + +-- +-- Class DatabaseMigrationVersion as table serverpod_migrations +-- +CREATE TABLE "serverpod_migrations" ( + "id" bigserial PRIMARY KEY, + "module" text NOT NULL, + "version" text NOT NULL, + "timestamp" timestamp without time zone +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_migrations_ids" ON "serverpod_migrations" USING btree ("module"); + +-- +-- Class QueryLogEntry as table serverpod_query_log +-- +CREATE TABLE "serverpod_query_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "sessionLogId" bigint NOT NULL, + "messageId" bigint, + "query" text NOT NULL, + "duration" double precision NOT NULL, + "numRows" bigint, + "error" text, + "stackTrace" text, + "slow" boolean NOT NULL, + "order" bigint NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_query_log_sessionLogId_idx" ON "serverpod_query_log" USING btree ("sessionLogId"); + +-- +-- Class ReadWriteTestEntry as table serverpod_readwrite_test +-- +CREATE TABLE "serverpod_readwrite_test" ( + "id" bigserial PRIMARY KEY, + "number" bigint NOT NULL +); + +-- +-- Class RuntimeSettings as table serverpod_runtime_settings +-- +CREATE TABLE "serverpod_runtime_settings" ( + "id" bigserial PRIMARY KEY, + "logSettings" json NOT NULL, + "logSettingsOverrides" json NOT NULL, + "logServiceCalls" boolean NOT NULL, + "logMalformedCalls" boolean NOT NULL +); + +-- +-- Class SessionLogEntry as table serverpod_session_log +-- +CREATE TABLE "serverpod_session_log" ( + "id" bigserial PRIMARY KEY, + "serverId" text NOT NULL, + "time" timestamp without time zone NOT NULL, + "module" text, + "endpoint" text, + "method" text, + "duration" double precision, + "numQueries" bigint, + "slow" boolean, + "error" text, + "stackTrace" text, + "authenticatedUserId" bigint, + "userId" text, + "isOpen" boolean, + "touched" timestamp without time zone NOT NULL +); + +-- Indexes +CREATE INDEX "serverpod_session_log_serverid_idx" ON "serverpod_session_log" USING btree ("serverId"); +CREATE INDEX "serverpod_session_log_touched_idx" ON "serverpod_session_log" USING btree ("touched"); +CREATE INDEX "serverpod_session_log_isopen_idx" ON "serverpod_session_log" USING btree ("isOpen"); + +-- +-- Class AppleAccount as table serverpod_auth_idp_apple_account +-- +CREATE TABLE "serverpod_auth_idp_apple_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userIdentifier" text NOT NULL, + "refreshToken" text NOT NULL, + "refreshTokenRequestedWithBundleIdentifier" boolean NOT NULL, + "lastRefreshedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text, + "isEmailVerified" boolean, + "isPrivateEmail" boolean, + "firstName" text, + "lastName" text +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_apple_account_identifier" ON "serverpod_auth_idp_apple_account" USING btree ("userIdentifier"); + +-- +-- Class EmailAccount as table serverpod_auth_idp_email_account +-- +CREATE TABLE "serverpod_auth_idp_email_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "passwordHash" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_email" ON "serverpod_auth_idp_email_account" USING btree ("email"); + +-- +-- Class EmailAccountPasswordResetRequest as table serverpod_auth_idp_email_account_password_reset_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_password_reset_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "emailAccountId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "challengeId" uuid NOT NULL, + "setPasswordChallengeId" uuid +); + +-- +-- Class EmailAccountRequest as table serverpod_auth_idp_email_account_request +-- +CREATE TABLE "serverpod_auth_idp_email_account_request" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "email" text NOT NULL, + "challengeId" uuid NOT NULL, + "createAccountChallengeId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_email_account_request_email" ON "serverpod_auth_idp_email_account_request" USING btree ("email"); + +-- +-- Class FirebaseAccount as table serverpod_auth_idp_firebase_account +-- +CREATE TABLE "serverpod_auth_idp_firebase_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text, + "phone" text, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_firebase_account_user_identifier" ON "serverpod_auth_idp_firebase_account" USING btree ("userIdentifier"); + +-- +-- Class GoogleAccount as table serverpod_auth_idp_google_account +-- +CREATE TABLE "serverpod_auth_idp_google_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "created" timestamp without time zone NOT NULL, + "email" text NOT NULL, + "userIdentifier" text NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_google_account_user_identifier" ON "serverpod_auth_idp_google_account" USING btree ("userIdentifier"); + +-- +-- Class PasskeyAccount as table serverpod_auth_idp_passkey_account +-- +CREATE TABLE "serverpod_auth_idp_passkey_account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL, + "keyId" bytea NOT NULL, + "keyIdBase64" text NOT NULL, + "clientDataJSON" bytea NOT NULL, + "attestationObject" bytea NOT NULL, + "originalChallenge" bytea NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_idp_passkey_account_key_id_base64" ON "serverpod_auth_idp_passkey_account" USING btree ("keyIdBase64"); + +-- +-- Class PasskeyChallenge as table serverpod_auth_idp_passkey_challenge +-- +CREATE TABLE "serverpod_auth_idp_passkey_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "challenge" bytea NOT NULL +); + +-- +-- Class RateLimitedRequestAttempt as table serverpod_auth_idp_rate_limited_request_attempt +-- +CREATE TABLE "serverpod_auth_idp_rate_limited_request_attempt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "domain" text NOT NULL, + "source" text NOT NULL, + "nonce" text NOT NULL, + "ipAddress" text, + "attemptedAt" timestamp without time zone NOT NULL, + "extraData" json +); + +-- Indexes +CREATE INDEX "serverpod_auth_idp_rate_limited_request_attempt_composite" ON "serverpod_auth_idp_rate_limited_request_attempt" USING btree ("domain", "source", "nonce", "attemptedAt"); + +-- +-- Class SecretChallenge as table serverpod_auth_idp_secret_challenge +-- +CREATE TABLE "serverpod_auth_idp_secret_challenge" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "challengeCodeHash" text NOT NULL +); + +-- +-- Class RefreshToken as table serverpod_auth_core_jwt_refresh_token +-- +CREATE TABLE "serverpod_auth_core_jwt_refresh_token" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "extraClaims" text, + "method" text NOT NULL, + "fixedSecret" bytea NOT NULL, + "rotatingSecretHash" text NOT NULL, + "lastUpdatedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "serverpod_auth_core_jwt_refresh_token_last_updated_at" ON "serverpod_auth_core_jwt_refresh_token" USING btree ("lastUpdatedAt"); + +-- +-- Class UserProfile as table serverpod_auth_core_profile +-- +CREATE TABLE "serverpod_auth_core_profile" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "userName" text, + "fullName" text, + "email" text, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "imageId" uuid +); + +-- Indexes +CREATE UNIQUE INDEX "serverpod_auth_profile_user_profile_email_auth_user_id" ON "serverpod_auth_core_profile" USING btree ("authUserId"); + +-- +-- Class UserProfileImage as table serverpod_auth_core_profile_image +-- +CREATE TABLE "serverpod_auth_core_profile_image" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "userProfileId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "storageId" text NOT NULL, + "path" text NOT NULL, + "url" text NOT NULL +); + +-- +-- Class ServerSideSession as table serverpod_auth_core_session +-- +CREATE TABLE "serverpod_auth_core_session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "authUserId" uuid NOT NULL, + "scopeNames" json NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastUsedAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "expiresAt" timestamp without time zone, + "expireAfterUnusedFor" bigint, + "sessionKeyHash" bytea NOT NULL, + "sessionKeySalt" bytea NOT NULL, + "method" text NOT NULL +); + +-- +-- Class AuthUser as table serverpod_auth_core_user +-- +CREATE TABLE "serverpod_auth_core_user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "createdAt" timestamp without time zone NOT NULL, + "scopeNames" json NOT NULL, + "blocked" boolean NOT NULL +); + +-- +-- Foreign relations for "evals_datasets" table +-- +ALTER TABLE ONLY "evals_datasets" + ADD CONSTRAINT "evals_datasets_fk_0" + FOREIGN KEY("_evalsRunsDatasetsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_evaluations" table +-- +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_1" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_2" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_3" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_evaluations" + ADD CONSTRAINT "evals_evaluations_fk_4" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_models" table +-- +ALTER TABLE ONLY "evals_models" + ADD CONSTRAINT "evals_models_fk_0" + FOREIGN KEY("_evalsRunsModelsEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_run_summaries" table +-- +ALTER TABLE ONLY "evals_run_summaries" + ADD CONSTRAINT "evals_run_summaries_fk_0" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_samples" table +-- +ALTER TABLE ONLY "evals_samples" + ADD CONSTRAINT "evals_samples_fk_0" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_samples_tags_xref" table +-- +ALTER TABLE ONLY "evals_samples_tags_xref" + ADD CONSTRAINT "evals_samples_tags_xref_fk_0" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_samples_tags_xref" + ADD CONSTRAINT "evals_samples_tags_xref_fk_1" + FOREIGN KEY("tagId") + REFERENCES "evals_tags"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_scorer_results" table +-- +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_0" + FOREIGN KEY("scorerId") + REFERENCES "evals_scorers"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_scorer_results" + ADD CONSTRAINT "evals_scorer_results_fk_1" + FOREIGN KEY("evaluationId") + REFERENCES "evals_evaluations"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_task_summaries" table +-- +ALTER TABLE ONLY "evals_task_summaries" + ADD CONSTRAINT "evals_task_summaries_fk_0" + FOREIGN KEY("taskId") + REFERENCES "evals_tasks"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "evals_tasks" table +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_log" table +-- +ALTER TABLE ONLY "serverpod_log" + ADD CONSTRAINT "serverpod_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_message_log" table +-- +ALTER TABLE ONLY "serverpod_message_log" + ADD CONSTRAINT "serverpod_message_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_query_log" table +-- +ALTER TABLE ONLY "serverpod_query_log" + ADD CONSTRAINT "serverpod_query_log_fk_0" + FOREIGN KEY("sessionLogId") + REFERENCES "serverpod_session_log"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_apple_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_apple_account" + ADD CONSTRAINT "serverpod_auth_idp_apple_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account" + ADD CONSTRAINT "serverpod_auth_idp_email_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_password_reset_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_0" + FOREIGN KEY("emailAccountId") + REFERENCES "serverpod_auth_idp_email_account"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_1" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_password_reset_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_password_reset_request_fk_2" + FOREIGN KEY("setPasswordChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_email_account_request" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_0" + FOREIGN KEY("challengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_idp_email_account_request" + ADD CONSTRAINT "serverpod_auth_idp_email_account_request_fk_1" + FOREIGN KEY("createAccountChallengeId") + REFERENCES "serverpod_auth_idp_secret_challenge"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_firebase_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_firebase_account" + ADD CONSTRAINT "serverpod_auth_idp_firebase_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_google_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_google_account" + ADD CONSTRAINT "serverpod_auth_idp_google_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_idp_passkey_account" table +-- +ALTER TABLE ONLY "serverpod_auth_idp_passkey_account" + ADD CONSTRAINT "serverpod_auth_idp_passkey_account_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_jwt_refresh_token" table +-- +ALTER TABLE ONLY "serverpod_auth_core_jwt_refresh_token" + ADD CONSTRAINT "serverpod_auth_core_jwt_refresh_token_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "serverpod_auth_core_profile" + ADD CONSTRAINT "serverpod_auth_core_profile_fk_1" + FOREIGN KEY("imageId") + REFERENCES "serverpod_auth_core_profile_image"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_profile_image" table +-- +ALTER TABLE ONLY "serverpod_auth_core_profile_image" + ADD CONSTRAINT "serverpod_auth_core_profile_image_fk_0" + FOREIGN KEY("userProfileId") + REFERENCES "serverpod_auth_core_profile"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + +-- +-- Foreign relations for "serverpod_auth_core_session" table +-- +ALTER TABLE ONLY "serverpod_auth_core_session" + ADD CONSTRAINT "serverpod_auth_core_session_fk_0" + FOREIGN KEY("authUserId") + REFERENCES "serverpod_auth_core_user"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260116133701488', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260116133701488', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition_project.json b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition_project.json new file mode 100644 index 0000000..85723fa --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/definition_project.json @@ -0,0 +1,1585 @@ +{ + "__className__": "serverpod.DatabaseDefinition", + "moduleName": "eval_explorer", + "tables": [ + { + "__className__": "serverpod.TableDefinition", + "name": "evals_datasets", + "dartName": "Dataset", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsDatasetsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_datasets_fk_0", + "columns": [ + "_evalsRunsDatasetsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_datasets_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "datasets_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_evaluations", + "dartName": "Evaluation", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "output", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "toolCalls", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "retryCount", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "error", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "neverSucceeded", + "columnType": 1, + "isNullable": false, + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "durationSeconds", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "analyzerPassed", + "columnType": 1, + "isNullable": true, + "dartType": "bool?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsPassed", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "testsTotal", + "columnType": 6, + "isNullable": true, + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "structureScore", + "columnType": 3, + "isNullable": true, + "dartType": "double?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "failureReason", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_1", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_2", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_3", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_evaluations_fk_4", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluations_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_task_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "taskId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_sample_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_evaluation_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_models", + "dartName": "Model", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsModelsEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_models_fk_0", + "columns": [ + "_evalsRunsModelsEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_models_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_run_summaries", + "dartName": "RunSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTasks", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "avgAccuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_run_summaries_fk_0", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_run_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_unique_run", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "run_summaries_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples", + "dartName": "Sample", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "input", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "target", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "isActive", + "columnType": 1, + "isNullable": false, + "columnDefault": "true", + "dartType": "bool" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_fk_0", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_sample_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples_tags_xref", + "dartName": "SampleTagXref", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('evals_samples_tags_xref_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "tagId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_0", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_1", + "columns": [ + "tagId" + ], + "referenceTable": "evals_tags", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_tags_xref_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "sample_tag_index_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "tagId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorer_results", + "dartName": "ScorerResult", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "scorerId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "evaluationId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "data", + "columnType": 8, + "isNullable": false, + "dartType": "package:eval_explorer_shared/eval_explorer_shared.dart:ScorerResultData" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_0", + "columns": [ + "scorerId" + ], + "referenceTable": "evals_scorers", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_scorer_results_fk_1", + "columns": [ + "evaluationId" + ], + "referenceTable": "evals_evaluations", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorer_results_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_scorer_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "scorerId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorer_result_evaluation_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "evaluationId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_scorers", + "dartName": "Scorer", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_scorers_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "scorers_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tags", + "dartName": "Tag", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "name", + "columnType": 0, + "isNullable": false, + "dartType": "String" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tags_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "tags_unique_name", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "name" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_task_summaries", + "dartName": "TaskSummary", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "passedSamples", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "accuracy", + "columnType": 3, + "isNullable": false, + "dartType": "double" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "taskName", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "outputTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "reasoningTokens", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variant", + "columnType": 0, + "isNullable": true, + "dartType": "String?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "executionTimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesWithRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "samplesNeverSucceeded", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "totalRetries", + "columnType": 6, + "isNullable": false, + "dartType": "int" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_task_summaries_fk_0", + "columns": [ + "taskId" + ], + "referenceTable": "evals_tasks", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_summaries_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + } + ], + "managed": true + }, + { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + ], + "installedModules": [ + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod", + "version": "20251208110333922-v3-0-0" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_idp", + "version": "20260109031533194" + }, + { + "__className__": "serverpod.DatabaseMigrationVersion", + "module": "serverpod_auth_core", + "version": "20251208110412389-v3-0-0" + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.json b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.json new file mode 100644 index 0000000..fddd838 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.json @@ -0,0 +1,514 @@ +{ + "__className__": "serverpod.DatabaseMigration", + "actions": [ + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "deleteTable", + "deleteTable": "evals_runs" + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_runs", + "dartName": "Run", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "status", + "columnType": 0, + "isNullable": false, + "dartType": "protocol:Status" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "variants", + "columnType": 8, + "isNullable": false, + "dartType": "List" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "mcpServerVersion", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "batchRuntimeSeconds", + "columnType": 6, + "isNullable": false, + "dartType": "int" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + } + ], + "foreignKeys": [], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_runs_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_status_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "status" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "runs_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_samples_tags_xref", + "dartName": "SampleTagXref", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 6, + "isNullable": false, + "columnDefault": "nextval('evals_samples_tags_xref_id_seq'::regclass)", + "dartType": "int?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "sampleId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "tagId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_0", + "columns": [ + "sampleId" + ], + "referenceTable": "evals_samples", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_samples_tags_xref_fk_1", + "columns": [ + "tagId" + ], + "referenceTable": "evals_tags", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_samples_tags_xref_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "sample_tag_index_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "sampleId" + }, + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "tagId" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": false + } + ], + "managed": true + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "alterTable", + "alterTable": { + "__className__": "serverpod.TableMigration", + "name": "evals_tags", + "schema": "public", + "addColumns": [], + "deleteColumns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "modifyColumns": [], + "addIndexes": [], + "deleteIndexes": [], + "addForeignKeys": [], + "deleteForeignKeys": [ + "evals_tags_fk_0" + ], + "warnings": [ + { + "__className__": "serverpod.DatabaseMigrationWarning", + "type": "columnDropped", + "message": "Column \"_evalsSamplesTagsEvalsSamplesId\" of table \"evals_tags\" will be dropped.", + "table": "evals_tags", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "destrucive": true + } + ] + } + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "deleteTable", + "deleteTable": "evals_tasks" + }, + { + "__className__": "serverpod.DatabaseMigrationAction", + "type": "createTable", + "createTable": { + "__className__": "serverpod.TableDefinition", + "name": "evals_tasks", + "dartName": "Task", + "module": "eval_explorer", + "schema": "public", + "columns": [ + { + "__className__": "serverpod.ColumnDefinition", + "name": "id", + "columnType": 7, + "isNullable": false, + "columnDefault": "gen_random_uuid_v7()", + "dartType": "UuidValue?" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "inspectId", + "columnType": 0, + "isNullable": false, + "dartType": "String" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "modelId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "datasetId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "runId", + "columnType": 7, + "isNullable": false, + "dartType": "UuidValue" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "createdAt", + "columnType": 4, + "isNullable": false, + "columnDefault": "CURRENT_TIMESTAMP", + "dartType": "DateTime" + }, + { + "__className__": "serverpod.ColumnDefinition", + "name": "_evalsRunsTasksEvalsRunsId", + "columnType": 7, + "isNullable": true, + "dartType": "UuidValue?" + } + ], + "foreignKeys": [ + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_0", + "columns": [ + "modelId" + ], + "referenceTable": "evals_models", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_1", + "columns": [ + "datasetId" + ], + "referenceTable": "evals_datasets", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_2", + "columns": [ + "runId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 4 + }, + { + "__className__": "serverpod.ForeignKeyDefinition", + "constraintName": "evals_tasks_fk_3", + "columns": [ + "_evalsRunsTasksEvalsRunsId" + ], + "referenceTable": "evals_runs", + "referenceTableSchema": "public", + "referenceColumns": [ + "id" + ], + "onUpdate": 3, + "onDelete": 3 + } + ], + "indexes": [ + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_tasks_pkey", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "id" + } + ], + "type": "btree", + "isUnique": true, + "isPrimary": true + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_run_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "runId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_inspect_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "inspectId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_model_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "modelId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_dataset_id_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "datasetId" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + }, + { + "__className__": "serverpod.IndexDefinition", + "indexName": "evals_task_created_at_idx", + "elements": [ + { + "__className__": "serverpod.IndexElementDefinition", + "type": 0, + "definition": "createdAt" + } + ], + "type": "btree", + "isUnique": false, + "isPrimary": false + } + ], + "managed": true + } + } + ], + "warnings": [ + { + "__className__": "serverpod.DatabaseMigrationWarning", + "type": "tableDropped", + "message": "One or more columns are added to table \"evals_runs\" which cannot be added in a table migration. The complete table will be deleted and recreated.", + "table": "evals_runs", + "columns": [ + "inspectId" + ], + "destrucive": true + }, + { + "__className__": "serverpod.DatabaseMigrationWarning", + "type": "columnDropped", + "message": "Column \"_evalsSamplesTagsEvalsSamplesId\" of table \"evals_tags\" will be dropped.", + "table": "evals_tags", + "columns": [ + "_evalsSamplesTagsEvalsSamplesId" + ], + "destrucive": true + }, + { + "__className__": "serverpod.DatabaseMigrationWarning", + "type": "tableDropped", + "message": "One or more columns are added to table \"evals_tasks\" which cannot be added in a table migration. The complete table will be deleted and recreated.", + "table": "evals_tasks", + "columns": [ + "inspectId" + ], + "destrucive": true + } + ], + "migrationApiVersion": 1 +} \ No newline at end of file diff --git a/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.sql b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.sql new file mode 100644 index 0000000..f0a4a22 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/20260116133701488/migration.sql @@ -0,0 +1,175 @@ +BEGIN; + +-- +-- Function: gen_random_uuid_v7() +-- Source: https://gist.github.com/kjmph/5bd772b2c2df145aa645b837da7eca74 +-- License: MIT (copyright notice included on the generator source code). +-- +create or replace function gen_random_uuid_v7() +returns uuid +as $$ +begin + -- use random v4 uuid as starting point (which has the same variant we need) + -- then overlay timestamp + -- then set version 7 by flipping the 2 and 1 bit in the version 4 string + return encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) + placing substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3) + from 1 for 6 + ), + 52, 1 + ), + 53, 1 + ), + 'hex')::uuid; +end +$$ +language plpgsql +volatile; + +-- +-- ACTION DROP TABLE +-- +DROP TABLE "evals_runs" CASCADE; + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_runs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "inspectId" text NOT NULL, + "status" text NOT NULL, + "variants" json NOT NULL, + "mcpServerVersion" text NOT NULL, + "batchRuntimeSeconds" bigint NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Indexes +CREATE INDEX "runs_status_idx" ON "evals_runs" USING btree ("status"); +CREATE INDEX "runs_inspect_id_idx" ON "evals_runs" USING btree ("inspectId"); +CREATE INDEX "runs_created_at_idx" ON "evals_runs" USING btree ("createdAt"); + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_samples_tags_xref" ( + "id" bigserial PRIMARY KEY, + "sampleId" uuid NOT NULL, + "tagId" uuid NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX "sample_tag_index_idx" ON "evals_samples_tags_xref" USING btree ("sampleId", "tagId"); + +-- +-- ACTION ALTER TABLE +-- +ALTER TABLE "evals_tags" DROP CONSTRAINT "evals_tags_fk_0"; +ALTER TABLE "evals_tags" DROP COLUMN "_evalsSamplesTagsEvalsSamplesId"; +-- +-- ACTION DROP TABLE +-- +DROP TABLE "evals_tasks" CASCADE; + +-- +-- ACTION CREATE TABLE +-- +CREATE TABLE "evals_tasks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid_v7(), + "inspectId" text NOT NULL, + "modelId" uuid NOT NULL, + "datasetId" uuid NOT NULL, + "runId" uuid NOT NULL, + "createdAt" timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + "_evalsRunsTasksEvalsRunsId" uuid +); + +-- Indexes +CREATE INDEX "evals_task_run_id_idx" ON "evals_tasks" USING btree ("runId"); +CREATE INDEX "evals_task_inspect_id_idx" ON "evals_tasks" USING btree ("inspectId"); +CREATE INDEX "evals_task_model_id_idx" ON "evals_tasks" USING btree ("modelId"); +CREATE INDEX "evals_task_dataset_id_idx" ON "evals_tasks" USING btree ("datasetId"); +CREATE INDEX "evals_task_created_at_idx" ON "evals_tasks" USING btree ("createdAt"); + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_samples_tags_xref" + ADD CONSTRAINT "evals_samples_tags_xref_fk_0" + FOREIGN KEY("sampleId") + REFERENCES "evals_samples"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_samples_tags_xref" + ADD CONSTRAINT "evals_samples_tags_xref_fk_1" + FOREIGN KEY("tagId") + REFERENCES "evals_tags"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +-- +-- ACTION CREATE FOREIGN KEY +-- +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_0" + FOREIGN KEY("modelId") + REFERENCES "evals_models"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_1" + FOREIGN KEY("datasetId") + REFERENCES "evals_datasets"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_2" + FOREIGN KEY("runId") + REFERENCES "evals_runs"("id") + ON DELETE CASCADE + ON UPDATE NO ACTION; +ALTER TABLE ONLY "evals_tasks" + ADD CONSTRAINT "evals_tasks_fk_3" + FOREIGN KEY("_evalsRunsTasksEvalsRunsId") + REFERENCES "evals_runs"("id") + ON DELETE NO ACTION + ON UPDATE NO ACTION; + + +-- +-- MIGRATION VERSION FOR eval_explorer +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('eval_explorer', '20260116133701488', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260116133701488', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod', '20251208110333922-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110333922-v3-0-0', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_idp +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_idp', '20260109031533194', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20260109031533194', "timestamp" = now(); + +-- +-- MIGRATION VERSION FOR serverpod_auth_core +-- +INSERT INTO "serverpod_migrations" ("module", "version", "timestamp") + VALUES ('serverpod_auth_core', '20251208110412389-v3-0-0', now()) + ON CONFLICT ("module") + DO UPDATE SET "version" = '20251208110412389-v3-0-0', "timestamp" = now(); + + +COMMIT; diff --git a/packages/eval_explorer/eval_explorer_server/migrations/migration_registry.txt b/packages/eval_explorer/eval_explorer_server/migrations/migration_registry.txt new file mode 100644 index 0000000..56c29ee --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/migrations/migration_registry.txt @@ -0,0 +1,10 @@ +### AUTOMATICALLY GENERATED DO NOT MODIFY +### +### This file is generated by Serverpod when creating a migration, do not modify it +### manually. If a collision is detected in this file when doing a code merge, resolve +### the conflict by removing and recreating the conflicting migration. + +20260108211117297 +20260109222127000 +20260115201713782 +20260116133701488 diff --git a/packages/eval_explorer/eval_explorer_server/pubspec.yaml b/packages/eval_explorer/eval_explorer_server/pubspec.yaml new file mode 100644 index 0000000..af4aaf3 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/pubspec.yaml @@ -0,0 +1,36 @@ +name: eval_explorer_server +description: Starting point for a Serverpod server. +resolution: workspace +environment: + sdk: ^3.10.0 + +dependencies: + ansicolor: any + args: any + eval_explorer_shared: + path: ../eval_explorer_shared + path: any + serverpod: any + serverpod_auth_idp_server: any + yaml: any + +dev_dependencies: + lints: ">=3.0.0 <7.0.0" + serverpod_test: 3.2.0 + test: any + +serverpod: + scripts: + # Starts the server and applies migrations + start: dart bin/main.dart --apply-migrations + + # Build the Flutter web app and move it to the server's web directory + # + # Unfortunately, we can't use the `-o` flag directly because of an error + # that happens on windows. Issue is tracked in the flutter + # repository here: https://github.com/flutter/flutter/issues/157886 + flutter_build: cd ../eval_explorer_flutter && flutter build web --base-href + /app/ --wasm && rm -rf ../eval_explorer_server/web/app && mv build/web/ + ../eval_explorer_server/web/app + + fixtures: dart bin/command.dart fixtures --path lib/datasets --verbose diff --git a/packages/eval_explorer/eval_explorer_server/test/datasets_parser_test.dart b/packages/eval_explorer/eval_explorer_server/test/datasets_parser_test.dart new file mode 100644 index 0000000..af080d0 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/test/datasets_parser_test.dart @@ -0,0 +1,63 @@ +import 'package:eval_explorer_server/src/business/fixtures/fixtures_parser.dart'; +import 'package:path/path.dart' as p; +import 'package:test/test.dart'; +import 'dart:io'; + +void main() { + test('Parses datasets correctly', () async { + // Correctly locating the datasets folder relative to the test file + // Assuming the test file is in eval_explorer_server/test/ + // and datasets are in datasets/ (relative to the repo root) + final rootDir = Directory.current.parent.parent; + final datasetsPath = p.join(rootDir.path, 'datasets'); + + // Fallback: If running from within the server package directly + final serverDir = Directory.current; + final fallbackDatasetsPath = p.join( + serverDir.parent.parent.path, + 'datasets', + ); + + String validPath = datasetsPath; + if (!await Directory(datasetsPath).exists()) { + if (await Directory(fallbackDatasetsPath).exists()) { + validPath = fallbackDatasetsPath; + } else { + // Try one more common setup: workspace root + // If we are in /.../eval_explorer_server + validPath = p.join(serverDir.path, '../../../datasets'); + } + } + + final parser = FixturesParser(datasetsPath: validPath); + final datasets = (await parser.parse()).toList(); + + expect(datasets, isNotEmpty); + + // Check for dart_qa_dataset + final dartDataset = datasets.firstWhere((d) => d.name == 'dart_qa_dataset'); + expect(dartDataset.samples, isNotEmpty); + + final dartSample = dartDataset.samples.firstWhere( + (s) => s.id == 'dart_futures_vs_streams', + ); + expect(dartSample.input, contains('Futures and Streams')); + expect(dartSample.metadata.tags, contains('dart')); + expect(dartSample.metadata.added, isNotNull); + + // Check for dart_qa_dataset + final dartQADataset = datasets.firstWhere((d) { + return d.name == 'dart_qa_dataset'; + }); + expect(dartQADataset.samples, isNotEmpty); + + final dartQAConstConstructorSample = dartQADataset.samples.firstWhere( + (s) => s.id == 'dart_const_constructor', + ); + expect( + dartQAConstConstructorSample.input, + contains('trying to use const to create a constant'), + ); + expect(dartSample.metadata.tags, contains('dart')); + }, skip: true); +} diff --git a/packages/eval_explorer/eval_explorer_server/test/fixtures_importer_test.dart b/packages/eval_explorer/eval_explorer_server/test/fixtures_importer_test.dart new file mode 100644 index 0000000..24202db --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/test/fixtures_importer_test.dart @@ -0,0 +1,192 @@ +import 'package:eval_explorer_server/src/business/fixtures/fixtures_importer.dart'; +import 'package:eval_explorer_server/src/business/fixtures/fixtures_parser.dart'; +import 'package:serverpod/serverpod.dart'; +import 'package:test/test.dart'; + +void main() { + late InMemoryFixturesImporter importer; + + setUp(() { + importer = InMemoryFixturesImporter(); + }); + + group('InMemoryFixturesImporter', () { + test('initially empty', () { + expect(importer.datasets, isEmpty); + expect(importer.samples, isEmpty); + }); + + test('import creates new dataset and samples', () async { + final dataset = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1', + target: 'target1', + metadata: SampleMetadata(), + ), + FixtureSample( + id: 'sample2', + input: 'input2', + target: 'target2', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset]); + + expect(importer.datasets, hasLength(1)); + expect(importer.datasets.values.first.name, 'test_dataset'); + expect(importer.datasets.values.first.isActive, isTrue); + + expect(importer.samples, hasLength(2)); + expect(importer.samples.values.any((s) => s.name == 'sample1'), isTrue); + expect(importer.samples.values.any((s) => s.name == 'sample2'), isTrue); + expect(importer.samples.values.first.isActive, isTrue); + }); + + test('import updates existing samples', () async { + final dataset1 = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1', + target: 'target1', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset1]); + + final dataset2 = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1_modified', + target: 'target1_modified', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset2]); + + expect(importer.samples, hasLength(1)); + + final sample = importer.samples.values.first; + expect(sample.input, 'input1_modified'); + expect(sample.target, 'target1_modified'); + }); + + test('import deactivates missing samples in existing dataset', () async { + // First import: 2 samples + final dataset1 = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1', + target: 'target1', + metadata: SampleMetadata(), + ), + FixtureSample( + id: 'sample2', + input: 'input2', + target: 'target2', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset1]); + expect(importer.samples.values.where((s) => s.isActive), hasLength(2)); + + // Second import: only sample1 + final dataset2 = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1', + target: 'target1', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset2]); + + expect(importer.samples, hasLength(2)); // Total still 2 + final activeSamples = importer.samples.values + .where((s) => s.isActive) + .toList(); + final inactiveSamples = importer.samples.values + .where((s) => !s.isActive) + .toList(); + + expect(activeSamples, hasLength(1)); + expect(activeSamples.first.name, 'sample1'); + + expect(inactiveSamples, hasLength(1)); + expect(inactiveSamples.first.name, 'sample2'); + }); + + test('import deactivates missing datasets', () async { + // First import: 2 datasets + final dataset1 = FixtureDataset( + name: 'dataset1', + samples: [], + ); + final dataset2 = FixtureDataset( + name: 'dataset2', + samples: [], + ); + + await importer.import([dataset1, dataset2]); + expect(importer.datasets.values.where((d) => d.isActive), hasLength(2)); + + // Second import: only dataset1 + await importer.import([dataset1]); + + expect(importer.datasets, hasLength(2)); + final activeDatasets = importer.datasets.values + .where((d) => d.isActive) + .toList(); + final inactiveDatasets = importer.datasets.values + .where((d) => !d.isActive) + .toList(); + + expect(activeDatasets, hasLength(1)); + expect(activeDatasets.first.name, 'dataset1'); + + expect(inactiveDatasets, hasLength(1)); + expect(inactiveDatasets.first.name, 'dataset2'); + }); + + test('generates valid uuids', () async { + final dataset = FixtureDataset( + name: 'test_dataset', + samples: [ + FixtureSample( + id: 'sample1', + input: 'input1', + target: 'target1', + metadata: SampleMetadata(), + ), + ], + ); + + await importer.import([dataset]); + + expect(importer.datasets.values.first.id, isNotNull); + expect(importer.samples.values.first.id, isNotNull); + expect(importer.datasets.values.first.id, isA()); + expect(importer.samples.values.first.id, isA()); + }); + }); +} diff --git a/packages/eval_explorer/eval_explorer_server/test/integration/controllers/samples_controller_test.dart b/packages/eval_explorer/eval_explorer_server/test/integration/controllers/samples_controller_test.dart new file mode 100644 index 0000000..bbea5d1 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/test/integration/controllers/samples_controller_test.dart @@ -0,0 +1,58 @@ +@Tags(['integration']) +library; + +import 'package:eval_explorer_server/src/business/controllers/controllers.dart' + show SamplesController; +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:serverpod/serverpod.dart'; +import 'package:test/test.dart'; + +import '../test_tools/serverpod_test_tools.dart'; + +void main() { + late SamplesController controller; + late Session session; + + withServerpod( + 'SamplesController should', + rollbackDatabase: RollbackDatabase.afterEach, + (final sessionBuilder, final _) { + setUp(() { + session = sessionBuilder.build(); + controller = SamplesController(session); + }); + + tearDown(() { + session.close(); + }); + + test('throw when creating an existing sample', () { + final sample = Sample( + id: UuidValue.fromString(Uuid().v4()), + datasetId: UuidValue.fromString(Uuid().v4()), + name: 'Sample', + input: '--input--', + target: '--target--', + createdAt: DateTime.now(), + ); + expect(() => controller.create(sample), throwsA(isA())); + }); + + test('save an sample', () async { + final dataset = Dataset(name: 'Dataset'); + final savedDataset = await Dataset.db.insertRow(session, dataset); + + final sample = Sample( + datasetId: savedDataset.id!, + name: 'Sample', + input: '--input--', + target: '--target--', + createdAt: DateTime.now(), + ); + final savedSample = await controller.create(sample); + expect(savedSample, isA()); + expect(savedSample.id, isNotNull); + }); + }, + ); +} diff --git a/packages/eval_explorer/eval_explorer_server/test/integration/controllers/tags_controller_test.dart b/packages/eval_explorer/eval_explorer_server/test/integration/controllers/tags_controller_test.dart new file mode 100644 index 0000000..7385b32 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/test/integration/controllers/tags_controller_test.dart @@ -0,0 +1,198 @@ +@Tags(['integration']) +library; + +import 'package:eval_explorer_server/src/business/controllers/controllers.dart' + show SamplesController, TagsController; + +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:serverpod/serverpod.dart'; +import 'package:test/test.dart'; + +import '../test_tools/serverpod_test_tools.dart'; + +void main() { + late SamplesController samplesController; + late TagsController tagsController; + late Session session; + + withServerpod( + 'TagsController.createMissingFromNames should', + rollbackDatabase: RollbackDatabase.afterEach, + (final sessionBuilder, final _) { + setUp(() { + session = sessionBuilder.build(); + samplesController = SamplesController(session); + tagsController = TagsController(session); + }); + + tearDown(() { + session.close(); + }); + + test('create a set of all new tags', () async { + final result = await tagsController.createMissingFromNames( + ['tag1', 'tag2'], + ); + expect(result, isA>()); + expect(result, hasLength(2)); + expect( + await Tag.db.findFirstRow( + session, + where: (t) => t.name.equals('tag1'), + ), + isA(), + ); + expect( + await Tag.db.findFirstRow( + session, + where: (t) => t.name.equals('tag2'), + ), + isA(), + ); + }); + + test( + 'create a set of partially new tags', + () async { + final _ = await tagsController.createMissingFromNames( + ['asdf1', 'asdf2'], + ); + final result2 = await tagsController.createMissingFromNames( + ['asdf2', 'asdf3'], + ); + expect(result2, isA>()); + expect(result2, hasLength(2)); + expect( + await Tag.db.findFirstRow( + session, + where: (t) => t.name.equals('asdf2'), + ), + isA(), + ); + expect( + await Tag.db.findFirstRow( + session, + where: (t) => t.name.equals('asdf3'), + ), + isA(), + ); + // 3 total rows in DB + expect(await Tag.db.count(session), 3); + }, + ); + }, + ); + + withServerpod( + 'TagsController.linkToSample should', + (final sessionBuilder, final _) { + late Dataset dataset; + + setUp(() async { + session = sessionBuilder.build(); + samplesController = SamplesController(session); + tagsController = TagsController(session); + dataset = await Dataset.db.insertRow( + session, + Dataset(name: 'test_dataset'), + ); + }); + + tearDown(() { + session.close(); + }); + + test('add a set of tags to a sample which has none', () async { + final sample = await samplesController.create( + Sample( + name: 'sample1', + datasetId: dataset.id!, + input: 'prompt', + target: 'response', + createdAt: DateTime.now(), + ), + ); + final tags = await tagsController.createMissingFromNames([ + 'tag1', + 'tag2', + ]); + + final modification = await tagsController.linkToSample(sample, tags); + + expect(modification.added, 2); + expect(modification.removed, 0); + + final xrefs = await SampleTagXref.db.find( + session, + where: (t) => t.sampleId.equals(sample.id!), + ); + expect(xrefs, hasLength(2)); + }); + + test('add a set of tags to a sample which has some of those', () async { + final sample = await samplesController.create( + Sample( + name: 'sample2', + datasetId: dataset.id!, + input: 'prompt', + target: 'response', + createdAt: DateTime.now(), + ), + ); + final allTags = await tagsController.createMissingFromNames( + ['tag1', 'tag2', 'tag3'], + ); + final modification = await tagsController.linkToSample(sample, [ + allTags.first, + ]); + expect(modification.added, 1); + expect(modification.removed, 0); + + final modification2 = await tagsController.linkToSample( + sample, + allTags, + ); + expect(modification2.added, 2); + expect(modification2.removed, 0); + + final xrefs = await SampleTagXref.db.find( + session, + where: (t) => t.sampleId.equals(sample.id!), + ); + expect(xrefs, hasLength(3)); + }); + + test('remove stage tags from a sample', () async { + final sample = await samplesController.create( + Sample( + name: 'sample3', + datasetId: dataset.id!, + input: 'prompt', + target: 'response', + createdAt: DateTime.now(), + ), + ); + final tags = await tagsController.createMissingFromNames([ + 'tag1', + 'tag2', + ]); + await tagsController.linkToSample(sample, tags); + + final modification = await tagsController.linkToSample( + sample, + [tags.first], + ); + + expect(modification.added, 0); + expect(modification.removed, 1); + + final xrefs = await SampleTagXref.db.find( + session, + where: (t) => t.sampleId.equals(sample.id!), + ); + expect(xrefs, hasLength(1)); + expect(xrefs.first.tagId, tags.first.id); + }); + }, + ); +} diff --git a/packages/eval_explorer/eval_explorer_server/test/integration/test_tools/serverpod_test_tools.dart b/packages/eval_explorer/eval_explorer_server/test/integration/test_tools/serverpod_test_tools.dart new file mode 100644 index 0000000..16249a8 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/test/integration/test_tools/serverpod_test_tools.dart @@ -0,0 +1,489 @@ +/* AUTOMATICALLY GENERATED CODE DO NOT MODIFY */ +/* To generate run: "serverpod generate" */ + +// ignore_for_file: implementation_imports +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: public_member_api_docs +// ignore_for_file: type_literal_in_constant_pattern +// ignore_for_file: use_super_parameters +// ignore_for_file: invalid_use_of_internal_member +// ignore_for_file: no_leading_underscores_for_local_identifiers + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:serverpod_test/serverpod_test.dart' as _i1; +import 'package:serverpod/serverpod.dart' as _i2; +import 'dart:async' as _i3; +import 'package:serverpod_auth_core_server/serverpod_auth_core_server.dart' + as _i4; +import 'package:eval_explorer_server/src/generated/protocol.dart'; +import 'package:eval_explorer_server/src/generated/endpoints.dart'; +export 'package:serverpod_test/serverpod_test_public_exports.dart'; + +/// Creates a new test group that takes a callback that can be used to write tests. +/// The callback has two parameters: `sessionBuilder` and `endpoints`. +/// `sessionBuilder` is used to build a `Session` object that represents the server state during an endpoint call and is used to set up scenarios. +/// `endpoints` contains all your Serverpod endpoints and lets you call them: +/// ```dart +/// withServerpod('Given Example endpoint', (sessionBuilder, endpoints) { +/// test('when calling `hello` then should return greeting', () async { +/// final greeting = await endpoints.example.hello(sessionBuilder, 'Michael'); +/// expect(greeting, 'Hello Michael'); +/// }); +/// }); +/// ``` +/// +/// **Configuration options** +/// +/// [applyMigrations] Whether pending migrations should be applied when starting Serverpod. Defaults to `true` +/// +/// [enableSessionLogging] Whether session logging should be enabled. Defaults to `false` +/// +/// [rollbackDatabase] Options for when to rollback the database during the test lifecycle. +/// By default `withServerpod` does all database operations inside a transaction that is rolled back after each `test` case. +/// Just like the following enum describes, the behavior of the automatic rollbacks can be configured: +/// ```dart +/// /// Options for when to rollback the database during the test lifecycle. +/// enum RollbackDatabase { +/// /// After each test. This is the default. +/// afterEach, +/// +/// /// After all tests. +/// afterAll, +/// +/// /// Disable rolling back the database. +/// disabled, +/// } +/// ``` +/// +/// [runMode] The run mode that Serverpod should be running in. Defaults to `test`. +/// +/// [serverpodLoggingMode] The logging mode used when creating Serverpod. Defaults to `ServerpodLoggingMode.normal` +/// +/// [serverpodStartTimeout] The timeout to use when starting Serverpod, which connects to the database among other things. Defaults to `Duration(seconds: 30)`. +/// +/// [testServerOutputMode] Options for controlling test server output during test execution. Defaults to `TestServerOutputMode.normal`. +/// ```dart +/// /// Options for controlling test server output during test execution. +/// enum TestServerOutputMode { +/// /// Default mode - only stderr is printed (stdout suppressed). +/// /// This hides normal startup/shutdown logs while preserving error messages. +/// normal, +/// +/// /// All logging - both stdout and stderr are printed. +/// /// Useful for debugging when you need to see all server output. +/// verbose, +/// +/// /// No logging - both stdout and stderr are suppressed. +/// /// Completely silent mode, useful when you don't want any server output. +/// silent, +/// } +/// ``` +/// +/// [testGroupTagsOverride] By default Serverpod test tools tags the `withServerpod` test group with `"integration"`. +/// This is to provide a simple way to only run unit or integration tests. +/// This property allows this tag to be overridden to something else. Defaults to `['integration']`. +/// +/// [experimentalFeatures] Optionally specify experimental features. See [Serverpod] for more information. +@_i1.isTestGroup +void withServerpod( + String testGroupName, + _i1.TestClosure testClosure, { + bool? applyMigrations, + bool? enableSessionLogging, + _i2.ExperimentalFeatures? experimentalFeatures, + _i1.RollbackDatabase? rollbackDatabase, + String? runMode, + _i2.RuntimeParametersListBuilder? runtimeParametersBuilder, + _i2.ServerpodLoggingMode? serverpodLoggingMode, + Duration? serverpodStartTimeout, + List? testGroupTagsOverride, + _i1.TestServerOutputMode? testServerOutputMode, +}) { + _i1.buildWithServerpod<_InternalTestEndpoints>( + testGroupName, + _i1.TestServerpod( + testEndpoints: _InternalTestEndpoints(), + endpoints: Endpoints(), + serializationManager: Protocol(), + runMode: runMode, + applyMigrations: applyMigrations, + isDatabaseEnabled: true, + serverpodLoggingMode: serverpodLoggingMode, + testServerOutputMode: testServerOutputMode, + experimentalFeatures: experimentalFeatures, + runtimeParametersBuilder: runtimeParametersBuilder, + ), + maybeRollbackDatabase: rollbackDatabase, + maybeEnableSessionLogging: enableSessionLogging, + maybeTestGroupTagsOverride: testGroupTagsOverride, + maybeServerpodStartTimeout: serverpodStartTimeout, + maybeTestServerOutputMode: testServerOutputMode, + )(testClosure); +} + +class TestEndpoints { + late final _EmailIdpEndpoint emailIdp; + + late final _JwtRefreshEndpoint jwtRefresh; + + late final _GoogleIdpEndpoint googleIdp; +} + +class _InternalTestEndpoints extends TestEndpoints + implements _i1.InternalTestEndpoints { + @override + void initialize( + _i2.SerializationManager serializationManager, + _i2.EndpointDispatch endpoints, + ) { + emailIdp = _EmailIdpEndpoint( + endpoints, + serializationManager, + ); + jwtRefresh = _JwtRefreshEndpoint( + endpoints, + serializationManager, + ); + googleIdp = _GoogleIdpEndpoint( + endpoints, + serializationManager, + ); + } +} + +class _EmailIdpEndpoint { + _EmailIdpEndpoint( + this._endpointDispatch, + this._serializationManager, + ); + + final _i2.EndpointDispatch _endpointDispatch; + + final _i2.SerializationManager _serializationManager; + + _i3.Future<_i4.AuthSuccess> login( + _i1.TestSessionBuilder sessionBuilder, { + required String email, + required String password, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'login', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'login', + parameters: _i1.testObjectToJson({ + 'email': email, + 'password': password, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i4.AuthSuccess>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future<_i2.UuidValue> startRegistration( + _i1.TestSessionBuilder sessionBuilder, { + required String email, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'startRegistration', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'startRegistration', + parameters: _i1.testObjectToJson({'email': email}), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i2.UuidValue>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future verifyRegistrationCode( + _i1.TestSessionBuilder sessionBuilder, { + required _i2.UuidValue accountRequestId, + required String verificationCode, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'verifyRegistrationCode', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'verifyRegistrationCode', + parameters: _i1.testObjectToJson({ + 'accountRequestId': accountRequestId, + 'verificationCode': verificationCode, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future<_i4.AuthSuccess> finishRegistration( + _i1.TestSessionBuilder sessionBuilder, { + required String registrationToken, + required String password, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'finishRegistration', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'finishRegistration', + parameters: _i1.testObjectToJson({ + 'registrationToken': registrationToken, + 'password': password, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i4.AuthSuccess>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future<_i2.UuidValue> startPasswordReset( + _i1.TestSessionBuilder sessionBuilder, { + required String email, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'startPasswordReset', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'startPasswordReset', + parameters: _i1.testObjectToJson({'email': email}), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i2.UuidValue>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future verifyPasswordResetCode( + _i1.TestSessionBuilder sessionBuilder, { + required _i2.UuidValue passwordResetRequestId, + required String verificationCode, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'verifyPasswordResetCode', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'verifyPasswordResetCode', + parameters: _i1.testObjectToJson({ + 'passwordResetRequestId': passwordResetRequestId, + 'verificationCode': verificationCode, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } + + _i3.Future finishPasswordReset( + _i1.TestSessionBuilder sessionBuilder, { + required String finishPasswordResetToken, + required String newPassword, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'emailIdp', + method: 'finishPasswordReset', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'emailIdp', + methodName: 'finishPasswordReset', + parameters: _i1.testObjectToJson({ + 'finishPasswordResetToken': finishPasswordResetToken, + 'newPassword': newPassword, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } +} + +class _JwtRefreshEndpoint { + _JwtRefreshEndpoint( + this._endpointDispatch, + this._serializationManager, + ); + + final _i2.EndpointDispatch _endpointDispatch; + + final _i2.SerializationManager _serializationManager; + + _i3.Future<_i4.AuthSuccess> refreshAccessToken( + _i1.TestSessionBuilder sessionBuilder, { + required String refreshToken, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'jwtRefresh', + method: 'refreshAccessToken', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'jwtRefresh', + methodName: 'refreshAccessToken', + parameters: _i1.testObjectToJson({'refreshToken': refreshToken}), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i4.AuthSuccess>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } +} + +class _GoogleIdpEndpoint { + _GoogleIdpEndpoint( + this._endpointDispatch, + this._serializationManager, + ); + + final _i2.EndpointDispatch _endpointDispatch; + + final _i2.SerializationManager _serializationManager; + + _i3.Future<_i4.AuthSuccess> login( + _i1.TestSessionBuilder sessionBuilder, { + required String idToken, + required String? accessToken, + }) async { + return _i1.callAwaitableFunctionAndHandleExceptions(() async { + var _localUniqueSession = + (sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild( + endpoint: 'googleIdp', + method: 'login', + ); + try { + var _localCallContext = await _endpointDispatch.getMethodCallContext( + createSessionCallback: (_) => _localUniqueSession, + endpointPath: 'googleIdp', + methodName: 'login', + parameters: _i1.testObjectToJson({ + 'idToken': idToken, + 'accessToken': accessToken, + }), + serializationManager: _serializationManager, + ); + var _localReturnValue = + await (_localCallContext.method.call( + _localUniqueSession, + _localCallContext.arguments, + ) + as _i3.Future<_i4.AuthSuccess>); + return _localReturnValue; + } finally { + await _localUniqueSession.close(); + } + }); + } +} diff --git a/packages/eval_explorer/eval_explorer_server/web/pages/build_flutter_app.html b/packages/eval_explorer/eval_explorer_server/web/pages/build_flutter_app.html new file mode 100644 index 0000000..c74d5fb --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/web/pages/build_flutter_app.html @@ -0,0 +1,41 @@ + + + + + Flutter App Not Built + + + +
+ +
+
+

Flutter app not built

+

+ The Flutter web app has not been built yet. +

+

+ To build the app, run the following command in your Flutter project directory: +

+
+ flutter build web --base-href /app/ --wasm -o ../eval_explorer_server/web/app +
+ +

+ After building, restart the Serverpod server to serve the app. +

+
+
+ +
+ + diff --git a/packages/eval_explorer/eval_explorer_server/web/static/css/style.css b/packages/eval_explorer/eval_explorer_server/web/static/css/style.css new file mode 100644 index 0000000..ab0e129 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/web/static/css/style.css @@ -0,0 +1,113 @@ +html { + box-sizing: border-box; + font-size: 14px; + font-family: Arial, Helvetica, sans-serif; + background: url('/images/background.svg') no-repeat center center fixed; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +body, h1, h2, h3, h4, h5, h6, p, ol, ul { + margin: 0; + padding: 0; + font-weight: normal; +} + +ol, ul { + list-style: none; +} + +img { + max-width: 100%; + height: auto; +} + +body { + padding: 16px; +} + +hr { + margin-top: 16px; margin-bottom: 16px; + border: 0; + height: 1px; + background: #999; +} + +.content { + min-width: 300px; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + background-color: white; + border-radius: 8px; + padding: 16px; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.logo-box a { + text-decoration: none; + font-weight: bold; + color: #666; +} + +.logo-box { + text-align: center; +} + +.info-box p { + margin-top: 2px; +} + +.link-box { + text-align: center; + color: #999; +} + +.link-box a { + text-decoration: none; +} + +.cta{ + display:flex; + justify-content:center; + align-items:center; + gap:.5rem; + + width:100%; + margin-top:12px; + + padding:12px 14px; + border-radius:10px; + + background: #1D4ED8; /* primary */ + color:#fff; + text-decoration:none; + + font-weight:600; + font-size:14px; + line-height:1; + + box-shadow: 0 6px 16px rgba(0,0,0,.18); + transition: transform .12s ease, box-shadow .12s ease, background-color .12s ease; + } + + .cta:hover{ + background:#1E40AF; + transform: translateY(-1px); + box-shadow: 0 10px 22px rgba(0,0,0,.22); + } + + .cta:active{ transform: translateY(0px); } + + .cta:focus-visible{ + outline: 3px solid rgba(59,130,246,.45); + outline-offset: 2px; + } diff --git a/packages/eval_explorer/eval_explorer_server/web/static/images/background.svg b/packages/eval_explorer/eval_explorer_server/web/static/images/background.svg new file mode 100644 index 0000000..45ce11d --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/web/static/images/background.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/eval_explorer/eval_explorer_server/web/static/images/serverpod-logo.svg b/packages/eval_explorer/eval_explorer_server/web/static/images/serverpod-logo.svg new file mode 100644 index 0000000..1872447 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/web/static/images/serverpod-logo.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/eval_explorer/eval_explorer_server/web/templates/built_with_serverpod.html b/packages/eval_explorer/eval_explorer_server/web/templates/built_with_serverpod.html new file mode 100644 index 0000000..dc5dd8f --- /dev/null +++ b/packages/eval_explorer/eval_explorer_server/web/templates/built_with_serverpod.html @@ -0,0 +1,34 @@ + + + + + Built with Serverpod + + + +
+ +
+
+

Served at: {{served}}

+

Run mode: {{runmode}}

+
+ +
+ +
+ + diff --git a/packages/eval_explorer/eval_explorer_shared/.gitignore b/packages/eval_explorer/eval_explorer_shared/.gitignore new file mode 100644 index 0000000..3cceda5 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/eval_explorer/eval_explorer_shared/CHANGELOG.md b/packages/eval_explorer/eval_explorer_shared/CHANGELOG.md new file mode 100644 index 0000000..effe43c --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/eval_explorer/eval_explorer_shared/README.md b/packages/eval_explorer/eval_explorer_shared/README.md new file mode 100644 index 0000000..65a291c --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/README.md @@ -0,0 +1,5 @@ +# eval_explorer_shared + +Shared models for the eval_explorer application. + +📖 **[eval_explorer documentation](../../../docs/eval_explorer.md)** diff --git a/packages/eval_explorer/eval_explorer_shared/analysis_options.yaml b/packages/eval_explorer/eval_explorer_shared/analysis_options.yaml new file mode 100644 index 0000000..e2badd7 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/analysis_options.yaml @@ -0,0 +1 @@ +include: ../../../analysis_options.yaml diff --git a/packages/eval_explorer/eval_explorer_shared/lib/eval_explorer_shared.dart b/packages/eval_explorer/eval_explorer_shared/lib/eval_explorer_shared.dart new file mode 100644 index 0000000..8ffb97e --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/lib/eval_explorer_shared.dart @@ -0,0 +1 @@ +export 'src/models/models.dart'; diff --git a/packages/eval_explorer/eval_explorer_shared/lib/src/models/models.dart b/packages/eval_explorer/eval_explorer_shared/lib/src/models/models.dart new file mode 100644 index 0000000..6e68d67 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/lib/src/models/models.dart @@ -0,0 +1 @@ +export 'scorer_result_data.dart'; diff --git a/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.dart b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.dart new file mode 100644 index 0000000..c2782f0 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.dart @@ -0,0 +1,19 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'scorer_result_data.freezed.dart'; +part 'scorer_result_data.g.dart'; + +@freezed +sealed class ScorerResultData with _$ScorerResultData { + const factory ScorerResultData({ + required String name, + required bool passed, + @Default('') String explanation, + @Default('') String answer, + }) = _ScorerResultData; + + const ScorerResultData._(); + + factory ScorerResultData.fromJson(Map json) => + _$ScorerResultDataFromJson(json); +} diff --git a/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.freezed.dart b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.freezed.dart new file mode 100644 index 0000000..cd9a465 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.freezed.dart @@ -0,0 +1,280 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'scorer_result_data.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$ScorerResultData { + + String get name; bool get passed; String get explanation; String get answer; +/// Create a copy of ScorerResultData +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$ScorerResultDataCopyWith get copyWith => _$ScorerResultDataCopyWithImpl(this as ScorerResultData, _$identity); + + /// Serializes this ScorerResultData to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is ScorerResultData&&(identical(other.name, name) || other.name == name)&&(identical(other.passed, passed) || other.passed == passed)&&(identical(other.explanation, explanation) || other.explanation == explanation)&&(identical(other.answer, answer) || other.answer == answer)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,name,passed,explanation,answer); + +@override +String toString() { + return 'ScorerResultData(name: $name, passed: $passed, explanation: $explanation, answer: $answer)'; +} + + +} + +/// @nodoc +abstract mixin class $ScorerResultDataCopyWith<$Res> { + factory $ScorerResultDataCopyWith(ScorerResultData value, $Res Function(ScorerResultData) _then) = _$ScorerResultDataCopyWithImpl; +@useResult +$Res call({ + String name, bool passed, String explanation, String answer +}); + + + + +} +/// @nodoc +class _$ScorerResultDataCopyWithImpl<$Res> + implements $ScorerResultDataCopyWith<$Res> { + _$ScorerResultDataCopyWithImpl(this._self, this._then); + + final ScorerResultData _self; + final $Res Function(ScorerResultData) _then; + +/// Create a copy of ScorerResultData +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? name = null,Object? passed = null,Object? explanation = null,Object? answer = null,}) { + return _then(_self.copyWith( +name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String,passed: null == passed ? _self.passed : passed // ignore: cast_nullable_to_non_nullable +as bool,explanation: null == explanation ? _self.explanation : explanation // ignore: cast_nullable_to_non_nullable +as String,answer: null == answer ? _self.answer : answer // ignore: cast_nullable_to_non_nullable +as String, + )); +} + +} + + +/// Adds pattern-matching-related methods to [ScorerResultData]. +extension ScorerResultDataPatterns on ScorerResultData { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _ScorerResultData value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _ScorerResultData() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _ScorerResultData value) $default,){ +final _that = this; +switch (_that) { +case _ScorerResultData(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _ScorerResultData value)? $default,){ +final _that = this; +switch (_that) { +case _ScorerResultData() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String name, bool passed, String explanation, String answer)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _ScorerResultData() when $default != null: +return $default(_that.name,_that.passed,_that.explanation,_that.answer);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String name, bool passed, String explanation, String answer) $default,) {final _that = this; +switch (_that) { +case _ScorerResultData(): +return $default(_that.name,_that.passed,_that.explanation,_that.answer);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String name, bool passed, String explanation, String answer)? $default,) {final _that = this; +switch (_that) { +case _ScorerResultData() when $default != null: +return $default(_that.name,_that.passed,_that.explanation,_that.answer);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _ScorerResultData extends ScorerResultData { + const _ScorerResultData({required this.name, required this.passed, this.explanation = '', this.answer = ''}): super._(); + factory _ScorerResultData.fromJson(Map json) => _$ScorerResultDataFromJson(json); + +@override final String name; +@override final bool passed; +@override@JsonKey() final String explanation; +@override@JsonKey() final String answer; + +/// Create a copy of ScorerResultData +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$ScorerResultDataCopyWith<_ScorerResultData> get copyWith => __$ScorerResultDataCopyWithImpl<_ScorerResultData>(this, _$identity); + +@override +Map toJson() { + return _$ScorerResultDataToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _ScorerResultData&&(identical(other.name, name) || other.name == name)&&(identical(other.passed, passed) || other.passed == passed)&&(identical(other.explanation, explanation) || other.explanation == explanation)&&(identical(other.answer, answer) || other.answer == answer)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,name,passed,explanation,answer); + +@override +String toString() { + return 'ScorerResultData(name: $name, passed: $passed, explanation: $explanation, answer: $answer)'; +} + + +} + +/// @nodoc +abstract mixin class _$ScorerResultDataCopyWith<$Res> implements $ScorerResultDataCopyWith<$Res> { + factory _$ScorerResultDataCopyWith(_ScorerResultData value, $Res Function(_ScorerResultData) _then) = __$ScorerResultDataCopyWithImpl; +@override @useResult +$Res call({ + String name, bool passed, String explanation, String answer +}); + + + + +} +/// @nodoc +class __$ScorerResultDataCopyWithImpl<$Res> + implements _$ScorerResultDataCopyWith<$Res> { + __$ScorerResultDataCopyWithImpl(this._self, this._then); + + final _ScorerResultData _self; + final $Res Function(_ScorerResultData) _then; + +/// Create a copy of ScorerResultData +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? name = null,Object? passed = null,Object? explanation = null,Object? answer = null,}) { + return _then(_ScorerResultData( +name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String,passed: null == passed ? _self.passed : passed // ignore: cast_nullable_to_non_nullable +as bool,explanation: null == explanation ? _self.explanation : explanation // ignore: cast_nullable_to_non_nullable +as String,answer: null == answer ? _self.answer : answer // ignore: cast_nullable_to_non_nullable +as String, + )); +} + + +} + +// dart format on diff --git a/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.g.dart b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.g.dart new file mode 100644 index 0000000..e1d05bc --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/lib/src/models/scorer_result_data.g.dart @@ -0,0 +1,23 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'scorer_result_data.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_ScorerResultData _$ScorerResultDataFromJson(Map json) => + _ScorerResultData( + name: json['name'] as String, + passed: json['passed'] as bool, + explanation: json['explanation'] as String? ?? '', + answer: json['answer'] as String? ?? '', + ); + +Map _$ScorerResultDataToJson(_ScorerResultData instance) => + { + 'name': instance.name, + 'passed': instance.passed, + 'explanation': instance.explanation, + 'answer': instance.answer, + }; diff --git a/packages/eval_explorer/eval_explorer_shared/pubspec.yaml b/packages/eval_explorer/eval_explorer_shared/pubspec.yaml new file mode 100644 index 0000000..64482f5 --- /dev/null +++ b/packages/eval_explorer/eval_explorer_shared/pubspec.yaml @@ -0,0 +1,19 @@ +name: eval_explorer_shared +description: A starting point for Dart libraries or applications. +version: 1.0.0 +resolution: workspace + +environment: + sdk: ^3.10.0 + +# Add regular dependencies here. +dependencies: + freezed_annotation: any + json_annotation: any + +dev_dependencies: + build_runner: any + freezed: any + json_serializable: any + lints: ^6.0.0 + test: any diff --git a/packages/eval_explorer/pubspec.lock b/packages/eval_explorer/pubspec.lock new file mode 100644 index 0000000..83a2c41 --- /dev/null +++ b/packages/eval_explorer/pubspec.lock @@ -0,0 +1,1447 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _discoveryapis_commons: + dependency: transitive + description: + name: _discoveryapis_commons + sha256: "113c4100b90a5b70a983541782431b82168b3cae166ab130649c36eb3559d498" + url: "https://pub.dev" + source: hosted + version: "1.0.7" + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "3b19a47f6ea7c2632760777c78174f47f6aec1e05f0cd611380d4593b8af1dbc" + url: "https://pub.dev" + source: hosted + version: "96.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: afe15ce18a287d2f89da95566e62892df339b1936bbe9b83587df45b944ee72a + url: "https://pub.dev" + source: hosted + version: "1.3.67" + adaptive_number: + dependency: transitive + description: + name: adaptive_number + sha256: "3a567544e9b5c9c803006f51140ad544aedc79604fd4f3f2c1380003f97c1d77" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "0c516bc4ad36a1a75759e54d5047cb9d15cded4459df01aa35a0b5ec7db2c2a0" + url: "https://pub.dev" + source: hosted + version: "10.2.0" + animations: + dependency: transitive + description: + name: animations + sha256: "18938cefd7dcc04e1ecac0db78973761a01e4bc2d6bfae0cfa596bfeac9e96ab" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + ansicolor: + dependency: "direct main" + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + url: "https://pub.dev" + source: hosted + version: "4.0.9" + args: + dependency: "direct main" + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024" + url: "https://pub.dev" + source: hosted + version: "1.6.5" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + bloc: + dependency: transitive + description: + name: bloc + sha256: a48653a82055a900b88cd35f92429f068c5a8057ae9b136d197b3d56c57efb81 + url: "https://pub.dev" + source: hosted + version: "9.2.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + buffer: + dependency: transitive + description: + name: buffer + sha256: "389da2ec2c16283c8787e0adaede82b1842102f8c8aae2f49003a766c5c6b3d1" + url: "https://pub.dev" + source: hosted + version: "1.2.3" + build: + dependency: transitive + description: + name: build + sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3" + url: "https://pub.dev" + source: hosted + version: "4.0.4" + build_config: + dependency: transitive + description: + name: build_config + sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 + url: "https://pub.dev" + source: hosted + version: "4.1.1" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "7981eb922842c77033026eb4341d5af651562008cdb116bdfa31fc46516b6462" + url: "https://pub.dev" + source: hosted + version: "2.12.2" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "6ae8a6435a8c6520c7077b107e77f1fb4ba7009633259a4d49a8afd8e7efc5e9" + url: "https://pub.dev" + source: hosted + version: "8.12.4" + cbor: + dependency: transitive + description: + name: cbor + sha256: "2c5c37650f0a2d25149f03e748ab7b2857787bde338f95fe947738b80d713da2" + url: "https://pub.dev" + source: hosted + version: "6.5.1" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" + url: "https://pub.dev" + source: hosted + version: "4.11.1" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + connectivity_plus: + dependency: transitive + description: + name: connectivity_plus + sha256: "33bae12a398f841c6cda09d1064212957265869104c478e5ad51e2fb26c3973c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" + url: "https://pub.dev" + source: hosted + version: "1.15.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_jsonwebtoken: + dependency: transitive + description: + name: dart_jsonwebtoken + sha256: c6ecb3bb991c459b91c5adf9e871113dcb32bbe8fe7ca2c92723f88ffc1e0b7a + url: "https://pub.dev" + source: hosted + version: "3.3.2" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "29f7ecc274a86d32920b1d9cfc7502fa87220da41ec60b55f329559d5732e2b2" + url: "https://pub.dev" + source: hosted + version: "3.1.7" + dbus: + dependency: transitive + description: + name: dbus + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + url: "https://pub.dev" + source: hosted + version: "0.7.12" + ed25519_edwards: + dependency: transitive + description: + name: ed25519_edwards + sha256: "6ce0112d131327ec6d42beede1e5dfd526069b18ad45dcf654f15074ad9276cd" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + email_validator: + dependency: transitive + description: + name: email_validator + sha256: b19aa5d92fdd76fbc65112060c94d45ba855105a28bb6e462de7ff03b12fa1fb + url: "https://pub.dev" + source: hosted + version: "3.0.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + firebase_auth: + dependency: transitive + description: + name: firebase_auth + sha256: "1c290de59ba88d3b193e5933441ea4793d623e802d75bd4135e36d550c3f6b62" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: c830e2a1c69c27242a920296784458ad6eb71decdfa083578f7788dbde5d3a69 + url: "https://pub.dev" + source: hosted + version: "8.1.7" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: "809d0807a7b6dbdd2d2dd04f217375aaa9835794750a4eec408c2990ed505e41" + url: "https://pub.dev" + source: hosted + version: "6.1.3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: f0997fee80fbb6d2c658c5b88ae87ba1f9506b5b37126db64fc2e75d8e977fbb + url: "https://pub.dev" + source: hosted + version: "4.5.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: cccb4f572325dc14904c02fcc7db6323ad62ba02536833dddb5c02cac7341c64 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "856ca92bf2d75a63761286ab8e791bda3a85184c2b641764433b619647acfca6" + url: "https://pub.dev" + source: hosted + version: "3.5.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38 + url: "https://pub.dev" + source: hosted + version: "9.1.1" + flutter_lints: + dependency: transitive + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_secure_storage: + dependency: "direct overridden" + description: + name: flutter_secure_storage + sha256: da922f2aab2d733db7e011a6bcc4a825b844892d4edd6df83ff156b09a9b2e40 + url: "https://pub.dev" + source: hosted + version: "10.0.0" + flutter_secure_storage_darwin: + dependency: transitive + description: + name: flutter_secure_storage_darwin + sha256: "8878c25136a79def1668c75985e8e193d9d7d095453ec28730da0315dc69aee3" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: "2b5c76dce569ab752d55a1cee6a2242bcc11fdba927078fb88c503f150767cda" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: "8ceea1223bee3c6ac1a22dabd8feefc550e4729b3675de4b5900f55afcb435d6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: "6a1137df62b84b54261dca582c1c09ea72f4f9a4b2fcee21b025964132d5d0c3" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: "3b7c8e068875dfd46719ff57c90d8c459c87f2302ed6b00ff006b3c9fcad1613" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "1ded017b39c8e15c8948ea855070a5ff8ff8b3d5e83f3446e02d6bb12add7ad9" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + flutter_test: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: f23ea33b3863f119b58ed1b586e881a46bd28715ddcc4dbc33104524e3434131 + url: "https://pub.dev" + source: hosted + version: "3.2.5" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://pub.dev" + source: hosted + version: "2.1.3" + go_router: + dependency: "direct main" + description: + name: go_router + sha256: "7974313e217a7771557add6ff2238acb63f635317c35fa590d348fb238f00896" + url: "https://pub.dev" + source: hosted + version: "17.1.0" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "6996212014b996eaa17074e02b1b925b212f5e053832d9048970dc27255a8fb3" + url: "https://pub.dev" + source: hosted + version: "7.1.0" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" + url: "https://pub.dev" + source: hosted + version: "0.3.3+1" + google_sign_in: + dependency: transitive + description: + name: google_sign_in + sha256: "521031b65853b4409b8213c0387d57edaad7e2a949ce6dea0d8b2afc9cb29763" + url: "https://pub.dev" + source: hosted + version: "7.2.0" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: f353140580797e01c1f35748810326f326664c52040b6f62d88e7d6d1cd30917 + url: "https://pub.dev" + source: hosted + version: "7.2.9" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: ac1e4c1205267cb7999d1d81333fccffdfda29e853f434bbaf71525498bb6950 + url: "https://pub.dev" + source: hosted + version: "6.3.0" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "7f59208c42b415a3cca203571128d6f84f885fead2d5b53eb65a9e27f2965bb5" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: dac0676af14b96b11691cc3c3e152415a896a38f1224269241d7cc294bdb9102 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + googleapis: + dependency: transitive + description: + name: googleapis + sha256: "692fb9e90c321b61a7a2123de0353ec8a20691cd979db2553d8d732f710f6535" + url: "https://pub.dev" + source: hosted + version: "15.0.0" + googleapis_auth: + dependency: transitive + description: + name: googleapis_auth + sha256: b81fe352cc4a330b3710d2b7ad258d9bcef6f909bb759b306bf42973a7d046db + url: "https://pub.dev" + source: hosted + version: "2.0.0" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + hex: + dependency: transitive + description: + name: hex + sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + hooks: + dependency: transitive + description: + name: hooks + sha256: e79ed1e8e1929bc6ecb6ec85f0cb519c887aa5b423705ded0d0f2d9226def388 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + http: + dependency: transitive + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + url: "https://pub.dev" + source: hosted + version: "4.8.0" + intl: + dependency: transitive + description: + name: intl + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + url: "https://pub.dev" + source: hosted + version: "0.20.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" + json_annotation: + dependency: "direct main" + description: + name: json_annotation + sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8 + url: "https://pub.dev" + source: hosted + version: "4.11.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: "44729f5c45748e6748f6b9a57ab8f7e4336edc8ae41fc295070e3814e616a6c0" + url: "https://pub.dev" + source: hosted + version: "6.13.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: "direct dev" + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + logging: + dependency: "direct main" + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + url: "https://pub.dev" + source: hosted + version: "0.12.19" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: "direct main" + description: + name: meta + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + url: "https://pub.dev" + source: hosted + version: "1.18.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + mustache_template: + dependency: transitive + description: + name: mustache_template + sha256: "4326d0002ff58c74b9486990ccbdab08157fca3c996fe9e197aff9d61badf307" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + native_toolchain_c: + dependency: transitive + description: + name: native_toolchain_c + sha256: "92b2ca62c8bd2b8d2f267cdfccf9bfbdb7322f778f8f91b3ce5b5cda23a3899f" + url: "https://pub.dev" + source: hosted + version: "0.17.5" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" + url: "https://pub.dev" + source: hosted + version: "9.3.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" + source: hosted + version: "2.2.0" + passkeys_server: + dependency: transitive + description: + name: passkeys_server + sha256: "0173c533b0c0a9fb92a7a215f1b77432ec48c504f3de9fa0221dc6ab50718f98" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + path: + dependency: "direct main" + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e + url: "https://pub.dev" + source: hosted + version: "2.2.22" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" + url: "https://pub.dev" + source: hosted + version: "7.0.2" + pinput: + dependency: transitive + description: + name: pinput + sha256: "4c3f1b84768b47a56a1abdaca551bd7cef4ac673b882209039ecdf803a5d6e68" + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + pool: + dependency: transitive + description: + name: pool + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" + url: "https://pub.dev" + source: hosted + version: "1.5.2" + posix: + dependency: transitive + description: + name: posix + sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" + url: "https://pub.dev" + source: hosted + version: "6.5.0" + postgres: + dependency: transitive + description: + name: postgres + sha256: fefbbfe749c6130e5096588b9c4459173684c695952cd7636ab19be76f255469 + url: "https://pub.dev" + source: hosted + version: "3.5.9" + provider: + dependency: "direct main" + description: + name: provider + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" + url: "https://pub.dev" + source: hosted + version: "6.1.5+1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + redis: + dependency: transitive + description: + name: redis + sha256: "4a8218ef7b0642ff499147c7a105591208259e2f55f07db0101ace7f82f66cf9" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + relic: + dependency: transitive + description: + name: relic + sha256: "400bc37b0ee5f8d02c911fb4213a5f3cb3f39496fc806c81f22ad25f1930bd15" + url: "https://pub.dev" + source: hosted + version: "0.14.0" + retry: + dependency: transitive + description: + name: retry + sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + serverpod: + dependency: "direct main" + description: + name: serverpod + sha256: "6e7410d7d2a8088e1f6334f79cc4ce57834afbd1f9f27fe5676a8eac43d36c82" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_core_client: + dependency: transitive + description: + name: serverpod_auth_core_client + sha256: "956173ae1e8c4c88917c72df65e080db4d1e589fdcab70908fbc3fa0c30d684c" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_core_flutter: + dependency: transitive + description: + name: serverpod_auth_core_flutter + sha256: "399070df8f87ba73ece17cec900fcba2dc542aa0a272214a530d31c599023525" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_core_server: + dependency: transitive + description: + name: serverpod_auth_core_server + sha256: f97276b13c8473a4c9837e8ffed99029dc0a7a76c1ef25d2d1216e7c87f599b1 + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_idp_client: + dependency: "direct main" + description: + name: serverpod_auth_idp_client + sha256: "4e332732ea147626ad7ab67b4b82405109f5c45ee310b146230008fbb87375e6" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_idp_flutter: + dependency: "direct main" + description: + name: serverpod_auth_idp_flutter + sha256: d90f873df3c3d27b8d6ad2d849f3c79fab88a67457d162f4a84f2ae8840048b8 + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_auth_idp_server: + dependency: "direct main" + description: + name: serverpod_auth_idp_server + sha256: "219b0cf5a5f873af2b05eb817154dc33921d6ebc640d23207deed7ed410dc708" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_client: + dependency: "direct main" + description: + name: serverpod_client + sha256: a4430bedf970b1928b202b4322244f4057201280177d30e6e784fc801ad60fcb + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_flutter: + dependency: "direct main" + description: + name: serverpod_flutter + sha256: "11581e2dbd98be77c0652c48a865b67febd28864f69d2f921387a3809409c3ee" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_lints: + dependency: transitive + description: + name: serverpod_lints + sha256: "11512827207a241aeedef8198bfbb4c77492bd1c67210eb6eabbba8317944635" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_serialization: + dependency: transitive + description: + name: serverpod_serialization + sha256: "03348a7d1a8ad9c70e4d3cdc0ead89cf2e1172a5e4eebfb0c37c11bad4e664e4" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_shared: + dependency: transitive + description: + name: serverpod_shared + sha256: daaa9d84ff40a746ef3a60de9aa43773fb883b45458669e81a43517e41496aab + url: "https://pub.dev" + source: hosted + version: "3.2.0" + serverpod_test: + dependency: "direct dev" + description: + name: serverpod_test + sha256: bd58bc73efda8fc757b5cfc5f04c159585fb34a483a1df5e6f47ac57b37be729 + url: "https://pub.dev" + source: hosted + version: "3.2.0" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + sign_in_with_apple: + dependency: transitive + description: + name: sign_in_with_apple + sha256: "8bd875c8e8748272749eb6d25b896f768e7e9d60988446d543fe85a37a2392b8" + url: "https://pub.dev" + source: hosted + version: "7.0.1" + sign_in_with_apple_platform_interface: + dependency: transitive + description: + name: sign_in_with_apple_platform_interface + sha256: "981bca52cf3bb9c3ad7ef44aace2d543e5c468bb713fd8dda4275ff76dfa6659" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + sign_in_with_apple_server: + dependency: transitive + description: + name: sign_in_with_apple_server + sha256: b431982c88e8649aecb5a17678082cb8045d70eebca8555acb1d1b561d4756b9 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + sign_in_with_apple_web: + dependency: transitive + description: + name: sign_in_with_apple_web + sha256: f316400827f52cafcf50d00e1a2e8a0abc534ca1264e856a81c5f06bd5b10fed + url: "https://pub.dev" + source: hosted + version: "3.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "4a85e90b50694e652075cbe4575665539d253e6ec10e46e76b45368ab5e3caae" + url: "https://pub.dev" + source: hosted + version: "1.3.10" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + super_string: + dependency: transitive + description: + name: super_string + sha256: ba41acf9fbb318b3fc0d57c9235779100394d85d83f45ab533615df1f3146ea7 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + url: "https://pub.dev" + source: hosted + version: "3.4.0" + system_resources: + dependency: transitive + description: + name: system_resources + sha256: "7e78cf8ef224c1e0b6bf4462322b6739fea2274fef928cbcbf21ae5e5a8272d8" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test: + dependency: "direct dev" + description: + name: test + sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" + url: "https://pub.dev" + source: hosted + version: "1.30.0" + test_api: + dependency: transitive + description: + name: test_api + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + url: "https://pub.dev" + source: hosted + version: "0.7.10" + test_core: + dependency: transitive + description: + name: test_core + sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" + url: "https://pub.dev" + source: hosted + version: "0.6.16" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" + url: "https://pub.dev" + source: hosted + version: "4.5.3" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 + url: "https://pub.dev" + source: hosted + version: "1.1.19" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.dev" + source: hosted + version: "15.0.2" + watcher: + dependency: transitive + description: + name: watcher + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e + url: "https://pub.dev" + source: hosted + version: "5.15.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" + yaml: + dependency: "direct main" + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.10.3 <4.0.0" + flutter: ">=3.38.4" diff --git a/packages/eval_explorer/pubspec.yaml b/packages/eval_explorer/pubspec.yaml new file mode 100644 index 0000000..84af70a --- /dev/null +++ b/packages/eval_explorer/pubspec.yaml @@ -0,0 +1,44 @@ +name: eval_explorer +publish_to: none +description: Eval Explorer - a web app for exploring evaluation results. +version: 1.0.0 + +environment: + sdk: ^3.10.0 + +workspace: + - eval_explorer_client + - eval_explorer_flutter + - eval_explorer_server + - eval_explorer_shared + +dependencies: + ansicolor: ^2.0.3 + args: ^2.7.0 + cupertino_icons: ^1.0.5 + flutter: + sdk: flutter + flutter_bloc: ^9.1.1 + freezed_annotation: ^3.1.0 + go_router: ^17.0.1 + json_annotation: ^4.9.0 + logging: ^1.3.0 + meta: ^1.17.0 + path: ^1.9.1 + provider: ^6.1.5+1 + serverpod: ^3.2.0 + serverpod_auth_idp_client: ^3.2.0 + serverpod_auth_idp_flutter: ^3.2.0 + serverpod_auth_idp_server: ^3.2.0 + serverpod_client: ^3.2.0 + serverpod_flutter: ^3.2.0 + yaml: ^3.1.3 + +dev_dependencies: + build_runner: ^2.10.4 + freezed: ^3.2.4 + json_serializable: ^6.11.3 + lints: ^6.0.0 + mocktail: ^1.0.4 + serverpod_test: ^3.2.0 + test: ^1.28.0