Skip to content

Commit 36dc486

Browse files
authored
Merge pull request #9 from yugabyte/fix/public-traces-postgres-read
Fix/public traces postgres read
2 parents 20c7e48 + cfb82e1 commit 36dc486

File tree

39 files changed

+2594
-1849
lines changed

39 files changed

+2594
-1849
lines changed

docker-compose.yml

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ services:
1010
build:
1111
context: .
1212
dockerfile: web/Dockerfile
13+
args:
14+
NEXT_PUBLIC_BASE_PATH: ""
1315
cache_from:
1416
- langfuse-web:local
1517
container_name: ${WEB_CONTAINER_NAME:-langfuse-web}
1618
restart: unless-stopped
19+
ports:
20+
- "${WEB_HOST_PORT:-3000}:3000"
1721
# Keep web decoupled from worker for faster local iteration.
1822
# Start worker separately only when needed.
1923
depends_on:
@@ -29,48 +33,45 @@ services:
2933
condition: service_completed_successfully
3034
yb-tracing-schema-init:
3135
condition: service_completed_successfully
32-
ports:
33-
- "${WEB_HOST_PORT:-3000}:3000"
3436
environment:
35-
# Metadata DB (Prisma migrations + metadata tables)
36-
DATABASE_URL: "${DATABASE_URL:-postgresql://${YUGABYTE_DB_USER:-yugabyte}:${YUGABYTE_DB_PASSWORD:-yugabyte}@${YUGABYTE_DB_HOST:-yugabyte-db}:${YUGABYTE_DB_PORT:-5433}/${LANGFUSE_DB_NAME:-langfuse}}"
37-
TRACING_DATABASE_URL: "${TRACING_DATABASE_URL:-postgresql://${YUGABYTE_DB_USER:-yugabyte}:${YUGABYTE_DB_PASSWORD:-yugabyte}@${YUGABYTE_DB_HOST:-yugabyte-db}:${YUGABYTE_DB_PORT:-5433}/${LANGFUSE_DB_NAME:-langfuse}?schema=${TRACING_DB_SCHEMA:-clickhouse}}"
38-
39-
# Redis
40-
REDIS_HOST: "${REDIS_HOST:-redis}"
41-
REDIS_PORT: "${REDIS_PORT:-6379}"
37+
DATABASE_URL: "postgresql://yugabyte:yugabyte@yugabyte-db:5433/langfuse"
38+
TRACING_DATABASE_URL: "postgresql://yugabyte:yugabyte@yugabyte-db:5433/langfuse?schema=clickhouse"
39+
REDIS_HOST: "redis"
40+
REDIS_PORT: "6379"
4241
REDIS_AUTH: "${REDIS_AUTH:-myredissecret}"
4342

4443
# S3 / MinIO — internal Docker endpoint
4544
LANGFUSE_S3_EVENT_UPLOAD_BUCKET: "${LANGFUSE_S3_EVENT_UPLOAD_BUCKET:-langfuse}"
4645
LANGFUSE_S3_EVENT_UPLOAD_REGION: "${LANGFUSE_S3_EVENT_UPLOAD_REGION:-us-east-1}"
4746
LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: "${LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID:-minio}"
4847
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: "${LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY:-miniosecret}"
49-
LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: "${LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
48+
LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: "http://minio:9000"
5049
LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: "${LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE:-true}"
5150
LANGFUSE_S3_EVENT_UPLOAD_PREFIX: "${LANGFUSE_S3_EVENT_UPLOAD_PREFIX:-events/}"
5251

5352
LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: "${LANGFUSE_S3_MEDIA_UPLOAD_BUCKET:-langfuse}"
5453
LANGFUSE_S3_MEDIA_UPLOAD_REGION: "${LANGFUSE_S3_MEDIA_UPLOAD_REGION:-us-east-1}"
5554
LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: "${LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID:-minio}"
5655
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: "${LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY:-miniosecret}"
57-
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: "${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
56+
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: "http://minio:9000"
5857
LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: "${LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE:-true}"
5958
LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: "${LANGFUSE_S3_MEDIA_UPLOAD_PREFIX:-media/}"
6059

6160
LANGFUSE_S3_BATCH_EXPORT_ENABLED: "${LANGFUSE_S3_BATCH_EXPORT_ENABLED:-true}"
6261
LANGFUSE_S3_BATCH_EXPORT_BUCKET: "${LANGFUSE_S3_BATCH_EXPORT_BUCKET:-langfuse}"
6362
LANGFUSE_S3_BATCH_EXPORT_PREFIX: "${LANGFUSE_S3_BATCH_EXPORT_PREFIX:-exports/}"
6463
LANGFUSE_S3_BATCH_EXPORT_REGION: "${LANGFUSE_S3_BATCH_EXPORT_REGION:-us-east-1}"
65-
LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: "${LANGFUSE_S3_BATCH_EXPORT_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
64+
LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: "http://minio:9000"
6665
LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: "${LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT:-http://localhost:${MINIO_API_PORT:-19090}}"
6766
LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: "${LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID:-minio}"
6867
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: "${LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY:-miniosecret}"
6968
LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: "${LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE:-true}"
7069

7170
# Auth
72-
NEXTAUTH_URL: "${NEXTAUTH_URL:-http://localhost:${WEB_HOST_PORT:-3000}}"
71+
NEXTAUTH_URL: "http://localhost:5000"
7372
NEXTAUTH_SECRET: "${NEXTAUTH_SECRET:-secret}"
73+
ADMIN_API_KEY: "${ADMIN_API_KEY:-meko-local-admin-key}"
74+
LANGFUSE_EE_LICENSE_KEY: "${LANGFUSE_EE_LICENSE_KEY:-langfuse_ee_local_dev}"
7475

7576
# App config
7677
SALT: "${SALT:-salt}"
@@ -83,6 +84,7 @@ services:
8384
# setting it triggers dd-trace at runtime, which is only installed
8485
# in the image when passed as a build ARG (not set for local builds).
8586
NEXT_PUBLIC_LANGFUSE_RUN_NEXT_INIT: "${NEXT_PUBLIC_LANGFUSE_RUN_NEXT_INIT:-true}"
87+
NEXT_PUBLIC_BASE_PATH: ""
8688

8789
# Bootstrap user / org / projecti
8890
# TODO: this to to avoid the sign in/sign up step.
@@ -125,43 +127,40 @@ services:
125127
ports:
126128
- "${WORKER_HOST_PORT:-3030}:3030"
127129
environment:
128-
# Metadata DB
129-
DATABASE_URL: "${DATABASE_URL:-postgresql://${YUGABYTE_DB_USER:-yugabyte}:${YUGABYTE_DB_PASSWORD:-yugabyte}@${YUGABYTE_DB_HOST:-yugabyte-db}:${YUGABYTE_DB_PORT:-5433}/${LANGFUSE_DB_NAME:-langfuse}}"
130-
TRACING_DATABASE_URL: "${TRACING_DATABASE_URL:-postgresql://${YUGABYTE_DB_USER:-yugabyte}:${YUGABYTE_DB_PASSWORD:-yugabyte}@${YUGABYTE_DB_HOST:-yugabyte-db}:${YUGABYTE_DB_PORT:-5433}/${LANGFUSE_DB_NAME:-langfuse}?schema=${TRACING_DB_SCHEMA:-clickhouse}}"
131-
132-
# Redis
133-
REDIS_HOST: "${REDIS_HOST:-redis}"
134-
REDIS_PORT: "${REDIS_PORT:-6379}"
130+
DATABASE_URL: "postgresql://yugabyte:yugabyte@yugabyte-db:5433/langfuse"
131+
TRACING_DATABASE_URL: "postgresql://yugabyte:yugabyte@yugabyte-db:5433/langfuse?schema=clickhouse"
132+
REDIS_HOST: "redis"
133+
REDIS_PORT: "6379"
135134
REDIS_AUTH: "${REDIS_AUTH:-myredissecret}"
136135

137136
# S3 / MinIO
138137
LANGFUSE_S3_EVENT_UPLOAD_BUCKET: "${LANGFUSE_S3_EVENT_UPLOAD_BUCKET:-langfuse}"
139138
LANGFUSE_S3_EVENT_UPLOAD_REGION: "${LANGFUSE_S3_EVENT_UPLOAD_REGION:-us-east-1}"
140139
LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: "${LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID:-minio}"
141140
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: "${LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY:-miniosecret}"
142-
LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: "${LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
141+
LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: "http://minio:9000"
143142
LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: "${LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE:-true}"
144143
LANGFUSE_S3_EVENT_UPLOAD_PREFIX: "${LANGFUSE_S3_EVENT_UPLOAD_PREFIX:-events/}"
145144

146145
LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: "${LANGFUSE_S3_MEDIA_UPLOAD_BUCKET:-langfuse}"
147146
LANGFUSE_S3_MEDIA_UPLOAD_REGION: "${LANGFUSE_S3_MEDIA_UPLOAD_REGION:-us-east-1}"
148147
LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: "${LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID:-minio}"
149148
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: "${LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY:-miniosecret}"
150-
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: "${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
149+
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: "http://minio:9000"
151150
LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: "${LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE:-true}"
152151
LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: "${LANGFUSE_S3_MEDIA_UPLOAD_PREFIX:-media/}"
153152

154153
LANGFUSE_S3_BATCH_EXPORT_ENABLED: "${LANGFUSE_S3_BATCH_EXPORT_ENABLED:-true}"
155154
LANGFUSE_S3_BATCH_EXPORT_BUCKET: "${LANGFUSE_S3_BATCH_EXPORT_BUCKET:-langfuse}"
156155
LANGFUSE_S3_BATCH_EXPORT_PREFIX: "${LANGFUSE_S3_BATCH_EXPORT_PREFIX:-exports/}"
157156
LANGFUSE_S3_BATCH_EXPORT_REGION: "${LANGFUSE_S3_BATCH_EXPORT_REGION:-us-east-1}"
158-
LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: "${LANGFUSE_S3_BATCH_EXPORT_ENDPOINT:-http://minio:${MINIO_CONTAINER_API_PORT:-9000}}"
157+
LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: "http://minio:9000"
159158
LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: "${LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID:-minio}"
160159
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: "${LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY:-miniosecret}"
161160
LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: "${LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE:-true}"
162161

163162
# App config
164-
NEXTAUTH_URL: "${NEXTAUTH_URL:-http://localhost:${WEB_HOST_PORT:-3000}}"
163+
NEXTAUTH_URL: "http://localhost:5000"
165164
SALT: "${SALT:-salt}"
166165
ENCRYPTION_KEY: "${ENCRYPTION_KEY:-0000000000000000000000000000000000000000000000000000000000000000}"
167166
TELEMETRY_ENABLED: "${TELEMETRY_ENABLED:-false}"
@@ -282,13 +281,13 @@ services:
282281
restart: always
283282
entrypoint: sh
284283
# create the 'langfuse' bucket before starting the service
285-
command: -c 'mkdir -p /data/langfuse && minio server --address ":${MINIO_CONTAINER_API_PORT:-9000}" --console-address ":${MINIO_CONTAINER_CONSOLE_PORT:-9001}" /data'
284+
command: -c 'mkdir -p /data/langfuse && minio server --address ":9000" --console-address ":9001" /data'
286285
environment:
287286
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio}
288287
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-miniosecret}
289288
ports:
290-
- "${MINIO_API_PORT:-19090}:${MINIO_CONTAINER_API_PORT:-9000}"
291-
- "127.0.0.1:${MINIO_CONSOLE_PORT:-19091}:${MINIO_CONTAINER_CONSOLE_PORT:-9001}"
289+
- "${MINIO_API_PORT:-19090}:9000"
290+
- "127.0.0.1:${MINIO_CONSOLE_PORT:-19091}:9001"
292291
volumes:
293292
- langfuse_minio_data:/data
294293
healthcheck:
@@ -304,14 +303,18 @@ services:
304303
# CHANGEME: row below to secure redis password
305304
command: >
306305
--requirepass ${REDIS_AUTH:-myredissecret}
307-
--port ${REDIS_PORT:-6379}
306+
--port 6379
308307
--maxmemory-policy noeviction
309308
ports:
310-
- "127.0.0.1:${REDIS_HOST_PORT:-16379}:${REDIS_PORT:-6379}"
309+
- "127.0.0.1:${REDIS_HOST_PORT:-16379}:6379"
311310
volumes:
312311
- langfuse_redis_data:/data
313312
healthcheck:
314-
test: ["CMD", "redis-cli", "ping"]
313+
test:
314+
[
315+
"CMD-SHELL",
316+
"redis-cli -p 6379 -a ${REDIS_AUTH:-myredissecret} ping | grep -q PONG",
317+
]
315318
interval: 3s
316319
timeout: 10s
317320
retries: 10

packages/shared/src/db.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class PrismaTracingClientSingleton {
3636
}
3737

3838
PrismaTracingClientSingleton.instance = createPrismaInstance({
39-
url: process.env.TRACING_DATABASE_URL,
39+
url: process.env.TRACING_DATABASE_URL, // eslint-disable-line turbo/no-undeclared-env-vars
4040
});
4141

4242
return PrismaTracingClientSingleton.instance;
@@ -111,7 +111,7 @@ declare const globalThis: {
111111
if (process.env.NODE_ENV === "development") {
112112
globalThis.prismaGlobal ??= createPrismaInstance(); // regular instantiation
113113
globalThis.tracingPrismaGlobal ??= createPrismaInstance({
114-
url: process.env.TRACING_DATABASE_URL,
114+
url: process.env.TRACING_DATABASE_URL, // eslint-disable-line turbo/no-undeclared-env-vars
115115
});
116116
globalThis.kyselyPrismaGlobal ??= globalThis.prismaGlobal.$extends(
117117
kyselyExtension({

packages/shared/src/server/repositories/observations.ts

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,24 @@
1-
import {
2-
parseClickhouseUTCDateTimeFormat,
3-
upsertClickhouse,
4-
} from "./clickhouse";
1+
import { parseClickhouseUTCDateTimeFormat } from "./clickhouse";
52
import { logger } from "../logger";
63
import { InternalServerError, LangfuseNotFoundError } from "../../errors";
74
import { tracingPrisma as prisma } from "../../db";
85
import { ObservationRecordReadType } from "./definitions";
96
import { FilterState } from "../../types";
10-
import {
11-
DateTimeFilter,
12-
FilterList,
13-
StringFilter,
14-
FullObservations,
15-
orderByToClickhouseSql,
16-
} from "../queries";
17-
import { createFilterFromFilterState } from "../queries/clickhouse-sql/factory";
18-
import {
19-
observationsTableTraceUiColumnDefinitions,
20-
observationsTableUiColumnDefinitions,
21-
} from "../tableMappings";
7+
import { FullObservations } from "../queries";
228
import { OrderByState } from "../../interfaces/orderBy";
239
import { getTracesByIds } from "./traces";
24-
import { measureAndReturn } from "../clickhouse/measureAndReturn";
2510
import { PreferredClickhouseService } from "../clickhouse/client";
2611
import {
2712
convertObservation,
2813
enrichObservationWithModelData,
2914
} from "./observations_converters";
30-
import { clickhouseSearchCondition } from "../queries/clickhouse-sql/search";
31-
import { OBSERVATIONS_TO_TRACE_INTERVAL } from "./constants";
3215
import { env } from "../../env";
3316
import { TracingSearchType } from "../../interfaces/search";
3417
import { ClickHouseClientConfigOptions } from "@clickhouse/client";
3518
import type { AnalyticsGenerationEvent } from "../analytics-integrations/types";
3619
import { ObservationType } from "../../domain";
3720
import { recordDistribution } from "../instrumentation";
3821
import { DEFAULT_RENDERING_PROPS, RenderingProps } from "../utils/rendering";
39-
import { shouldSkipObservationsFinal } from "../queries/clickhouse-sql/query-options";
4022
import { Prisma } from "@prisma/client";
4123

4224
const toClickhouseDateTimeString = (value: Date | null | undefined) =>
@@ -321,7 +303,7 @@ export const getObservationsForTrace = async <IncludeIO extends boolean>(
321303
projectId,
322304
timestamp,
323305
includeIO = false,
324-
preferredClickhouseService,
306+
preferredClickhouseService: _preferredClickhouseService,
325307
} = opts;
326308

327309
const recordsRaw = await prisma.$queryRaw<PgObservationRow[]>(Prisma.sql`
@@ -423,7 +405,7 @@ export const getObservationById = async ({
423405
type,
424406
traceId,
425407
renderingProps = DEFAULT_RENDERING_PROPS,
426-
preferredClickhouseService,
408+
preferredClickhouseService: _preferredClickhouseService,
427409
}: {
428410
id: string;
429411
projectId: string;
@@ -442,7 +424,7 @@ export const getObservationById = async ({
442424
type,
443425
traceId,
444426
renderingProps,
445-
preferredClickhouseService,
427+
preferredClickhouseService: _preferredClickhouseService,
446428
});
447429
const mapped = records.map((record) =>
448430
convertObservation(record, renderingProps),
@@ -498,7 +480,7 @@ const getObservationByIdInternal = async ({
498480
type,
499481
traceId,
500482
renderingProps = DEFAULT_RENDERING_PROPS,
501-
preferredClickhouseService,
483+
preferredClickhouseService: _preferredClickhouseService,
502484
}: {
503485
id: string;
504486
projectId: string;
@@ -877,7 +859,7 @@ const getObservationsTableInternal = async <T>(
877859
o.internal_model_id,
878860
(EXTRACT(EPOCH FROM (COALESCE(o.end_time, o.start_time) - o.start_time)) * 1000)::text AS latency,
879861
(EXTRACT(EPOCH FROM (COALESCE(o.completion_start_time, o.start_time) - o.start_time)) * 1000)::text AS time_to_first_token,
880-
jsonb_object_length(COALESCE(o.tool_definitions, '{}'::jsonb))::text AS tool_definitions_count,
862+
(SELECT count(*) FROM jsonb_object_keys(COALESCE(o.tool_definitions, '{}'::jsonb)))::text AS tool_definitions_count,
881863
jsonb_array_length(COALESCE(o.tool_calls, '[]'::jsonb))::text AS tool_calls_count
882864
${opts.selectIOAndMetadata ? Prisma.sql`, o.input, o.output, o.metadata` : Prisma.empty}
883865
${fromWithJoin}

packages/shared/src/server/repositories/scores.ts

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@ import {
55
AGGREGATABLE_SCORE_TYPES,
66
AggregatableScoreDataType,
77
} from "../../domain/scores";
8-
import {
9-
commandClickhouse,
10-
queryClickhouse,
11-
queryClickhouseStream,
12-
upsertClickhouse,
13-
} from "./clickhouse";
8+
import { queryClickhouse, queryClickhouseStream } from "./clickhouse";
149
import { FilterList, orderByToClickhouseSql } from "../queries";
1510
import { FilterCondition, FilterState, TimeFilter } from "../../types";
1611
import {
@@ -28,7 +23,6 @@ import {
2823
convertClickhouseScoreToDomain,
2924
ScoreAggregation,
3025
} from "./scores_converters";
31-
import { SCORE_TO_TRACE_OBSERVATIONS_INTERVAL } from "./constants";
3226
import {
3327
convertDateToClickhouseDateTime,
3428
PreferredClickhouseService,
@@ -42,7 +36,6 @@ import { ClickHouseClientConfigOptions } from "@clickhouse/client";
4236
import { recordDistribution } from "../instrumentation";
4337
import { prisma as metadataPrisma, tracingPrisma as prisma } from "../../db";
4438
import { measureAndReturn } from "../clickhouse/measureAndReturn";
45-
import { scoresColumnsTableUiColumnDefinitions } from "../tableMappings/mapScoresColumnsTable";
4639
import { eventsTraceMetadata } from "../queries/clickhouse-sql/query-fragments";
4740
import { Prisma } from "@prisma/client";
4841
import { logger } from "../logger";
@@ -342,7 +335,7 @@ export const getScoresForSessions = async <
342335
WITH ranked AS (
343336
SELECT
344337
s.*,
345-
CASE WHEN jsonb_object_length(COALESCE(s.metadata, '{}'::jsonb)) > 0 THEN 1 ELSE 0 END AS has_metadata,
338+
CASE WHEN EXISTS (SELECT 1 FROM jsonb_object_keys(COALESCE(s.metadata, '{}'::jsonb))) THEN 1 ELSE 0 END AS has_metadata,
346339
ROW_NUMBER() OVER (PARTITION BY s.id, s.project_id ORDER BY s.event_ts DESC) AS rn
347340
FROM scores s
348341
WHERE s.project_id = ${projectId}
@@ -398,7 +391,7 @@ export const getScoresForDatasetRuns = async <
398391
WITH ranked AS (
399392
SELECT
400393
s.*,
401-
CASE WHEN jsonb_object_length(COALESCE(s.metadata, '{}'::jsonb)) > 0 THEN 1 ELSE 0 END AS has_metadata,
394+
CASE WHEN EXISTS (SELECT 1 FROM jsonb_object_keys(COALESCE(s.metadata, '{}'::jsonb))) THEN 1 ELSE 0 END AS has_metadata,
402395
ROW_NUMBER() OVER (PARTITION BY s.id, s.project_id ORDER BY s.event_ts DESC) AS rn
403396
FROM scores s
404397
WHERE s.project_id = ${projectId}
@@ -447,7 +440,7 @@ export const getTraceScoresForDatasetRuns = async (
447440
WITH ranked AS (
448441
SELECT
449442
s.*,
450-
CASE WHEN jsonb_object_length(COALESCE(s.metadata, '{}'::jsonb)) > 0 THEN 1 ELSE 0 END AS has_metadata,
443+
CASE WHEN EXISTS (SELECT 1 FROM jsonb_object_keys(COALESCE(s.metadata, '{}'::jsonb))) THEN 1 ELSE 0 END AS has_metadata,
451444
dri.dataset_run_id as run_id,
452445
ROW_NUMBER() OVER (
453446
PARTITION BY s.id, s.project_id, dri.dataset_run_id
@@ -493,10 +486,10 @@ const getScoresForTracesInternal = async <
493486
dataTypes,
494487
limit,
495488
offset,
496-
clickhouseConfigs,
489+
clickhouseConfigs: _clickhouseConfigs,
497490
excludeMetadata = false,
498491
includeHasMetadata = false,
499-
preferredClickhouseService,
492+
preferredClickhouseService: _preferredClickhouseService,
500493
} = props;
501494

502495
const tsLowerBound = timestamp
@@ -607,7 +600,7 @@ export const getScoresForObservations = async <
607600
observationIds,
608601
limit,
609602
offset,
610-
clickhouseConfigs,
603+
clickhouseConfigs: _clickhouseConfigs,
611604
excludeMetadata = false,
612605
includeHasMetadata = false,
613606
} = props;
@@ -623,7 +616,7 @@ export const getScoresForObservations = async <
623616
s.*,
624617
${
625618
includeHasMetadata
626-
? Prisma.sql`CASE WHEN jsonb_object_length(COALESCE(s.metadata, '{}'::jsonb)) > 0 THEN 1 ELSE 0 END`
619+
? Prisma.sql`CASE WHEN EXISTS (SELECT 1 FROM jsonb_object_keys(COALESCE(s.metadata, '{}'::jsonb))) THEN 1 ELSE 0 END`
627620
: Prisma.sql`0`
628621
} AS has_metadata
629622
FROM scores s
@@ -666,7 +659,7 @@ export const getScoresForObservations = async <
666659

667660
export const getScoresGroupedByNameSourceType = async ({
668661
projectId,
669-
filter,
662+
filter: _filter,
670663
fromTimestamp,
671664
toTimestamp,
672665
}: {

0 commit comments

Comments
 (0)