summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/src
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-12-02 14:51:25 -0500
committerFrank <[email protected]>2025-12-02 14:51:27 -0500
commit1f11d4fb1a6003b6b033cd25004700bc6872d543 (patch)
treeac4645fa5fb43004b9390e934097bbfef45db097 /packages/console/app/src
parentb308503ab5ff470be43bdb8a2fb6e0c070f091ca (diff)
downloadopencode-1f11d4fb1a6003b6b033cd25004700bc6872d543.tar.gz
opencode-1f11d4fb1a6003b6b033cd25004700bc6872d543.zip
zen: data dumper
Diffstat (limited to 'packages/console/app/src')
-rw-r--r--packages/console/app/src/routes/zen/util/dataDumper.ts30
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts11
2 files changed, 24 insertions, 17 deletions
diff --git a/packages/console/app/src/routes/zen/util/dataDumper.ts b/packages/console/app/src/routes/zen/util/dataDumper.ts
index 6a064138a..155cc6c58 100644
--- a/packages/console/app/src/routes/zen/util/dataDumper.ts
+++ b/packages/console/app/src/routes/zen/util/dataDumper.ts
@@ -1,25 +1,37 @@
import { Resource, waitUntil } from "@opencode-ai/console-resource"
-export function createDataDumper(sessionId: string, requestId: string) {
+export function createDataDumper(sessionId: string, requestId: string, projectId: string) {
if (Resource.App.stage !== "production") return
+ if (sessionId === "") return
- let data: Record<string, any> = {}
- let modelName: string | undefined
+ let data: Record<string, any> = { sessionId, requestId, projectId }
+ let metadata: Record<string, any> = { sessionId, requestId, projectId }
return {
- provideModel: (model?: string) => (modelName = model),
+ provideModel: (model?: string) => {
+ data.modelName = model
+ metadata.modelName = model
+ },
provideRequest: (request: string) => (data.request = request),
provideResponse: (response: string) => (data.response = response),
provideStream: (chunk: string) => (data.response = (data.response ?? "") + chunk),
flush: () => {
- if (!modelName) return
+ if (!data.modelName) return
+
+ const timestamp = new Date().toISOString().replace(/[^0-9]/g, "")
- const str = new Date().toISOString().replace(/[^0-9]/g, "")
- const yyyymmdd = str.substring(0, 8)
- const hh = str.substring(8, 10)
+ waitUntil(
+ Resource.ZenData.put(
+ `data/${data.modelName}/${sessionId}/${requestId}.json`,
+ JSON.stringify({ timestamp, ...data }),
+ ),
+ )
waitUntil(
- Resource.ConsoleData.put(`${yyyymmdd}/${hh}/${modelName}/${sessionId}/${requestId}.json`, JSON.stringify(data)),
+ Resource.ZenData.put(
+ `meta/${data.modelName}/${timestamp}/${requestId}.json`,
+ JSON.stringify({ timestamp, ...metadata }),
+ ),
)
},
}
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index 972b60d6c..623c93127 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -13,13 +13,7 @@ import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js"
import { ProviderTable } from "@opencode-ai/console-core/schema/provider.sql.js"
import { logger } from "./logger"
import { AuthError, CreditsError, MonthlyLimitError, UserLimitError, ModelError, RateLimitError } from "./error"
-import {
- createBodyConverter,
- createStreamPartConverter,
- createResponseConverter,
- ProviderHelper,
- UsageInfo,
-} from "./provider/provider"
+import { createBodyConverter, createStreamPartConverter, createResponseConverter, UsageInfo } from "./provider/provider"
import { anthropicHelper } from "./provider/anthropic"
import { googleHelper } from "./provider/google"
import { openaiHelper } from "./provider/openai"
@@ -61,6 +55,7 @@ export async function handler(
const ip = input.request.headers.get("x-real-ip") ?? ""
const sessionId = input.request.headers.get("x-opencode-session") ?? ""
const requestId = input.request.headers.get("x-opencode-request") ?? ""
+ const projectId = input.request.headers.get("x-opencode-project") ?? ""
logger.metric({
is_tream: isStream,
session: sessionId,
@@ -68,7 +63,7 @@ export async function handler(
})
const zenData = ZenData.list()
const modelInfo = validateModel(zenData, model)
- const dataDumper = createDataDumper(sessionId, requestId)
+ const dataDumper = createDataDumper(sessionId, requestId, projectId)
const trialLimiter = createTrialLimiter(modelInfo.trial?.limit, ip)
const isTrial = await trialLimiter?.isTrial()
const rateLimiter = createRateLimiter(modelInfo.id, modelInfo.rateLimit, ip)