diff --git a/apps/webapp/app/[modelId]/[layer]/[index]/opengraph-image.tsx b/apps/webapp/app/[modelId]/[layer]/[index]/opengraph-image.tsx index 09d5ec8c4..bb2c51c90 100644 --- a/apps/webapp/app/[modelId]/[layer]/[index]/opengraph-image.tsx +++ b/apps/webapp/app/[modelId]/[layer]/[index]/opengraph-image.tsx @@ -2,10 +2,10 @@ /* eslint no-nested-ternary: 0 */ /* eslint react/no-array-index-key: 0 */ +import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/auth/utils'; import { getNeuronOptimized } from '@/lib/db/neuron'; import { getSourceSet } from '@/lib/db/source'; -import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/db/user'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import { makeActivationBackgroundColorWithDFA, replaceHtmlAnomalies } from '@/lib/utils/activations'; import { Activation } from '@prisma/client'; import { notFound } from 'next/navigation'; @@ -352,7 +352,7 @@ export default async function Image({ params }: { params: { modelId: string; lay })}
- {NEXT_PUBLIC_URL}/{currentNeuron.modelId}/{currentNeuron.layer}/{currentNeuron.index} + {env.NEXT_PUBLIC_URL}/{currentNeuron.modelId}/{currentNeuron.layer}/{currentNeuron.index}
), diff --git a/apps/webapp/app/[modelId]/[layer]/[index]/page.tsx b/apps/webapp/app/[modelId]/[layer]/[index]/page.tsx index b014d1876..9e69bfc9c 100644 --- a/apps/webapp/app/[modelId]/[layer]/[index]/page.tsx +++ b/apps/webapp/app/[modelId]/[layer]/[index]/page.tsx @@ -1,5 +1,5 @@ +import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/auth/utils'; import { getNeuronOptimized, neuronExistsAndUserHasAccess } from '@/lib/db/neuron'; -import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/db/user'; import { NeuronWithPartialRelations } from '@/prisma/generated/zod'; import { Metadata } from 'next'; import { notFound } from 'next/navigation'; diff --git a/apps/webapp/app/[modelId]/[layer]/page-source.tsx b/apps/webapp/app/[modelId]/[layer]/page-source.tsx index 57e8775ae..ee2482bf1 100644 --- a/apps/webapp/app/[modelId]/[layer]/page-source.tsx +++ b/apps/webapp/app/[modelId]/[layer]/page-source.tsx @@ -8,7 +8,7 @@ import SearchTopkByTokenPane from '@/components/panes/search-topk-by-token-pane' import UmapPane from '@/components/panes/umap-pane'; import { BreadcrumbItem, BreadcrumbLink } from '@/components/shadcn/breadcrumbs'; import { getVisibilityBadge } from '@/components/visibility-badge'; -import { DEMO_MODE } from '@/lib/env'; +import { env } from '@/lib/env'; import { getLayerNumAsStringFromSource } from '@/lib/utils/source'; import { EvalWithPartialRelations, @@ -166,7 +166,7 @@ export default function PageSource({ source }: { source: SourceWithRelations }) /> )} - {!DEMO_MODE && ( + {!env.DEMO_MODE && ( { diff --git a/apps/webapp/app/[modelId]/graph/utils.ts b/apps/webapp/app/[modelId]/graph/utils.ts index 4cff14071..ced231f9e 100644 --- a/apps/webapp/app/[modelId]/graph/utils.ts +++ b/apps/webapp/app/[modelId]/graph/utils.ts @@ -1,5 +1,5 @@ import ATTRIBUTION_GRAPH_SCHEMA from '@/app/api/graph/graph-schema.json'; -import { DEFAULT_CREATOR_USER_ID, NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import { GraphMetadata } from '@/prisma/generated/zod'; import cuid from 'cuid'; import d3 from './d3-jetpack'; @@ -182,7 +182,7 @@ export function makeGraphPublicAccessGraphUri(modelId: string, slug: string) { } export function makeGraphPublicAccessGraphUrl(modelId: string, slug: string) { - return `${NEXT_PUBLIC_URL}${makeGraphPublicAccessGraphUri(modelId, slug)}`; + return `${env.NEXT_PUBLIC_URL}${makeGraphPublicAccessGraphUri(modelId, slug)}`; } export function nodeTypeHasFeatureDetail(node: CLTGraphNode): boolean { @@ -210,7 +210,7 @@ export async function getGraphMetadatasFromBucket(baseUrl: string): PromiseNot authorized; } return ; diff --git a/apps/webapp/app/api/activation/get/route.ts b/apps/webapp/app/api/activation/get/route.ts index 8abec9d72..8f0325f59 100644 --- a/apps/webapp/app/api/activation/get/route.ts +++ b/apps/webapp/app/api/activation/get/route.ts @@ -1,6 +1,7 @@ import { ERROR_NOT_FOUND_MESSAGE } from '@/lib/db/userCanAccess'; -import { PUBLIC_ACTIVATIONS_USER_IDS } from '@/lib/env'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { env } from '@/lib/env'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { PrismaClient } from '@prisma/client'; import { NextResponse } from 'next/server'; @@ -66,7 +67,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { layer: source, index, creatorId: { - in: PUBLIC_ACTIVATIONS_USER_IDS, + in: env.PUBLIC_ACTIVATIONS_USER_IDS, }, }, orderBy: { diff --git a/apps/webapp/app/api/activation/new/route.tsx b/apps/webapp/app/api/activation/new/route.tsx index c168d1a6a..3d43b7e35 100644 --- a/apps/webapp/app/api/activation/new/route.tsx +++ b/apps/webapp/app/api/activation/new/route.tsx @@ -1,7 +1,8 @@ import { assertUserCanAccessModelAndSourceSet } from '@/lib/db/userCanAccess'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { getActivationForFeature } from '@/lib/utils/inference'; import { getSourceSetNameFromSource } from '@/lib/utils/source'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/activation/upload-batch/route.tsx b/apps/webapp/app/api/activation/upload-batch/route.tsx index b8bd1ff11..576ab28a3 100644 --- a/apps/webapp/app/api/activation/upload-batch/route.tsx +++ b/apps/webapp/app/api/activation/upload-batch/route.tsx @@ -1,5 +1,6 @@ import { createActivationsForVector } from '@/lib/db/activation'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string } from 'yup'; diff --git a/apps/webapp/app/api/admin/export-explanations/route.ts b/apps/webapp/app/api/admin/export-explanations/route.ts index 388857ea7..99eed9169 100644 --- a/apps/webapp/app/api/admin/export-explanations/route.ts +++ b/apps/webapp/app/api/admin/export-explanations/route.ts @@ -1,5 +1,6 @@ import { exportExplanations } from '@/lib/db/explanation'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/admin/export-features/route.ts b/apps/webapp/app/api/admin/export-features/route.ts index bfb32785b..74dac7062 100644 --- a/apps/webapp/app/api/admin/export-features/route.ts +++ b/apps/webapp/app/api/admin/export-features/route.ts @@ -1,5 +1,6 @@ import { dangerousGetNeuronRangeInternalUseOnly } from '@/lib/db/neuron'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedAdminUser(async (request: RequestAuthedAdminUser) => { diff --git a/apps/webapp/app/api/admin/import-config/route.ts b/apps/webapp/app/api/admin/import-config/route.ts index cbe9c663c..df1970757 100644 --- a/apps/webapp/app/api/admin/import-config/route.ts +++ b/apps/webapp/app/api/admin/import-config/route.ts @@ -1,10 +1,11 @@ import { importConfigFromS3 } from '@/lib/db/import'; -import { IS_LOCALHOST } from '@/lib/env'; -import { getAuthedAdminUser, RequestAuthedAdminUser, RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { env } from '@/lib/env'; +import { RequestAuthedAdminUser, RequestOptionalUser } from '@/lib/types/auth'; +import { getAuthedAdminUser, withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const GET = withOptionalUser(async (request: RequestOptionalUser) => { - if (!IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { + if (!env.IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { return NextResponse.json({ error: 'This route is only available on localhost or to admin users' }, { status: 400 }); } diff --git a/apps/webapp/app/api/admin/import-file/route.ts b/apps/webapp/app/api/admin/import-file/route.ts index a5c05d45e..f4751819f 100644 --- a/apps/webapp/app/api/admin/import-file/route.ts +++ b/apps/webapp/app/api/admin/import-file/route.ts @@ -2,9 +2,10 @@ /* eslint-disable no-await-in-loop */ import { importJsonlString } from '@/lib/db/import'; -import { IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedAdminUser, RequestOptionalUser } from '@/lib/types/auth'; import { downloadAndDecompressFile } from '@/lib/utils/s3'; -import { getAuthedAdminUser, RequestAuthedAdminUser, RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { getAuthedAdminUser, withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; // Hobby plans don't support > 60 seconds @@ -18,7 +19,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { return NextResponse.json({ error: 'path and tableName are required' }, { status: 400 }); } - if (!IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { + if (!env.IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { return NextResponse.json({ error: 'This route is only available on localhost or to admin users' }, { status: 400 }); } const linesJsonlString = await downloadAndDecompressFile(path); diff --git a/apps/webapp/app/api/admin/import/route.ts b/apps/webapp/app/api/admin/import/route.ts index fcafce0d7..5571a7c48 100644 --- a/apps/webapp/app/api/admin/import/route.ts +++ b/apps/webapp/app/api/admin/import/route.ts @@ -3,14 +3,15 @@ import { prisma } from '@/lib/db'; import { importConfigFromS3, importJsonlString } from '@/lib/db/import'; -import { IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedAdminUser, RequestOptionalUser } from '@/lib/types/auth'; import { DATASET_BASE_PATH, downloadAndDecompressFile, downloadFileJsonlParsedLines, getFilesInPath, } from '@/lib/utils/s3'; -import { getAuthedAdminUser, RequestAuthedAdminUser, RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { getAuthedAdminUser, withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; // Hobby plans don't support > 60 seconds @@ -32,7 +33,7 @@ export const GET = withOptionalUser(async (request: RequestOptionalUser) => { const path = `${DATASET_BASE_PATH}${modelId}/${sourceId}`; console.log('Importing data from', path); - if (!IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { + if (!env.IS_LOCALHOST && request.user && !(await getAuthedAdminUser(request as RequestAuthedAdminUser))) { return NextResponse.json({ error: 'This route is only available on localhost or to admin users' }, { status: 400 }); } diff --git a/apps/webapp/app/api/admin/new-model/route.tsx b/apps/webapp/app/api/admin/new-model/route.tsx index 1b6eebb01..44912236c 100644 --- a/apps/webapp/app/api/admin/new-model/route.tsx +++ b/apps/webapp/app/api/admin/new-model/route.tsx @@ -1,6 +1,7 @@ -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { createModelAdmin } from '@/lib/db/model'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; -import { createModelAdmin } from '../../../../lib/db/model'; type ModelToCreate = { id: string; diff --git a/apps/webapp/app/api/admin/reset/route.ts b/apps/webapp/app/api/admin/reset/route.ts index 97bb8f73d..6c7440261 100644 --- a/apps/webapp/app/api/admin/reset/route.ts +++ b/apps/webapp/app/api/admin/reset/route.ts @@ -1,8 +1,8 @@ -import { IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; import { NextResponse } from 'next/server'; export async function POST() { - if (!IS_LOCALHOST) { + if (!env.IS_LOCALHOST) { return NextResponse.json({ error: 'This route is only available on localhost or to admin users' }, { status: 400 }); } diff --git a/apps/webapp/app/api/admin/upload-autointerp/route.ts b/apps/webapp/app/api/admin/upload-autointerp/route.ts index c2d8a6e08..fd7c9b80a 100644 --- a/apps/webapp/app/api/admin/upload-autointerp/route.ts +++ b/apps/webapp/app/api/admin/upload-autointerp/route.ts @@ -1,5 +1,6 @@ import { createNewExplanationWithoutScore } from '@/lib/db/explanation'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; type ExplainedFeature = { diff --git a/apps/webapp/app/api/admin/upload-eval/route.ts b/apps/webapp/app/api/admin/upload-eval/route.ts index 8965d1152..7048a915c 100644 --- a/apps/webapp/app/api/admin/upload-eval/route.ts +++ b/apps/webapp/app/api/admin/upload-eval/route.ts @@ -1,7 +1,8 @@ import { prisma } from '@/lib/db'; -import { DEFAULT_CREATOR_USER_ID } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; import { getSourceSetNameFromSource } from '@/lib/utils/source'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { Visibility } from '@prisma/client'; import { NextResponse } from 'next/server'; @@ -47,7 +48,7 @@ export const POST = withAuthedAdminUser(async (request: RequestAuthedAdminUser) name: getSourceSetNameFromSource(evalUpload.sourceId), description: '', creatorName: '', - creatorId: DEFAULT_CREATOR_USER_ID, + creatorId: env.DEFAULT_CREATOR_USER_ID, hasDashboards: false, releaseName: SAEBENCH_RELEASE_NAME, visibility: Visibility.PUBLIC, @@ -73,7 +74,7 @@ export const POST = withAuthedAdminUser(async (request: RequestAuthedAdminUser) modelId: evalUpload.modelId, id: evalUpload.sourceId, setName: getSourceSetNameFromSource(evalUpload.sourceId), - creatorId: DEFAULT_CREATOR_USER_ID, + creatorId: env.DEFAULT_CREATOR_USER_ID, hasDashboards: false, saelensConfig: evalUpload.saelensConfig, hfFolderId: evalUpload.hfFolderId, diff --git a/apps/webapp/app/api/admin/upload-sae-config/route.ts b/apps/webapp/app/api/admin/upload-sae-config/route.ts index d130253f8..e52c37430 100644 --- a/apps/webapp/app/api/admin/upload-sae-config/route.ts +++ b/apps/webapp/app/api/admin/upload-sae-config/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; type SaeConfigUpload = { diff --git a/apps/webapp/app/api/admin/upload-skipped-features/route.tsx b/apps/webapp/app/api/admin/upload-skipped-features/route.tsx index 9cd2cc9a1..fc1b97b24 100644 --- a/apps/webapp/app/api/admin/upload-skipped-features/route.tsx +++ b/apps/webapp/app/api/admin/upload-skipped-features/route.tsx @@ -1,5 +1,6 @@ import { createNeurons } from '@/lib/db/neuron'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; type SkippedData = { diff --git a/apps/webapp/app/api/auth/[...nextauth]/authOptions.ts b/apps/webapp/app/api/auth/[...nextauth]/authOptions.ts index d6912fbe7..b7bf8e8d3 100644 --- a/apps/webapp/app/api/auth/[...nextauth]/authOptions.ts +++ b/apps/webapp/app/api/auth/[...nextauth]/authOptions.ts @@ -1,18 +1,10 @@ import { prisma } from '@/lib/db'; -// eslint-disable-next-line import/no-cycle import CustomPrismaAdapterForNextAuth from '@/lib/db/custom-prisma-adapter'; import { sendLoginEmail, sendWelcomeEmail } from '@/lib/email/email'; -import { - APPLE_CLIENT_ID, - APPLE_CLIENT_SECRET, - GITHUB_ID, - GITHUB_SECRET, - GOOGLE_CLIENT_ID, - GOOGLE_CLIENT_SECRET, -} from '@/lib/env'; +import { env } from '@/lib/env'; import { User, UserSecretType } from '@prisma/client'; import crypto from 'crypto'; -import type { NextAuthOptions } from 'next-auth/index'; +import type { NextAuthOptions } from 'next-auth'; import AppleProvider from 'next-auth/providers/apple'; import Email from 'next-auth/providers/email'; import GithubProvider, { GithubProfile } from 'next-auth/providers/github'; @@ -34,12 +26,12 @@ export const authOptions: NextAuthOptions = { }, providers: [ AppleProvider({ - clientId: APPLE_CLIENT_ID, - clientSecret: APPLE_CLIENT_SECRET, + clientId: env.APPLE_CLIENT_ID, + clientSecret: env.APPLE_CLIENT_SECRET, }), GoogleProvider({ - clientId: GOOGLE_CLIENT_ID, - clientSecret: GOOGLE_CLIENT_SECRET, + clientId: env.GOOGLE_CLIENT_ID, + clientSecret: env.GOOGLE_CLIENT_SECRET, authorization: { params: { prompt: 'consent', @@ -49,8 +41,8 @@ export const authOptions: NextAuthOptions = { }, }), GithubProvider({ - clientId: GITHUB_ID, - clientSecret: GITHUB_SECRET, + clientId: env.GITHUB_ID, + clientSecret: env.GITHUB_SECRET, profile(profile: GithubProfile) { return { id: profile.id.toString(), diff --git a/apps/webapp/app/api/bookmark/add/route.tsx b/apps/webapp/app/api/bookmark/add/route.tsx index 952a5a8c3..c90201d97 100644 --- a/apps/webapp/app/api/bookmark/add/route.tsx +++ b/apps/webapp/app/api/bookmark/add/route.tsx @@ -1,5 +1,6 @@ import { createBookmark } from '@/lib/db/bookmark'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/bookmark/delete/route.tsx b/apps/webapp/app/api/bookmark/delete/route.tsx index 11c1270bd..bfd2a17fc 100644 --- a/apps/webapp/app/api/bookmark/delete/route.tsx +++ b/apps/webapp/app/api/bookmark/delete/route.tsx @@ -1,5 +1,6 @@ import { deleteBookmark } from '@/lib/db/bookmark'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/comment/delete/route.tsx b/apps/webapp/app/api/comment/delete/route.tsx index c415746d2..18e7dd6a3 100644 --- a/apps/webapp/app/api/comment/delete/route.tsx +++ b/apps/webapp/app/api/comment/delete/route.tsx @@ -1,5 +1,6 @@ import { deleteComment } from '@/lib/db/comment'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/comment/new/route.tsx b/apps/webapp/app/api/comment/new/route.tsx index 54748a108..0ede97aab 100644 --- a/apps/webapp/app/api/comment/new/route.tsx +++ b/apps/webapp/app/api/comment/new/route.tsx @@ -1,5 +1,6 @@ import { createComment } from '@/lib/db/comment'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/cossim/route.tsx b/apps/webapp/app/api/cossim/route.tsx index 8ffbc945d..0149ada86 100644 --- a/apps/webapp/app/api/cossim/route.tsx +++ b/apps/webapp/app/api/cossim/route.tsx @@ -1,6 +1,7 @@ +import { RequestOptionalUser } from '@/lib/types/auth'; import { getCosSimForFeature } from '@/lib/utils/inference'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import * as yup from 'yup'; diff --git a/apps/webapp/app/api/explanation/[explanationId]/delete/route.ts b/apps/webapp/app/api/explanation/[explanationId]/delete/route.ts index b6be39ebc..ba9295c76 100644 --- a/apps/webapp/app/api/explanation/[explanationId]/delete/route.ts +++ b/apps/webapp/app/api/explanation/[explanationId]/delete/route.ts @@ -1,5 +1,6 @@ import { deleteExplanationById } from '@/lib/db/explanation'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/explanation/[explanationId]/route.ts b/apps/webapp/app/api/explanation/[explanationId]/route.ts index 5f2f6520d..0ad6e16c6 100644 --- a/apps/webapp/app/api/explanation/[explanationId]/route.ts +++ b/apps/webapp/app/api/explanation/[explanationId]/route.ts @@ -1,5 +1,6 @@ import { getExplanationByIdWithDetails } from '@/lib/db/explanation'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const GET = withOptionalUser( diff --git a/apps/webapp/app/api/explanation/[explanationId]/unvote/route.ts b/apps/webapp/app/api/explanation/[explanationId]/unvote/route.ts index 13ab33cc6..b98068dca 100644 --- a/apps/webapp/app/api/explanation/[explanationId]/unvote/route.ts +++ b/apps/webapp/app/api/explanation/[explanationId]/unvote/route.ts @@ -1,5 +1,6 @@ import { unvote } from '@/lib/db/vote'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser( diff --git a/apps/webapp/app/api/explanation/[explanationId]/vote/route.ts b/apps/webapp/app/api/explanation/[explanationId]/vote/route.ts index e4a1fadfe..2586826ad 100644 --- a/apps/webapp/app/api/explanation/[explanationId]/vote/route.ts +++ b/apps/webapp/app/api/explanation/[explanationId]/vote/route.ts @@ -1,6 +1,7 @@ import { getExplanationById } from '@/lib/db/explanation'; import { vote } from '@/lib/db/vote'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser( diff --git a/apps/webapp/app/api/explanation/export/route.ts b/apps/webapp/app/api/explanation/export/route.ts index b743d8bde..8764c39d3 100644 --- a/apps/webapp/app/api/explanation/export/route.ts +++ b/apps/webapp/app/api/explanation/export/route.ts @@ -1,4 +1,5 @@ -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/explanation/generate/route.tsx b/apps/webapp/app/api/explanation/generate/route.tsx index 280e6f5e4..82fae8ea8 100644 --- a/apps/webapp/app/api/explanation/generate/route.tsx +++ b/apps/webapp/app/api/explanation/generate/route.tsx @@ -7,6 +7,7 @@ import { generateExplanationOaiAttentionHead } from '@/lib/external/autointerp-e import { generateExplanationEleutherActsTop20 } from '@/lib/external/autointerp-explainer-eleuther'; import { generateExplanationNpMaxActLogits } from '@/lib/external/autointerp-explainer-logits'; import { getExplanationEmbeddingSql } from '@/lib/external/embedding'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { ERROR_NO_AUTOINTERP_KEY, ERROR_REQUIRES_OPENROUTER, @@ -14,7 +15,7 @@ import { getKeyTypeForAutoInterpModelType, requiresOpenRouterForExplanationType, } from '@/lib/utils/autointerp'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { UserSecretType } from '@prisma/client'; import { NextResponse } from 'next/server'; import { boolean, number, object, string, ValidationError } from 'yup'; @@ -130,7 +131,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { // ensure that the scorer model type is supported and user has a key for it // if modelType is unknown (eg llama) we use openrouter const explainerModelType = getAutoInterpModelTypeFromModelId(explanationModel.name || ''); - let explainerKey: string | null = null; + let explainerKey = null; let explainerKeyType: UserSecretType = getKeyTypeForAutoInterpModelType(explainerModelType); let key = await getAutoInterpKeyToUse(explainerKeyType, user); console.log(`explainerKeyType: ${explainerKeyType}`); diff --git a/apps/webapp/app/api/explanation/new/route.tsx b/apps/webapp/app/api/explanation/new/route.tsx index cb784800e..12a7a3b3e 100644 --- a/apps/webapp/app/api/explanation/new/route.tsx +++ b/apps/webapp/app/api/explanation/new/route.tsx @@ -2,7 +2,8 @@ // TODO: Bring back this endpoint but simplify (just explanation, no scoring) -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string } from 'yup'; diff --git a/apps/webapp/app/api/explanation/score/[explanationScoreId]/delete/route.ts b/apps/webapp/app/api/explanation/score/[explanationScoreId]/delete/route.ts index e7959b003..80589869a 100644 --- a/apps/webapp/app/api/explanation/score/[explanationScoreId]/delete/route.ts +++ b/apps/webapp/app/api/explanation/score/[explanationScoreId]/delete/route.ts @@ -1,5 +1,6 @@ import { deleteExplanationScoreById } from '@/lib/db/explanation'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/explanation/score/route.tsx b/apps/webapp/app/api/explanation/score/route.tsx index 5dc797f86..3db91665b 100644 --- a/apps/webapp/app/api/explanation/score/route.tsx +++ b/apps/webapp/app/api/explanation/score/route.tsx @@ -2,12 +2,13 @@ import { prisma } from '@/lib/db'; import { getAutoInterpKeyToUse } from '@/lib/db/userSecret'; import { generateScoreEleuther } from '@/lib/external/autointerp-scorer-eleuther'; import { generateScoreRecallAlt } from '@/lib/external/autointerp-scorer-recall-json'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { ERROR_RECALL_ALT_FAILED, ERROR_REQUIRES_OPENROUTER, requiresOpenRouterForExplanationScoreType, } from '@/lib/utils/autointerp'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { UserSecretType } from '@prisma/client'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/explanation/search-all/route.tsx b/apps/webapp/app/api/explanation/search-all/route.tsx index fcca7e462..7c699b8d4 100644 --- a/apps/webapp/app/api/explanation/search-all/route.tsx +++ b/apps/webapp/app/api/explanation/search-all/route.tsx @@ -1,9 +1,10 @@ import { MAX_EXPLANATION_SEARCH_RESULTS, searchExplanationsAllVec } from '@/lib/db/explanation'; import { getNeurons } from '@/lib/db/neuron'; import { getExplanationEmbeddingSql } from '@/lib/external/embedding'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { SearchExplanationsResponse } from '@/lib/utils/general'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/explanation/search-model/route.tsx b/apps/webapp/app/api/explanation/search-model/route.tsx index ae2b32362..c17acc109 100644 --- a/apps/webapp/app/api/explanation/search-model/route.tsx +++ b/apps/webapp/app/api/explanation/search-model/route.tsx @@ -1,8 +1,9 @@ import { MAX_EXPLANATION_SEARCH_RESULTS, searchExplanationsModelVec } from '@/lib/db/explanation'; import { getNeurons } from '@/lib/db/neuron'; import { getExplanationEmbeddingSql } from '@/lib/external/embedding'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/explanation/search-release/route.tsx b/apps/webapp/app/api/explanation/search-release/route.tsx index 140de2380..1bf8bdb6f 100644 --- a/apps/webapp/app/api/explanation/search-release/route.tsx +++ b/apps/webapp/app/api/explanation/search-release/route.tsx @@ -1,8 +1,9 @@ import { MAX_EXPLANATION_SEARCH_RESULTS, searchExplanationsReleaseVec } from '@/lib/db/explanation'; import { getNeurons } from '@/lib/db/neuron'; import { getExplanationEmbeddingSql } from '@/lib/external/embedding'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/explanation/search/route.tsx b/apps/webapp/app/api/explanation/search/route.tsx index 32b5c7077..01ee92807 100644 --- a/apps/webapp/app/api/explanation/search/route.tsx +++ b/apps/webapp/app/api/explanation/search/route.tsx @@ -1,8 +1,9 @@ import { MAX_EXPLANATION_SEARCH_RESULTS, searchExplanationsVec } from '@/lib/db/explanation'; import { getNeurons } from '@/lib/db/neuron'; import { getExplanationEmbeddingSql } from '@/lib/external/embedding'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/feature/[modelId]/[layer]/[index]/route.ts b/apps/webapp/app/api/feature/[modelId]/[layer]/[index]/route.ts index 4b41f58e2..a0bd025b7 100644 --- a/apps/webapp/app/api/feature/[modelId]/[layer]/[index]/route.ts +++ b/apps/webapp/app/api/feature/[modelId]/[layer]/[index]/route.ts @@ -1,6 +1,7 @@ import { getNeuronOptimized } from '@/lib/db/neuron'; import { ERROR_NOT_FOUND_MESSAGE } from '@/lib/db/userCanAccess'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/feature/upload-batch/route.tsx b/apps/webapp/app/api/feature/upload-batch/route.tsx index b4c1c0781..fd89dde28 100644 --- a/apps/webapp/app/api/feature/upload-batch/route.tsx +++ b/apps/webapp/app/api/feature/upload-batch/route.tsx @@ -1,10 +1,11 @@ import { prisma } from '@/lib/db'; import { getSourceSet } from '@/lib/db/source'; import { getUserById } from '@/lib/db/user'; -import { PUBLIC_ACTIVATIONS_USER_IDS } from '@/lib/env'; +import { env } from '@/lib/env'; import { getOAIEmbedding } from '@/lib/external/embedding'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { getSourceSetNameFromSource } from '@/lib/utils/source'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import pgvector from 'pgvector'; import * as yup from 'yup'; @@ -261,7 +262,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { index: feature.index.toString(), layer: parsedBody.source, modelId: parsedBody.modelId, - creatorId: PUBLIC_ACTIVATIONS_USER_IDS[0], + creatorId: env.PUBLIC_ACTIVATIONS_USER_IDS[0], maxValueTokenIndex: activation.values.indexOf(Math.max(...activation.values)), maxValue: Math.max(...activation.values), minValue: Math.min(...activation.values), diff --git a/apps/webapp/app/api/features-offset/route.ts b/apps/webapp/app/api/features-offset/route.ts index a6670f941..5ea55ed50 100644 --- a/apps/webapp/app/api/features-offset/route.ts +++ b/apps/webapp/app/api/features-offset/route.ts @@ -1,5 +1,6 @@ import { getNeuronsOffset } from '@/lib/db/neuron'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const maxDuration = 60; diff --git a/apps/webapp/app/api/features/route.ts b/apps/webapp/app/api/features/route.ts index 852424079..25ef35045 100644 --- a/apps/webapp/app/api/features/route.ts +++ b/apps/webapp/app/api/features/route.ts @@ -1,6 +1,7 @@ import { getNeurons } from '@/lib/db/neuron'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/global/route.ts b/apps/webapp/app/api/global/route.ts index cf1276788..e7b650b7a 100644 --- a/apps/webapp/app/api/global/route.ts +++ b/apps/webapp/app/api/global/route.ts @@ -6,7 +6,8 @@ import { } from '@/lib/db/explanation-type'; import { getGlobalModels } from '@/lib/db/model'; import { getGlobalSourceReleases } from '@/lib/db/source'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withOptionalUser(async (request: RequestOptionalUser) => { diff --git a/apps/webapp/app/api/graph/[modelId]/[slug]/route.ts b/apps/webapp/app/api/graph/[modelId]/[slug]/route.ts index 3a42a1f04..d6c19e68d 100644 --- a/apps/webapp/app/api/graph/[modelId]/[slug]/route.ts +++ b/apps/webapp/app/api/graph/[modelId]/[slug]/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/graph/delete/route.ts b/apps/webapp/app/api/graph/delete/route.ts index 6614379d0..df2e7ba0a 100644 --- a/apps/webapp/app/api/graph/delete/route.ts +++ b/apps/webapp/app/api/graph/delete/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { DeleteObjectCommand, S3Client } from '@aws-sdk/client-s3'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/graph/generate/route.ts b/apps/webapp/app/api/graph/generate/route.ts index 49d38743f..4f7017399 100644 --- a/apps/webapp/app/api/graph/generate/route.ts +++ b/apps/webapp/app/api/graph/generate/route.ts @@ -3,7 +3,8 @@ import { ATTRIBUTION_GRAPH_SCHEMA, makeGraphPublicAccessGraphUrl, NP_GRAPH_BUCKE import { prisma } from '@/lib/db'; import { getGraphServerRunpodHostForSourceSet } from '@/lib/db/graph-host-source'; import { getModelById } from '@/lib/db/model'; -import { USE_RUNPOD_GRAPH } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { checkRunpodQueueJobs, generateGraphAndUploadToS3, @@ -16,7 +17,7 @@ import { MAX_RUNPOD_JOBS_IN_QUEUE, RUNPOD_BUSY_ERROR, } from '@/lib/utils/graph'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; import Ajv from 'ajv'; @@ -276,7 +277,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { }); // check the queue - if (USE_RUNPOD_GRAPH) { + if (env.USE_RUNPOD_GRAPH) { const host = await getGraphServerRunpodHostForSourceSet(validatedData.modelId, validatedData.sourceSetName); if (!host) { throw new Error('No runpod serverless host found.'); diff --git a/apps/webapp/app/api/graph/list-owned/route.ts b/apps/webapp/app/api/graph/list-owned/route.ts index 1dbbf4cc5..efe27fdc4 100644 --- a/apps/webapp/app/api/graph/list-owned/route.ts +++ b/apps/webapp/app/api/graph/list-owned/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/graph/save-to-db/route.ts b/apps/webapp/app/api/graph/save-to-db/route.ts index 387709e57..92b991819 100644 --- a/apps/webapp/app/api/graph/save-to-db/route.ts +++ b/apps/webapp/app/api/graph/save-to-db/route.ts @@ -6,8 +6,9 @@ import { } from '@/app/[modelId]/graph/utils'; import { prisma } from '@/lib/db'; import { getUserByName } from '@/lib/db/user'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { env } from '@/lib/env'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import Ajv from 'ajv'; import { NextResponse } from 'next/server'; import { object, string } from 'yup'; @@ -89,7 +90,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { return NextResponse.json( { - error: `Invalid graph format. Use the validator to check your graph json: ${NEXT_PUBLIC_URL}/graph/validator`, + error: `Invalid graph format. Use the validator to check your graph json: ${env.NEXT_PUBLIC_URL}/graph/validator`, details: errors, }, { status: 400 }, diff --git a/apps/webapp/app/api/graph/signed-put/route.ts b/apps/webapp/app/api/graph/signed-put/route.ts index 6fdf4676a..a76bdf2ce 100644 --- a/apps/webapp/app/api/graph/signed-put/route.ts +++ b/apps/webapp/app/api/graph/signed-put/route.ts @@ -1,8 +1,9 @@ import { MAX_GRAPH_UPLOAD_SIZE_BYTES, NP_GRAPH_BUCKET } from '@/app/[modelId]/graph/utils'; import { prisma } from '@/lib/db'; import { getUserByName } from '@/lib/db/user'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { GRAPH_S3_USER_GRAPHS_DIR, MAX_PUT_REQUESTS_PER_DAY } from '@/lib/utils/graph'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; import { headers } from 'next/headers'; diff --git a/apps/webapp/app/api/graph/subgraph/delete/route.ts b/apps/webapp/app/api/graph/subgraph/delete/route.ts index 690b2ff52..41bea77d3 100644 --- a/apps/webapp/app/api/graph/subgraph/delete/route.ts +++ b/apps/webapp/app/api/graph/subgraph/delete/route.ts @@ -1,6 +1,7 @@ import { DeleteSubgraphRequestSchema } from '@/app/[modelId]/graph/graph-types'; import { prisma } from '@/lib/db'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/graph/subgraph/list-featured/route.ts b/apps/webapp/app/api/graph/subgraph/list-featured/route.ts index 8205f3b88..89c90187b 100644 --- a/apps/webapp/app/api/graph/subgraph/list-featured/route.ts +++ b/apps/webapp/app/api/graph/subgraph/list-featured/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withOptionalUser(async (request: RequestOptionalUser) => { diff --git a/apps/webapp/app/api/graph/subgraph/list/route.ts b/apps/webapp/app/api/graph/subgraph/list/route.ts index d1b5eac41..91b215823 100644 --- a/apps/webapp/app/api/graph/subgraph/list/route.ts +++ b/apps/webapp/app/api/graph/subgraph/list/route.ts @@ -1,5 +1,6 @@ import { prisma } from '@/lib/db'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/graph/subgraph/save/route.ts b/apps/webapp/app/api/graph/subgraph/save/route.ts index feba96d49..58b460ad0 100644 --- a/apps/webapp/app/api/graph/subgraph/save/route.ts +++ b/apps/webapp/app/api/graph/subgraph/save/route.ts @@ -1,6 +1,7 @@ import { SaveSubgraphRequestSchema } from '@/app/[modelId]/graph/graph-types'; import { prisma } from '@/lib/db'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/inference-host/source/connect/route.tsx b/apps/webapp/app/api/inference-host/source/connect/route.tsx index 93348f608..1e8d0f6a0 100644 --- a/apps/webapp/app/api/inference-host/source/connect/route.tsx +++ b/apps/webapp/app/api/inference-host/source/connect/route.tsx @@ -1,5 +1,6 @@ import { createInferenceHostSource, getInferenceHostSourceById } from '@/lib/db/inference-host-source'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { InferenceHostSourceSchema } from '@/prisma/generated/zod'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/inference-host/source/new/route.tsx b/apps/webapp/app/api/inference-host/source/new/route.tsx index 92d8e47ae..1264040fd 100644 --- a/apps/webapp/app/api/inference-host/source/new/route.tsx +++ b/apps/webapp/app/api/inference-host/source/new/route.tsx @@ -1,5 +1,6 @@ import { createInferenceHostSource } from '@/lib/db/inference-host-source'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { InferenceHostSourceSchema } from '@/prisma/generated/zod'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/list/add-features/route.tsx b/apps/webapp/app/api/list/add-features/route.tsx index 01541ec4a..335097bbb 100644 --- a/apps/webapp/app/api/list/add-features/route.tsx +++ b/apps/webapp/app/api/list/add-features/route.tsx @@ -1,6 +1,7 @@ import { addNeuronsToList } from '@/lib/db/list'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { ListNeuronToAdd } from '@/lib/utils/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const maxDuration = 15; diff --git a/apps/webapp/app/api/list/comment/delete/route.tsx b/apps/webapp/app/api/list/comment/delete/route.tsx index 0c060cc77..a88d386da 100644 --- a/apps/webapp/app/api/list/comment/delete/route.tsx +++ b/apps/webapp/app/api/list/comment/delete/route.tsx @@ -1,5 +1,6 @@ import { deleteListComment } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/list/comment/new/route.tsx b/apps/webapp/app/api/list/comment/new/route.tsx index 650c7ea88..6bbf29003 100644 --- a/apps/webapp/app/api/list/comment/new/route.tsx +++ b/apps/webapp/app/api/list/comment/new/route.tsx @@ -1,5 +1,6 @@ import { addListComment } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/list/delete/route.tsx b/apps/webapp/app/api/list/delete/route.tsx index ce40af016..e3eab2eef 100644 --- a/apps/webapp/app/api/list/delete/route.tsx +++ b/apps/webapp/app/api/list/delete/route.tsx @@ -1,5 +1,6 @@ import { deleteList } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** * @swagger diff --git a/apps/webapp/app/api/list/edit-feature/route.tsx b/apps/webapp/app/api/list/edit-feature/route.tsx index dcd6e3fd2..e53d405f6 100644 --- a/apps/webapp/app/api/list/edit-feature/route.tsx +++ b/apps/webapp/app/api/list/edit-feature/route.tsx @@ -1,5 +1,6 @@ import { updateListNeuronDescription } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/list/get/route.tsx b/apps/webapp/app/api/list/get/route.tsx index 5146179de..4afc50cc2 100644 --- a/apps/webapp/app/api/list/get/route.tsx +++ b/apps/webapp/app/api/list/get/route.tsx @@ -1,5 +1,6 @@ import { getListWithDetails } from '@/lib/db/list'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/list/list/route.tsx b/apps/webapp/app/api/list/list/route.tsx index b7daa1952..24a7f06ec 100644 --- a/apps/webapp/app/api/list/list/route.tsx +++ b/apps/webapp/app/api/list/list/route.tsx @@ -1,5 +1,6 @@ import { getUserListsSimple } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/list/new-with-features/route.tsx b/apps/webapp/app/api/list/new-with-features/route.tsx index a40734a6c..ea23ad572 100644 --- a/apps/webapp/app/api/list/new-with-features/route.tsx +++ b/apps/webapp/app/api/list/new-with-features/route.tsx @@ -1,8 +1,9 @@ import { addNeuronsToList, newList, updateListMetadata } from '@/lib/db/list'; import { neuronExistsAndUserHasAccess } from '@/lib/db/neuron'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { ListWithPartialRelationsAndUrl } from '@/lib/utils/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string, ValidationError } from 'yup'; @@ -147,7 +148,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { const listWithUrl: ListWithPartialRelationsAndUrl = { ...list, - url: `${NEXT_PUBLIC_URL}/list/${list.id}`, + url: `${env.NEXT_PUBLIC_URL}/list/${list.id}`, }; return NextResponse.json(listWithUrl); diff --git a/apps/webapp/app/api/list/new/route.tsx b/apps/webapp/app/api/list/new/route.tsx index b3e2d3131..c9e9fb4ca 100644 --- a/apps/webapp/app/api/list/new/route.tsx +++ b/apps/webapp/app/api/list/new/route.tsx @@ -1,7 +1,8 @@ import { newList, updateListMetadata } from '@/lib/db/list'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { ListWithPartialRelationsAndUrl } from '@/lib/utils/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; @@ -74,7 +75,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { const listWithUrl: ListWithPartialRelationsAndUrl = { ...list, - url: `${NEXT_PUBLIC_URL}/list/${list.id}`, + url: `${env.NEXT_PUBLIC_URL}/list/${list.id}`, }; return NextResponse.json(listWithUrl); diff --git a/apps/webapp/app/api/list/remove/route.tsx b/apps/webapp/app/api/list/remove/route.tsx index ec39142be..9551383ec 100644 --- a/apps/webapp/app/api/list/remove/route.tsx +++ b/apps/webapp/app/api/list/remove/route.tsx @@ -1,5 +1,6 @@ import { removeNeuronFromList } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/list/update/route.tsx b/apps/webapp/app/api/list/update/route.tsx index 249e70be2..1921e1e7c 100644 --- a/apps/webapp/app/api/list/update/route.tsx +++ b/apps/webapp/app/api/list/update/route.tsx @@ -1,5 +1,6 @@ import { updateListMetadata } from '@/lib/db/list'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; // Hobby plans don't support > 60 seconds diff --git a/apps/webapp/app/api/model/new/route.tsx b/apps/webapp/app/api/model/new/route.tsx index c471ed196..546a46436 100644 --- a/apps/webapp/app/api/model/new/route.tsx +++ b/apps/webapp/app/api/model/new/route.tsx @@ -1,5 +1,6 @@ import { createModel, getModelById } from '@/lib/db/model'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { Visibility } from '@prisma/client'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/search-all/route.tsx b/apps/webapp/app/api/search-all/route.tsx index bfcf7476c..287082e69 100644 --- a/apps/webapp/app/api/search-all/route.tsx +++ b/apps/webapp/app/api/search-all/route.tsx @@ -8,13 +8,10 @@ import { prisma } from '@/lib/db'; import { createInferenceActivationsAndReturn } from '@/lib/db/activation'; import { getNeuronsForSearcher } from '@/lib/db/neuron'; import { assertUserCanAccessModelAndSourceSet } from '@/lib/db/userCanAccess'; -import { - DEMO_MODE, - INFERENCE_ACTIVATION_USER_ID_DO_NOT_INCLUDE_IN_PUBLIC_ACTIVATIONS, - PUBLIC_ACTIVATIONS_USER_IDS, -} from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { runInferenceActivationAll } from '@/lib/utils/inference'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { ActivationAllPost200Response } from 'neuronpedia-inference-client'; import { NextResponse } from 'next/server'; @@ -181,7 +178,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { take: 1, where: { creatorId: { - in: PUBLIC_ACTIVATIONS_USER_IDS, + in: env.PUBLIC_ACTIVATIONS_USER_IDS, }, }, }, @@ -326,7 +323,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { var userIdForSearch = request.user.id; } else { // eslint-disable-next-line - var userIdForSearch = INFERENCE_ACTIVATION_USER_ID_DO_NOT_INCLUDE_IN_PUBLIC_ACTIVATIONS; + var userIdForSearch = env.INFERENCE_ACTIVATION_USER_ID; } // create all the activations first @@ -389,7 +386,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { }); }); - if (DEMO_MODE) { + if (env.DEMO_MODE) { console.log('skipping saved search creation in demo mode'); } else { // eslint-disable-next-line diff --git a/apps/webapp/app/api/search-topk-by-token/route.tsx b/apps/webapp/app/api/search-topk-by-token/route.tsx index dd19b4e54..44df7ad36 100644 --- a/apps/webapp/app/api/search-topk-by-token/route.tsx +++ b/apps/webapp/app/api/search-topk-by-token/route.tsx @@ -1,8 +1,9 @@ import { getNeuronsForTopkSearcherExplanationOnly } from '@/lib/db/neuron'; import { assertUserCanAccessModelAndSource } from '@/lib/db/userCanAccess'; -import { NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { getActivationsTopKByToken, SearchTopKResult } from '@/lib/utils/inference'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { ActivationTopkByTokenPost200Response } from 'neuronpedia-inference-client'; import { NextResponse } from 'next/server'; import { boolean, number, object, string, ValidationError } from 'yup'; @@ -15,7 +16,7 @@ const DEFAULT_DENSITY_THRESHOLD = 0.01; const searchWithTopKRequestSchema = object({ modelId: string().required().max(50), source: string().required().max(50), - text: string().required().max(NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH), + text: string().required().max(env.NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH), numResults: number().optional().min(1).max(20).default(NUMBER_TOPK_RESULTS), ignoreBos: boolean().optional().default(true), densityThreshold: number().optional().default(DEFAULT_DENSITY_THRESHOLD), diff --git a/apps/webapp/app/api/source-release/new/route.tsx b/apps/webapp/app/api/source-release/new/route.tsx index 072c2c9a3..b23f7ccff 100644 --- a/apps/webapp/app/api/source-release/new/route.tsx +++ b/apps/webapp/app/api/source-release/new/route.tsx @@ -1,5 +1,6 @@ import { createSourceRelease } from '@/lib/db/source'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { SourceReleaseSchema } from '@/prisma/generated/zod'; import { Visibility } from '@prisma/client'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/source-set/[modelId]/[name]/route.tsx b/apps/webapp/app/api/source-set/[modelId]/[name]/route.tsx index 87866ab63..401790a4d 100644 --- a/apps/webapp/app/api/source-set/[modelId]/[name]/route.tsx +++ b/apps/webapp/app/api/source-set/[modelId]/[name]/route.tsx @@ -1,5 +1,6 @@ import { getSourceSet } from '@/lib/db/source'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/source-set/new/route.tsx b/apps/webapp/app/api/source-set/new/route.tsx index 2e5faa549..f0ec24965 100644 --- a/apps/webapp/app/api/source-set/new/route.tsx +++ b/apps/webapp/app/api/source-set/new/route.tsx @@ -1,6 +1,7 @@ import { getModelById } from '@/lib/db/model'; import { createSourceSetWithSources, getSourceSet } from '@/lib/db/source'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { Visibility } from '@prisma/client'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/source/new/route.tsx b/apps/webapp/app/api/source/new/route.tsx index 5a7e270f7..cdca3c2bf 100644 --- a/apps/webapp/app/api/source/new/route.tsx +++ b/apps/webapp/app/api/source/new/route.tsx @@ -1,5 +1,6 @@ import { createSource } from '@/lib/db/source'; -import { RequestAuthedAdminUser, withAuthedAdminUser } from '@/lib/with-user'; +import { RequestAuthedAdminUser } from '@/lib/types/auth'; +import { withAuthedAdminUser } from '@/lib/with-user'; import { SourceSchema } from '@/prisma/generated/zod'; import { JsonObject } from '@prisma/client/runtime/library'; import { NextResponse } from 'next/server'; diff --git a/apps/webapp/app/api/steer-chat/route.tsx b/apps/webapp/app/api/steer-chat/route.tsx index b6adbdad3..0845e73c4 100644 --- a/apps/webapp/app/api/steer-chat/route.tsx +++ b/apps/webapp/app/api/steer-chat/route.tsx @@ -7,7 +7,8 @@ import { prisma } from '@/lib/db'; import { getModelById } from '@/lib/db/model'; import { neuronExistsAndUserHasAccess } from '@/lib/db/neuron'; import { ERROR_NOT_FOUND_MESSAGE } from '@/lib/db/userCanAccess'; -import { DEMO_MODE, NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; +import { AuthenticatedUser, RequestOptionalUser } from '@/lib/types/auth'; import { steerCompletionChat } from '@/lib/utils/inference'; import { ChatMessage, @@ -21,7 +22,7 @@ import { STEER_TEMPERATURE_MAX, SteerFeature, } from '@/lib/utils/steer'; -import { AuthenticatedUser, RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { SteerOutputToNeuronWithPartialRelations } from '@/prisma/generated/zod'; import { SteerOutputType } from '@prisma/client'; import { EventSourceMessage } from 'eventsource-parser'; @@ -143,7 +144,7 @@ async function saveSteerChatOutput( toReturnResult.id = dbResult.id; console.log(`steer saved: ${dbResult.id}`); // eslint-disable-next-line no-param-reassign - toReturnResult.shareUrl = `${NEXT_PUBLIC_URL}/steer/${dbResult.id}`; + toReturnResult.shareUrl = `${env.NEXT_PUBLIC_URL}/steer/${dbResult.id}`; } // update saved steered output with connected default output id @@ -297,7 +298,7 @@ async function* generateResponse( // Save final results after all streams are complete if (streamProcessors.every((processor) => processor.done)) { - if (DEMO_MODE) { + if (env.DEMO_MODE) { console.log('skipping saveSteerChatOutput in demo mode'); } else { toReturnResult = await saveSteerChatOutput( @@ -748,7 +749,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { logprobs: savedSteerSteeredOutputs[0].logprobs ? JSON.parse(savedSteerSteeredOutputs[0].logprobs) : null, }; toReturnResult.id = savedSteerSteeredOutputs[0].id; - toReturnResult.shareUrl = `${NEXT_PUBLIC_URL}/steer/${savedSteerSteeredOutputs[0].id}`; + toReturnResult.shareUrl = `${env.NEXT_PUBLIC_URL}/steer/${savedSteerSteeredOutputs[0].id}`; steerTypesToRun = steerTypesToRun.filter((type) => type !== SteerOutputType.STEERED); } diff --git a/apps/webapp/app/api/steer-load/route.tsx b/apps/webapp/app/api/steer-load/route.tsx index fd8ffbdea..a44fcb6c7 100644 --- a/apps/webapp/app/api/steer-load/route.tsx +++ b/apps/webapp/app/api/steer-load/route.tsx @@ -1,6 +1,7 @@ import { prisma } from '@/lib/db'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { env } from '@/lib/env'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { SteerOutputType } from '@prisma/client'; import { NPSteerMethod } from 'neuronpedia-inference-client'; import { NextResponse } from 'next/server'; @@ -99,7 +100,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { }; toReturnResult.id = savedSteerSteeredOutput.id; - toReturnResult.shareUrl = `${NEXT_PUBLIC_URL}/steer/${savedSteerSteeredOutput.id}`; + toReturnResult.shareUrl = `${env.NEXT_PUBLIC_URL}/steer/${savedSteerSteeredOutput.id}`; return NextResponse.json(toReturnResult); } catch (error) { diff --git a/apps/webapp/app/api/steer-logits/route.ts b/apps/webapp/app/api/steer-logits/route.ts index 87895667f..1636e9d51 100644 --- a/apps/webapp/app/api/steer-logits/route.ts +++ b/apps/webapp/app/api/steer-logits/route.ts @@ -1,6 +1,7 @@ import { getModelById } from '@/lib/db/model'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { SteerLogitsRequestSchema, steerLogits } from '@/lib/utils/graph'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; // for now this just uses the graph server, but we should merge it with the inference server later on to be consistent diff --git a/apps/webapp/app/api/steer/presets/route.tsx b/apps/webapp/app/api/steer/presets/route.tsx index ae9f80f09..a1b9c5ceb 100644 --- a/apps/webapp/app/api/steer/presets/route.tsx +++ b/apps/webapp/app/api/steer/presets/route.tsx @@ -1,7 +1,8 @@ import { getModelById } from '@/lib/db/model'; import { getVectorsForModelAndUser } from '@/lib/db/neuron'; +import { RequestOptionalUser } from '@/lib/types/auth'; import { FeaturePreset, SteerFeature, SteerPreset } from '@/lib/utils/steer'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/steer/route.tsx b/apps/webapp/app/api/steer/route.tsx index a9703bbd5..76bed9a79 100644 --- a/apps/webapp/app/api/steer/route.tsx +++ b/apps/webapp/app/api/steer/route.tsx @@ -2,7 +2,8 @@ import { prisma } from '@/lib/db'; import { getModelById } from '@/lib/db/model'; import { neuronExistsAndUserHasAccess } from '@/lib/db/neuron'; import { ERROR_NOT_FOUND_MESSAGE } from '@/lib/db/userCanAccess'; -import { DEMO_MODE, NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; +import { AuthenticatedUser, RequestOptionalUser } from '@/lib/types/auth'; import { steerCompletion } from '@/lib/utils/inference'; import { STEER_FREQUENCY_PENALTY_MAX, @@ -14,7 +15,7 @@ import { STEER_TEMPERATURE_MAX, SteerFeature, } from '@/lib/utils/steer'; -import { AuthenticatedUser, RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { withOptionalUser } from '@/lib/with-user'; import { SteerOutputType } from '@prisma/client'; import { EventSourceMessage, EventSourceParserStream } from 'eventsource-parser/stream'; import { NPLogprob, NPSteerMethod, SteerCompletionPost200Response } from 'neuronpedia-inference-client'; @@ -129,7 +130,7 @@ async function* generateResponse( yield toReturnResult; } } - if (DEMO_MODE) { + if (env.DEMO_MODE) { console.log('skipping saveSteerOutput in demo mode'); } else { // eslint-disable-next-line @@ -238,7 +239,7 @@ async function saveSteerOutput( // eslint-disable-next-line toReturnResult.id = saveResult.id; // eslint-disable-next-line - toReturnResult.shareUrl = `${NEXT_PUBLIC_URL}/steer/${saveResult.id}`; + toReturnResult.shareUrl = `${env.NEXT_PUBLIC_URL}/steer/${saveResult.id}`; } } console.log('SAVING AND RETURNING'); @@ -449,7 +450,7 @@ export const POST = withOptionalUser(async (request: RequestOptionalUser) => { toReturnResult[SteerOutputType.STEERED] = savedSteereds[0].outputText; toReturnResult.steeredLogProbs = savedSteereds[0].logprobs ? JSON.parse(savedSteereds[0].logprobs) : null; toReturnResult.id = savedSteereds[0].id; - toReturnResult.shareUrl = `${NEXT_PUBLIC_URL}/steer/${savedSteereds[0].id}`; + toReturnResult.shareUrl = `${env.NEXT_PUBLIC_URL}/steer/${savedSteereds[0].id}`; steerTypesToRun = steerTypesToRun.filter((type) => type !== SteerOutputType.STEERED); } if (savedDefault.length > 0) { diff --git a/apps/webapp/app/api/umap/route.ts b/apps/webapp/app/api/umap/route.ts index 6348c4e40..119c16218 100644 --- a/apps/webapp/app/api/umap/route.ts +++ b/apps/webapp/app/api/umap/route.ts @@ -1,5 +1,6 @@ import { getUmapExplanations } from '@/lib/db/explanation'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withOptionalUser(async (request: RequestOptionalUser) => { diff --git a/apps/webapp/app/api/user/api-key-update/route.tsx b/apps/webapp/app/api/user/api-key-update/route.tsx index 0c7701355..817225f9c 100644 --- a/apps/webapp/app/api/user/api-key-update/route.tsx +++ b/apps/webapp/app/api/user/api-key-update/route.tsx @@ -1,13 +1,13 @@ +import { OPENROUTER_BASE_URL } from '@/lib/constants'; import { removeUserSecret, updateUserSecret } from '@/lib/db/userSecret'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import Anthropic from '@anthropic-ai/sdk'; import { GoogleGenerativeAI } from '@google/generative-ai'; import { UserSecretType } from '@prisma/client'; import { NextResponse } from 'next/server'; import OpenAI from 'openai'; -const OPENROUTER_BASE_URL = 'https://openrouter.ai/api/v1'; - export const POST = withAuthedUser(async (request: RequestAuthedUser) => { const body = await request.json(); const { type, value } = body; diff --git a/apps/webapp/app/api/user/api-key/route.tsx b/apps/webapp/app/api/user/api-key/route.tsx index 4f37669ce..87525087f 100644 --- a/apps/webapp/app/api/user/api-key/route.tsx +++ b/apps/webapp/app/api/user/api-key/route.tsx @@ -1,5 +1,6 @@ import { getUserSecret } from '@/lib/db/userSecret'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/user/bookmarks/route.tsx b/apps/webapp/app/api/user/bookmarks/route.tsx index 6d8ad726d..441264a02 100644 --- a/apps/webapp/app/api/user/bookmarks/route.tsx +++ b/apps/webapp/app/api/user/bookmarks/route.tsx @@ -1,5 +1,6 @@ import { getBookmarksByUser } from '@/lib/db/bookmark'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/user/edit/route.tsx b/apps/webapp/app/api/user/edit/route.tsx index 93ae2df94..84dac5784 100644 --- a/apps/webapp/app/api/user/edit/route.tsx +++ b/apps/webapp/app/api/user/edit/route.tsx @@ -1,5 +1,6 @@ import { updateUserAccount } from '@/lib/db/user'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { z } from 'zod'; diff --git a/apps/webapp/app/api/user/refresh/route.tsx b/apps/webapp/app/api/user/refresh/route.tsx index aae89d98f..39164cc2a 100644 --- a/apps/webapp/app/api/user/refresh/route.tsx +++ b/apps/webapp/app/api/user/refresh/route.tsx @@ -1,5 +1,6 @@ import { getUserByIdRefresh } from '@/lib/db/user'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; export const POST = withAuthedUser(async (request: RequestAuthedUser) => { diff --git a/apps/webapp/app/api/vector/delete/route.tsx b/apps/webapp/app/api/vector/delete/route.tsx index d88a0428b..586e39c6e 100644 --- a/apps/webapp/app/api/vector/delete/route.tsx +++ b/apps/webapp/app/api/vector/delete/route.tsx @@ -1,5 +1,6 @@ import { deleteNeuron } from '@/lib/db/neuron'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { object, string, ValidationError } from 'yup'; diff --git a/apps/webapp/app/api/vector/get/route.tsx b/apps/webapp/app/api/vector/get/route.tsx index 7c117bf1b..63b6e74e8 100644 --- a/apps/webapp/app/api/vector/get/route.tsx +++ b/apps/webapp/app/api/vector/get/route.tsx @@ -1,5 +1,6 @@ import { getVector } from '@/lib/db/neuron'; -import { RequestOptionalUser, withOptionalUser } from '@/lib/with-user'; +import { RequestOptionalUser } from '@/lib/types/auth'; +import { withOptionalUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { object, string } from 'yup'; diff --git a/apps/webapp/app/api/vector/list-owned/route.tsx b/apps/webapp/app/api/vector/list-owned/route.tsx index 51da2df28..f63cecbc5 100644 --- a/apps/webapp/app/api/vector/list-owned/route.tsx +++ b/apps/webapp/app/api/vector/list-owned/route.tsx @@ -1,5 +1,6 @@ import { getVectorsForUser } from '@/lib/db/neuron'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { RequestAuthedUser } from '@/lib/types/auth'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; /** diff --git a/apps/webapp/app/api/vector/new/route.tsx b/apps/webapp/app/api/vector/new/route.tsx index 1bbefc274..66b0784cf 100644 --- a/apps/webapp/app/api/vector/new/route.tsx +++ b/apps/webapp/app/api/vector/new/route.tsx @@ -1,10 +1,11 @@ import { getModelById } from '@/lib/db/model'; import { upsertVector } from '@/lib/db/neuron'; import { upsertSourceForVector } from '@/lib/db/source'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; +import { RequestAuthedUser } from '@/lib/types/auth'; import { VECTOR_VALID_HOOK_TYPE_TO_DETAILS } from '@/lib/utils/neuron-vector'; import { STEER_STRENGTH_MAX, STEER_STRENGTH_MIN } from '@/lib/utils/steer'; -import { RequestAuthedUser, withAuthedUser } from '@/lib/with-user'; +import { withAuthedUser } from '@/lib/with-user'; import { NextResponse } from 'next/server'; import { array, number, object, string, ValidationError } from 'yup'; @@ -133,7 +134,7 @@ export const POST = withAuthedUser(async (request: RequestAuthedUser) => { return NextResponse.json({ message: 'Success', - url: `${NEXT_PUBLIC_URL}/${vector.modelId}/${vector.layer}/${vector.index}`, + url: `${env.NEXT_PUBLIC_URL}/${vector.modelId}/${vector.layer}/${vector.index}`, vector: { modelId: vector.modelId, source: vector.layer, diff --git a/apps/webapp/app/available-resources/table.tsx b/apps/webapp/app/available-resources/table.tsx index 189b72142..a84e0916b 100644 --- a/apps/webapp/app/available-resources/table.tsx +++ b/apps/webapp/app/available-resources/table.tsx @@ -2,7 +2,7 @@ import CustomTooltip from '@/components/custom-tooltip'; import { Button } from '@/components/shadcn/button'; -import { CONTACT_EMAIL_ADDRESS, NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import { getLayerNumFromSource } from '@/lib/utils/source'; import { ModelWithRelations } from '@/prisma/generated/zod'; import { InfoIcon } from 'lucide-react'; @@ -17,7 +17,7 @@ export default function AvailableResourcesTable({ models }: { models: ModelWithR
The following are the public models and sources that are available for{' '} {model.id} @@ -109,7 +109,7 @@ export default function AvailableResourcesTable({ models }: { models: ModelWithR {source.id} @@ -126,7 +126,7 @@ export default function AvailableResourcesTable({ models }: { models: ModelWithR size="xs" onClick={() => { window.open( - `mailto:${CONTACT_EMAIL_ADDRESS}?subject=Request%20Inference%20for%20${model.id}%20${source.id}&body=I'd%20like%20to%20request%20inference%20for%20the%20${model.id}%20${source.id}%20source.%20Thanks!`, + `mailto:${env.NEXT_PUBLIC_CONTACT_EMAIL_ADDRESS}?subject=Request%20Inference%20for%20${model.id}%20${source.id}&body=I'd%20like%20to%20request%20inference%20for%20the%20${model.id}%20${source.id}%20source.%20Thanks!`, '_blank', ); }} diff --git a/apps/webapp/app/blog/[slug]/page.tsx b/apps/webapp/app/blog/[slug]/page.tsx index b7a87286a..761119ae2 100644 --- a/apps/webapp/app/blog/[slug]/page.tsx +++ b/apps/webapp/app/blog/[slug]/page.tsx @@ -2,7 +2,7 @@ import { getBlogDateString, getPostBySlug, PostMetaData } from '@/app/blog/blog- import BreadcrumbsComponent from '@/components/breadcrumbs-component'; import { BreadcrumbLink } from '@/components/shadcn/breadcrumbs'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/shadcn/card'; -import { ASSET_BASE_URL } from '@/lib/env'; +import { ASSET_BASE_URL } from '@/lib/constants'; import { Metadata } from 'next'; import Image from 'next/image'; import BlogSidebar from '../blog-sidebar'; diff --git a/apps/webapp/app/blog/blog-sidebar.tsx b/apps/webapp/app/blog/blog-sidebar.tsx index a0d30d0df..7320b7c45 100644 --- a/apps/webapp/app/blog/blog-sidebar.tsx +++ b/apps/webapp/app/blog/blog-sidebar.tsx @@ -1,4 +1,4 @@ -import { ASSET_BASE_URL } from '@/lib/env'; +import { ASSET_BASE_URL } from '@/lib/constants'; import Image from 'next/image'; export default function BlogSidebar() { diff --git a/apps/webapp/app/blog/blog-util.ts b/apps/webapp/app/blog/blog-util.ts index 4b9142da2..bbe642543 100644 --- a/apps/webapp/app/blog/blog-util.ts +++ b/apps/webapp/app/blog/blog-util.ts @@ -1,4 +1,4 @@ -import { ASSET_BASE_URL } from '@/lib/env'; +import { ASSET_BASE_URL } from '@/lib/constants'; import fs from 'fs'; import { compileMDX } from 'next-mdx-remote/rsc'; import path from 'path'; diff --git a/apps/webapp/app/blog/page.tsx b/apps/webapp/app/blog/page.tsx index 47f117e37..9d949cc12 100644 --- a/apps/webapp/app/blog/page.tsx +++ b/apps/webapp/app/blog/page.tsx @@ -2,7 +2,7 @@ import { getBlogDateString, getPostsMetaData, PostMetaData } from '@/app/blog/bl import BreadcrumbsComponent from '@/components/breadcrumbs-component'; import { BreadcrumbLink } from '@/components/shadcn/breadcrumbs'; import { Card, CardContent } from '@/components/shadcn/card'; -import { ASSET_BASE_URL } from '@/lib/env'; +import { ASSET_BASE_URL } from '@/lib/constants'; import { Metadata } from 'next'; import Image from 'next/image'; import Link from 'next/link'; diff --git a/apps/webapp/app/embed/sae-explorable/page.tsx b/apps/webapp/app/embed/sae-explorable/page.tsx index a9eadc097..c1b57a42d 100644 --- a/apps/webapp/app/embed/sae-explorable/page.tsx +++ b/apps/webapp/app/embed/sae-explorable/page.tsx @@ -1,10 +1,13 @@ -import { DEFAULT_STEER_MODEL } from '@/lib/env'; +import { env } from '@/lib/env'; import SteererSimple from '../../../components/steer/steerer-simple'; export default function Page() { return (
- +
); } diff --git a/apps/webapp/app/feed.xml/route.tsx b/apps/webapp/app/feed.xml/route.tsx index 4fe501198..6b5ad21a8 100644 --- a/apps/webapp/app/feed.xml/route.tsx +++ b/apps/webapp/app/feed.xml/route.tsx @@ -1,11 +1,12 @@ import { getPostsMetaData } from '@/app/blog/blog-util'; -import { ASSET_BASE_URL, NEXT_PUBLIC_URL } from '@/lib/env'; +import { ASSET_BASE_URL } from '@/lib/constants'; +import { env } from '@/lib/env'; import RSS from 'rss'; export async function GET() { const blogPosts = await getPostsMetaData(); - const siteUrl = process.env.NODE_ENV === 'production' ? NEXT_PUBLIC_URL : 'http://localhost:3000'; + const siteUrl = env.NODE_ENV === 'production' ? env.NEXT_PUBLIC_URL : 'http://localhost:3000'; const feedOptions = { title: 'The Residual Stream', diff --git a/apps/webapp/app/footer.tsx b/apps/webapp/app/footer.tsx index 6bcc06ffc..bf73c8bfa 100644 --- a/apps/webapp/app/footer.tsx +++ b/apps/webapp/app/footer.tsx @@ -1,6 +1,6 @@ 'use client'; -import { IS_ACTUALLY_NEURONPEDIA_ORG, NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; @@ -13,7 +13,7 @@ export default function Footer() { return (
- {IS_ACTUALLY_NEURONPEDIA_ORG ? ( + {env.IS_ACTUALLY_NEURONPEDIA_ORG ? ( `, + ``, ); alert('Copied iFrame embed code to clipboard.'); }} @@ -642,7 +642,7 @@ export default function List({ listId }: { listId: string }) { className="flex h-7 flex-row items-center justify-center gap-x-1.5 rounded bg-slate-200 px-2 py-0.5 text-[10px] font-medium text-slate-500 hover:bg-slate-300 active:bg-sky-300 sm:text-[11px]" onClick={(e) => { e.preventDefault(); - copy(`${NEXT_PUBLIC_URL}/list/${list.id}?embed=true`); + copy(`${env.NEXT_PUBLIC_URL}/list/${list.id}?embed=true`); alert('Copied embed link to clipboard.'); }} > diff --git a/apps/webapp/app/model/new/new-model-form.tsx b/apps/webapp/app/model/new/new-model-form.tsx index a38e3712d..7a3f7778e 100644 --- a/apps/webapp/app/model/new/new-model-form.tsx +++ b/apps/webapp/app/model/new/new-model-form.tsx @@ -2,7 +2,7 @@ // TODO: not actually used (and api prevents public use) -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import { ModelPartialSchema } from 'prisma/generated/zod'; import { useState } from 'react'; @@ -59,7 +59,7 @@ export default function NewModelForm() {
diff --git a/apps/webapp/app/page.tsx b/apps/webapp/app/page.tsx index 6b99c8ac0..e19808763 100644 --- a/apps/webapp/app/page.tsx +++ b/apps/webapp/app/page.tsx @@ -4,14 +4,7 @@ import InferenceActivationAllProvider from '@/components/provider/inference-acti import RandomFeatureLink from '@/components/random-feature-link'; import { Button } from '@/components/shadcn/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/shadcn/card'; -import { - DEFAULT_MODELID, - DEFAULT_SOURCE, - DEMO_MODE, - IS_LOCALHOST, - NEXT_PUBLIC_URL, - SITE_NAME_VERCEL_DEPLOY, -} from '@/lib/env'; +import { env } from '@/lib/env'; import { getSourceSetNameFromSource } from '@/lib/utils/source'; import { QuestionMarkCircledIcon } from '@radix-ui/react-icons'; import { @@ -53,7 +46,7 @@ export async function generateMetadata(): Promise { template: '%s | Neuronpedia', default: 'Neuronpedia', }, - metadataBase: new URL(NEXT_PUBLIC_URL), + metadataBase: new URL(env.NEXT_PUBLIC_URL), description, openGraph: { title: { @@ -61,7 +54,7 @@ export async function generateMetadata(): Promise { default: 'Neuronpedia', }, description, - url: NEXT_PUBLIC_URL, + url: env.NEXT_PUBLIC_URL, siteName: 'Neuronpedia', locale: 'en_US', type: 'website', @@ -76,8 +69,8 @@ export async function generateMetadata(): Promise { export default function Page() { return ( -
- {IS_LOCALHOST && !DEMO_MODE && ( +
+ {env.IS_LOCALHOST && !env.DEMO_MODE && (
You are running a local instance of Neuronpedia.
Would you like to go to the Admin panel to import sources/SAEs?
@@ -203,8 +196,10 @@ export default function Page() {
- {SITE_NAME_VERCEL_DEPLOY ? ( -
{SITE_NAME_VERCEL_DEPLOY}
+ {env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY ? ( +
+ {env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY} +
) : ( <> Neuronpedia is an{' '} @@ -231,7 +226,7 @@ export default function Page() { )}
- {SITE_NAME_VERCEL_DEPLOY ? ( + {env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY ? (
Welcome to your very own Neuronpedia instance.
@@ -306,7 +301,19 @@ export default function Page() { /> + Anthropic + + Apollo Research @@ -372,9 +379,6 @@ export default function Page() { alt="MATS" /> */} - - -
@@ -445,24 +449,31 @@ export default function Page() { - +
Jump to Feature
- {DEFAULT_MODELID && DEFAULT_SOURCE && ( + {env.NEXT_PUBLIC_DEFAULT_MODELID && env.NEXT_PUBLIC_DEFAULT_SOURCE && (
Jump to Random
- +
)}
@@ -471,14 +482,19 @@ export default function Page() {
-
Graph
- Visualize and trace the internal reasoning steps of a model with custom prompts, pioneered by Anthropic{`'`}s{' '} - + Visualize and trace the internal reasoning steps of a model with custom prompts, pioneered by Anthropic + {`'`}s{' '} + circuit tracing {' '} papers. @@ -490,7 +506,11 @@ export default function Page() { Try It: Circuit Tracer - +
-
diff --git a/apps/webapp/app/privacy/page.tsx b/apps/webapp/app/privacy/page.tsx index 87b917aa0..157fc40e3 100644 --- a/apps/webapp/app/privacy/page.tsx +++ b/apps/webapp/app/privacy/page.tsx @@ -1,4 +1,4 @@ -import { CONTACT_EMAIL_ADDRESS } from '@/lib/env'; +import { env } from '@/lib/env'; export default function Privacy() { return ( @@ -66,7 +66,7 @@ export default function Privacy() { public username may be publicly credited with that contribution. You may change your username at any time. If you wish to delete your data, you can simply{' '} email us your deletion request diff --git a/apps/webapp/app/quick-list/page.tsx b/apps/webapp/app/quick-list/page.tsx index 5cc7b2cec..590da96a4 100644 --- a/apps/webapp/app/quick-list/page.tsx +++ b/apps/webapp/app/quick-list/page.tsx @@ -1,10 +1,10 @@ // TODO: better error handling import UmapProvider from '@/components/provider/umap-provider'; +import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/auth/utils'; import { getNeuronsForQuickList } from '@/lib/db/neuron'; import { NeuronIdentifier } from '@/lib/utils/neuron-identifier'; import { notFound } from 'next/navigation'; -import { makeAuthedUserFromSessionOrReturnNull } from '../../lib/db/user'; import QuickList from './quick-list'; export default async function Page({ diff --git a/apps/webapp/app/search-topk-by-token/search-topk-by-token.tsx b/apps/webapp/app/search-topk-by-token/search-topk-by-token.tsx index a93457f16..e75ae5d41 100644 --- a/apps/webapp/app/search-topk-by-token/search-topk-by-token.tsx +++ b/apps/webapp/app/search-topk-by-token/search-topk-by-token.tsx @@ -5,7 +5,7 @@ import ModelSelector from '@/components/feature-selector/model-selector'; import SourceSetSelector from '@/components/feature-selector/sourceset-selector'; import { useGlobalContext } from '@/components/provider/global-provider'; import { LoadingSquare } from '@/components/svg/loading-square'; -import { DEFAULT_MODELID, DEFAULT_SOURCE, DEFAULT_SOURCESET, NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH } from '@/lib/env'; +import { env } from '@/lib/env'; import useWindowSize from '@/lib/hooks/use-window-size'; import { SearchTopKResult } from '@/lib/utils/inference'; import { INFERENCE_EXAMPLE_TEXTS } from '@/lib/utils/inference-example-texts'; @@ -56,11 +56,11 @@ export default function SearchTopkByToken({ // Use a ref to track initialization state - won't trigger re-renders const isInitializedRef = useRef(false); - const [modelId, setModelId] = useState(initialModelId || DEFAULT_MODELID); + const [modelId, setModelId] = useState(initialModelId || env.NEXT_PUBLIC_DEFAULT_MODELID); const [sourceSet, setSourceSet] = useState( - initialSource ? getSourceSetNameFromSource(initialSource) : DEFAULT_SOURCESET, + initialSource ? getSourceSetNameFromSource(initialSource) : env.NEXT_PUBLIC_DEFAULT_SOURCESET, ); - const [source, setSource] = useState(initialSource || DEFAULT_SOURCE); + const [source, setSource] = useState(initialSource || env.NEXT_PUBLIC_DEFAULT_SOURCE); const [searchQuery, setSearchQuery] = useState(initialText || ''); const [topkResult, setTopkResult] = useState(); const [topkFeatures, setTopkFeatures] = useState(undefined); @@ -98,9 +98,9 @@ export default function SearchTopkByToken({ setLockedTokenPosition(-1); setHoveredTokenPosition(-1); setSearchQuery(textToUse); - if (textToUse.length > NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH) { + if (textToUse.length > env.NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH) { alert( - `We currently support a maximum of ${NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH} characters in a search query. Your query is ${textToUse.length} characters long.`, + `We currently support a maximum of ${env.NEXT_PUBLIC_SEARCH_TOPK_MAX_CHAR_LENGTH} characters in a search query. Your query is ${textToUse.length} characters long.`, ); setIsSearching(false); return; diff --git a/apps/webapp/app/source-set/new/form.tsx b/apps/webapp/app/source-set/new/form.tsx index 109f319d7..e0ad5dfd9 100644 --- a/apps/webapp/app/source-set/new/form.tsx +++ b/apps/webapp/app/source-set/new/form.tsx @@ -3,7 +3,7 @@ // this isn't officially supported yet import ModelSelector from '@/components/feature-selector/model-selector'; -import { IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; import { SourceSet } from '@prisma/client'; import { useState } from 'react'; @@ -46,7 +46,7 @@ export default function NewSourceSetForm() { window.location.href = `/${sae.modelId}/${sae.name}`; }; - return IS_LOCALHOST ? ( + return env.IS_LOCALHOST ? (

Add SAE Set

diff --git a/apps/webapp/app/steer/[slug]/page.tsx b/apps/webapp/app/steer/[slug]/page.tsx index 904f05a6c..e30009608 100644 --- a/apps/webapp/app/steer/[slug]/page.tsx +++ b/apps/webapp/app/steer/[slug]/page.tsx @@ -1,5 +1,5 @@ import { prisma } from '@/lib/db'; -import { STEER_FORCE_ALLOW_INSTRUCT_MODELS } from '@/lib/env'; +import { env } from '@/lib/env'; import { notFound, permanentRedirect } from 'next/navigation'; // this page url is formatted as: /steer/[steer-model] or /steer/[steer-output-id] @@ -11,7 +11,7 @@ export default async function Page({ params }: { params: { slug: string } }) { }, }); // CASE: this is /steer/[steer-model-id] - redirect to the new steer page - if (isInferenceEnabledModel || STEER_FORCE_ALLOW_INSTRUCT_MODELS.includes(params.slug)) { + if (isInferenceEnabledModel || env.NEXT_PUBLIC_STEER_FORCE_ALLOW_INSTRUCT_MODELS.includes(params.slug)) { permanentRedirect(`/${params.slug}/steer`); } else { // CASE: this is /steer/[steerOutputId] - redirect to the new steer page and load the steer diff --git a/apps/webapp/app/steer/page.tsx b/apps/webapp/app/steer/page.tsx index 4db7ad40e..9d9d16342 100644 --- a/apps/webapp/app/steer/page.tsx +++ b/apps/webapp/app/steer/page.tsx @@ -1,9 +1,9 @@ import { prisma } from '@/lib/db'; -import { DEFAULT_STEER_MODEL } from '@/lib/env'; +import { env } from '@/lib/env'; import { redirect } from 'next/navigation'; export default async function Page() { - if (!DEFAULT_STEER_MODEL) { + if (!env.NEXT_PUBLIC_DEFAULT_STEER_MODEL) { const model = await prisma.model.findFirst({ where: { visibility: 'PUBLIC', @@ -11,5 +11,5 @@ export default async function Page() { }); redirect(`/${model?.id}/steer`); } - redirect(`/${DEFAULT_STEER_MODEL}/steer`); + redirect(`/${env.NEXT_PUBLIC_DEFAULT_STEER_MODEL}/steer`); } diff --git a/apps/webapp/app/unsubscribe-all/page.tsx b/apps/webapp/app/unsubscribe-all/page.tsx index a4eec719e..354d798e0 100644 --- a/apps/webapp/app/unsubscribe-all/page.tsx +++ b/apps/webapp/app/unsubscribe-all/page.tsx @@ -1,5 +1,5 @@ import { setUserEmailUnsubscribeAll } from '@/lib/db/user'; -import { CONTACT_EMAIL_ADDRESS } from '@/lib/env'; +import { env } from '@/lib/env'; export default async function Page({ searchParams }: { searchParams?: { [key: string]: string | undefined } }) { const unsubscribeCode = searchParams?.code; @@ -19,8 +19,8 @@ export default async function Page({ searchParams }: { searchParams?: { [key: st

Invalid Unsubscribe Link

Sorry, that unsubscribe link seems to be invalid. Please either email us at{' '} - - {CONTACT_EMAIL_ADDRESS} + + {env.NEXT_PUBLIC_CONTACT_EMAIL_ADDRESS} , or log in and unsubscribe via Settings.

diff --git a/apps/webapp/app/unsubscribe-newsletter/page.tsx b/apps/webapp/app/unsubscribe-newsletter/page.tsx index 89a0c2db3..a2ef64d32 100644 --- a/apps/webapp/app/unsubscribe-newsletter/page.tsx +++ b/apps/webapp/app/unsubscribe-newsletter/page.tsx @@ -1,5 +1,5 @@ import { setUserEmailUnsubscribeNewsletter } from '@/lib/db/user'; -import { CONTACT_EMAIL_ADDRESS } from '@/lib/env'; +import { env } from '@/lib/env'; export default async function Page({ searchParams }: { searchParams?: { [key: string]: string | undefined } }) { const unsubscribeCode = searchParams?.code; @@ -19,8 +19,8 @@ export default async function Page({ searchParams }: { searchParams?: { [key: st

Invalid Unsubscribe Link

Sorry, that unsubscribe link seems to be invalid. Please either email us at{' '} - - {CONTACT_EMAIL_ADDRESS} + + {env.NEXT_PUBLIC_CONTACT_EMAIL_ADDRESS} , or log in and unsubscribe via Settings.

diff --git a/apps/webapp/app/user/[name]/lists/page.tsx b/apps/webapp/app/user/[name]/lists/page.tsx index ce55c793a..28b753895 100644 --- a/apps/webapp/app/user/[name]/lists/page.tsx +++ b/apps/webapp/app/user/[name]/lists/page.tsx @@ -1,11 +1,11 @@ import { getUserListsSimple } from '@/lib/db/list'; import { getUserByName } from '@/lib/db/user'; -import { getServerSession } from 'next-auth'; +import { getServerSession, Session } from 'next-auth'; import { authOptions } from '../../../api/auth/[...nextauth]/authOptions'; import Lists from './lists'; export default async function Page({ params }: { params: { name: string } }) { - const session = await getServerSession(authOptions); + const session: Session | null = await getServerSession(authOptions); const user = await getUserByName(params.name); diff --git a/apps/webapp/app/user/[name]/page.tsx b/apps/webapp/app/user/[name]/page.tsx index 9b26e02aa..73e6c8df3 100644 --- a/apps/webapp/app/user/[name]/page.tsx +++ b/apps/webapp/app/user/[name]/page.tsx @@ -2,8 +2,9 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/shadcn/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/shadcn/tabs'; +import { makeAuthedUserFromSessionOrReturnNull } from '@/lib/auth/utils'; import { getBookmarksByUserWithExplanations } from '@/lib/db/bookmark'; -import { getUserByNameForPublicProfile, makeAuthedUserFromSessionOrReturnNull } from '@/lib/db/user'; +import { getUserByNameForPublicProfile } from '@/lib/db/user'; import { Bot } from 'lucide-react'; import { notFound } from 'next/navigation'; diff --git a/apps/webapp/app/user/[name]/vectors/page.tsx b/apps/webapp/app/user/[name]/vectors/page.tsx index 9d5dc78eb..692c2b690 100644 --- a/apps/webapp/app/user/[name]/vectors/page.tsx +++ b/apps/webapp/app/user/[name]/vectors/page.tsx @@ -1,12 +1,12 @@ import { getVectorsForUser } from '@/lib/db/neuron'; import { getUserByName } from '@/lib/db/user'; import { Neuron } from '@prisma/client'; -import { getServerSession } from 'next-auth'; +import { getServerSession, Session } from 'next-auth'; import { authOptions } from '../../../api/auth/[...nextauth]/authOptions'; import UserVectors from './user-vectors'; export default async function Page({ params }: { params: { name: string } }) { - const session = await getServerSession(authOptions); + const session: Session | null = await getServerSession(authOptions); const user = await getUserByName(params.name); if (session?.user.id !== user.id) { diff --git a/apps/webapp/components/activation-single-form.tsx b/apps/webapp/components/activation-single-form.tsx index 19b998255..6754d8fc1 100644 --- a/apps/webapp/components/activation-single-form.tsx +++ b/apps/webapp/components/activation-single-form.tsx @@ -4,7 +4,7 @@ // eslint-disable-next-line import ActivationItem from '@/components/activation-item'; import { useGlobalContext } from '@/components/provider/global-provider'; -import { NEXT_PUBLIC_URL } from '@/lib/env'; +import { env } from '@/lib/env'; import { BOS_TOKENS } from '@/lib/utils/activations'; import { Activation } from '@prisma/client'; import copy from 'copy-to-clipboard'; @@ -219,7 +219,7 @@ export default function ActivationSingleForm({ className="my-1 ml-3 flex w-[72px] cursor-pointer flex-row items-center justify-center gap-x-0.5 whitespace-pre rounded bg-slate-200 px-2 py-1.5 text-[9px] font-medium text-slate-600 hover:bg-slate-300 sm:px-2.5 sm:py-1.5 sm:text-[10.5px]" title="Share Custom Activation Test Result" onClick={() => { - const url = `${NEXT_PUBLIC_URL}/${neuron.modelId}/${neuron.layer}/${ + const url = `${env.NEXT_PUBLIC_URL}/${neuron.modelId}/${neuron.layer}/${ neuron.index }?defaulttesttext=${encodeURIComponent(activationResult.tokens.join(''))}`; copy(url); diff --git a/apps/webapp/components/explanations-searcher.tsx b/apps/webapp/components/explanations-searcher.tsx index 5e762c08a..170589c1b 100644 --- a/apps/webapp/components/explanations-searcher.tsx +++ b/apps/webapp/components/explanations-searcher.tsx @@ -9,7 +9,7 @@ import PanelLoader from '@/components/panel-loader'; import { useGlobalContext } from '@/components/provider/global-provider'; import { Button } from '@/components/shadcn/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/shadcn/tabs'; -import { DEFAULT_MODELID, DEFAULT_RELEASE_NAME, DEFAULT_SOURCESET, IS_ACTUALLY_NEURONPEDIA_ORG } from '@/lib/env'; +import { env } from '@/lib/env'; import { replaceHtmlAnomalies } from '@/lib/utils/activations'; import { EXPLANATIONTYPE_HUMAN } from '@/lib/utils/autointerp'; import { SearchExplanationsResponse, SearchExplanationsType } from '@/lib/utils/general'; @@ -87,21 +87,23 @@ export default function ExplanationsSearcher({ setFeatureModalFeature, setFeatureModalOpen, } = useGlobalContext(); - const [modelId, setModelId] = useState(initialModelId || DEFAULT_MODELID || getDefaultModel()?.id || DEFAULT_MODELID); + const [modelId, setModelId] = useState( + initialModelId || env.NEXT_PUBLIC_DEFAULT_MODELID || getDefaultModel()?.id || env.NEXT_PUBLIC_DEFAULT_MODELID, + ); const [sourceSet, setSourceSet] = useState( initialSourceSetName || (modelId ? getSourceSetsForModelId(modelId).length > 0 ? getSourceSetsForModelId(modelId)[0].name - : DEFAULT_SOURCESET - : DEFAULT_SOURCESET), + : env.NEXT_PUBLIC_DEFAULT_SOURCESET + : env.NEXT_PUBLIC_DEFAULT_SOURCESET), ); const [selectedLayers, setSelectedLayers] = useState(initialSelectedLayers); const [needsReloadSearch, setNeedsReloadSearch] = useState(false); const [showDashboards, setShowDashboards] = useState(true); const [selectedTab, setSelectedTab] = useState(defaultTab); const [selectedRelease, setSelectedRelease] = useState( - initialReleaseName || filterToRelease || DEFAULT_RELEASE_NAME, + initialReleaseName || filterToRelease || env.NEXT_PUBLIC_DEFAULT_RELEASE_NAME, ); const [loadedResults, setLoadedResults] = useState([]); const [hasMore, setHasMore] = useState(true); @@ -345,7 +347,7 @@ export default function ExplanationsSearcher({

- {!IS_ACTUALLY_NEURONPEDIA_ORG + {!env.IS_ACTUALLY_NEURONPEDIA_ORG ? 'Search all features across all loaded models' : 'Search 50,000,000+ features across 7 models'}

diff --git a/apps/webapp/components/feature-selector/feature-selector.tsx b/apps/webapp/components/feature-selector/feature-selector.tsx index 82666c534..b0e316247 100644 --- a/apps/webapp/components/feature-selector/feature-selector.tsx +++ b/apps/webapp/components/feature-selector/feature-selector.tsx @@ -1,6 +1,6 @@ 'use client'; -import { DEFAULT_MODELID, DEFAULT_SOURCESET } from '@/lib/env'; +import { env } from '@/lib/env'; import { ChevronLeft, ChevronRight } from 'lucide-react'; import { useRouter } from 'next-nprogress-bar'; import Link from 'next/link'; @@ -43,8 +43,8 @@ export default function FeatureSelector({ exclusiveCallback?: boolean; }) { const { getSourceSetsForModelId, getFirstSourceForSourceSet, globalModels, getDefaultModel } = useGlobalContext(); - const [modelId, setModelId] = useState(defaultModelId || getDefaultModel()?.id || DEFAULT_MODELID); - const [sourceSet, setSourceSet] = useState(defaultSourceSet || DEFAULT_SOURCESET); + const [modelId, setModelId] = useState(defaultModelId || getDefaultModel()?.id || env.NEXT_PUBLIC_DEFAULT_MODELID); + const [sourceSet, setSourceSet] = useState(defaultSourceSet || env.NEXT_PUBLIC_DEFAULT_SOURCESET); const [source, setSource] = useState(defaultSource); const [index, setIndex] = useState(defaultIndex); const router = useRouter(); diff --git a/apps/webapp/components/feature-selector/model-selector.tsx b/apps/webapp/components/feature-selector/model-selector.tsx index a46d0e577..472891e2f 100644 --- a/apps/webapp/components/feature-selector/model-selector.tsx +++ b/apps/webapp/components/feature-selector/model-selector.tsx @@ -1,12 +1,12 @@ 'use client'; -import { DEFAULT_MODELID } from '@/lib/env'; +import { env } from '@/lib/env'; import * as Select from '@radix-ui/react-select'; import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'; import { useGlobalContext } from '../provider/global-provider'; export default function ModelSelector({ - modelId = DEFAULT_MODELID, + modelId = env.NEXT_PUBLIC_DEFAULT_MODELID, modelIdChangedCallback, filterToInferenceEnabled = false, filterToRelease, diff --git a/apps/webapp/components/feature-selector/release-selector.tsx b/apps/webapp/components/feature-selector/release-selector.tsx index 31374566f..956b82819 100644 --- a/apps/webapp/components/feature-selector/release-selector.tsx +++ b/apps/webapp/components/feature-selector/release-selector.tsx @@ -1,6 +1,6 @@ 'use client'; -import { DEFAULT_RELEASE_NAME } from '@/lib/env'; +import { env } from '@/lib/env'; import { SourceReleaseWithPartialRelations } from '@/prisma/generated/zod'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { ChevronDownIcon } from 'lucide-react'; @@ -18,7 +18,9 @@ export default function ReleaseSelector({ const getReleaseForName = (releaseName: string) => releases.find((r) => r.name === releaseName) as SourceReleaseWithPartialRelations; const [release, setRelease] = useState( - defaultReleaseName ? getReleaseForName(defaultReleaseName) : getReleaseForName(DEFAULT_RELEASE_NAME), + defaultReleaseName + ? getReleaseForName(defaultReleaseName) + : getReleaseForName(env.NEXT_PUBLIC_DEFAULT_RELEASE_NAME), ); return ( diff --git a/apps/webapp/components/inference-searcher/inference-searcher.tsx b/apps/webapp/components/inference-searcher/inference-searcher.tsx index 61a24dbb6..cdb68d1ac 100644 --- a/apps/webapp/components/inference-searcher/inference-searcher.tsx +++ b/apps/webapp/components/inference-searcher/inference-searcher.tsx @@ -9,7 +9,7 @@ import { useInferenceActivationAllContext, } from '@/components/provider/inference-activation-all-provider'; import { Button } from '@/components/shadcn/button'; -import { DEFAULT_MODELID, DEFAULT_SOURCESET } from '@/lib/env'; +import { env } from '@/lib/env'; import { BOS_TOKENS, replaceHtmlAnomalies } from '@/lib/utils/activations'; import { getAdditionalInfoFromSource, @@ -66,8 +66,10 @@ export default function InferenceSearcher({ } = useInferenceActivationAllContext(); const { getSourcesForSourceSet, getDefaultModel, globalModels } = useGlobalContext(); const [sortIndexes, setSortIndexes] = useState(initialSortIndexes || []); - const [modelId, setModelId] = useState(initialModelId || DEFAULT_MODELID || getDefaultModel()?.id || DEFAULT_MODELID); - const [sourceSet, setSourceSet] = useState(initialSourceSet || DEFAULT_SOURCESET); + const [modelId, setModelId] = useState( + initialModelId || env.NEXT_PUBLIC_DEFAULT_MODELID || getDefaultModel()?.id || env.NEXT_PUBLIC_DEFAULT_MODELID, + ); + const [sourceSet, setSourceSet] = useState(initialSourceSet || env.NEXT_PUBLIC_DEFAULT_SOURCESET); const [selectedLayers, setSelectedLayers] = useState(initialSelectedLayers); const [ignoreBos, setIgnoreBos] = useState(initialIgnoreBos !== undefined ? initialIgnoreBos : true); const [hideDense, setHideDense] = useState(true); @@ -108,7 +110,7 @@ export default function InferenceSearcher({ setSourceSet(newSourceSet.name); setAvailableLayers(getSourcesForSourceSet(newModelId, newSourceSet.name, false, true, false)); } else { - setSourceSet(DEFAULT_SOURCESET); + setSourceSet(env.NEXT_PUBLIC_DEFAULT_SOURCESET); setAvailableLayers([]); } setSelectedLayers([]); diff --git a/apps/webapp/components/nav/models-dropdown.tsx b/apps/webapp/components/nav/models-dropdown.tsx index 21c86b83b..088451320 100644 --- a/apps/webapp/components/nav/models-dropdown.tsx +++ b/apps/webapp/components/nav/models-dropdown.tsx @@ -1,7 +1,7 @@ 'use client'; import { useGlobalContext } from '@/components/provider/global-provider'; -import { IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; import * as Select from '@radix-ui/react-select'; import { ChevronDown, ChevronUp, Plus } from 'lucide-react'; import { useRouter } from 'next-nprogress-bar'; @@ -67,8 +67,8 @@ export default function ModelsDropdown({ isInBreadcrumb = false }: { isInBreadcr ))} {!isInBreadcrumb && ( diff --git a/apps/webapp/components/nav/navbar-buttons.tsx b/apps/webapp/components/nav/navbar-buttons.tsx index c85e2703a..30260d682 100644 --- a/apps/webapp/components/nav/navbar-buttons.tsx +++ b/apps/webapp/components/nav/navbar-buttons.tsx @@ -8,7 +8,7 @@ import InferenceSearcher from '@/components/inference-searcher/inference-searche import JumpToSAE from '@/components/jump-to-sae'; import { useGlobalContext } from '@/components/provider/global-provider'; import RandomReleaseFeature from '@/components/random-release-feature'; -import { DEFAULT_MODELID, DEFAULT_SOURCE, DEMO_MODE, IS_LOCALHOST } from '@/lib/env'; +import { env } from '@/lib/env'; import { getSourceSetNameFromSource, NEURONS_SOURCESET } from '@/lib/utils/source'; import { SourceReleaseWithPartialRelations } from '@/prisma/generated/zod'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; @@ -26,17 +26,19 @@ export default function NavBarButtons() { const { getSourceSetsForModelId, globalModels, releases, getDefaultModel, getFirstSourceForSourceSet } = useGlobalContext(); const [jumpToOpen, setJumpToOpen] = useState(false); - const [jumpToModelModelId, setJumpToModelModelId] = useState(DEFAULT_MODELID || getDefaultModel()?.id || ''); + const [jumpToModelModelId, setJumpToModelModelId] = useState( + env.NEXT_PUBLIC_DEFAULT_MODELID || getDefaultModel()?.id || '', + ); const defaultSource = - DEFAULT_SOURCE || + env.NEXT_PUBLIC_DEFAULT_SOURCE || (getSourceSetsForModelId(jumpToModelModelId, true).length > 0 ? getFirstSourceForSourceSet(jumpToModelModelId, getSourceSetsForModelId(jumpToModelModelId, true)[0].name) : ''); return ( <> - {IS_LOCALHOST && !DEMO_MODE && ( + {env.IS_LOCALHOST && !env.DEMO_MODE && ( - {!DEMO_MODE && ( + {!env.DEMO_MODE && (
- {!SITE_NAME_VERCEL_DEPLOY && ( + {!env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY && (
)} - {SITE_NAME_VERCEL_DEPLOY ? ( -

{SITE_NAME_VERCEL_DEPLOY}

+ {env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY ? ( +

{env.NEXT_PUBLIC_SITE_NAME_VERCEL_DEPLOY}

) : (

Neuronpedia {pathname.endsWith('/graph') ? - Circuit Tracer : ''}

)} - {DEMO_MODE ? ( + {env.DEMO_MODE ? ( @@ -76,7 +76,7 @@ export default function NavBar({ session }: { session: Session | null }) { >
This is a mode that demonstrates hosting Neuronpedia publicly. It has read-only access.
- ) : IS_LOCALHOST ? ( + ) : env.IS_LOCALHOST ? ( @@ -99,7 +99,7 @@ export default function NavBar({ session }: { session: Session | null }) { {session ? ( - ) : NEXT_PUBLIC_ENABLE_SIGNIN ? ( + ) : env.NEXT_PUBLIC_ENABLE_SIGNIN ? ( <>