diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index 6869764f33..f865690df7 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -14,7 +14,6 @@ import { type StatsModelData, type UsageRange, } from "@opencode-ai/stats-core/domain/home" -import { runtime } from "@opencode-ai/stats-core/runtime" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, createSignal, For, onMount, Show, type JSX } from "solid-js" import { getRequestEvent } from "solid-js/web" @@ -96,7 +95,8 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a const getModelData = query(async (lab: string, model: string) => { "use server" - return runtime.runPromise(getStatsModelData(model, lab)) + const { statsRuntime } = await import("../../stats-runtime") + return statsRuntime.runPromise(getStatsModelData(model, lab)) }, "getStatsModelData") export default function StatsModel() { diff --git a/packages/stats/app/src/routes/[lab]/index.tsx b/packages/stats/app/src/routes/[lab]/index.tsx index 1c4cc7cc08..e1af50fa4c 100644 --- a/packages/stats/app/src/routes/[lab]/index.tsx +++ b/packages/stats/app/src/routes/[lab]/index.tsx @@ -6,7 +6,6 @@ import { type ModelUsagePoint, type StatsLabData, } from "@opencode-ai/stats-core/domain/home" -import { runtime } from "@opencode-ai/stats-core/runtime" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, createSignal, For, onMount, Show, type JSX } from "solid-js" import { getRequestEvent } from "solid-js/web" @@ -46,7 +45,8 @@ const labFooterLinks: readonly HeaderLink[] = [ const getLabData = query(async (lab: string) => { "use server" - return runtime.runPromise(getStatsLabData(lab)) + const { statsRuntime } = await import("../../stats-runtime") + return statsRuntime.runPromise(getStatsLabData(lab)) }, "getStatsLabData") export default function StatsLab() { diff --git a/packages/stats/app/src/routes/api/health.ts b/packages/stats/app/src/routes/api/health.ts index fe7abc9a7f..2a07bfc4e3 100644 --- a/packages/stats/app/src/routes/api/health.ts +++ b/packages/stats/app/src/routes/api/health.ts @@ -1,10 +1,10 @@ import { AppConfig } from "@opencode-ai/stats-core/config" -import { runtime } from "@opencode-ai/stats-core/runtime" import { Effect } from "effect" export async function GET() { + const { statsRuntime } = await import("../../stats-runtime") return Response.json( - await runtime.runPromise( + await statsRuntime.runPromise( Effect.gen(function* () { const config = yield* AppConfig return { diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index 862120d033..2439369b65 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -21,7 +21,6 @@ import { type TokenCostEntry, type UsagePoint, } from "@opencode-ai/stats-core/domain/home" -import { runtime } from "@opencode-ai/stats-core/runtime" import { createAsync, query } from "@solidjs/router" import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show, type JSX } from "solid-js" import { getRequestEvent } from "solid-js/web" @@ -109,7 +108,8 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a const getData = query(async () => { "use server" - return runtime.runPromise(getStatsHomeData()) + const { statsRuntime } = await import("../stats-runtime") + return statsRuntime.runPromise(getStatsHomeData()) }, "getStatsHomeData") export default function StatsHome() { diff --git a/packages/stats/app/src/stats-runtime.ts b/packages/stats/app/src/stats-runtime.ts new file mode 100644 index 0000000000..8267f41cc7 --- /dev/null +++ b/packages/stats/app/src/stats-runtime.ts @@ -0,0 +1,12 @@ +import { AppConfig } from "@opencode-ai/stats-core/config" +import { layer } from "@opencode-ai/stats-core/database" +import { GeoStatRepo } from "@opencode-ai/stats-core/domain/geo" +import { ModelStatRepo } from "@opencode-ai/stats-core/domain/model" +import { ProviderStatRepo } from "@opencode-ai/stats-core/domain/provider" +import { Layer, ManagedRuntime } from "effect" + +const repoLayer = Layer.mergeAll(ModelStatRepo.layer, ProviderStatRepo.layer, GeoStatRepo.layer).pipe( + Layer.provide(layer), +) + +export const statsRuntime = ManagedRuntime.make(Layer.mergeAll(AppConfig.layer, layer, repoLayer))