diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx
index 838fa6925..a068ed005 100644
--- a/packages/stats/app/src/routes/[lab]/[model].tsx
+++ b/packages/stats/app/src/routes/[lab]/[model].tsx
@@ -26,7 +26,7 @@ import {
type ModelCatalogCost,
type ModelCatalogEntry,
} from "../model-catalog"
-import { statsRuntime } from "../../stats-runtime"
+import { runStatsEffect } from "../../stats-runtime"
import {
applyThemePreference,
Footer,
@@ -96,7 +96,7 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a
const getModelData = query(async (lab: string, model: string) => {
"use server"
- return statsRuntime.runPromise(getStatsModelData(model, lab))
+ return runStatsEffect(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 fc4482639..9d71f7b64 100644
--- a/packages/stats/app/src/routes/[lab]/index.tsx
+++ b/packages/stats/app/src/routes/[lab]/index.tsx
@@ -16,7 +16,7 @@ import {
type ModelCatalogEntry,
type ModelCatalogLab,
} from "../model-catalog"
-import { statsRuntime } from "../../stats-runtime"
+import { runStatsEffect } from "../../stats-runtime"
import {
applyThemePreference,
Footer,
@@ -46,7 +46,7 @@ const labFooterLinks: readonly HeaderLink[] = [
const getLabData = query(async (lab: string) => {
"use server"
- return statsRuntime.runPromise(getStatsLabData(lab))
+ return runStatsEffect(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 b648adb20..81e60f82e 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 { Effect } from "effect"
-import { statsRuntime } from "../../stats-runtime"
+import { runStatsEffect } from "../../stats-runtime"
export async function GET() {
return Response.json(
- await statsRuntime.runPromise(
+ await runStatsEffect(
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 90ba9ce9f..1d46d43a1 100644
--- a/packages/stats/app/src/routes/index.tsx
+++ b/packages/stats/app/src/routes/index.tsx
@@ -26,7 +26,7 @@ import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show,
import { getRequestEvent } from "solid-js/web"
import type { FeatureCollection, GeometryObject, GeoJsonProperties } from "geojson"
import type { GeometryCollection, Topology } from "topojson-specification"
-import { statsRuntime } from "../stats-runtime"
+import { runStatsEffect } from "../stats-runtime"
import { findModelCatalogEntry, getModelCatalog, type ModelCatalog } from "./model-catalog"
import {
applyThemePreference,
@@ -109,7 +109,7 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a
const getData = query(async () => {
"use server"
- return statsRuntime.runPromise(getStatsHomeData())
+ return runStatsEffect(getStatsHomeData())
}, "getStatsHomeData")
export default function StatsHome() {
diff --git a/packages/stats/app/src/stats-runtime.ts b/packages/stats/app/src/stats-runtime.ts
index 8267f41cc..15beb678b 100644
--- a/packages/stats/app/src/stats-runtime.ts
+++ b/packages/stats/app/src/stats-runtime.ts
@@ -3,10 +3,14 @@ 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"
+import { Effect, Layer } from "effect"
+import type { Success } from "effect/Layer"
const repoLayer = Layer.mergeAll(ModelStatRepo.layer, ProviderStatRepo.layer, GeoStatRepo.layer).pipe(
Layer.provide(layer),
)
+const statsLayer = Layer.mergeAll(AppConfig.layer, layer, repoLayer)
-export const statsRuntime = ManagedRuntime.make(Layer.mergeAll(AppConfig.layer, layer, repoLayer))
+export function runStatsEffect(effect: Effect.Effect>) {
+ return Effect.runPromise(Effect.provide(effect, statsLayer))
+}