From f35572edf1ec8678e10c25df2496c9976642665c Mon Sep 17 00:00:00 2001 From: Ariel Weinberger Date: Sun, 31 Dec 2023 02:31:33 -0800 Subject: [PATCH] fix formatting --- .nxignore | 3 +- .prettierignore | 1 + .../src/components/metrics/StatisticBox.tsx | 2 +- .../editor/ProviderSelector/providers.tsx | 14 +---- .../requests/RequestResponseViewJsonView.tsx | 5 +- .../graphql/definitions/queries/metrics.tsx | 14 ++--- apps/console/src/graphql/hooks/queries.ts | 14 ++--- apps/console/src/graphql/types.ts | 6 +-- .../pages/projects/overview/DashboardPage.tsx | 2 +- .../overview/charts/ExecutionTimeChart.tsx | 41 +++++++------- .../overview/charts/SuccessErrorRateChart.tsx | 49 +++++++++-------- .../src/pages/prompts/PromptNavigation.tsx | 2 +- .../pages/requests/model-display-details.tsx | 12 ++--- apps/server/.dockerignore | 3 +- .../src/app/clickhouse/clickhouse.service.ts | 2 +- .../src/app/common/filters/filter.input.ts | 6 ++- .../inputs/get-project-metrics.input.ts | 8 ++- apps/server/src/app/metrics/metrics.module.ts | 6 +-- .../metrics/models/project-metric.model.ts | 6 +-- .../app/metrics/project-metrics.resolver.ts | 5 +- .../app/metrics/project-metrics.service.ts | 10 ++-- .../queries/average-request-duration-query.ts | 13 +++-- .../app/metrics/queries/model-usage-query.ts | 15 ++++-- .../queries/success-error-rate-query.ts | 24 ++++++--- .../app/reporting/dto/create-report.dto.ts | 6 +-- .../request-report-result.model.ts | 2 +- .../src/app/reporting/reporting.service.ts | 4 +- .../src/app/reporting/requests.resolver.ts | 7 ++- .../20231231065935_create_reports.ts | 54 +++++++++---------- ...20231231100122_create_report_properties.ts | 34 ++++++------ clickhouse/tsconfig.json | 2 +- docker-compose.infra.yaml | 6 +-- libs/common/src/index.ts | 2 +- libs/common/src/metrics/types.ts | 4 +- libs/types/src/index.ts | 2 +- libs/types/src/reports.ts | 8 ++- tsconfigz.json | 3 -- 37 files changed, 209 insertions(+), 188 deletions(-) delete mode 100644 tsconfigz.json diff --git a/.nxignore b/.nxignore index e32b9507..a8393195 100644 --- a/.nxignore +++ b/.nxignore @@ -1,2 +1,3 @@ .github -.next \ No newline at end of file +.next +volumes \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index a72ae4fa..264f07c8 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,3 +6,4 @@ libs/common/src/version.json **/.next /docs +volumes \ No newline at end of file diff --git a/apps/console/src/components/metrics/StatisticBox.tsx b/apps/console/src/components/metrics/StatisticBox.tsx index e8d0e439..1a471993 100644 --- a/apps/console/src/components/metrics/StatisticBox.tsx +++ b/apps/console/src/components/metrics/StatisticBox.tsx @@ -26,7 +26,7 @@ interface Props { const getProperties = ( currentValue: number, previousValue: number, - reverseColors: boolean, + reverseColors: boolean ) => { const diff = currentValue - previousValue; // Handle case where previousValue is 0 diff --git a/apps/console/src/components/prompts/editor/ProviderSelector/providers.tsx b/apps/console/src/components/prompts/editor/ProviderSelector/providers.tsx index f9ec0bd6..43956433 100644 --- a/apps/console/src/components/prompts/editor/ProviderSelector/providers.tsx +++ b/apps/console/src/components/prompts/editor/ProviderSelector/providers.tsx @@ -9,13 +9,7 @@ import AnthropicLogo from "~/assets/providers/anthropic-logo.png"; export const providersList: ProviderProps[] = [ { - image: ( - OpenAI - ), + image: OpenAI, value: PromptService.OpenAiChatCompletion, label: promptProvidersMapping[PromptService.OpenAiChatCompletion].name, }, @@ -32,11 +26,7 @@ export const providersList: ProviderProps[] = [ }, { image: ( - Anthropic + Anthropic ), value: PromptService.AnthropicCompletion, label: promptProvidersMapping[PromptService.AnthropicCompletion].name, diff --git a/apps/console/src/components/requests/RequestResponseViewJsonView.tsx b/apps/console/src/components/requests/RequestResponseViewJsonView.tsx index 15edbd86..43bbef7b 100644 --- a/apps/console/src/components/requests/RequestResponseViewJsonView.tsx +++ b/apps/console/src/components/requests/RequestResponseViewJsonView.tsx @@ -6,7 +6,10 @@ interface Props { responseBody: OpenAI.ChatCompletion; } -export const RequestResponseViewJsonView = ({ requestBody, responseBody }: Props) => { +export const RequestResponseViewJsonView = ({ + requestBody, + responseBody, +}: Props) => { return (
diff --git a/apps/console/src/graphql/definitions/queries/metrics.tsx b/apps/console/src/graphql/definitions/queries/metrics.tsx index 4f920d1d..fbb580a2 100644 --- a/apps/console/src/graphql/definitions/queries/metrics.tsx +++ b/apps/console/src/graphql/definitions/queries/metrics.tsx @@ -1,7 +1,9 @@ import { graphql } from "~/@generated/graphql"; export const GET_GENERIC_PROJECT_METRIC_HISTOGRAM = graphql(/* GraphQL */ ` - query getGenericProjectMetricHistogram($data: GetProjectGenericHistogramInput!) { + query getGenericProjectMetricHistogram( + $data: GetProjectGenericHistogramInput! + ) { genericProjectMetricHistogram(data: $data) { data } @@ -9,10 +11,10 @@ export const GET_GENERIC_PROJECT_METRIC_HISTOGRAM = graphql(/* GraphQL */ ` `); export const GET_PROJECT_METRIC_DELTA = graphql(/* GraphQL */ ` -query getProjectMetricDelta($data: GetProjectMetricDeltaInput!) { - projectMetricDelta(data: $data) { - currentValue, - previousValue + query getProjectMetricDelta($data: GetProjectMetricDeltaInput!) { + projectMetricDelta(data: $data) { + currentValue + previousValue + } } -} `); diff --git a/apps/console/src/graphql/hooks/queries.ts b/apps/console/src/graphql/hooks/queries.ts index b4bc1a6f..3bb2897e 100644 --- a/apps/console/src/graphql/hooks/queries.ts +++ b/apps/console/src/graphql/hooks/queries.ts @@ -18,7 +18,7 @@ import { GetProjectMetricDeltaQueryVariables, GetProjectMetricDeltaQuery, GetReportQuery, - GetReportQueryVariables + GetReportQueryVariables, } from "~/@generated/graphql/graphql"; import { GraphQLErrorResponse } from "../types"; import { GET_PROMPT, GET_PROMPT_VERSION } from "../definitions/queries/prompts"; @@ -141,10 +141,7 @@ export const useGetRequestReports = ( export const useReport = ( data: GetReportQueryVariables["data"], - options: UseQueryOptions< - GetReportQuery, - GraphQLErrorResponse - > = {} + options: UseQueryOptions = {} ) => { const result = useQuery({ queryKey: ["report", data.reportId], @@ -155,7 +152,7 @@ export const useReport = ( ...options, }); - return { ...result, report: result.data?.report as SerializedReport}; + return { ...result, report: result.data?.report as SerializedReport }; }; export const useGenericProjectMetricHistogram = ( @@ -174,7 +171,10 @@ export const useGenericProjectMetricHistogram = ( ...options, }); - return { ...result, histogram: result.data?.genericProjectMetricHistogram as { data: T }}; + return { + ...result, + histogram: result.data?.genericProjectMetricHistogram as { data: T }, + }; }; export const useProjctMetricDelta = ( diff --git a/apps/console/src/graphql/types.ts b/apps/console/src/graphql/types.ts index 5ae78cf9..240e8cdc 100644 --- a/apps/console/src/graphql/types.ts +++ b/apps/console/src/graphql/types.ts @@ -1,6 +1,4 @@ -import { - Provider, -} from "@pezzo/types"; +import { Provider } from "@pezzo/types"; import { GraphQLError } from "graphql-request/build/esm/types"; export interface GraphQLErrorResponse { @@ -13,4 +11,4 @@ export interface GraphQLErrorResponse { export type ReportRequestResponse< TProviderType extends Provider | unknown = unknown -> = Record; \ No newline at end of file +> = Record; diff --git a/apps/console/src/pages/projects/overview/DashboardPage.tsx b/apps/console/src/pages/projects/overview/DashboardPage.tsx index d88ab04b..8cb4c364 100644 --- a/apps/console/src/pages/projects/overview/DashboardPage.tsx +++ b/apps/console/src/pages/projects/overview/DashboardPage.tsx @@ -36,7 +36,7 @@ export const DashboardPage = () => {
-
+
diff --git a/apps/console/src/pages/projects/overview/charts/ExecutionTimeChart.tsx b/apps/console/src/pages/projects/overview/charts/ExecutionTimeChart.tsx index 869fc6f5..01f95465 100644 --- a/apps/console/src/pages/projects/overview/charts/ExecutionTimeChart.tsx +++ b/apps/console/src/pages/projects/overview/charts/ExecutionTimeChart.tsx @@ -14,9 +14,7 @@ import { useProjectMetricControls } from "./ProjectMetricContext"; import { TooltipWithTimestamp } from "./TooltipWithTimestamp"; import { useCurrentProject } from "~/lib/hooks/useCurrentProject"; import { useGenericProjectMetricHistogram } from "~/graphql/hooks/queries"; -import { - HistogramIdType, -} from "~/@generated/graphql/graphql"; +import { HistogramIdType } from "~/@generated/graphql/graphql"; import { useFiltersAndSortParams } from "~/lib/hooks/useFiltersAndSortParams"; import { Loader2Icon } from "lucide-react"; import { MetricsTypes } from "@pezzo/common"; @@ -27,19 +25,20 @@ export const ExecutionTimeChart = () => { const controls = useProjectMetricControls(); const { filters } = useFiltersAndSortParams(); - const durationHistogram = useGenericProjectMetricHistogram( - { - projectId: project?.id, - histogramId: HistogramIdType.RequestDuration, - bucketSize: controls.bucketSize, - startDate: startDate, - endDate: endDate, - filters, - }, - { - enabled: !!project && !!startDate && !!endDate, - } - ); + const durationHistogram = + useGenericProjectMetricHistogram( + { + projectId: project?.id, + histogramId: HistogramIdType.RequestDuration, + bucketSize: controls.bucketSize, + startDate: startDate, + endDate: endDate, + filters, + }, + { + enabled: !!project && !!startDate && !!endDate, + } + ); if (durationHistogram.isLoading) { return ( @@ -58,8 +57,10 @@ export const ExecutionTimeChart = () => { ); } - - const data = durationHistogram.histogram.data.map((d) => ({ timestamp: d.timestamp, value: d.value })); + const data = durationHistogram.histogram.data.map((d) => ({ + timestamp: d.timestamp, + value: d.value, + })); return ( @@ -85,7 +86,9 @@ export const ExecutionTimeChart = () => { cursor={{ opacity: 0.2 }} content={TooltipWithTimestamp} formatter={(value, key) => - key !== "value" ? value : `${((value as number) / 1000).toFixed(2)}s` + key !== "value" + ? value + : `${((value as number) / 1000).toFixed(2)}s` } /> { const { filters } = useFiltersAndSortParams(); const { project } = useCurrentProject(); - const histogram = useGenericProjectMetricHistogram( - { - projectId: project?.id, - histogramId: HistogramIdType.SuccessErrorRate, - bucketSize: controls.bucketSize, - startDate: startDate, - endDate: endDate, - filters, - }, - { - enabled: !!project && !!startDate && !!endDate, - } - ); + const histogram = + useGenericProjectMetricHistogram( + { + projectId: project?.id, + histogramId: HistogramIdType.SuccessErrorRate, + bucketSize: controls.bucketSize, + startDate: startDate, + endDate: endDate, + filters, + }, + { + enabled: !!project && !!startDate && !!endDate, + } + ); - if ( - histogram.isLoading - ) { + if (histogram.isLoading) { return (
{ }, ]} /> - - + + ); diff --git a/apps/console/src/pages/prompts/PromptNavigation.tsx b/apps/console/src/pages/prompts/PromptNavigation.tsx index ccce311c..f467886b 100644 --- a/apps/console/src/pages/prompts/PromptNavigation.tsx +++ b/apps/console/src/pages/prompts/PromptNavigation.tsx @@ -39,7 +39,7 @@ export const PromptNavigation = () => { icon: GitCommitIcon, href: `${basePath}/versions`, isActive: (href) => window.location.pathname === href, - } + }, ]; return ( diff --git a/apps/console/src/pages/requests/model-display-details.tsx b/apps/console/src/pages/requests/model-display-details.tsx index 2a811b0a..7759c0c3 100644 --- a/apps/console/src/pages/requests/model-display-details.tsx +++ b/apps/console/src/pages/requests/model-display-details.tsx @@ -6,17 +6,17 @@ export const modelAuthorDetails = { openai: { image: OpenAILogo, name: "OpenAI", - color: "#3B976B" + color: "#3B976B", }, mistral: { image: MistralLogo, name: "Mistral", - color: "#cf651f" + color: "#cf651f", }, meta: { image: MetaLogo, name: "Meta", - color: "#579BE0" + color: "#579BE0", }, }; @@ -26,9 +26,9 @@ export const getModelDisplayDetails = (modelAuthor: string) => { if (!authorDetails) { return { image: , - name: "Unknown" - } + name: "Unknown", + }; } return authorDetails; -} \ No newline at end of file +}; diff --git a/apps/server/.dockerignore b/apps/server/.dockerignore index bbe63a07..8f691507 100644 --- a/apps/server/.dockerignore +++ b/apps/server/.dockerignore @@ -1,3 +1,4 @@ .env .env* -project.json \ No newline at end of file +project.json +volumes \ No newline at end of file diff --git a/apps/server/src/app/clickhouse/clickhouse.service.ts b/apps/server/src/app/clickhouse/clickhouse.service.ts index 906df498..693bfc67 100644 --- a/apps/server/src/app/clickhouse/clickhouse.service.ts +++ b/apps/server/src/app/clickhouse/clickhouse.service.ts @@ -45,7 +45,7 @@ export class ClickHouseService implements OnModuleInit { user: username, password, database, - timezone: "Z" + timezone: "Z", }, }); diff --git a/apps/server/src/app/common/filters/filter.input.ts b/apps/server/src/app/common/filters/filter.input.ts index c01fd769..780b573f 100644 --- a/apps/server/src/app/common/filters/filter.input.ts +++ b/apps/server/src/app/common/filters/filter.input.ts @@ -16,7 +16,9 @@ registerEnumType(FilterOperator, { name: "FilterOperator", }); -export const getSQLOperatorByFilterOperator = (operator: FilterOperator): string => { +export const getSQLOperatorByFilterOperator = ( + operator: FilterOperator +): string => { switch (operator) { case FilterOperator.eq: return "="; @@ -39,7 +41,7 @@ export const getSQLOperatorByFilterOperator = (operator: FilterOperator): string default: throw new Error(`Unknown filter operator: ${operator}`); } -} +}; @InputType() export class FilterInput { diff --git a/apps/server/src/app/metrics/inputs/get-project-metrics.input.ts b/apps/server/src/app/metrics/inputs/get-project-metrics.input.ts index 815a3e98..dba0aeaf 100644 --- a/apps/server/src/app/metrics/inputs/get-project-metrics.input.ts +++ b/apps/server/src/app/metrics/inputs/get-project-metrics.input.ts @@ -7,7 +7,7 @@ export enum ProjectMetricType { duration = "duration", successfulRequests = "successfulRequests", erroneousRequests = "erroneousRequests", - model = "model" + model = "model", } registerEnumType(ProjectMetricType, { @@ -104,7 +104,6 @@ export class GetProjectMetricHistogramInput extends BaseProjectMetricInput { metric: ProjectMetricType; } - @InputType() export class GetProjectGenericHistogramInput extends BaseProjectMetricInput { @Field(() => HistogramIdType, { nullable: false }) @@ -112,8 +111,7 @@ export class GetProjectGenericHistogramInput extends BaseProjectMetricInput { } @InputType() -export class GetProjectModelUsageHistogramInput extends BaseProjectMetricInput { -} +export class GetProjectModelUsageHistogramInput extends BaseProjectMetricInput {} @InputType() export class GetProjectMetricDeltaInput { @@ -128,4 +126,4 @@ export class GetProjectMetricDeltaInput { @Field(() => DeltaMetricType, { nullable: true }) metric: DeltaMetricType; -} \ No newline at end of file +} diff --git a/apps/server/src/app/metrics/metrics.module.ts b/apps/server/src/app/metrics/metrics.module.ts index 6d322e64..9c890331 100644 --- a/apps/server/src/app/metrics/metrics.module.ts +++ b/apps/server/src/app/metrics/metrics.module.ts @@ -8,10 +8,6 @@ import { ClickhHouseModule } from "../clickhouse/clickhouse.module"; @Module({ imports: [IdentityModule, PromptsModule, ClickhHouseModule], - providers: [ - ProjectMetricsResolver, - PrismaService, - ProjectMetricsService, - ], + providers: [ProjectMetricsResolver, PrismaService, ProjectMetricsService], }) export class MetricsModule {} diff --git a/apps/server/src/app/metrics/models/project-metric.model.ts b/apps/server/src/app/metrics/models/project-metric.model.ts index dc888d1b..8fb86d5a 100644 --- a/apps/server/src/app/metrics/models/project-metric.model.ts +++ b/apps/server/src/app/metrics/models/project-metric.model.ts @@ -27,7 +27,7 @@ export class ModelUsageHistogramValue { @Field(() => String, { nullable: false }) modelAuthor: string; - + @Field(() => Number, { nullable: false }) value: number; } @@ -36,7 +36,7 @@ export class ModelUsageHistogramValue { export class ModelUsageHistogramBucket { @Field(() => String, { nullable: false }) timestamp: string; - + @Field(() => [ModelUsageHistogramValue], { nullable: false }) values: ModelUsageHistogramValue[]; // Value for the metric at that date } @@ -54,4 +54,4 @@ export class ProjectMetricDeltaResult { @Field(() => Number, { nullable: false }) previousValue: number; -} \ No newline at end of file +} diff --git a/apps/server/src/app/metrics/project-metrics.resolver.ts b/apps/server/src/app/metrics/project-metrics.resolver.ts index 63b81265..d85e1d54 100644 --- a/apps/server/src/app/metrics/project-metrics.resolver.ts +++ b/apps/server/src/app/metrics/project-metrics.resolver.ts @@ -34,7 +34,8 @@ export class ProjectMetricsResolver { this.logger.assign({ data }); this.logger.info("Getting project metric histogram"); - const { projectId, histogramId, startDate, endDate, bucketSize, filters } = data; + const { projectId, histogramId, startDate, endDate, bucketSize, filters } = + data; const project = await this.prismaService.project.findUnique({ where: { @@ -75,7 +76,7 @@ export class ProjectMetricsResolver { projectId, startDate, endDate, - metric, + metric ); return result; diff --git a/apps/server/src/app/metrics/project-metrics.service.ts b/apps/server/src/app/metrics/project-metrics.service.ts index fd3fd94b..253f4b36 100644 --- a/apps/server/src/app/metrics/project-metrics.service.ts +++ b/apps/server/src/app/metrics/project-metrics.service.ts @@ -1,4 +1,8 @@ -import { BadRequestException, Injectable, InternalServerErrorException } from "@nestjs/common"; +import { + BadRequestException, + Injectable, + InternalServerErrorException, +} from "@nestjs/common"; import { DeltaMetricType, HistogramIdType, @@ -16,9 +20,7 @@ import { successErrorRateQuery } from "./queries/success-error-rate-query"; @Injectable() export class ProjectMetricsService { - constructor( - private clickHouseService: ClickHouseService - ) {} + constructor(private clickHouseService: ClickHouseService) {} async getGenericHistogram( projectId: string, diff --git a/apps/server/src/app/metrics/queries/average-request-duration-query.ts b/apps/server/src/app/metrics/queries/average-request-duration-query.ts index 6b5178b2..87b61541 100644 --- a/apps/server/src/app/metrics/queries/average-request-duration-query.ts +++ b/apps/server/src/app/metrics/queries/average-request-duration-query.ts @@ -1,5 +1,8 @@ import { ProjectMetricHistogramBucketSize } from "../inputs/get-project-metrics.input"; -import { generateBucketsSubquery, timePropertiesFromBucketSize } from "./queries.utils"; +import { + generateBucketsSubquery, + timePropertiesFromBucketSize, +} from "./queries.utils"; import { Knex } from "knex"; export const averageRequestDurationQuery = ( @@ -28,10 +31,14 @@ export const averageRequestDurationQuery = ( }) .from("buckets as b") .leftJoin("reports as r", (join) => - join.on(knex.raw(`${timeProps.roundFn}(r.requestTimestamp) = b.timestamp AND r."projectId" = '${projectId}'`)) + join.on( + knex.raw( + `${timeProps.roundFn}(r.requestTimestamp) = b.timestamp AND r."projectId" = '${projectId}'` + ) + ) ) .groupBy("b.timestamp") .orderBy("b.timestamp"); return mainquery; -}; \ No newline at end of file +}; diff --git a/apps/server/src/app/metrics/queries/model-usage-query.ts b/apps/server/src/app/metrics/queries/model-usage-query.ts index c462487e..61dcc7d7 100644 --- a/apps/server/src/app/metrics/queries/model-usage-query.ts +++ b/apps/server/src/app/metrics/queries/model-usage-query.ts @@ -1,5 +1,8 @@ import { ProjectMetricHistogramBucketSize } from "../inputs/get-project-metrics.input"; -import { generateBucketsSubquery, timePropertiesFromBucketSize } from "./queries.utils"; +import { + generateBucketsSubquery, + timePropertiesFromBucketSize, +} from "./queries.utils"; import { Knex } from "knex"; export const modelUsageQuery = ( @@ -30,14 +33,18 @@ export const modelUsageQuery = ( NULL, toJSONString(arrayReduce('sumMap', arrayMap((model, duration) -> map(model, duration), groupArray(r.model), groupArray(r.duration)))) ) - `) + `), }) .from(bucketsSubquery) .leftJoin("reports as r", (join) => - join.on(knex.raw(`${timeProps.roundFn}(r."request.timestamp") = s.timeframe AND r."projectId" = '${projectId}'`)) + join.on( + knex.raw( + `${timeProps.roundFn}(r."request.timestamp") = s.timeframe AND r."projectId" = '${projectId}'` + ) + ) ) .groupBy(["s.timeframe"]) - .orderBy(["s.timeframe"]) + .orderBy(["s.timeframe"]); return mainquery; }; diff --git a/apps/server/src/app/metrics/queries/success-error-rate-query.ts b/apps/server/src/app/metrics/queries/success-error-rate-query.ts index 19b4f238..d881686a 100644 --- a/apps/server/src/app/metrics/queries/success-error-rate-query.ts +++ b/apps/server/src/app/metrics/queries/success-error-rate-query.ts @@ -1,5 +1,8 @@ import { ProjectMetricHistogramBucketSize } from "../inputs/get-project-metrics.input"; -import { generateBucketsSubquery, timePropertiesFromBucketSize } from "./queries.utils"; +import { + generateBucketsSubquery, + timePropertiesFromBucketSize, +} from "./queries.utils"; import { Knex } from "knex"; export const successErrorRateQuery = ( @@ -21,19 +24,24 @@ export const successErrorRateQuery = ( }); const mainquery = knex - .with( - "buckets", - bucketsSubquery - ) + .with("buckets", bucketsSubquery) .select({ timestamp: "b.timestamp", requests: knex.raw("count(*)"), - error: knex.raw("countIf(r.isError = true AND toStartOfHour(r.requestTimestamp) = timestamp)"), - success: knex.raw("countIf(r.isError = false AND toStartOfHour(r.requestTimestamp) = timestamp)"), + error: knex.raw( + "countIf(r.isError = true AND toStartOfHour(r.requestTimestamp) = timestamp)" + ), + success: knex.raw( + "countIf(r.isError = false AND toStartOfHour(r.requestTimestamp) = timestamp)" + ), }) .from("buckets as b") .leftJoin("reports as r", (join) => - join.on(knex.raw(`${timeProps.roundFn}(r.requestTimestamp) = b.timestamp AND r."projectId" = '${projectId}'`)) + join.on( + knex.raw( + `${timeProps.roundFn}(r.requestTimestamp) = b.timestamp AND r."projectId" = '${projectId}'` + ) + ) ) .groupBy("timestamp") .orderBy("timestamp"); diff --git a/apps/server/src/app/reporting/dto/create-report.dto.ts b/apps/server/src/app/reporting/dto/create-report.dto.ts index 9e2d3b7c..28185ad5 100644 --- a/apps/server/src/app/reporting/dto/create-report.dto.ts +++ b/apps/server/src/app/reporting/dto/create-report.dto.ts @@ -36,8 +36,8 @@ export class PromptExecutionMetadataDto { type: String, }) @IsString() - provider: string - + provider: string; + @ApiProperty({ description: "Client name identifier", type: String, @@ -178,4 +178,4 @@ export class ExecutionCalculatedDto { export class CreateReportV3Dto extends CreateReportDto { @ValidateNested({ each: true }) calculated: ExecutionCalculatedDto; -} \ No newline at end of file +} diff --git a/apps/server/src/app/reporting/object-types/request-report-result.model.ts b/apps/server/src/app/reporting/object-types/request-report-result.model.ts index df91fe22..8488f069 100644 --- a/apps/server/src/app/reporting/object-types/request-report-result.model.ts +++ b/apps/server/src/app/reporting/object-types/request-report-result.model.ts @@ -16,4 +16,4 @@ export class PaginatedReportsResult { export class ReportResult { @Field(() => GraphQLJSONObject, { nullable: false }) data: SerializedReport; -} \ No newline at end of file +} diff --git a/apps/server/src/app/reporting/reporting.service.ts b/apps/server/src/app/reporting/reporting.service.ts index a6ef729d..28e5980e 100644 --- a/apps/server/src/app/reporting/reporting.service.ts +++ b/apps/server/src/app/reporting/reporting.service.ts @@ -171,9 +171,9 @@ export class ReportingService { query = query.limit(size).offset(offset); if (sort) { - query.orderBy(sort.field, sort.order) + query.orderBy(sort.field, sort.order); } else { - query.orderBy("timestamp", "desc") + query.orderBy("timestamp", "desc"); } try { diff --git a/apps/server/src/app/reporting/requests.resolver.ts b/apps/server/src/app/reporting/requests.resolver.ts index 1df28686..b1cb60af 100644 --- a/apps/server/src/app/reporting/requests.resolver.ts +++ b/apps/server/src/app/reporting/requests.resolver.ts @@ -32,7 +32,7 @@ export class RequestReportsResolver { @CurrentUser() user: RequestUser ): Promise { let project; - + try { project = await this.projectsService.getProjectById(data.projectId); @@ -46,7 +46,10 @@ export class RequestReportsResolver { throw new InternalServerErrorException(); } - const result = await this.reportingService.getReportById(data.reportId, data.projectId); + const result = await this.reportingService.getReportById( + data.reportId, + data.projectId + ); return result; } diff --git a/clickhouse/migrations/20231231065935_create_reports.ts b/clickhouse/migrations/20231231065935_create_reports.ts index 9ddbf697..1440bf19 100644 --- a/clickhouse/migrations/20231231065935_create_reports.ts +++ b/clickhouse/migrations/20231231065935_create_reports.ts @@ -3,38 +3,36 @@ import type { Knex } from "knex"; export async function up(knex: Knex): Promise { /* Create reports table */ await knex.schema.createTable("reports", (table) => { - table.string("id") - table.dateTime("timestamp") - table.string("environment") - table.string("organizationId") - table.string("projectId") - table.specificType("promptTokens", "Float64") - table.specificType("completionTokens", "Float64") - table.specificType("totalTokens", "Float64") - table.specificType("promptCost", "Float64") - table.specificType("completionCost", "Float64") - table.specificType("totalCost", "Float64") - table.specificType("duration", "UInt32") - table.string("type") - table.string("client") - table.string("clientVersion") - table.string("model") - table.string("provider") - table.string("modelAuthor") - table.dateTime("requestTimestamp") - table.string("requestBody") - table.boolean("isError") - table.specificType("responseStatusCode", "UInt32") - table.dateTime("responseTimestamp") - table.string("responseBody") - table.boolean("cacheEnabled") - table.boolean("cacheHit") + table.string("id"); + table.dateTime("timestamp"); + table.string("environment"); + table.string("organizationId"); + table.string("projectId"); + table.specificType("promptTokens", "Float64"); + table.specificType("completionTokens", "Float64"); + table.specificType("totalTokens", "Float64"); + table.specificType("promptCost", "Float64"); + table.specificType("completionCost", "Float64"); + table.specificType("totalCost", "Float64"); + table.specificType("duration", "UInt32"); + table.string("type"); + table.string("client"); + table.string("clientVersion"); + table.string("model"); + table.string("provider"); + table.string("modelAuthor"); + table.dateTime("requestTimestamp"); + table.string("requestBody"); + table.boolean("isError"); + table.specificType("responseStatusCode", "UInt32"); + table.dateTime("responseTimestamp"); + table.string("responseBody"); + table.boolean("cacheEnabled"); + table.boolean("cacheHit"); }); } - export async function down(knex: Knex): Promise { /* Drop reports table */ await knex.schema.dropTable("reports"); } - diff --git a/clickhouse/migrations/20231231100122_create_report_properties.ts b/clickhouse/migrations/20231231100122_create_report_properties.ts index c07716cf..08b5dc50 100644 --- a/clickhouse/migrations/20231231100122_create_report_properties.ts +++ b/clickhouse/migrations/20231231100122_create_report_properties.ts @@ -1,18 +1,16 @@ -import type { Knex } from "knex"; - -export async function up(knex: Knex): Promise { - /* Create report properties table */ - await knex.schema.createTable("reportProperties", (table) => { - table.string("id").defaultTo(knex.raw("generateUUIDv4()")) - table.string("reportId") - table.string("key") - table.string("value") - }); -} - - -export async function down(knex: Knex): Promise { - /* Drop report properties table */ - await knex.schema.dropTable("reportProperties"); -} - +import type { Knex } from "knex"; + +export async function up(knex: Knex): Promise { + /* Create report properties table */ + await knex.schema.createTable("reportProperties", (table) => { + table.string("id").defaultTo(knex.raw("generateUUIDv4()")); + table.string("reportId"); + table.string("key"); + table.string("value"); + }); +} + +export async function down(knex: Knex): Promise { + /* Drop report properties table */ + await knex.schema.dropTable("reportProperties"); +} diff --git a/clickhouse/tsconfig.json b/clickhouse/tsconfig.json index 3d7f4c9c..894d423b 100644 --- a/clickhouse/tsconfig.json +++ b/clickhouse/tsconfig.json @@ -8,6 +8,6 @@ "files": [], "include": [], "compilerOptions": { - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/docker-compose.infra.yaml b/docker-compose.infra.yaml index d62f30e4..f4f9798c 100644 --- a/docker-compose.infra.yaml +++ b/docker-compose.infra.yaml @@ -10,7 +10,7 @@ services: command: -c "npx knex migrate:latest" environment: CLICKHOUSE_HOST: clickhouse - CLICKHOUSE_PORT: '8123' + CLICKHOUSE_PORT: "8123" CLICKHOUSE_USER: default CLICKHOUSE_PASSWORD: default depends_on: @@ -45,7 +45,7 @@ services: - "9000:9000" - "9004:9004" healthcheck: - test: ["CMD-SHELL", "clickhouse-client --query \"SELECT 1\""] + test: ["CMD-SHELL", 'clickhouse-client --query "SELECT 1"'] interval: 5s timeout: 5s retries: 3 @@ -107,4 +107,4 @@ services: - "KMS_REGION=us-east-1" volumes: - postgres_data: ~ \ No newline at end of file + postgres_data: ~ diff --git a/libs/common/src/index.ts b/libs/common/src/index.ts index a89f9aec..2de413ec 100644 --- a/libs/common/src/index.ts +++ b/libs/common/src/index.ts @@ -1,4 +1,4 @@ import * as versionJson from "./version.json"; export * as MetricsTypes from "./metrics/types"; export * from "./utils"; -export const version = versionJson.version; \ No newline at end of file +export const version = versionJson.version; diff --git a/libs/common/src/metrics/types.ts b/libs/common/src/metrics/types.ts index ee4147d6..6cd8f0c3 100644 --- a/libs/common/src/metrics/types.ts +++ b/libs/common/src/metrics/types.ts @@ -7,7 +7,7 @@ export type SuccessErrorRateResultDataType = { timestamp: string; success: number; error: number; - total: number; + total: number; }[]; export type ModelUsageResultDataType = { @@ -15,4 +15,4 @@ export type ModelUsageResultDataType = { model: string; modelAuthor: string; value: string; -}[]; \ No newline at end of file +}[]; diff --git a/libs/types/src/index.ts b/libs/types/src/index.ts index 5a169eca..6cc0f5ea 100644 --- a/libs/types/src/index.ts +++ b/libs/types/src/index.ts @@ -2,4 +2,4 @@ export * from "./prompt-execution-type"; export * from "./request"; export * from "./ts-helpers"; export * from "./provider.types"; -export * from "./reports"; \ No newline at end of file +export * from "./reports"; diff --git a/libs/types/src/reports.ts b/libs/types/src/reports.ts index de10092e..f1f8be36 100644 --- a/libs/types/src/reports.ts +++ b/libs/types/src/reports.ts @@ -40,9 +40,7 @@ export interface SerializedReport cacheHit: boolean; } -export const serializeReport = ( - doc: ReportSchema -): SerializedReport => { +export const serializeReport = (doc: ReportSchema): SerializedReport => { return { ...doc, requestBody: JSON.parse(doc.requestBody), @@ -53,7 +51,6 @@ export const serializeReport = ( }; }; - export interface PaginatedReportsSchema { id: string; environment: string; @@ -70,7 +67,8 @@ export interface PaginatedReportsSchema { promptId: string; } -export interface SerializedPaginatedReport extends Omit { +export interface SerializedPaginatedReport + extends Omit { cacheEnabled: boolean; cacheHit: boolean; } diff --git a/tsconfigz.json b/tsconfigz.json deleted file mode 100644 index ffcbb947..00000000 --- a/tsconfigz.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./tsconfig.base.json" -}