fix(stats): run worker effects directly

This commit is contained in:
Adam 2026-06-21 06:30:15 -05:00
commit 1a111be494
No known key found for this signature in database
GPG key ID: 9CB48779AF150E75
5 changed files with 14 additions and 10 deletions

View file

@ -26,7 +26,7 @@ import {
type ModelCatalogCost, type ModelCatalogCost,
type ModelCatalogEntry, type ModelCatalogEntry,
} from "../model-catalog" } from "../model-catalog"
import { statsRuntime } from "../../stats-runtime" import { runStatsEffect } from "../../stats-runtime"
import { import {
applyThemePreference, applyThemePreference,
Footer, Footer,
@ -96,7 +96,7 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a
const getModelData = query(async (lab: string, model: string) => { const getModelData = query(async (lab: string, model: string) => {
"use server" "use server"
return statsRuntime.runPromise(getStatsModelData(model, lab)) return runStatsEffect(getStatsModelData(model, lab))
}, "getStatsModelData") }, "getStatsModelData")
export default function StatsModel() { export default function StatsModel() {

View file

@ -16,7 +16,7 @@ import {
type ModelCatalogEntry, type ModelCatalogEntry,
type ModelCatalogLab, type ModelCatalogLab,
} from "../model-catalog" } from "../model-catalog"
import { statsRuntime } from "../../stats-runtime" import { runStatsEffect } from "../../stats-runtime"
import { import {
applyThemePreference, applyThemePreference,
Footer, Footer,
@ -46,7 +46,7 @@ const labFooterLinks: readonly HeaderLink[] = [
const getLabData = query(async (lab: string) => { const getLabData = query(async (lab: string) => {
"use server" "use server"
return statsRuntime.runPromise(getStatsLabData(lab)) return runStatsEffect(getStatsLabData(lab))
}, "getStatsLabData") }, "getStatsLabData")
export default function StatsLab() { export default function StatsLab() {

View file

@ -1,10 +1,10 @@
import { AppConfig } from "@opencode-ai/stats-core/config" import { AppConfig } from "@opencode-ai/stats-core/config"
import { Effect } from "effect" import { Effect } from "effect"
import { statsRuntime } from "../../stats-runtime" import { runStatsEffect } from "../../stats-runtime"
export async function GET() { export async function GET() {
return Response.json( return Response.json(
await statsRuntime.runPromise( await runStatsEffect(
Effect.gen(function* () { Effect.gen(function* () {
const config = yield* AppConfig const config = yield* AppConfig
return { return {

View file

@ -26,7 +26,7 @@ import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show,
import { getRequestEvent } from "solid-js/web" import { getRequestEvent } from "solid-js/web"
import type { FeatureCollection, GeometryObject, GeoJsonProperties } from "geojson" import type { FeatureCollection, GeometryObject, GeoJsonProperties } from "geojson"
import type { GeometryCollection, Topology } from "topojson-specification" 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 { findModelCatalogEntry, getModelCatalog, type ModelCatalog } from "./model-catalog"
import { import {
applyThemePreference, applyThemePreference,
@ -109,7 +109,7 @@ const worldBorderPath = worldPath(mesh(worldTopology, worldCountryGeometries, (a
const getData = query(async () => { const getData = query(async () => {
"use server" "use server"
return statsRuntime.runPromise(getStatsHomeData()) return runStatsEffect(getStatsHomeData())
}, "getStatsHomeData") }, "getStatsHomeData")
export default function StatsHome() { export default function StatsHome() {

View file

@ -3,10 +3,14 @@ import { layer } from "@opencode-ai/stats-core/database"
import { GeoStatRepo } from "@opencode-ai/stats-core/domain/geo" import { GeoStatRepo } from "@opencode-ai/stats-core/domain/geo"
import { ModelStatRepo } from "@opencode-ai/stats-core/domain/model" import { ModelStatRepo } from "@opencode-ai/stats-core/domain/model"
import { ProviderStatRepo } from "@opencode-ai/stats-core/domain/provider" 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( const repoLayer = Layer.mergeAll(ModelStatRepo.layer, ProviderStatRepo.layer, GeoStatRepo.layer).pipe(
Layer.provide(layer), 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<A, E>(effect: Effect.Effect<A, E, Success<typeof statsLayer>>) {
return Effect.runPromise(Effect.provide(effect, statsLayer))
}