Compare commits

...
453 Commits
Author SHA1 Message Date
steffen911 b4bd8208c3 chore: release v3.69.0 2025-06-16 09:35:37 +02:00
Max DeichmannandGitHub c8b282dc82 chore: upgrade react email (#6358)
* chore: upgrade react email

* chore: upgrade react email

* chore: upgrade react email

* chore: upgrade react email

* upgrade

* upgrade
2025-06-15 13:05:52 +00:00
Max DeichmannandGitHub e2922aa787 fix: fix select all UI bug (#7312) 2025-06-15 12:13:25 +00:00
Max DeichmannandGitHub e8690eeb0b chore: clean up scripts (#7306)
chore: clean up
2025-06-13 23:05:34 +00:00
Max DeichmannandGitHub a695d58e8e chore: improve search tooltip (#7305)
push
2025-06-13 22:59:11 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b097a98444 chore(deps): bump next from 14.2.26 to 14.2.30 (#7301)
Bumps [next](https://github.com/vercel/next.js) from 14.2.26 to 14.2.30.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.26...v14.2.30)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 14.2.30
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-13 19:12:39 +00:00
Max DeichmannandGitHub 87c6d45a01 security: upgrade release-it (#7300) 2025-06-13 17:27:23 +00:00
d5a79b1830 chore(ui) Update LLM connection API key message (#7278)
Update API key description based on cloud or self-hosted deployment

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2025-06-13 16:22:56 +00:00
Steffen SchmitzandGitHub 40b967c258 fix: add auth headers to ctx within middleware, update not found logging (#7295) 2025-06-13 11:56:14 +00:00
marliessophieandGitHub b6b7a7c670 chore(dialog): move close button to DialogHeader for improved accessibility (#7294)
refactor(dialog): move close button to DialogHeader for improved accessibility
2025-06-13 11:08:07 +00:00
Hassieb PakzadandGitHub 346e787784 fix(prompts-api): make updates via API concurrency safe (#7287)
* fix(prompts-api): make updates via API concurrency safe

* push
2025-06-13 10:04:57 +00:00
Steffen SchmitzandGitHub 8e67f851b0 fix: keep zod/v3 schema for langchainjs interactions (#7293)
Patches https://github.com/langchain-ai/langchainjs/issues/8357
2025-06-13 09:33:40 +00:00
marliessophieandGitHub 8b416da2ef fix(PopoverFilterBuilder): ensure filter buttons do not submit forms (#7290) 2025-06-13 09:29:59 +00:00
marliessophieandGitHub 88237dcb30 fix(evals): add missing Dialog Body and Footer components (#7289) 2025-06-13 09:12:35 +00:00
Steffen SchmitzandGitHub 8a0b3962ac chore: upgrade zod to v4 (#7271)
* chore: upgrade zod to v4

* chore: docs

* chore: switch enums to non-deprecated api

* chore: remove unnecessary any

* chore: reverts

* chore: cleanup

* chore: cleanup

* chore: prompts filter tags

* chore: fix sync tests

* chore: patch tests
2025-06-13 08:04:27 +00:00
marliessophieandGitHub 2f6414bbf4 fix(dataset-items): add sorting by id for deterministic ordering (#7280) 2025-06-13 07:34:48 +00:00
c7aa992586 feat: add export functionality to audit log table (#7202)
Co-authored-by: Max Deichmann <m.deichmann@tum.de>
2025-06-12 20:48:58 +02:00
marliessophieandGitHub c2b5923e88 fix(NewDatasetItemForm): add JSON formatting utility for input, output, and metadata field (#7265)
* fix(NewDatasetItemForm): add JSON formatting utility for input, output, and metadata fields

* perf(NewDatasetItemFromExistingObject): conditionally render NewDatasetItemForm based on form state

* fix(NewDatasetItemForm): update JSON value check to handle undefined case
2025-06-12 17:57:22 +00:00
marliessophieandGitHub fc411d0c5c style(CommentList): reduce font size for author username (#7277) 2025-06-12 17:57:08 +00:00
marliessophieandGitHub 3fac8d2608 style(sessions): align header pills (#7282) 2025-06-12 16:38:55 +00:00
marliessophieandGitHub cd413fa887 style(TagButton): reduce size of spinner icon (#7281) 2025-06-12 16:29:11 +00:00
Marc KlingenandGitHub be7cc835be fix(trpcErrorToast): enhance error handling for 5xx server errors wit… (#7279)
fix(trpcErrorToast): enhance error handling for 5xx server errors with user-friendly message
2025-06-12 16:23:43 +00:00
marliessophieandGitHub b68896d14a refactor(DataTableToolbar): reposition PopoverFilterBuilder for improved UX (#7275) 2025-06-12 15:22:58 +00:00
Marc Klingen aae1909466 chore: release v3.68.0 2025-06-12 17:45:04 +02:00
Steffen SchmitzandGitHub 3d7960f43e fix: propagate searchQuery to deleteMany call (#7274)
* fix: propagate searchQuery to deleteMany call

* chore: address feedback

* chore: propagate filters from frontend
2025-06-12 14:16:35 +00:00
Hassieb PakzadandGitHub a121e24b79 feat(otel-ingestion): handle long-running traces (#7241)
* feat(otel-ingestion): handle long-running traces

* rename

* push

* push

* add tests

* add test

* use logger and update cache key

* refactor to OtelIngestionProcessor

* fix

* fix

* fix

* push

* fix graph view
2025-06-12 12:06:17 +00:00
7279a924ed fix: add llm_api_key_update to events, fix linting & call chain (#7160)
* feat: add ability to update llm api keys

* fix: add llm_api_key_update to events, fix linting & call chain

* fix: security issue, deleting last headers, typing

* fix: remove unused variable

* fix: remove unused variable

* refactor: align LlmApiKeys type with shared package across the components

* push fixes

* push fixes

* push fixes

* push fixes

* push fixes

* push fixes

---------

Co-authored-by: Max Deichmann <m.deichmann@tum.de>
2025-06-12 11:57:38 +00:00
Max DeichmannandGitHub a10951b7e5 chore: allow trace deletions on entire history (#7252)
push
2025-06-12 11:57:04 +00:00
marliessophieandGitHub e456b08f92 fix(trace-graph): validate node existence before selection and handle errors gracefully (#7272) 2025-06-12 11:46:02 +00:00
85130cecb3 feat(cloud): 2-step sign in to make enterprise sso easier (#7250)
* chore: update `pnpm dx-f` to require no confirmation

* chore: setup cursor background agent

* Implement two-step login flow with SSO domain detection

* Simplify SSO fallback logic in sign-in page

* Conditionally render credentials form based on auth provider config

* Reorder SSO buttons and error display in sign-in page layout

* Checkpoint before follow-up message

* add focus password

* skip two step if no sso configured

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2025-06-12 09:52:29 +00:00
marliessophieandGitHub fbb15e26ec fix(dialog): adjust dialog component styling to prevent overflow issues (#7264)
* fix(dialog): adjust dialog component styling to prevent overflow issues

* refactor(dialog): simplify dialog footer styling across multiple components
2025-06-12 08:36:33 +00:00
Marc KlingenandGitHub dd203a1f18 chore: setup cursor background agent (#7251)
* chore: update `pnpm dx-f` to require no confirmation

* chore: setup cursor background agent

* push
2025-06-11 22:06:15 +00:00
Marc KlingenandGitHub 06c25f9ec3 chore: update pnpm dx-f to require no confirmation (#7249) 2025-06-11 21:23:07 +00:00
marliessophieandGitHub 7072ca2786 fix(popover): update max-width calculation for popover component to use fit-content (#7248) 2025-06-11 20:30:12 +00:00
marliessophieandGitHub cb1e5f4c19 fix(TracesTable): stabilize control column definition (#7247)
* fix(TracesTable): stabilize control column definition

- Ensured conditional rendering of the bookmarked column remains intact while simplifying the structure.

* refactor(TracesTable): enhance column visibility and order identifiers for control states
2025-06-11 19:36:46 +00:00
Steffen SchmitzandGitHub d4a28aa164 chore: upgrade clickhouse client dependency (#7246) 2025-06-11 18:40:43 +00:00
marliessophieandGitHub fda5fcdd0c refactor(dialog): improve dialog component layout and styling for billing settings (#7245)
- Updated dialog header to use a title component and improved button layout for clarity.
- Adjusted positioning of the close button for better alignment.
- Enhanced header and footer with rounded corners for a more polished look.
2025-06-11 16:39:42 +00:00
Marc KlingenandGitHub 24131e0791 feat(cloud): add stripe productid of cloud enterprise plan (#7244) 2025-06-11 16:14:16 +00:00
Marc KlingenandGitHub ffe132403e chore(cloud): increase user limit on core plan (#7243) 2025-06-11 15:51:39 +00:00
marliessophieandGitHub cce3bf35e1 fix(CreateExperimentsForm): clear modelConfig errors when valid model parameters are set and adjust layout spacing (#7233) 2025-06-11 10:34:06 +00:00
marliessophieandGitHub eccfec36e8 feat(MarkdownViewer): add URL sanitization using DOMPurify for safe link rendering (#7232) 2025-06-11 09:31:29 +00:00
Hassieb PakzadandGitHub a71faa4e60 feat(model-prices): add o1-pro (#7229) 2025-06-11 08:41:26 +00:00
b7362258c6 fix(ui): enable clipboard copying for self-hosted instances (#7227)
* fix(ui): Enable clipboard copying in insecure browser contexts

* Fixes #5541

* Adds clipboard utility file to manage copy interactions

* Implements fallback method for scenarios lacking Clipboard API
  support in insecure contexts (e.g., HTTP resources not delivered locally)

* Suggested review comments addressed

* chore: eslint

* chore: apply copy functionality to new occurrences

---------

Co-authored-by: akshitvijay <akshitthevijay@gmail.com>
2025-06-11 08:35:08 +00:00
Hassieb PakzadandGitHub 5eb1d98985 fix(graph-view): do not JSON parse node names (#7228) 2025-06-11 10:13:06 +02:00
Marlies Mayerhofer 1c574b2a5d chore: release v3.67.0 2025-06-11 01:39:36 +02:00
marliessophieandGitHub 6db9b87b6a chore(models): adjust price of o3 to reflected updated openai pricing (#7223) 2025-06-10 22:30:07 +00:00
marliessophieandGitHub 3e3ccb65ff feat(models): add o3-pro for cost tracking (#7222)
* feat(models): add o3-pro for playground and costs

* chore: remove from playground as langchain does not support o3 model for completions
2025-06-10 22:23:28 +00:00
marliessophieandGitHub 0d53b443e5 style(CreateScoreConfigButton): add padding to confirmation message for improved readability (#7220) 2025-06-10 16:26:16 +00:00
marliessophieandGitHub 1b795a3dcf chore(evals): show warning if API key was deleted (#7053)
* chore(evals): show warning if API key was deleted

* chore: fix typo
2025-06-10 15:44:36 +00:00
Hassieb PakzadandGitHub 2e94bc9e09 fix(graph-view): handle missing __start__ node for langgraph>=0.4 (#7215) 2025-06-10 15:44:12 +00:00
marliessophieandGitHub 8b94e8a3bd fix(annotation): handle deletes gracefully and protect against race conditions (#6848) 2025-06-10 15:00:43 +00:00
marliessophieandGitHub 91730a2eaf refactor(dialogs): dialog components with improved structure and styling (#7218) 2025-06-10 14:40:26 +00:00
marliessophieandGitHub 4f1a2337be fix(datasets): prevent delete modal from closing on mouse navigation event (#7163) 2025-06-10 14:30:05 +00:00
Hassieb PakzadandGitHub 4cf5aa03ec fix(trpc-prompts-api): handle prompt not found case on setLabels (#7216) 2025-06-10 13:00:23 +00:00
Steffen SchmitzandGitHub 922eafd4f6 chore: refactor chart display names into single util (#7209) 2025-06-10 07:29:06 +00:00
Hassieb PakzadandGitHub 9067f80206 fix(evals): do not throw errors if eval model does not consistently return JSON (#7187) 2025-06-08 14:05:51 +00:00
Steffen SchmitzandGitHub a7ca1fb269 chore: show frontend name for histogram chart type (#7181) 2025-06-06 15:09:54 +00:00
Hassieb PakzadandGitHub b51f321d22 feat(quickstart+readme): add python SDK v3 examples (#7157) 2025-06-06 16:36:16 +02:00
Hassieb PakzadandGitHub dd048a64a0 chore: upgrade langchain (#7178)
* chore: upgrade langchain

* push
2025-06-06 11:41:08 +00:00
ClemoandGitHub c6c19de0e8 docs: update readme, add terraform templates 2025-06-06 11:25:16 +02:00
marliessophieandGitHub 5491f176e1 chore(datasets): simplify DatasetAnalytics component interaction and integrate local storage for chart metrics (#7161)
* chore(datasets): simplify DatasetAnalytics component interaction and integrate local storage for chart metrics

* chore: eslint
2025-06-05 16:10:06 +00:00
marliessophieandGitHub 7a28473ebb perf(traces-table): improve performance (#7126)
* fixup: limit render duration of traces table

* fixup: reduce render cycles through data flows and memoization

* refactor: enhance performance and structure of table components

- Removed unnecessary console logs in `data-table.tsx`.
- Refactored `TablePeekView` to use a more structured props type and memoization for improved performance.
- Updated `usePeekData` to reduce stale time from 5 minutes to 1 minute.
- Replaced `IOTableCell` with `MemoizedIOTableCell` in various components to optimize rendering.
- Adjusted `peekView` configurations in `observations.tsx` and `traces.tsx` for consistency and clarity.

* chore: eslint
2025-06-05 14:16:10 +00:00
Steffen SchmitzandGitHub 005ce7318c chore: allow bullmq-api for non-cloud deployments (#7156) 2025-06-05 12:22:18 +00:00
marliessophieandGitHub 448c56e114 feat(dialog): add sticky header and footer (#7154)
* chore(ui-components): add dialog body

* style(popover): update width styling to use CSS variable for dynamic sizing

* feat(dialog): add DialogBody and DialogFooter components to enhance dialog structure

* chore: eslint

* chore: adjust modal height
2025-06-05 12:05:31 +00:00
Hassieb PakzadandGitHub 1d6e498e2b fix(otel): read resourceAttributes for release attribute (#7155) 2025-06-05 11:38:13 +00:00
Steffen SchmitzandGitHub 33ab717ae0 chore: include LANGFUSE_USE_AZURE_BLOB in docker-compose options (#7153) 2025-06-05 08:29:05 +00:00
Steffen SchmitzandGitHub ec563b775b feat(dashboards): add histogram chart type (#7140)
* feat(dashboards): add histogram chart type

* chore: update querybuilder behaviour

* chore: lint

* chore: push

* chore: format numbers nicely

* chore: store histogram bins in chartConfig

* chore: change order

* chore: add histogram function to metrics api

* chore: docs

* chore: generate docs
2025-06-05 07:43:35 +00:00
marliessophieandGitHub de427b5572 chore(evals): implement update confirmation for default evaluation model (#7137)
* chore(evals): implement update confirmation for default evaluation model

* chore: adjust alert to confirm

* chore: adjust alert to confirm
2025-06-04 17:08:44 +00:00
Marc Klingen 95921fa5da chore: release v3.66.1 2025-06-04 11:09:25 +02:00
Marc KlingenandGitHub 9e4d352366 fix(ee): pro plan label (#7136)
fix(ee): self-hosted pro plan label
2025-06-04 08:57:50 +00:00
steffen911 02449cbe0a chore: release v3.66.0 2025-06-04 09:24:50 +02:00
Steffen SchmitzandGitHub 616c68a87b feat: add support for new OTEL semantic event types (#7135) 2025-06-04 07:06:07 +00:00
Steffen SchmitzandGitHub 319b22ae78 chore: disentangle batch actions from batch exports (#7092)
* chore: disentangle batch actions from batch exports

* chore: revert

* chore: revert

* chore: revert
2025-06-04 06:53:52 +00:00
Max Deichmann b919562eed chore: release v3.65.3 2025-06-04 01:17:23 +02:00
Max DeichmannandGitHub 91c01e7363 chore: allow annotation queues on FOSS (#7130)
chore: move features
2025-06-03 22:17:02 +00:00
Max DeichmannandGitHub 48ec1bccae fix: fix full text search selector (#7129)
* push

* fix: annotation queue count

* chore: move features

* chore: move features

* chore: move features
2025-06-03 22:04:49 +00:00
steffen911 66aa2fd48e chore: release v3.65.2 2025-06-03 22:02:11 +02:00
Steffen SchmitzandGitHub f822bf1049 chore: add opt-out flag from queue length metric checks (#7123) 2025-06-03 19:21:35 +00:00
Hassieb PakzadGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
96ec24aad8 fix(otel): set trace io from root span (#7127)
* fix(otel): set trace io from root span

* Update web/src/features/otel/server/index.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-06-03 16:48:58 +00:00
steffen911 068fbd0cc6 chore: release v3.65.1 2025-06-03 11:33:30 +02:00
Steffen SchmitzandGitHub 7c8b76d573 security: bump tar-fs, rollup version (#7116)
* security: bump tar-fs version

* chore: bump rollup version
2025-06-03 08:13:54 +00:00
Max Deichmann e4e93d64bb chore: release v3.65.0 2025-06-03 10:09:46 +02:00
Max DeichmannandGitHub f5cf8693e9 chore: move core features to OSS (#7091)
* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* chore: move features

* changes to pro plan

* chore: move features
2025-06-03 08:07:45 +00:00
marliessophieandGitHub 5beef28214 style(scores): limit height of grouped scores hovercard (#7106) 2025-06-02 10:59:46 +00:00
marliessophieandGitHub d93712c6ab chore: sort dataset (run) items by created_at and id (#7105)
* `created_at` is not unique, we require a deterministic order of items to ensure data consistency
2025-06-02 10:46:46 +00:00
Hassieb PakzadandGitHub b1b0a966be fix(projects-api-docs): retentionDays to optional (#7103) 2025-06-02 11:49:25 +02:00
b5edadb203 fix: update Google AI Studio model name to preview version (#7086) (#7102)
Co-authored-by: Faris Ibrahim <faris@traba.work>
2025-06-02 11:23:51 +02:00
marliessophieandGitHub 3090882590 fix(default-model): allow set up flow to add LLM API key (#7101) 2025-06-02 07:58:37 +00:00
Max DeichmannandGitHub 787f5d8d10 chore: remove popup from count for historic eval elements (#7098)
* chore: move features

* chore: move features

* chore: move features
2025-05-30 21:25:50 +00:00
Jannik MaierhöferandGitHub 5fa142eda4 chore(ui): changed wording on checkout page (#7045) 2025-05-30 10:05:15 +00:00
steffen911 d96865b019 chore: release v3.64.0 2025-05-30 11:25:55 +02:00
Steffen SchmitzandGitHub 8d808923a1 feat: allow host credentials for blob storage S3 integration (#7072)
* feat: allow host credentials for blob storage S3 integration

* chore: compilation errors
2025-05-30 09:07:52 +00:00
Max DeichmannandGitHub 0f056c1c2d fix: add error message for missing encryption key for self-hosters (#7090)
push
2025-05-30 08:40:50 +00:00
Max DeichmannandGitHub 094a523795 perf: use trace identifier stream to batch delete traces (#7081) 2025-05-29 20:08:27 +02:00
Marc KlingenandGitHub c60e58a568 feat(ui): misc improvements to dashboards including mobile view, big number chart, truncate title/description, enforce min height/width of widgets (#7082)
* truncate title and description to prevent wraps

* remove unnecessary padding from charts

* improve bignumber chart

* add min h/w

* mobile resizing

* fix
2025-05-29 15:58:38 +00:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
6147e9c518 perf: only read trace identifiers for historic eval read stream (#7080)
* push

* Update packages/shared/src/server/services/traces-ui-table-service.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* perf: add exact timestamp match for eval batch actions

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-29 14:35:39 +00:00
Max DeichmannandGitHub f0408b208e perf: add exact timestamp match for eval batch actions (#7077)
* perf: add exact timestamp match for eval batch actions

* perf: add exact timestamp match for eval batch actions

* perf: add exact timestamp match for eval batch actions
2025-05-29 10:54:13 +00:00
Steffen SchmitzandGitHub 55e0bdcac0 feat: allow validation and run now for blob storage integrations (#7064)
* feat: allow validation and run now for blob storage integrations

* chore: error handling and formatting

* lint

* chore: linting
2025-05-28 16:47:23 +00:00
Hassieb PakzadandGitHub 05e15c9f53 fix(otel): update trace name only for root spans (#7061)
* fix(otel): update trace name only for root spans

* push
2025-05-28 15:30:37 +00:00
Max DeichmannandGitHub ce6249b266 perf: data retention concurrency (#7065) 2025-05-28 17:36:20 +02:00
Max DeichmannandGitHub 83e91e5bf5 chore: add logging to retry queue (#7062)
fix: do not wrap traces toolbar
2025-05-28 13:58:46 +00:00
Hassieb PakzadandGitHub edf073cc18 feat(api-models): return model prices on public API (#7046)
* feat(api-models): return model prices on public API

* add tests

* add openapi spec

* return map instead of list
2025-05-28 13:24:20 +00:00
Hassieb Pakzad 65343a8e9b chore: release v3.63.1 2025-05-28 14:17:40 +02:00
Max DeichmannandGitHub 0978055bdc chore: rename dead letter retry queue (#7058)
* push

* push

* push
2025-05-28 11:54:11 +00:00
Max DeichmannandGitHub 76aaf2a3d0 chore: upgrade clickhouse node client (#6806)
* push

* fix: do not wrap traces toolbar

* fix: do not wrap traces toolbar

* fix: do not wrap traces toolbar
2025-05-28 07:57:14 +00:00
Max DeichmannandGitHub 8ed61bf705 perf: increase retry batch action queue (#7049)
push
2025-05-27 19:59:47 +00:00
Steffen SchmitzandGitHub 45436530b4 chore: add analytic views in ClickHouse (#7034)
* chore: add analytic views in ClickHouse

* chore: add additional properties

* chore: add filtering and order changes
2025-05-27 15:59:12 +00:00
Hassieb PakzadandGitHub 7a3f01fc0a fix(playground): resolve prompts when jumping to playground (#7041)
* fix(playground): resolve prompts when jumping to playground

* push
2025-05-27 14:36:40 +00:00
marliessophieandGitHub 468fc4d079 chore(evals): display default model on peek (#7042) 2025-05-27 14:19:11 +00:00
Hassieb PakzadandGitHub 945d13dac0 fix(playground): update tools and schemas if name already exists (#7039)
* fix(playground): update tools and schemas if name already exists

* push
2025-05-27 13:38:59 +00:00
Marc KlingenandGitHub 3646eaa5a8 feat(model): add regex for claude-sonnet-4@20250514 (#7035) 2025-05-27 00:50:10 +00:00
marliessophieandGitHub feb5af11b8 style: default evaluation model management components (#7028) 2025-05-26 16:57:08 +00:00
marliessophieandGitHub 3711af5663 fix: prompt variables of SQL Semantic Equivalence evaluator (#7029) 2025-05-26 14:56:35 +00:00
marliessophieandGitHub 9ec798f393 feat(evaluation): allow filtering by log status (#7018) 2025-05-26 14:43:57 +00:00
Hassieb PakzadandGitHub f71fd43d91 fix(llm-tool-dialog): do not propagate textarea keystrokes up (#7023)
* fix(llm-tool-dialog): do not propagate textarea keystrokes up

* push
2025-05-26 13:51:51 +00:00
marliessophieandGitHub 0303596420 fix(scores): conditionally render metadata in score badges (#7020) 2025-05-26 11:31:50 +00:00
marliessophieandGitHub cfaccc46d3 chore: ensure eval config modal closes after successful delete (#7015)
* chore: ensure eval config modal closes after successful delete

* chore: eslint
2025-05-26 10:21:47 +00:00
Max DeichmannandGitHub 907f764adc fix: do not wrap traces toolbar (#7019)
* fix: do not wrap traces toolbar

* fix: do not wrap traces toolbar
2025-05-26 10:18:23 +00:00
Hassieb PakzadandGitHub 652e9e3fe5 fix(otel): set trace name only if root span or attr provided (#7017) 2025-05-26 09:59:59 +00:00
Steffen SchmitzGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
48673e43d7 feat: allow propagation of request headers through logs (#6979)
* feat: allow propagation of request headers through logs

* chore: propagate under correct name

* chore: take all header values

* chore: allow more properties in context propagation

* chore: update trpc propagation

* Update packages/shared/src/env.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* chore: trace header props for ingestion api

* chore: rename env variable

* chore: remove unused comments

* chore: remove outdated addUserToSpan method

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-26 07:33:02 +00:00
Marlies Mayerhofer a136ac8184 chore: release v3.63.0 2025-05-24 14:05:07 +02:00
marliessophieandGitHub 9ebf62fc9c chore: do not alert on missing API keys or model (#7007)
* chore: change error string for LLM API key not found

* chore: push

* chore: do not alert on missing default model
2025-05-24 07:16:17 +00:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
cf52dce773 chore: fix dataset eval executions for historic evals (#7001)
* push

* fix

* push

* fix

* fix

* fix

* fix

* fix

* fix

* Update worker/src/ee/evaluation/evalService.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix

* fix

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-23 17:44:21 +00:00
marliessophieandGitHub 0a6ecf1cba feat: evaluator library (#6956)
* chore: make `project_id` nullable on `eval_templates`

* feat: add script for managed langfuse evaluators

* feat: restyle running evaluator configs table

* feat: add peek view for running evals

* fixup: add peek view for evaluator library

* fixup: add configure button to table

* feat: rework eval creation flow

* feat: add option to edit eval from table

* fixup: configure evaluator flow with traces data preview

* style: eval configuration UI elements

* chore: add support for current langfuse templates

* chore: reference templateId on jobExecution

* style: add maintainer icon across

* chore: extract WorkerEvaluationVariableService

* fixup: support live data mapping interface

* fixup: revamp datasets eval ui

* fixup: add clone functionality

* chore: rename online evaluation -> llm-as-a-judge

* feat: add evaluator selection in experiment creation flow

* chore: refactor into hooks in experiment form

* feat: add ragas evaluator prompt templates

* chore: show evaluator prompt preview by default

* fix: eval table filtering

* feat: add input box to slider

* fix: clean up running eval peek view and logs

* fix: ensure preview variables are not wrapped in quotes in evaluation prompt preview

* feat: support navigating through traces table

* feat: support default model workflow

* fix: typos in managed evaluators

* fix: do not allow selection of evaluators requiring default to run

* fix: type and build errors

* chore: rename table to default_llm_model

* chore: rm empty file

* fixup: complete rename

* chore: push

* style: eval set up form

* style: separate new evaluator form out into two steps

* chore: ensure we only run evals if default model is set

* chore: add `partner` col to `eval_templates`

* style: new eval template creation

* chore: add proper mapping for dataset evals

* feat: also put evaluation selection on datasets page

* feat: datasets also run on historic experiments after creating mapping

* revert: 09ab242dc12c8647bc716c84d180bc8e631d4919

* chore: fix eslint and ts

* chore: fix warnings

* fix: ensure we inactivate all job configs that rely on default eval model

* fix: tests

* chore: fix eslint

* chore: wrap in tx

* chore: fix default model checkbox logic

* chore: improve wording on delete model

* fix: eslint

* chore: adjust migration order

* style: push ui improvements

* style: sort templates by partner

* fix: eslint
2025-05-23 17:10:47 +00:00
Steffen SchmitzandGitHub c359900b59 perf: skip S3 list calls for OTEL observations (#6995)
* perf: skip S3 list calls for OTEL observations

* chore: reuse prefix definition
2025-05-23 14:04:40 +00:00
Steffen SchmitzandGitHub 720ed7a36f feat: add new /api/public/organizations/projects route to list projects (#6997)
* feat: add new /api/public/organizations/projects route to list projects

* chore: address typos
2025-05-23 13:56:07 +00:00
Marc KlingenandGitHub 1dbefb0994 feat(cloud): push orgs as tenants to plain (#6986)
* fix: plain initialization issues via updatequeue

* apply to the show cb

* chore

* catch errors

* feat(cloud): push orgs as tenants to plain

* add PLAIN_CARDS_API_TOKEN

* fix

* fix

* limit to cloud

* fix
2025-05-23 13:17:45 +00:00
Jannik MaierhöferandGitHub abfdd2366a chore: lw3-5 notification (#6992) 2025-05-23 10:06:02 +00:00
Marc KlingenandGitHub 1f9bb37f3b fix(cloud): plain.com initialization issues via update queue (#6866)
* fix: plain initialization issues via updatequeue

* apply to the show cb

* chore

* catch errors
2025-05-22 23:00:52 +00:00
Marc Klingen 00afab9725 chore: release v3.62.1 2025-05-22 20:24:52 +02:00
Hassieb PakzadandGitHub d04e808515 feat(cost-tracking+llm-keys): add claude 4 sonnet and opus (#6982) 2025-05-22 17:56:45 +00:00
Jannik MaierhöferandGitHub ee04912f0e chore: lw3-4 notification (#6977) 2025-05-22 14:34:55 +00:00
steffen911 7f04a54c0c chore: release v3.62.0 2025-05-22 16:31:39 +02:00
Steffen SchmitzandGitHub cce11ef6b5 perf: drop unused observation_media index (#6978) 2025-05-22 14:27:21 +00:00
Steffen SchmitzGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
1b03f537e2 feat: allow AWS S3 SSE configuration for S3 interactions (#6965)
* feat: allow AWS S3 SSE configuration for S3 interactions

* Update packages/shared/src/env.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* chore: whitelist allowed SSE settings

* dummy

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-22 12:32:12 +00:00
Hassieb PakzadandGitHub dba114e4a3 feat(otel): add support for observations of type 'event' (#6972) 2025-05-22 12:27:14 +00:00
Steffen SchmitzandGitHub fefe3bc3bd fix: dynamically calc max value for home line charts (#6966)
* fix: dynamically calc max value for home line charts

* chore: wrap in useMemo

* dummy
2025-05-22 12:21:18 +00:00
Steffen SchmitzandGitHub 800cc299cb fix: use quorum writes for temporary dataset tables (#6958) 2025-05-21 15:21:58 +00:00
Hassieb PakzadandGitHub 1bdaed4314 fix(ui-jump-to-playground): look up llm api keys when model parsing (#6957)
* fix(ui-jump-to-playground): look up llm api keys when model parsing

* push

* push
2025-05-21 14:18:37 +00:00
Hassieb PakzadandGitHub 71dde233c5 fix(ui-jump-to-playground): allow response format in modelParams (#6955) 2025-05-21 14:13:05 +02:00
Steffen SchmitzGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
3b80afdf2d chore: reduce minimum project retention to 3 days (#6954)
* chore: reduce minimum project retention to 3 days

* Update web/src/features/projects/components/ConfigureRetention.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* chore: update test cases

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-21 12:08:52 +00:00
Steffen SchmitzandGitHub b69f0bda9d chore: bump metrics-api rate limits and deprecate daily metrics (#6950)
* chore: bump metrics-api rate limits

* chore: remove docs for metrics/daily

* chore: remove flaky assertion
2025-05-21 10:26:36 +00:00
Hassieb PakzadandGitHub 9b9a58ae45 fix(prompt-experiments): use resolved prompts (#6940)
* fix(prompt-experiments): use resolved prompts

* fix test
2025-05-21 09:39:37 +00:00
Marc Klingen 775e6a8bfc chore: release v3.61.0 2025-05-21 11:12:29 +02:00
5253014fa6 chore: lw3-3 product hunt notification (#6942)
* chore: lw3-3 product hunt notification

* reverse order

* add created date

---------

Co-authored-by: Marc Klingen <git@marcklingen.com>
2025-05-21 09:37:55 +02:00
Marc KlingenandGitHub 1571de133b chore: update pipcat otel attribute mapping (#6944)
based on this change: https://github.com/pipecat-ai/pipecat/pull/1859
2025-05-20 23:50:45 +00:00
Marc KlingenandGitHub 9202f4ec79 docs: add note that docker ENTRYPOINT is covered by semver (#6941) 2025-05-20 23:27:18 +00:00
Steffen SchmitzandGitHub 949e3d1181 chore(dashboards): add more langfuse managed templates (#6939)
* chore(dashboards): add more langfuse managed templates

* chore: update descriptions

* chore: dashboards

* chore: remove wrong dashboard

* chore: commit

* chore: push

* chore: typo

* chore: drop projectId etc from default

* chore: remove beta label

* chore: fix number chart type naming
2025-05-20 17:32:08 +00:00
Jannik MaierhöferGitHubMarc Klingenellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2d280329c5 chore: update product notification - lw3-2 (#6929)
* chore: update product notification: launch week day 2

* update

* Update web/src/components/nav/sidebar-notifications.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* update

* push

---------

Co-authored-by: Marc Klingen <git@marcklingen.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-20 17:24:29 +00:00
Steffen SchmitzandGitHub 6e1886055a feat(dashboards): add langfuse managed dashboards (#6877)
* feat(dashboards): add langfuse managed dashboard templates

* chore: typing

* chore: update dashboards
2025-05-20 14:49:21 +00:00
Marc KlingenandGitHub 39e4a7533a feat(dashboards): add big number chart type (#6933) 2025-05-20 15:46:20 +02:00
Steffen SchmitzandGitHub e8787e3f38 chore(dashboards): expand measures for dashboards (#6932)
* chore(dashboards): expand measures for dashboards

* chore: add testcase

* chore: define inputTokens and outputTokens

* chore: add timePerOutputToken and costs

* chore: fix definition and handling of tag based breakdowns
2025-05-20 13:43:20 +00:00
Max DeichmannandGitHub 59055cd311 chore: add metrics to measure by-id recency (#6930)
push
2025-05-20 14:59:55 +02:00
Marc KlingenandGitHub 7712b63b95 fix(auth): only apply login domain enforcement to multi-tenant sso (#6928) 2025-05-20 10:33:35 +02:00
marliessophieandGitHub f25d466388 fix(tables-ui): truncate name columns in traces and observations table (#6925) 2025-05-20 07:55:46 +00:00
Max DeichmannandGitHub b9e18f59d8 chore: upgrade zod (#6921)
push
2025-05-19 20:59:03 +00:00
Steffen SchmitzandGitHub 09f3343db2 fix(dashboards): update resize migration to handle empty widget list correctly (#6918)
fix(dashboards): update migration to handle empty widget list correctly
2025-05-19 15:15:32 +00:00
Steffen SchmitzandGitHub 5ab8e4219f feat(dashboard): make dashboard widgets draggable (#6891)
* feat(dashboard): make dashboard widgets draggable

* chore: do not update on layout change

* chore: fix size

* chore: remove the preventCollision flag

* chore: linting

* chore: get row height dynamically

* chore: make chart resizable

* chore: styling for resizes

* chore: add migration to align y values
2025-05-19 14:48:39 +00:00
Steffen SchmitzandGitHub 40359f0e3f chore(dashboards): order metrics and dimensions in widgetform (#6917)
* chore(dashboards): make metrics and dimensions in widgetform searchable

* chore: only sort without search
2025-05-19 14:18:48 +00:00
Marc KlingenandGitHub 817b6d37bc feat(ui): implement optional sidebar notification expiry (#6916)
* feat(web): add expiry for sidebar notifications

* Update web/src/components/nav/sidebar-notifications.tsx

* Update web/src/components/nav/sidebar-notifications.tsx
2025-05-19 13:57:04 +00:00
Hassieb Pakzad 8bb73822d3 chore: release v3.60.1 2025-05-19 14:50:33 +02:00
Jannik MaierhöferGitHubMarc Klingenellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
fa53ba3c1a chore: add lw3-1 notification (#6912)
* chore: add lw3-1 notification

* Update web/src/components/nav/sidebar-notifications.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: Marc Klingen <git@marcklingen.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-19 09:56:02 +00:00
Hassieb PakzadandGitHub 086a764083 chore(media): make ID generation fully deterministic based on hash (#6900) 2025-05-19 11:52:55 +02:00
Steffen SchmitzandGitHub 79a9f3c3e3 perf: add mediaId index to efficiently delete media items (#6909)
* perf: add mediaId index to efficiently delete media items

* chore: only add index if they do not exist yet
2025-05-19 09:30:16 +00:00
Max Deichmann abd46f2d4d chore: release v3.60.0 2025-05-19 11:16:27 +02:00
marliessophieandGitHub dfd9565a3f chore(experiments): improve delete experiment confirm message (#6908) 2025-05-19 07:41:27 +00:00
Marc KlingenandGitHub ebb8a5a13f chore(ui): trim password reset otp (#6905) 2025-05-18 20:01:26 +00:00
Marc KlingenandGitHub 44104596f6 fix(auth): add domain check for multi-tenant sso providers (#6904) 2025-05-18 19:54:40 +00:00
Marc KlingenandGitHub 17f6260671 feat: otel span mapping for pipecat traces (#6903) 2025-05-18 17:41:49 +00:00
Marc KlingenandGitHub 0a2bfe5ab5 fix(ui): peek view header should stay single line on mobile screens (#6902) 2025-05-18 17:23:32 +00:00
Marc KlingenandGitHub 8bd1a4da3e chore(ui): hide thread refs in support chat (#6901)
feat(web): hide thread refs in support chat
2025-05-18 13:28:49 +00:00
Marc KlingenGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
31b230d3e0 feat(auth): switch to OTP based password reset instead of magic link (#6898)
* feat(auth): add otp-based password reset

* fix

* fix lint and margins

* Update web/src/features/auth-credentials/components/ResetPasswordButton.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update web/src/server/auth.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* simplify

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-18 13:04:40 +00:00
Marc KlingenandGitHub dbe71249e7 chore: ignore HEAD request for auth api endpoints (#6899) 2025-05-18 12:04:20 +00:00
Marc KlingenandGitHub a9d0486edd chore: Update AGENTS guide (#6897)
docs: mention conventional commits
2025-05-18 13:45:29 +02:00
Marc KlingenandGitHub 2bf506a436 fix(ui): hover state color of chat message types (#6895) 2025-05-18 10:38:17 +00:00
Steffen SchmitzandGitHub edca91c12a chore(dashboard): auto-generate widget name from selected props (#6890)
* chore(dashboard): auto-generate widget name from selected props

* chore: lint
2025-05-17 13:52:52 +00:00
Steffen SchmitzandGitHub a11e7ddfee feat(dashboard): include dashboards in cmdk menu (#6889) 2025-05-17 12:28:26 +00:00
Steffen SchmitzandGitHub cb9eb23f36 chore(dashboard): show description on hover in selection tables (#6888) 2025-05-17 12:25:43 +00:00
Steffen SchmitzandGitHub 5e942f0208 feat(dashboards): add langfuse managed read-only dashboard support (#6873)
* chore: add owner to project and return langfuse dashboards

* chore: show owner for dashborads in table

* chore: snapshot

* chore: snapshot

* chore: allow widget clone

* chore: snapshot

* chore: linting

* chore: use project instead of user

* chore: show error message on clone failure

* chore: indicate existing dashboard widget relationship

* chore: show only project dashboards in selection for adding widgets

* chore: make full dashboard row clickable

* chore: add clone button to langfuse dashboards
2025-05-17 12:02:50 +00:00
Max DeichmannandGitHub 8e0e139848 chore: remove clickhouse session id (#6849)
* push

* push
2025-05-16 15:09:08 +00:00
Hassieb Pakzad acc1227962 chore: release v3.59.1 2025-05-16 16:57:30 +02:00
Hassieb PakzadandGitHub d9682511c1 perf(otel): do not pass deep parsed metadata (#6878)
* revert previous commit

* perf(otel): do not pass deep parsed metadata
2025-05-16 14:55:16 +00:00
Hassieb Pakzad 00e0b51bc4 chore: release v3.59.0 2025-05-16 14:06:50 +02:00
Hassieb PakzadGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
e63cf84e4f feat(otel): add Langfuse attribute parsing (#6692)
* feat(otel): add Langfuse attribute parsing

* fix

* push

* add safeguard for cross project spans

* fix test

* add extract completionStartTime

* fix type issues

* handle trace io

* fix

* Update web/src/features/otel/server/index.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-16 12:03:01 +00:00
Steffen SchmitzandGitHub 63d1051ac2 perf: increase socket lifetime and connections for clickhouse client (#6870) 2025-05-16 08:54:38 +00:00
Steffen SchmitzandGitHub 0e056eb072 chore: increase default timeframe in custom dashboards to 7d (#6871) 2025-05-16 05:45:37 +00:00
Steffen SchmitzandGitHub 87f7095966 chore: reduce title size in widget item doc hover (#6869) 2025-05-16 05:26:57 +00:00
steffen911 5eefe997ae chore: release v3.58.0 2025-05-16 06:39:23 +02:00
Marc KlingenandGitHub e251e60b53 fix: plain chat availability check should not rely on window.Plain but only on env (#6867) 2025-05-16 05:36:07 +02:00
Marc KlingenandGitHub adc05eeef4 feat(ui-ee): show/hide product modules in main menu via LANGFUSE_UI_VISIBLE/HIDDEN_PRODUCT_MODULES (#6841)
* feat(ui): show/hide product modules in main menu

* prod example

* add dashboards

* improve comment
2025-05-16 00:20:17 +00:00
Steffen SchmitzandGitHub 702143fbe2 perf: skip zod validation for otel event batches (#6861)
* perf: skip zod validation for otel event batches

* chore: remove unnecessary casting
2025-05-15 16:47:30 +00:00
Steffen SchmitzandGitHub 06643f30e5 feat(dashboard): add documentation hovers onto widget properties (#6856)
* feat(dashboard): add documentation hovers onto widget properties

* chore: fix typing

* chore: remove open and close delays of hovercards
2025-05-15 14:31:20 +00:00
Steffen SchmitzandGitHub 2e496d5429 chore(dashboard): make hovers in dark mode more readable (#6858) 2025-05-15 13:54:44 +00:00
Steffen SchmitzandGitHub 5b62df9122 feat(dashboard): add new widget to dashboard on save (#6854)
* feat(dashboard): add new widget to dashboard on save

* chore: linting
2025-05-15 13:15:08 +00:00
Steffen SchmitzandGitHub fd189dc66b fix(dashboard): map traceRelease and traceVersion correctly on breakdown (#6853) 2025-05-15 11:39:51 +00:00
Steffen SchmitzandGitHub 10a3644dcf chore(dashboard): auto-save dashboard on any changes (#6820)
* chore(dashboard): auto-save dashboard on any changes

* chore: linting

* chore: switch timeouts to useDebounce

* chore: linting
2025-05-15 09:48:02 +00:00
Max DeichmannandGitHub 8ca000b225 chore: reduce worker logs (#6851) 2025-05-15 11:33:33 +02:00
Steffen SchmitzandGitHub 47d41b6a42 chore: change logging pattern around redis retries (#6843) 2025-05-15 07:34:00 +00:00
Steffen SchmitzandGitHub 1d66408c18 fix(dashboard): avoid invalid filter name on view switches (#6829)
* fix(dashboard): avoid invalid filter name on view switches

* chore: add test case
2025-05-15 07:18:41 +00:00
Max DeichmannandGitHub 44d1727dd0 chore: reduce error logs for llm 429 errors (#6836) 2025-05-15 00:37:58 +02:00
Max DeichmannandGitHub bfb2878719 chore: reduce log level for prompt service (#6835)
fix
2025-05-14 22:19:00 +00:00
Marc KlingenandGitHub 67e6b4ce87 chore(cloud): increases api rate limits (#6783) 2025-05-14 23:03:49 +02:00
Max DeichmannandGitHub dcc5bf9c6e fix: fix traceid filter for observations by id clickhouse query (#6828) 2025-05-14 16:10:23 +02:00
Steffen SchmitzandGitHub db357101b7 feat(dashboards): add support for cloning existing dashboards (#6824)
* feat(dashboards): add support for cloning existing dashboards

* chore: move buttons into a dedicated dropdown menu

* chore: allow updates to dashboard name and description

* chore: lint

* chore: removal double capturing of dashboard delete

* chore: track deletions
2025-05-14 12:50:26 +00:00
Steffen SchmitzandGitHub afbd45b9c3 chore(metrics-api): return bad request errors for invalid query (#6826) 2025-05-14 11:01:10 +00:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
b6b37212ce perf: reduce project deletion concurrency (#6823)
* push

* Update worker/src/app.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-14 10:30:46 +00:00
Steffen SchmitzandGitHub 76a090241e feat(dashboard): add newly created widget to dashboard on save (#6819)
* feat(dashboard): add newly created widget to dashboard on save

* chore: linting
2025-05-14 09:25:23 +00:00
Max DeichmannandGitHub c53abf6aeb perf: also add trace_id to observations search (#6822)
push
2025-05-14 09:16:49 +00:00
Hassieb Pakzad 5cbfd922f9 chore: release v3.57.2 2025-05-14 09:55:07 +02:00
Hassieb PakzadandGitHub 0be269d519 fix(ui-tool-calls): handle parsing errors gracefully (#6817) 2025-05-14 07:52:47 +00:00
Max DeichmannandGitHub d0eeb44b90 fix: fail gracefully for batch actions in case eval config does not exist (#6809)
* push

* fix
2025-05-13 15:03:57 +00:00
Marlies Mayerhofer 30ced3ab42 chore: release v3.57.1 2025-05-13 16:52:57 +02:00
Max DeichmannandGitHub 2ed6b5a40f chore: parameterize clickhouse deletion timeouts (#6801) 2025-05-13 16:20:13 +02:00
Steffen SchmitzandGitHub 6eaef75f20 fix(dashboard): render localized time strings for LineCharts (#6799)
* fix(dashboard): render localized time strings for LineCharts

* chore: use memo
2025-05-13 13:57:07 +00:00
Max DeichmannandGitHub 31c36565c3 chore: fix clickhouse timeout settings (#6798) 2025-05-13 15:30:04 +02:00
Steffen SchmitzandGitHub d1a1ca7744 fix(dashboard): increase precision of numbers on hover cards (#6797) 2025-05-13 12:54:52 +00:00
Steffen SchmitzandGitHub 2dac75d203 chore(dashboard): use more granular time buckets on home dashboard (#6795) 2025-05-13 12:25:39 +00:00
Steffen SchmitzandGitHub fab90b36a6 chore: remove queryPlayground page (#6796) 2025-05-13 12:20:12 +00:00
Steffen SchmitzandGitHub 597bd6c96b fix(dashboard): warn on slow chart render and ask users to confirm (#6794) 2025-05-13 12:03:02 +00:00
Max DeichmannandGitHub ba3bcc9295 fix: Increase memory usage for deploy (#6793)
Increase memory usage for deploy
2025-05-13 10:32:29 +00:00
marliessophieandGitHub 5f65929a5e fix(session-ui): handling mine type as enum string equivalent (#6792) 2025-05-13 09:40:01 +00:00
Steffen SchmitzandGitHub f1344a4c1a chore: remove unused env variable (#6789) 2025-05-13 08:44:02 +00:00
Steffen SchmitzandGitHub 4e3b9a82f7 fix: do not refresh blobstorage form on browser navigation (#6788) 2025-05-13 08:12:28 +00:00
Max DeichmannandGitHub 7b803619fd fix: fix metadata json selector (#6784) 2025-05-12 21:11:21 +02:00
marliessophieandGitHub 1ef51b1644 feat(datasets): support GET dataset-run-items (#6780)
* feat(datasets): support `GET` dataset run items

* chore: add fern api types

* chore: eslint
2025-05-12 17:55:26 +00:00
Hassieb PakzadandGitHub fee9e34b7e chore(ui-graph-view): allow graph view in impersonation mode (#6782) 2025-05-12 17:37:32 +00:00
Hassieb PakzadandGitHub 1354db489f fix(ui-graph-view): fetch graph data separately (#6781)
* fix(ui-graph-view): fetch graph data separately

* fix

* push

* refactor

* fix

* fix lint
2025-05-12 16:33:33 +00:00
steffen911 740a25150c chore: release v3.57.0 2025-05-12 17:49:49 +02:00
Marc KlingenandGitHub 47c2d65d12 chore(ui): improve ux of full-text search input (#6772)
* width

* change to dropdown

* fix
2025-05-12 15:08:12 +00:00
Steffen SchmitzandGitHub d94e7c1c06 feat: add new metrics api endpoint (#6778)
* feat: add metric api endpoint

* feat: add implementation and documentation

* chore: add defaults for timeDimension and ordering
2025-05-12 14:17:40 +00:00
Steffen SchmitzandGitHub 38ed98a76d feat: add org API keys to organization settings (#6729)
* feat: add org API keys to organization settings

* chore: linting suggestions

* chore: fix typing

* feedback: do not call hooks conditionally
2025-05-12 11:25:01 +00:00
Max DeichmannandGitHub 92567b765b chore: reduce amount of ingested dd spans (#6775)
* push

* fix
2025-05-12 09:47:37 +00:00
Marc KlingenandGitHub b37396893a chore: improve auth error message (#6773) 2025-05-12 04:02:11 +00:00
Steffen SchmitzandGitHub 0fd1eebbff fix: align signed download URL with hostname (#6764) 2025-05-11 12:24:49 +00:00
Max DeichmannandGitHub f478bb5763 refactor: refactor observations by id repo function (#6768)
fix
2025-05-10 20:12:13 +00:00
Max Deichmann 1de48b42ba chore: release v3.56.0 2025-05-09 19:14:08 +02:00
Max DeichmannandGitHub 4c78450924 chore: do not fetch metadata for trace detail initial load (#6763)
* fix

* fix

* fix
2025-05-09 14:59:22 +00:00
Hassieb PakzadandGitHub e360c13763 fix(ui-graph-view): fix metadata parsing in isLanggraphTrace (#6762) 2025-05-09 12:25:44 +00:00
Max DeichmannandGitHub a03a451088 fix: full text search (#6759) 2025-05-09 10:45:33 +02:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
e3fa322ecf feat: full text search (#6343)
* feat: full text search

* push

* feat: full text search

* feat: full text search

* feat: full text search

* feat: full text search

* feat: full text search

* fix

* push

* fix: fix json limits and scope to single bodies only

* fix

* fix

* jumping UI

* jumping UI

* jumping UI

* push

* Update web/src/components/table/data-table-toolbar.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-09 08:41:27 +00:00
2b20c9bdc2 fix(ui) langgraph agent graph (#6753)
* fix(ui) langgraph agent graph

* push

* push

* push

---------

Co-authored-by: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com>
2025-05-09 06:50:26 +00:00
Max DeichmannandGitHub 860d05a3f4 chore: add sentry release tag (#6743) 2025-05-08 13:30:50 +02:00
Marlies Mayerhofer 398174d3a4 chore: release v3.55.0 2025-05-08 12:55:54 +02:00
Max DeichmannandGitHub 040ff26853 chore: allow js-profiling in browser via header (#6740)
push
2025-05-08 09:38:37 +00:00
marliessophieandGitHub 78924f42e2 chore(run-scores): show only populated run-level scores (#6739)
* chore(run-scores): show only populated run-level scores

* chore: early return
2025-05-08 09:10:02 +00:00
Jannik MaierhöferandGitHub 515186e9a2 feat: add otel attribute parsing for google adk (#6736) 2025-05-08 04:20:46 +00:00
Jannik MaierhöferandGitHub af863bcbd9 fix(otel): avoid logging model name as model param (#6737) 2025-05-08 04:19:38 +00:00
marliessophieandGitHub 4e3f97d56e chore(table-view-presets): conditionally apply generations filter; add avatar fallback; set beta badge (#6734)
* chore(table-view-presets): conditionally apply generations filter

* chore: add fallback avatar; set beta badge
2025-05-07 22:20:16 +00:00
marliessophieandGitHub 159f7560a4 feat(scores): support run level scores (#6676)
* feat(scores): support run level scores

* style: show run level scores on runs table

* chore: fix type

* chore: tests

* chore: rename runId -> datasetRunId

* chore: generate fern api docs

* style: improve UI/UX naming

* style: improve UI
2025-05-07 17:56:43 +00:00
marliessophieandGitHub fa77bc9daf chore(table-views): handle nullish avatar (#6730) 2025-05-07 19:21:32 +02:00
marliessophieandGitHub 23e55cd90a feat(tables): support saving and sharing table views (#6595)
* style(traces-table): re-order columns

* style(observations-table): re-order columns

* feat: add peek view to observations view

* style: revamp column visibility filter

* chore(saved-views): add data model

* chore(saved-views): add CRUD operations

* fixup: ui for saved filter views

* fixup: add create table views functionality

* chore: support update and delete operations in UI

* feat: generate permalink

* feat: allow permalink to resolve

* chore: save view in session storage too

* style: show image of author

* chore: remove duplicated columns

* chore: push

* chore: refactor

* chore: rename

* chore: move types

* feat: add support on session, scores, observations tables

* chore: ensure invalid ordering and filtering conditions are ignored

* chore: add posthog events

* tests: add validation unit tests

* chore: remove testing readme

* chore: fix test

* chore: remove async

* chore: rename saved table views -> table view presets

* chore: reformulate

* chore: adjust

* feat: support table views on datasets

* chore: ui for viewers
2025-05-07 15:42:49 +00:00
marliessophieandGitHub 5e39ac49f0 feat(scores): add link to session on session scores table (#6728) 2025-05-07 11:50:46 +00:00
marliessophieandGitHub 75b4c6da1e style(observations): correctly display costs as sums (#6725) 2025-05-07 09:16:50 +00:00
Steffen SchmitzandGitHub 03a8eeaf08 feat: allow metadata filtering in dashboard builder (#6724)
* feat: allow metadata filtering in dashboard builder

* chore: update query type for metadata
2025-05-07 09:02:36 +00:00
marliessophieandGitHub 0da9738243 fix: persist changes in evals template edit on tab change (#6716) 2025-05-07 08:02:26 +00:00
Marc KlingenandGitHub 8d2d242375 chore(ui): add border to trace timeline bars to increase contrast (#6723)
* chore(ui): add border to trace timeline bars to increase contrast

* fix
2025-05-07 03:36:43 +00:00
Marc KlingenandGitHub 7b5231db88 chore: show full user email on hover (#6722)
chore(ui): show full user email address on hover
2025-05-07 03:23:14 +00:00
Marc KlingenandGitHub 2925bc77fc chore(ui): increase contrast ratio of annotation selection (#6721)
chore(ui): The selection in `Annotate` window should have higher-contrast color

Fixes langfuse/langfuse#6720
2025-05-07 03:14:00 +00:00
Max DeichmannandGitHub cfc8d68a57 fix: increase io limit (#6714)
* push

* fix: fix json limits and scope to single bodies only

* push

* fix: fix json limits and scope to single bodies only

* fix: fix json limits and scope to single bodies only

* fix: fix json limits and scope to single bodies only

* fix: fix json limits and scope to single bodies only

* fix: fix json limits and scope to single bodies only
2025-05-06 21:34:03 +00:00
Steffen SchmitzandGitHub aa38a2cbb8 feat: add totalTokens and totalCost to dashboard builder (#6715) 2025-05-06 19:20:07 +00:00
marliessophieandGitHub 78958ac5f9 fix(score-analytics): css on categorical charts (#6710) 2025-05-06 16:04:03 +00:00
Marlies Mayerhofer 98506db2b0 chore: release v3.54.1 2025-05-06 16:54:54 +02:00
Steffen SchmitzandGitHub 1ecf3a2a60 fix: allow protected keys in metadata object (#6701) 2025-05-06 11:37:14 +00:00
marliessophieandGitHub bca360b738 fix(security): remove hyperlinks from organization invitation emails (#6703) 2025-05-06 09:43:16 +00:00
Steffen SchmitzandGitHub 8c44e03cc3 chore: remove non-production note on worker in CONTRIBUTING.md (#6626) 2025-05-06 06:36:47 +00:00
marliessophieandGitHub 5487dc36c9 fix: navigation issue with organization/project members pages (#6695) 2025-05-05 18:51:55 +00:00
marliessophieandGitHub 4e2fa5d794 chore(peek): memoize table body for enhanced front-end performance (#6690)
* chore: memoize table body for enhanced front end performance

* chore: push

* chore: refactor

* style: speed up animation

* chore: re-render on table state changes

* chore: import function directly

* chore: refactor to use timestamp

* chore: push

* chore: push
2025-05-05 18:04:56 +00:00
Hassieb PakzadGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
8b013c6712 fix(trace-ui): usage breakdown on hover (#6694)
* fix(trace-ui): usage breakdown on hover

* Update web/src/components/table/use-cases/traces.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-05 17:36:03 +00:00
Steffen SchmitzGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
76fae866ea fix: improve axis labeling in widgets (#6691)
* fix: improve axis labeling in widgets

* Update web/src/features/widgets/chart-library/utils.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-05-05 15:16:42 +00:00
Max DeichmannandGitHub 0e0bf5cfbc chore: improve front end performance (#6683)
* push

* push
2025-05-02 22:30:52 +00:00
Max Deichmann 81872c1fdc chore: release v3.54.0 2025-05-01 17:24:48 +02:00
Max DeichmannandGitHub c06af525bf chore: disable dlx retry for oss (#6665) 2025-05-01 16:33:59 +02:00
Max DeichmannandGitHub cd30f0c89c chore: add eval execution metric (#6664)
push
2025-05-01 16:32:18 +02:00
marliessophieandGitHub 5bc4f1cbac chore: add copy ID button to trace/observation preview (#6651) 2025-04-30 09:39:42 +00:00
marliessophieandGitHub d0f7663ea2 feat(datasets): search by name on table (#6645)
* feat: add search by name to datasets

* chore: apply search query on count
2025-04-29 14:24:58 +00:00
Max DeichmannandGitHub 7496e2aeb0 chore: increase trace id delete observability (#6635) 2025-04-28 22:49:24 +02:00
marliessophieandGitHub d39b0214b8 chore(markdown): introduce type guards for markdown rendering (#6631) 2025-04-28 14:50:15 +00:00
Max Deichmann 9957c51d66 chore: release v3.53.0 2025-04-28 12:19:51 +02:00
0f06a066df feat(scores): support session level scores (#6367)
* chore: make changes to `scores` data structure

* fixup: migrations

* chore: update CH score types and schemas

* feat: support session level scores

* chore: add mock session level scores

* feat(session-scores): create v2 APIs; extract score and trace api service

* chore: clean up todos

* eslint

* eslint

* chore: reorder migrations after rebase

* chore: order unclustered migrations after rebase

* chore: fixes after rebase

* chore

* revert changes to .json file

* chore

* chore: move session_id column

* typo

* chore: migration adjustment

* chore: styling adjustments

* chore: materialize index

* chore: fix types after rebase

* chore: fix types after rebase

* chore: feedback

* chore: refactor scores types file structure

* chore: fix lint

* chore: add api types

* chore: rename

* fix: wait for clickhouse mutations to succeed (#6629)

* fix: wait for clickhouse mutations to succeed

* push

* fix: wait for clickhouse mutations to succeed

---------

Co-authored-by: Max Deichmann <m.deichmann@tum.de>
2025-04-28 09:51:22 +00:00
marliessophieandGitHub ff8ccf1d61 chore(ui): add support for input_text and output_text in markdown rendering (#6625) 2025-04-28 08:39:15 +00:00
Max DeichmannandGitHub eeff4a4f68 feat: add dlx retry queue and service (#6621)
* feat: add dlx retry queue and service

* feat: add dlx retry queue and service

* feat: add dlx retry queue and service

* feat: add dlx retry queue and service

* feat: add dlx retry queue and service
2025-04-27 10:15:24 +00:00
Hassieb PakzadandGitHub 876d43e317 perf(api-traces): increase observations payload limit to 10mb (#6615)
* perf(api-traces): increase observations payload limit to 10mb

* add test
2025-04-25 18:47:05 +02:00
Hassieb PakzadandGitHub 3da7f3c8b2 perf(trace-api): increase observations payload limit to 6mb (#6614) 2025-04-25 15:11:48 +00:00
Hassieb PakzadandGitHub 6e5d0cee7b fix(api-prompts): use middleware to send response when updating labels (#6611)
* fix(api-prompts): use middleware to send response when updating labels

* fix lint error
2025-04-25 14:57:45 +00:00
Steffen SchmitzandGitHub 9f1fafd1bb build: prepare deployment for HIPAA compatibility (#6613) 2025-04-25 14:26:04 +00:00
Steffen SchmitzandGitHub a2cbcbc585 Revert "perf: race byId queries for traces and observations (#6555)" (#6612)
* Revert "perf: race byId queries for traces and observations (#6555)"

This reverts commit 591fb98a

* chore: compare on toDate starttime
2025-04-25 13:29:25 +00:00
Steffen SchmitzandGitHub e7aa0fbe08 feat: add support for score name filters on dashboard (#6608) 2025-04-25 09:52:23 +00:00
Hassieb PakzadandGitHub 30e608244a test(trace-api): fix observations too large test (#6607) 2025-04-25 11:32:59 +02:00
Hassieb PakzadandGitHub 3ec5476c04 perf(api-traces): increase byId size limit to 5MB (#6604) 2025-04-25 10:11:01 +02:00
Max DeichmannandGitHub 8c46c79e4f perf: reduce optimistic lookback for byid queries (#6593)
* perf: reduce optimistic lookback for byid queries

* perf: reduce optimistic lookback for byid queries
2025-04-24 15:58:13 +00:00
Hassieb PakzadandGitHub 231ee5873c perf(public-api-traces): raise early error if observations are too large (#6592) 2025-04-24 14:25:01 +00:00
Steffen SchmitzandGitHub 7a74f7da9d perf: refactor clickhouseClient creation to singletons (#6584)
* perf: refactor clickhouseClient creation to singletons

* chore: align remaining client usages

* chore: update test usage
2025-04-24 14:03:53 +00:00
Steffen SchmitzandGitHub 82bf0baab7 perf: return only on API if no trace found (#6587) 2025-04-24 14:29:26 +02:00
Steffen SchmitzandGitHub 591fb98afb perf: race byId queries for traces and observations (#6555)
* perf: race byId queries for traces and observations

* chore: update tests
2025-04-24 10:02:04 +00:00
marliessophieandGitHub e919893c2b fix(ui): add deprecated col mapping on traces table for cached filter states (#6583)
* fix(ui): add deprecated col mapping on traces table for cached filter states

* chore: improve comments

* chore: fix

* chore: push
2025-04-24 07:01:54 +00:00
Max DeichmannandGitHub 237076bf92 chore: improve user identification in observability (#6575) 2025-04-23 20:11:27 +00:00
Steffen SchmitzandGitHub c7b09e7843 perf: include timestamp on trace retrieval on sessions and datasetrunitemstable (#6549) 2025-04-23 16:03:12 +00:00
marliessophieandGitHub 277e7b7501 feat(scores): support categorical filters across tables (#6484)
* fixup(scores): add categorical scores filter to traces table

* chore: support categorical scores filter on traces table

* chore: throw error if categories options filter is used in postgres

* chore: eslint

* feat: support categorical scores filter on observation scores

* chore: adjust typing

* style: filter builder

* chore: rename function
2025-04-23 07:30:43 +00:00
a01d12c064 fix: use source entity environment for annotation scores (#6545)
* fix: use source entity environment for annotation scores

* chore: resolve typo

* perf: remove redundant trace fetch for traces.byIdWithObservationsAndScores

* Revert "perf: remove redundant trace fetch for traces.byIdWithObservationsAndScores"

This reverts commit 544d241f0ddeccc9e1b7c1cd8f33a63d7253ae6c.

* fix: include `environment` in `handleCommentUpdate` call

---------

Co-authored-by: Marlies Mayerhofer <74332854+marliessophie@users.noreply.github.com>
2025-04-22 16:14:36 +00:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>Steffen Schmitz
e1ae79e0d1 perf: soft delete event logs clickhouse (#6533)
* chore: mograte event_log table to new blob storage table

* push

* push

* push

* fix

* fix

* Update packages/shared/clickhouse/migrations/clustered/00011_add_blob_storage_file_log.up.sql

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update worker/src/backgroundMigrations/migrateEventLogToBlobStorageRefTable.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* push

* push

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* push

* fix

* fix

* fix

* push

* fix

* fix

* fix

* fix

* fix

* fix

* push

* push

* Update packages/shared/src/server/data-deletion/ingestionFileDeletion.ts

Co-authored-by: Steffen Schmitz <steffen@langfuse.com>

* push

* fix

* fix

* fix

* push

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Steffen Schmitz <steffen@langfuse.com>
2025-04-22 13:43:10 +00:00
marliessophieandGitHub 9804739ff1 chore(observations): show model name in table column (#6552) 2025-04-22 12:39:17 +00:00
Steffen SchmitzandGitHub 2d1f104a1c perf: remove redundant trace fetch for traces.byIdWithObservationsAndScores (#6548)
* perf: remove redundant trace fetch for traces.byIdWithObservationsAndScores

* chore: include fromTimestamp in enforceTraceAccess util
2025-04-22 11:38:31 +00:00
Max DeichmannandGitHub 2a871d1e75 chore: migrate event_log table to new blob storage table (#6534) 2025-04-22 12:24:55 +02:00
marliessophieandGitHub 4c749298e6 chore(prompts): throw 400 if prompt name type mismatched (#6547)
chore(prompts): throw 400 if prompt name type mismatched
2025-04-22 10:17:52 +00:00
marliessophieandGitHub b207712bcd chore(model-costs): support alias for all models (#6542)
* chore(model-costs): support alias for all models

* chore: remove from playground
2025-04-22 09:29:46 +00:00
Hassieb PakzadandGitHub 472b053c44 fix(llm-keys): drop top_p from test call (#6544) 2025-04-22 09:22:26 +00:00
steffen911 5b77e5835b chore: release v3.52.0 2025-04-22 10:00:35 +02:00
Steffen SchmitzandGitHub 657bb63c3e chore: make custom dashboards available for self-hosters (#6541) 2025-04-22 07:33:56 +00:00
Steffen SchmitzandGitHub b101e7c558 feat: allow optional metadata param on org / project CRUD API (#6524)
* feat: allow optional metadata param on org / project CRUD API

* chore: drop debugger statements

* chore: remove more debuggers

* chore: update tests

* chore: add metadata to fern spec
2025-04-22 07:30:02 +00:00
Steffen SchmitzandGitHub bac6b13145 fix: handle data retention on clustered clickhouse deployments (#6538) 2025-04-22 07:27:09 +00:00
Steffen SchmitzandGitHub 6817cdab0a chore: confirm pagination behaviour for scores-api (#6537)
* chore: confirm pagination behaviour for scores-api

* chore: use correct logger for score errors

* chore: inline error
2025-04-22 07:22:31 +00:00
Steffen SchmitzandGitHub 2d4708921c feat(dashboard): allow filtering by observation name (#6511) 2025-04-18 10:12:44 +00:00
marliessophieandGitHub 756b2f7501 chore(ui-forms): ensure name uniqueness enforced on form-level also (#6503)
* chore(ui-forms): ensure name uniqueness enforced on form-level also

* chore: nits
2025-04-17 14:13:01 +00:00
marliessophieandGitHub 2a685edbfa fix(tables): rename usage column to tokens column (#6498) 2025-04-17 11:58:12 +00:00
Steffen SchmitzandGitHub c1c22a9b9b fix: parse negative integer signs on otel timestamps (#6497) 2025-04-17 11:23:55 +00:00
Marlies Mayerhofer ecd3afb4c9 chore: release v3.51.2 2025-04-17 11:40:15 +02:00
marliessophieandGitHub 362902a69c fix(llm-keys): ensure default openai model supports all model params (#6496) 2025-04-17 11:38:05 +02:00
Marlies Mayerhofer ab14bac8df chore: release v3.51.1 2025-04-17 09:11:58 +02:00
Steffen SchmitzandGitHub 3e92e6b74d chore: add query tags to health check queries (#6493)
* chore: add query tags to health check queries

* chore: update type

* chore: switch to domain_ts instead of created_at
2025-04-17 05:34:59 +00:00
Steffen SchmitzandGitHub 54f3c224a7 chore: configure global posthog processing rate limit (#6492) 2025-04-17 04:44:34 +00:00
marliessophieandGitHub e39dda87f9 chore(cost-tracking): add support for openai o3 and o4-mini models (#6491) 2025-04-16 21:43:38 +00:00
Max DeichmannandGitHub 0b8ad96b18 fix: do not report usage to stripe for projects which have been deleted (#6468)
push
2025-04-16 13:14:58 +00:00
marliessophieandGitHub a4ba66f329 perf(datasets): split metrics and core data into two endpoints (#6481)
* perf(datasets): split metrics and core data into two endpoints

* chore: nit
2025-04-16 10:21:36 +00:00
Marc KlingenandGitHub 9c473be745 chore: Update CONTRIBUTING.md (#6476) 2025-04-16 01:46:33 +00:00
Marc KlingenandGitHub 4da0b9874a fix: preserve new lines when displaying score comments on single trace view (#6475) 2025-04-16 00:24:43 +00:00
Marc KlingenandGitHub 8fd6951a19 fix: window not available at build time (#6472) 2025-04-15 21:11:25 +02:00
Marc KlingenandGitHub b30734f43c fix: plain not available on some page loads (#6471) 2025-04-15 20:53:32 +02:00
Max DeichmannandGitHub 293215d1d4 chore: more error logging improvements for project deletions (#6467)
* fix

* push
2025-04-15 16:41:54 +00:00
Max DeichmannandGitHub ead31c8ca4 chore: improve logging for project deletion queue (#6465)
fix
2025-04-15 16:26:40 +00:00
marliessophieandGitHub 870336a5ed fix(prompts): prompt label popover overflows screen bounds (#6463) 2025-04-15 14:21:29 +00:00
steffen911 40792d6587 chore: release v3.51.0 2025-04-15 15:58:59 +02:00
Steffen SchmitzandGitHub 820de6f30f chore: refactor admin-api handling into ee folder (#6462)
* chore: refactor admin-api handling into ee folder

* chore: lint

* chore: add a license key for testing
2025-04-15 13:41:18 +00:00
marliessophieandGitHub 39fb6d99d4 feat(tables): reorder traces and observations column order; re-style visibility selector; peek on observations table (#6442)
* style(traces-table): re-order columns

* style(observations-table): re-order columns

* feat: add peek view to observations view

* style: revamp column visibility filter

* chore: typo

* chore: css
2025-04-15 13:27:55 +00:00
marliessophieandGitHub c156a961a2 chore(cost-tracking): add support for openai 4.1 models (#6459)
* chore(cost-tracking): add support for openai 4.1 models

* chore: add tokenizer config

* chore: add gpt-4.1 prefix
2025-04-15 11:45:57 +00:00
steffen911 8907056b39 chore: release v3.50.0 2025-04-15 10:42:48 +02:00
Steffen SchmitzandGitHub 7ad6749058 feat: expose project retention via the projects API (#6456)
* feat: expose project retention via the projects API

* chore: adjust docs

* chore: remove unnecessary assertion
2025-04-15 07:55:44 +00:00
Steffen SchmitzandGitHub 2e40330df8 feat: allow management of project api keys via API (#6457)
* feat: allow management of project api keys via API

* chore: add api docs
2025-04-15 07:37:51 +00:00
Jason E. JensenandGitHub 3f36fc1191 fix(users): adjust pagination calculation for user retrieval (#6453) 2025-04-15 08:42:27 +02:00
Steffen SchmitzandGitHub 82d7cb9769 chore: expand project and org name limit to 60 chars (#6455) 2025-04-15 06:22:41 +00:00
Steffen SchmitzandGitHub 9bc75b5081 chore: add reference to full Langfuse API spec (#6454)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* feat: allow org api key management via admin api

* feat: allow the creation of projects using an org api key

* chore: allow deletion of projects via API

* feat: create outline of SCIM Users support

* feat: implement SCIM style user endpoints

* chore: allow set password on user

* chore: lint

* feat: add endpoints to manage project and organization memberships

* chore: add memberships api docs

* chore: reject project membership calls if entitlement is missing

* chore: add team plan to test org

* chore: add reference to full Langfuse API spec
2025-04-15 06:07:05 +00:00
Steffen SchmitzandGitHub 3b4811599d feat: add endpoints to manage project and organization memberships (#6449)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* feat: allow org api key management via admin api

* feat: allow the creation of projects using an org api key

* chore: allow deletion of projects via API

* feat: create outline of SCIM Users support

* feat: implement SCIM style user endpoints

* chore: allow set password on user

* chore: lint

* feat: add endpoints to manage project and organization memberships

* chore: add memberships api docs

* chore: reject project membership calls if entitlement is missing

* chore: add team plan to test org
2025-04-15 05:51:11 +00:00
Steffen SchmitzandGitHub d6eee1687e feat: create outline of SCIM Users support (#6439)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* feat: allow org api key management via admin api

* feat: allow the creation of projects using an org api key

* chore: allow deletion of projects via API

* feat: create outline of SCIM Users support

* feat: implement SCIM style user endpoints

* chore: allow set password on user

* chore: lint

* chore: add scim api docs

* chore: remove outdated generated artifacts
2025-04-15 05:31:22 +00:00
Steffen SchmitzandGitHub 4b36ff8752 feat: allow the creation and deletion of projects using an org api key (#6438)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* feat: allow org api key management via admin api

* feat: allow the creation of projects using an org api key

* chore: allow deletion of projects via API

* chore: add documentation for new project routes

* chore: cleanup

* chore: error updates and handling

* chore: reduce reduntant error handling
2025-04-14 20:05:14 +00:00
Steffen SchmitzandGitHub 64827a0c9d feat: allow org api key management via admin api (#6437)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* feat: allow org api key management via admin api

* chore: add defs

* chore: remove admin api
2025-04-14 19:34:46 +00:00
Steffen SchmitzandGitHub fc84da9508 feat: add new organization routes (#6430)
* feat: add new organizations apiKey route

* chore: implement additional org routes

* chore: add API docs

* chore: checkin openapi spec

* chore: update tests

* chore: move admin-api spec to organizations-api

* chore: add postman collection
2025-04-14 19:00:01 +00:00
Marc KlingenandGitHub 3ca321d9f8 feat(cloud): switch from crisp to plain for in-app chat support (#6433)
* feat(cloud): switch from crisp to plain for in-app chat support

* push

* fix lint

* push
2025-04-14 16:49:56 +02:00
marliessophieandGitHub 66df08e232 chore(evals): fall back to bullmq job.data.timestamp allowing for successful retries (#6450)
* chore(evals): fall back to bullmq `job.data.timestamp` allowing for successful retries

* chore: test

* chore: test

* docs: add diagram and docs

* chore: typo

* chore: typo
2025-04-14 14:33:22 +00:00
Hassieb PakzadandGitHub af3cf6d860 fix(llm-tools): do not strip additional properties in schema (#6445) 2025-04-14 11:02:25 +02:00
marliessophieandGitHub 0edecde6e3 style(compare-runs): label on run metrics visibility settings (#6405) 2025-04-14 08:34:41 +00:00
marliessophieandGitHub 5a2fef1fe9 feat(compare-runs): Allow for variable row height on compare view (#6400)
* feat(dataset-compare-runs): Allow for variable row height on compare view

* chore: import as type
2025-04-14 08:21:47 +00:00
Steffen SchmitzandGitHub 28bada800d chore: add test cases for projects api (#6429)
* chore: add test cases for projects api

* chore: lint

* chore: align project name with pipeline
2025-04-11 15:06:53 +00:00
Steffen SchmitzandGitHub 663d67cbd6 fix: update access check for projects api (#6428) 2025-04-11 16:00:32 +02:00
Steffen SchmitzandGitHub bd651e81b7 chore: refactor authentication for admin apis (#6417)
* chore: refactor authentication for admin apis

* chore: lint

* chore: address feedback

* feat: add post organizations endpoint

* chore: update tests

* chore: update api key data model

* chore: align code with new scoped api keys

* chore: typing

* chore: align tests with new logic

* chore: remove ratelimitoverrides

* chore: remove accesslevel from queue message

* chore: add additional check to ingestion endpoint

* chore: add test for legacy api key format in redis

* chore: map all api keys in auditlog
2025-04-11 12:37:38 +00:00
Steffen SchmitzandGitHub f1547dab58 fix: avoid write after end errors on otel metrics endpoint (#6419) 2025-04-10 14:09:12 +00:00
Steffen SchmitzandGitHub 34b470f1fe fix: allow sessions filter on widgets (#6418) 2025-04-10 14:04:16 +00:00
steffen911 040b720dbf chore: release v3.49.1 2025-04-10 15:04:52 +02:00
Steffen SchmitzandGitHub d56e06d6c9 Revert "fix: access all replicas to create dataset score metrics (#6407) (#6416)"
Revert "fix: access all replicas to create dataset score metrics (#6407)"

This reverts commit a3b407ac92.
2025-04-10 15:04:39 +02:00
steffen911 08af244179 chore: release v3.49.0 2025-04-10 14:39:07 +02:00
c821d06099 chore: disable error log checks in playwright tests (#6414)
* push

* dummy

* chore: lint

---------

Co-authored-by: steffen911 <steffen@langfuse.com>
2025-04-10 12:11:58 +00:00
Steffen SchmitzandGitHub 7ed5f71154 fix(dashboards): support all dashboard filters across views (#6413) 2025-04-10 11:59:46 +00:00
Steffen SchmitzandGitHub 8c44314f56 chore: add dummy route that accepts all otel metrics calls (#6408) 2025-04-10 11:37:54 +00:00
Steffen SchmitzandGitHub a3b407ac92 fix: access all replicas to create dataset score metrics (#6407)
* fix: access all replicas to create dataset score metrics

* fix: access all replicas to create dataset score metrics

* chore: linting

* dummy
2025-04-10 09:31:03 +00:00
marliessophieandGitHub b043cf2600 style(compare-runs): remove duplicate run column selector (#6403) 2025-04-10 09:12:29 +00:00
Steffen SchmitzandGitHub d7f75a5e62 build: update end to end tests after dashboard change (#6406) 2025-04-09 19:28:34 +00:00
Steffen SchmitzandGitHub 9951364ff0 feat(dashboards): add beta preview for customizable dashboards (#6376) 2025-04-09 18:14:51 +02:00
David Alexander PfeifferandGitHub 03cf7bccfc feat(evals): Extend job configuration filter options; Evaluators can run based on environments (#6039)
* added environment filter option to traces

* WIP on multi-select ui inconsistency

* fixed overflow issue in multi select where an item would not take the full width automatically; also changed to overflow-x-auto

* fixed invalid DOM nesting of div within p (FormDescription) that resulted in a hydration error

* fix multiselect to cut overflowing text with ellipsis and take full name as titlte so you can hover over it, removed unnecessary css classes

* WIP on create evaluator page ui issue with filter builder

* Revert "WIP on create evaluator page ui issue with filter builder"

This reverts commit fd6dd507f2df3c5fb404f4e38a2983e8ef6405ef.

* hide empty string from multi-select options, as supporting empty values would require further work - out of scope for now; also checked for side effects, with current usage all good

* Added test suite for eval filtering

* Resolved comment: removed getEnvironmentsForProject from traces router and instead fetched environments inside evaluator-form via api.projects.environmentFilterOptions

* move eval filtering tests into separate test file

* removed redundancy via fixtures, prepared tests for concurrency

* filtering tests run concurrently

* extracted traceFilterOptions fetching into separate hook as it is used in both the evaluator form and the traces table, also fixed traces table since the environment was now missing there

* useTraceFilterOptions Hook after merge

* Make TraceOptions keys partial so that we can update filter options asynchronously

* default to empty object if response undefined

* exclude environment filter builder column from traces table since toolbar already has env

* removed useTraceFilterOptions hook as use case changed such that extraction into hook is no longer warranted
2025-04-09 13:40:52 +00:00
Steffen SchmitzandGitHub 4e737ea6cf fix: update column mapping for categorical score charts (#6399) 2025-04-09 13:39:21 +00:00
marliessophieandGitHub d604ce3ceb feat(run-compare): add detail navigation (#6398)
* feat(run-compare): add detail navigation

* nits

* typo

* eslint
2025-04-09 13:26:41 +00:00
Steffen SchmitzandGitHub 2c2daf6bb4 chore: remove beta flag from blob storage integration (#6397) 2025-04-09 09:45:56 +00:00
Hassieb PakzadandGitHub 8ebafda8a4 fix(prompt-ui): internal type on review chat prompt (#6391) 2025-04-08 21:22:22 +02:00
Steffen SchmitzandGitHub af7384b549 fix: propagate userId correctly to downstream tables (#6389) 2025-04-08 14:14:18 +00:00
Hassieb PakzadandGitHub 9768c2d171 perf(batch-exports): make page size configurable and set to 500 (#6385) 2025-04-08 12:59:44 +02:00
David Alexander PfeifferandGitHub f5aec02277 fix(scores/trpc): byid on deleted score resulted in 5xx error instead of 404 (#6384) 2025-04-08 09:58:31 +00:00
David Alexander PfeifferandGitHub b9cf01dd28 feat: add metadata field to scores (#6046) 2025-04-07 22:13:21 +02:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
7c42cf4357 perf: retry failed S3 deletions (#6378)
* push

* Update packages/shared/src/server/services/StorageService.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-04-07 18:19:19 +00:00
Max DeichmannandGitHub 72f4b88d15 perf: Increase batch export timeouts (#6375)
* push

* push

* push

* fix: flaky playwright

* fix

* push

* push
2025-04-07 13:26:23 +00:00
Max DeichmannandGitHub 99ce7c5093 chore: Increase project deletion retries (#6372)
* fix: flaky playwright

* push

* push
2025-04-07 12:31:09 +00:00
Max DeichmannandGitHub fcb7b82ba4 chore: improve project deletion logs (#6373)
push
2025-04-07 12:30:51 +00:00
Max DeichmannandGitHub ac5017c9ae chore: increase batch export retries and improve observability (#6374)
push
2025-04-07 12:17:57 +00:00
Max DeichmannandGitHub 00ffddad0f chore: Increase delete queue processing observability (#6371)
* fix: flaky playwright

* push
2025-04-07 11:34:37 +00:00
Steffen SchmitzandGitHub 28bf40769e chore: clarify titles in dashboard latency charts (#6370) 2025-04-07 11:33:13 +00:00
Hassieb PakzadandGitHub b65b0e25fc fix(playground): handle undefined content with toolCalls (#6364) 2025-04-07 09:13:31 +00:00
Max DeichmannandGitHub 62f860d9ef fix: flaky playwright (#6365) 2025-04-07 09:02:33 +00:00
Steffen SchmitzandGitHub 3989480a94 fix: update dashboard column accesses after query builder updates (#6363)
* fix: update dashboard column accesses after query builder updates

* chore: modify count
2025-04-07 08:50:09 +00:00
Max DeichmannandGitHub 4a6afddbed chore: create scores domain (#6360)
* push

* security: upgrade next

* fix

* push

* fix

* fix

* fix

* fix

* push

* push

* feat: full text search

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* push

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* security: upgrade nextjs 14.2.26

* push

* push

* playwright

* push

* fix

* remove

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* chore: create score domain

* chore: create score domain

* chore: create score domain

* chore: create score domain

* chore: create score domain
2025-04-07 07:19:04 +00:00
Max DeichmannandGitHub 4c6e8964e3 chore: refactor observations domain (#6353)
* push

* security: upgrade next

* fix

* push

* fix

* fix

* fix

* fix

* push

* push

* feat: full text search

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* push

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* chore: refactor observations domain

* security: upgrade nextjs 14.2.26

* push

* push

* playwright

* push

* fix

* remove

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* chore: create score domain
2025-04-07 07:03:38 +00:00
Max DeichmannandGitHub cb900c61f8 chore: add traces domain layer (#6253)
* push

* security: upgrade next

* fix

* push

* fix

* fix

* fix

* fix

* push

* push

* feat: full text search
2025-04-07 06:42:03 +00:00
Max DeichmannGitHubellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
9bc745d647 chore: upgrade playwright tests (#6359)
* push

* push

* fix

* fix

* Update web/src/__e2e__/create-project.spec.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix

* fix

* fix

* fix

* fix

* fix

* Update web/src/__e2e__/create-project.spec.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* fix

* fix

* fix

* fix

* fix

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-04-06 16:41:54 +00:00
Max DeichmannandGitHub 1b6e9e1c8b chore: upgrade tiktoken (#6357) 2025-04-06 12:23:24 +00:00
Max DeichmannandGitHub ce21cf34ae fix: fix model table provided_model_name (#6356)
* fix: fix model table

* fix: fix model table

* fix: fix model table
2025-04-06 12:15:54 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bf063a72a0 chore(deps): bump next from 14.2.25 to 14.2.26 (#6316)
Bumps [next](https://github.com/vercel/next.js) from 14.2.25 to 14.2.26.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.25...v14.2.26)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 14.2.26
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-05 22:05:30 +00:00
5c2ac78eca feat: add new widget creator page (#6322)
* feat: add new widget creator page

* chore: add widget configuration box to creation screen

* chore: make chart title and description editable

* chore: auto-create cases

* chore: dynamically render chart based on output properties

* chore: linting

* chore: coloring

* chore: allow time series breakdowns

* chore: add support for additional chart types

* chore: conditionally show aggregation and row limit

* chore: add more separation between data selection and visualization in chart builder

* chore: add filter and time selector

* chore: make widget form overflow vertically

* chore: linting

* chore: reuse chart colors

* style: revert padding changes to card.tsx

* style: revert changing card headings to div element in card.tsx

* chore: refactoring and feedback

* chore: remove selected view restrictions

* chore: chart formatting

* chore: lint

---------

Co-authored-by: Marlies Mayerhofer <74332854+marliessophie@users.noreply.github.com>
2025-04-04 14:18:33 +00:00
steffen911 c6dadda96f chore: release v3.48.1 2025-04-04 11:47:13 +02:00
Steffen SchmitzandGitHub f831d1ac21 fix: improve parsing of tags for otel endpoint (#6345) 2025-04-04 09:44:29 +00:00
steffen911 1ca4ec7e28 chore: release v3.48.0 2025-04-03 19:04:59 +02:00
Steffen SchmitzandGitHub a9ca40aa81 fix: include tag filtering support on dashboard (#6338) 2025-04-03 16:58:05 +00:00
Marc KlingenandGitHub 8b0588a786 fix(auth): block duplicate membership invites that lead to sign in issues (#6337) 2025-04-03 16:24:54 +00:00
marliessophieandGitHub cc79604302 style(ui): reduce text size of trace/observation name on detail (#6329) 2025-04-03 13:41:28 +00:00
marliessophieandGitHub f12532c0a2 chore(ui): minor peek ui improvements (#6328)
chore(ui): minor peek ui wording improvements
2025-04-03 12:08:54 +00:00
Steffen SchmitzandGitHub 1c1519555a fix: blob storage export UI consistency (#6327)
* fix: blob storage export UI consistency

* chore: only set field value
2025-04-03 11:39:34 +00:00
SebiandGitHub 8954cf0c82 feat(auth): scope cookies to path for custom BASE_PATH deployments (#6320)
extend cookie paths
2025-04-03 11:10:36 +00:00
marliessophieandGitHub 849428abee feat(dataset-runs): improve UI/UX of runs and compare page (#6296)
* fixup: dataset io cell

* fixup: restructure dataset compare view

* fix: react dom error

* chore: fix margins

* chore: remove dataset details popover

* feat: make dataset runs table resizeable

* fix: react dom error

* fix: show more fraction digits on cost chart for experiment runs

* chore: improve design of observation tree peek view

* chore: refactor peek view pattern

* chore: implement new peek view pattern for compare view

* chore: remove zustand dep

* push

* perf: improve dataset compare view

* chore: eslint

* eslint

* push

* lint

* chore

* push
2025-04-03 10:57:35 +00:00
Hassieb PakzadandGitHub c014612cca feat(playground): allow uppercase in tool / schema names (#6326)
* feat(playground): allow uppercase in tool / schema names

* refactor
2025-04-03 09:59:04 +00:00
Hassieb PakzadandGitHub 803057b5eb fix(localStorage): memoize properly to avoid navigation issues (#6323) 2025-04-03 09:01:42 +00:00
Steffen SchmitzandGitHub 2152447932 perf: reduce search interval for trace existence check (#6315)
* perf: reduce search interval for trace existence check

* chore: add final again
2025-04-03 07:28:08 +00:00
marliessophieandGitHub 70e0b036e5 chore(batch-action): make entitlement prop optional (#5884)
* chore(batch-action): make `entitlement` prop optional

* push
2025-04-02 17:00:54 +00:00
Steffen SchmitzandGitHub bef666a694 feat: add json and jsonl support for scheduled blob exports (#6313)
* feat: add json and jsonl support for scheduled blob exports

* chore: revert schedule and add migration
2025-04-02 15:38:54 +00:00
Hassieb PakzadandGitHub 601a22d42c feat(playground): add tool parsing from Langchain generations (#6314) 2025-04-02 15:26:52 +00:00
Steffen SchmitzandGitHub 5fdde72d64 chore: track dlq length (#6312) 2025-04-02 12:54:06 +00:00
Hassieb Pakzad f9fc778ee7 chore: release v3.47.0 2025-04-02 14:01:27 +02:00
Hassieb PakzadandGitHub 975ef81bb5 feat(prompts): add protected labels (#6306) 2025-04-02 13:57:31 +02:00
Steffen SchmitzandGitHub 28e61fae0b chore: remove obsolete dashboard queries (#6303) 2025-04-02 09:32:41 +00:00
Steffen SchmitzandGitHub 0534ccacb2 perf: reduce input validation for dataset items (#6307) 2025-04-01 19:25:23 +00:00
Steffen SchmitzandGitHub 0c5089fd2b chore: pin dev clickhouse version to 24.3 (#6304)
* chore: pin dev clickhouse version to 24.3

* chore: only add input format flag for cloud

* chore: whitelist accepted cloud regions

* chore: disable test
2025-04-01 15:48:18 +00:00
Max DeichmannandGitHub 37c4c1422c perf: remove sentry tunnel config (#6305)
* fix

* fix
2025-04-01 13:01:48 +00:00
014da40fbf fix(ui): TableWithMetadataWrapper uses contain-layout on its root div so that EvaluatorDetail overflow issue is mitigated (#5982)
* fix: (workaround) evals page overflows when rendering right hand side metadata bar

This is more of a workaround, we should probably disable the overflow on the main wrapper div in layout.tsx and enable it only where needed - or find out why the overflow inside the metadata sidebar trigggers the scrollbar to pop up - some info on what I found:

- The body and other divs close to the root do not increase their size.
- The navigation sidebar does increase its vertical height, but limiting that does not resolve the main scrollbar.
- Limiting specifically the wrapper div in layout.tsx with overflow-hidden does resolve this, but globally disabling it requires most pages to be refactored.

* Revert "fix: (workaround) evals page overflows when rendering right hand side metadata bar"

This reverts commit 313a1c0d8a885a04974399f850f7f9aee58fd714.

* fix(ui): TableWithMetadataWrapper uses contain-layout on its root div so that EvaluatorDetail overflow issue is mitigated

Checked for side effects on the other components using TableWithMetadataWrapper and all work as expected.

---------

Co-authored-by: Marlies Mayerhofer <74332854+marliessophie@users.noreply.github.com>
2025-04-01 10:38:42 +00:00
Hassieb PakzadandGitHub 2317334bff feat(playground): persist selected model (#6292)
* feat(playground): persist selected model

* push

* push
2025-04-01 08:27:48 +00:00
Steffen SchmitzandGitHub 9ed449288b chore: add batch export env variables to docker-compose.yml (#6300) 2025-04-01 06:54:23 +00:00
Steffen SchmitzandGitHub 3b4800c37a chore: migrate score charts to new query builder (#6294) 2025-04-01 08:47:37 +02:00
Hassieb PakzadandGitHub b2ffd05ff8 fix(prompt-form): move prompt reference button (#6289) 2025-03-31 15:09:15 +00:00
Steffen SchmitzandGitHub e4594db953 chore: migrate latency charts to new query builder (#6284)
* chore: migrate latency charts to new query builder

* chore: convert model latencies chart

* chore: typing
2025-03-31 13:00:05 +00:00
marliessophieandGitHub 4b733c4da8 chore(annotation-scores): revert to synchronous delete; upsert on create route (#6282)
* chore(annotation-scores): revert to synchronous delete; upsert on create route

* fix: ensure scores data not only marked as stale but refreshed on score update
2025-03-31 12:36:29 +00:00
Hassieb PakzadandGitHub 378ac1c1a4 feat(llm-connections): add gemini-2.5-pro-exp-03-25 (#6286) 2025-03-31 11:57:18 +00:00
steffen911 9233c7c2d2 chore: release v3.46.0 2025-03-31 12:10:23 +02:00
Steffen SchmitzandGitHub c2170c0c8d feat: add support for GCS buckets (#6269)
* feat: add support for GCS buckets

* chore: cleanup

* chore: trim gcs credentials before parsing

* chore: add logging for redis shutdown in tests

* chore: update timeout for trace delete test

* chore: bump trace delete concurrency for tests
2025-03-31 10:04:49 +00:00
Max DeichmannandGitHub 7faf0e009f chore: revert unintended worker concurrency changes (#6275)
push
2025-03-29 14:42:12 +01:00
Max DeichmannandGitHub 86318ab50b perf: reduce worker deletion concurrency (#6274)
push
2025-03-29 14:39:17 +01:00
Max DeichmannandGitHub 48d280433a perf: reduce delete concurrency (#6273)
push
2025-03-29 14:27:38 +01:00
marliessophieandGitHub 45f29eaad8 fix(patch): hide scores tab on trace/observation preview (#6270)
fix(patch): hide scores tab on peek view
2025-03-28 20:34:52 +00:00
2bca2899f4 feat(evals, ui): enable deletion of evaluator via UI, DeleteButton refactor (#6247)
* feat(evals): enable deletion of evaluators and templates via UI

* Added tests for the evals job and template deletion trpc endpoints

* evals-trpc test refactor, it had a side effect on other tests since it was pruning the db, now instead creates a new org and project per tests and cleans them up after all tests are done

* removed test comments as those are now implemented

* fix wrong wording

* added template version to delete confirmation on template details delete action

* DeleteButton refactoring and moved deletion of templates to LFE-4573

* moving the call to captureDeleteSuccess inside the successful branch of executeDeleteMutation

* Display lock icon when action button in icon mode is unauthorized

* fix: quietly delete scheduled evals for deleted job executions

---------

Co-authored-by: Max Deichmann <m.deichmann@tum.de>
2025-03-28 18:22:21 +00:00
marliessophieandGitHub af6d0f0086 fix(ui): trace timeline width calculation error (#6268)
fix(ui): timeline width
2025-03-28 15:44:01 +00:00
Steffen SchmitzandGitHub 3802b1849d chore: migrate user chart to new query builder (#6262) 2025-03-28 14:28:03 +00:00
Steffen SchmitzandGitHub 19d2ee06e9 chore: update list of allowed blob storage export intervals (#6266) 2025-03-28 14:26:44 +00:00
Hassieb PakzadandGitHub b670abc6bc feat(playground): add tool call support (#6069) 2025-03-28 15:21:51 +01:00
Hassieb PakzadandGitHub 9395e94670 fix(prompts): handle resolvePromptGraph on deleted prompt (#6264) 2025-03-28 14:49:15 +01:00
Hassieb PakzadandGitHub 684e52e11f chore(docker-compose): update default LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT (#6265) 2025-03-28 14:49:00 +01:00
marliessophieandGitHub 4048e807af fix(prompt-ui): state stuck in showing prompt diff cycle (#6258) 2025-03-28 09:31:19 +00:00
Hassieb PakzadandGitHub 0b173f47f7 fix(prompts): dollar sign in replaceValue breaking resolution (#6256) 2025-03-27 23:39:38 +01:00
Max DeichmannandGitHub 15cad50991 chore: add logger for trpc route (#6255) 2025-03-27 21:48:28 +01:00
marliessophieandGitHub 747bfae721 chore(eval-count-tooltip): refactor to extract business logic into hook (#6251)
* chore(eval-count-tooltip): refactor to extract business logic into hook

* eslint
2025-03-27 17:45:50 +00:00
marliessophieandGitHub a01ec32715 feat(evals): allow adding custom value to tags filter (#6250) 2025-03-27 16:22:08 +00:00
Max DeichmannandGitHub 780fd577c4 chore: set sentry profiling sample rate (#6249)
push
2025-03-27 15:49:33 +00:00
marliessophieandGitHub cd33442168 fix(ui): detail navigation on users > traces page (#6248) 2025-03-27 15:39:49 +00:00
Steffen SchmitzandGitHub 6582dbc645 chore: migrate observation by model charts to new query builder (#6245) 2025-03-27 14:50:39 +00:00
Max DeichmannandGitHub 055eb06a4f chore: add sentry remove dd env variables in build step (#6246) 2025-03-27 15:40:26 +01:00
marliessophieandGitHub daeaf0a986 fix(trace-timeline): overflow and scroll behaviour (#6216)
* fix(trace-timeline): overflow and scroll behaviour

* fix(trace-timeline): show maximum of 3 scores and remainder in hover card

* push

* chore: refactor

* chore

* chore
2025-03-27 13:53:55 +00:00
Steffen SchmitzandGitHub f199dcb61c chore: remove warnings on missing domain timestamp (#6235) 2025-03-27 12:09:33 +01:00
Max DeichmannandGitHub 0ec0cca442 chore: enable sentry tunnel (#6234) 2025-03-27 11:38:53 +01:00
Steffen SchmitzandGitHub f4c75b896b chore: bump timeout for posthog export queries (#6233) 2025-03-27 09:57:04 +00:00
Steffen SchmitzandGitHub 16c76b2722 perf: reduce memory usage for posthog export via join_algo overwrite (#6230) 2025-03-27 10:17:44 +01:00
Steffen SchmitzandGitHub 64f6051048 chore: move the traces timeseries chart to new query builder (#6226) 2025-03-26 17:02:03 +00:00
Max DeichmannandGitHub 96dfd86b51 chore: improve sentry setup (#6224) 2025-03-26 16:20:14 +01:00
Steffen SchmitzandGitHub b1aaf57ad5 chore: migrate ModelCostTable to new query mechanism (#6222)
* chore: migrate ModelCostTable to new query mechanism

* chore: lint
2025-03-26 14:58:43 +00:00
880 changed files with 64016 additions and 20651 deletions
+47
View File
@@ -0,0 +1,47 @@
FROM node:20
# ---------- System packages --------------------------------------------------
# The buildpack-deps base already ships git, build-essential, python, etc.
# Add a few extra tools handy during Langfuse development.
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
openssl \
wget \
curl \
ca-certificates \
postgresql-client \
redis-tools \
less nano \
&& rm -rf /var/lib/apt/lists/*
# ---------- pnpm -------------------------------------------------------------
# Langfuse monorepo relies on pnpm 9.5.0 (see CONTRIBUTING.md)
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable && \
corepack prepare pnpm@9.5.0 --activate
# ---------- golang-migrate ----------------------------------------------------
# CLI used for database migrations during development.
ENV MIGRATE_VERSION=4.18.2
RUN wget -qO- "https://github.com/golang-migrate/migrate/releases/download/v${MIGRATE_VERSION}/migrate.linux-amd64.tar.gz" \
| tar -xz -C /usr/local/bin && \
chmod +x /usr/local/bin/migrate
# ---------- Non-root user -----------------------------------------------------
# Use root for convenience in development containers
WORKDIR /workspace
# Create non-root user
RUN useradd -ms /bin/bash ubuntu
# Pre-create pnpm store and set correct ownership to avoid first-run cost & permission issues
RUN pnpm store path > /dev/null && \
chown -R ubuntu:ubuntu /pnpm
USER ubuntu
WORKDIR /home/ubuntu
ENV HOME=/home/ubuntu
# Container starts with a bash shell ready for hacking.
CMD ["bash"]
+8
View File
@@ -0,0 +1,8 @@
{
"install": "cp .env.dev.example .env && pnpm i",
"build": {
"context": ".",
"dockerfile": "Dockerfile"
},
"start": "pnpm dx-f"
}
+8
View File
@@ -0,0 +1,8 @@
---
description:
globs:
alwaysApply: true
---
# General rules
- Linting in this repo only works if the development server is running
+7 -17
View File
@@ -157,10 +157,6 @@ OTEL_SERVICE_NAME="langfuse"
# LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID=
# LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=
# Exports are streamed to S3 in pages to avoid memory issues
# The page size can be adjusted if needed to optimize performance
# DB_EXPORT_PAGE_SIZE=1000
# Automated provisioning of default resources
# LANGFUSE_INIT_ORG_ID=org-id
# LANGFUSE_INIT_ORG_NAME=org-name
@@ -215,21 +211,12 @@ OTEL_SERVICE_NAME="langfuse"
# LANGFUSE_UI_DEFAULT_BASE_URL_OPENAI=https://api.openai.com/v1
# LANGFUSE_UI_DEFAULT_BASE_URL_ANTHROPIC=https://api.anthropic.com
# LANGFUSE_UI_DEFAULT_BASE_URL_AZURE_OPENAI=https://{instanceName}.openai.azure.com/openai/deployments
# LANGFUSE_UI_VISIBLE_PRODUCT_MODULES=
# LANGFUSE_UI_HIDDEN_PRODUCT_MODULES=
### END Enterprise Edition Configuration
### START Envs to be deprecated in Langfuse v3.0
# Disable the expensive analytics queries and related features
# LANGFUSE_DISABLE_EXPENSIVE_POSTGRES_QUERIES="true"
### END Envs to be deprecated in Langfuse v3.0
### START Langfuse Cloud Config
# Used for Langfuse Cloud deployments
# Not recommended for self-hosted deployments as these are NOT COVERED BY SEMANTIC VERSIONING
@@ -261,8 +248,11 @@ OTEL_SERVICE_NAME="langfuse"
# NEXT_PUBLIC_DEMO_ORG_ID=
# NEXT_PUBLIC_DEMO_PROJECT_ID=
# Crisp chat
# NEXT_PUBLIC_CRISP_WEBSITE_ID=
# Plain Chat
# NEXT_PUBLIC_PLAIN_APP_ID=
# PLAIN_AUTHENTICATION_SECRET=
# PLAIN_API_KEY=
# PLAIN_CARDS_API_TOKEN=
# Admin API
# ADMIN_API_KEY=
+6 -7
View File
@@ -15,6 +15,10 @@ jobs:
runs-on: ubuntu-latest
environment: ${{ inputs.environment }}
steps:
- name: Set Swap Space
uses: pierotofy/set-swap-space@master
with:
swap-size-gb: 10
- name: Get app name
uses: winterjung/split@v2
id: split
@@ -52,16 +56,11 @@ jobs:
--build-arg NEXT_PUBLIC_BUILD_ID=${{ github.sha }} \
--build-arg NEXT_PUBLIC_POSTHOG_KEY=${{ vars.NEXT_PUBLIC_POSTHOG_KEY }} \
--build-arg NEXT_PUBLIC_POSTHOG_HOST=${{ vars.NEXT_PUBLIC_POSTHOG_HOST }} \
--build-arg NEXT_PUBLIC_CRISP_WEBSITE_ID=${{ vars.NEXT_PUBLIC_CRISP_WEBSITE_ID }} \
--build-arg NEXT_PUBLIC_PLAIN_APP_ID=${{ vars.NEXT_PUBLIC_PLAIN_APP_ID }} \
--build-arg SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} \
--build-arg SENTRY_ORG=${{ vars.SENTRY_ORG }} \
--build-arg SENTRY_PROJECT=${{ vars.SENTRY_PROJECT }} \
--build-arg NEXT_PUBLIC_DATADOG_APPLICATION_ID=${{ vars.NEXT_PUBLIC_DATADOG_APPLICATION_ID }} \
--build-arg NEXT_PUBLIC_DATADOG_CLIENT_TOKEN=${{ vars.NEXT_PUBLIC_DATADOG_CLIENT_TOKEN }} \
--build-arg NEXT_PUBLIC_DATADOG_SITE=${{ vars.NEXT_PUBLIC_DATADOG_SITE }} \
--build-arg NEXT_PUBLIC_DATADOG_ENVIRONMENT=${{ vars.NEXT_PUBLIC_DATADOG_ENVIRONMENT }} \
--build-arg NEXT_PUBLIC_DATADOG_SESSION_SAMPLE_RATE=${{ vars.NEXT_PUBLIC_DATADOG_SESSION_SAMPLE_RATE }} \
--build-arg NEXT_PUBLIC_DATADOG_SESSION_REPLAY_SAMPLE_RATE=${{ vars.NEXT_PUBLIC_DATADOG_SESSION_REPLAY_SAMPLE_RATE }} \
--build-arg NEXT_PUBLIC_LANGFUSE_TRACING_SAMPLE_RATE=${{ vars.NEXT_PUBLIC_LANGFUSE_TRACING_SAMPLE_RATE }} \
.
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
- name: Render AWS ECS Task Definition
+2 -1
View File
@@ -21,6 +21,7 @@ on:
- staging
- prod-eu
- prod-us
- prod-hipaa
required: true
concurrency:
@@ -78,7 +79,7 @@ jobs:
return `["staging"]`
}
if (context.ref === "refs/heads/production") {
return `["prod-eu", "prod-us"]`
return `["prod-eu", "prod-us", "prod-hipaa"]`
}
}
return "[]"
+17
View File
@@ -212,6 +212,9 @@ jobs:
grep -v -e '^LANGFUSE_S3_BATCH_EXPORT_ENABLED=' -e '^NEXT_PUBLIC_LANGFUSE_RUN_NEXT_INIT=' .env.dev${{ matrix.blob-provider }}.example > .env
echo "LANGFUSE_INGESTION_QUEUE_DELAY_MS=1" >> .env
echo "LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS=1" >> .env
echo "LANGFUSE_TRACE_DELETE_CONCURRENCY=100" >> .env
echo "ADMIN_API_KEY=admin-api-key" >> .env
echo "LANGFUSE_EE_LICENSE_KEY=langfuse_ee_test" >> .env
- name: Run dev containers
run: |
docker compose -f docker-compose.dev${{ matrix.blob-provider }}.yml up -d
@@ -338,14 +341,28 @@ jobs:
run: |
cp .env.dev.example .env
cp .env.dev.example web/.env
- name: Install golang-migrate for Clickhouse migrations
run: |
curl -L https://github.com/golang-migrate/migrate/releases/download/v4.18.2/migrate.linux-amd64.tar.gz | tar xvz
sudo mv migrate /usr/bin/migrate
which migrate
- name: Run + migrate
run: |
docker compose -f docker-compose.dev.yml up -d
docker compose ps
sleep 5 # Wait for PostgreSQL to accept connections
- name: Ensure Docker dependencies are healthy
run: |
if docker-compose ps | grep "(unhealthy)"; then
echo "One or more services are unhealthy"
exit 1
else
echo "All services are healthy"
fi
- name: Seed DB
run: |
pnpm run db:migrate
pnpm --filter=shared run ch:up
pnpm run db:seed
- name: Build
run: pnpm run build
+3 -1
View File
@@ -62,4 +62,6 @@ node_modules
**/.next/*
**/.turbo/*
.yarn
.turbo
.turbo
web/test-results/*
+16
View File
@@ -0,0 +1,16 @@
# Codex Guidelines for Langfuse
Langfuse is an **open source LLM engineering** platform for developing, monitoring, evaluating and debugging AI applications. See the README for more details.
## Linting
- Run `pnpm run lint` to lint all packages.
- Fix issues automatically with `pnpm run lint:fix`.
## Tests
- Codex cannot run the test suite because it depends on Docker-based infrastructure that is unavailable in this environment.
## Cursor Rules
- Additional folder-specific rules live in `.cursor/rules/`.
## Commits
- Follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) when crafting commit messages.
+2 -2
View File
@@ -27,7 +27,7 @@ The maintainers are available on [Discord](https://langfuse.com/discord) in case
## Making a change
_Before making any significant changes, please [open an issue](https://github.com/langfuse/langfuse/issues)._ Discussing your proposed changes ahead of time will make the contribution process smooth for everyone. Large changes that were not discussed in an issue may be rejected.
_Before making any significant changes, please [open an issue](https://github.com/langfuse/langfuse/issues)._ Discussing your proposed changes ahead of time will make the contribution process smooth for everyone. Changes that were not discussed in an issue may be rejected.
Once we've discussed your changes and you've got your code ready, make sure that tests are passing and open your pull request.
@@ -83,7 +83,7 @@ Full database schema: [packages/shared/prisma/schema.prisma](packages/shared/pri
We built a monorepo using [pnpm](https://pnpm.io/motivation) and [turbo](https://turbo.build/repo/docs) to manage the dependencies and build process. The monorepo contains the following packages:
- `web`: is the main application package providing Frontend and Backend APIs for Langfuse.
- `worker` (no production yet): contains an application for asynchronous processing of tasks. This package is not yet used in production.
- `worker`: contains an application for asynchronous processing of tasks.
- `packages`:
- `shared`: contains shared code between the above packages.
- `config-eslint`: contains eslint configurations which are shared between the above packages.
+2 -2
View File
@@ -213,8 +213,8 @@ LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 欧盟区域
创建示例代码(文件名:**main.py**):
````python:main.py
from langfuse.decorators import observe
```python:main.py
from langfuse import observe
from langfuse.openai import openai # OpenAI 集成
@observe()
+1 -1
View File
@@ -219,7 +219,7 @@ LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 EUリージョン
```
```python:/@observe()/ /from langfuse.openai import openai/ filename="main.py"
from langfuse.decorators import observe
from langfuse import observe
from langfuse.openai import openai # OpenAI統合
@observe()
+1 -1
View File
@@ -201,7 +201,7 @@ LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 EU region
```
```python:main.py
from langfuse.decorators import observe
from langfuse import observe
from langfuse.openai import openai # OpenAI integration
@observe()
+5 -6
View File
@@ -93,7 +93,7 @@ Langfuse is an **open source LLM engineering** platform. It helps teams collabor
### Langfuse Cloud
Managed deployment by the Langfuse team, generous free-tier (hobby plan), no credit card required.
Managed deployment by the Langfuse team, generous free-tier, no credit card required.
<div align="center">
<a href="https://cloud.langfuse.com" target="_blank">
@@ -115,12 +115,11 @@ Run Langfuse on your own infrastructure:
# Run the langfuse docker compose
docker compose up
```
- [Kubernetes (Helm)](https://langfuse.com/self-hosting/kubernetes-helm): Run Langfuse on a Kubernetes cluster using Helm. This is the preferred production deployment.
- [VM](https://langfuse.com/self-hosting/docker-compose): Run Langfuse on a single Virtual Machine using Docker Compose.
- Planned: Cloud-specific deployment guides, please upvote and comment on the following threads: [AWS](https://github.com/orgs/langfuse/discussions/4645), [Google Cloud](https://github.com/orgs/langfuse/discussions/4646), [Azure](https://github.com/orgs/langfuse/discussions/4647).
- [Kubernetes (Helm)](https://langfuse.com/self-hosting/kubernetes-helm): Run Langfuse on a Kubernetes cluster using Helm. This is the preferred production deployment.
- Terraform Templates: [AWS](https://langfuse.com/self-hosting/aws), [Azure](https://langfuse.com/self-hosting/azure), [GCP](https://langfuse.com/self-hosting/gcp)
See [self-hosting documentation](https://langfuse.com/self-hosting) to learn more about the architecture and configuration options.
See [self-hosting documentation](https://langfuse.com/self-hosting) to learn more about architecture and configuration options.
## 🔌 Integrations
@@ -191,7 +190,7 @@ LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 EU region
```
```python /@observe()/ /from langfuse.openai import openai/ filename="main.py"
from langfuse.decorators import observe
from langfuse import observe
from langfuse.openai import openai # OpenAI integration
@observe()
+1 -1
View File
@@ -1,6 +1,6 @@
services:
clickhouse:
image: clickhouse/clickhouse-server
image: clickhouse/clickhouse-server:24.3
user: "101:101"
environment:
CLICKHOUSE_DB: default
+1 -1
View File
@@ -1,6 +1,6 @@
services:
clickhouse:
image: clickhouse/clickhouse-server
image: clickhouse/clickhouse-server:24.3
user: "101:101"
environment:
CLICKHOUSE_DB: default
+11 -1
View File
@@ -29,6 +29,7 @@ services:
CLICKHOUSE_USER: ${CLICKHOUSE_USER:-clickhouse}
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-clickhouse} # CHANGEME
CLICKHOUSE_CLUSTER_ENABLED: ${CLICKHOUSE_CLUSTER_ENABLED:-false}
LANGFUSE_USE_AZURE_BLOB: ${LANGFUSE_USE_AZURE_BLOB:-false}
LANGFUSE_S3_EVENT_UPLOAD_BUCKET: ${LANGFUSE_S3_EVENT_UPLOAD_BUCKET:-langfuse}
LANGFUSE_S3_EVENT_UPLOAD_REGION: ${LANGFUSE_S3_EVENT_UPLOAD_REGION:-auto}
LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: ${LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID:-minio}
@@ -40,9 +41,18 @@ services:
LANGFUSE_S3_MEDIA_UPLOAD_REGION: ${LANGFUSE_S3_MEDIA_UPLOAD_REGION:-auto}
LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: ${LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID:-minio}
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: ${LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY:-miniosecret} # CHANGEME
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: ${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://minio:9000}
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: ${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://localhost:9090}
LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: ${LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE:-true}
LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: ${LANGFUSE_S3_MEDIA_UPLOAD_PREFIX:-media/}
LANGFUSE_S3_BATCH_EXPORT_ENABLED: ${LANGFUSE_S3_BATCH_EXPORT_ENABLED:-false}
LANGFUSE_S3_BATCH_EXPORT_BUCKET: ${LANGFUSE_S3_BATCH_EXPORT_BUCKET:-langfuse}
LANGFUSE_S3_BATCH_EXPORT_PREFIX: ${LANGFUSE_S3_BATCH_EXPORT_PREFIX:-exports/}
LANGFUSE_S3_BATCH_EXPORT_REGION: ${LANGFUSE_S3_BATCH_EXPORT_REGION:-auto}
LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: ${LANGFUSE_S3_BATCH_EXPORT_ENDPOINT:-http://minio:9000}
LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: ${LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT:-http://localhost:9090}
LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: ${LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID:-minio}
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: ${LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY:-miniosecret} # CHANGEME
LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: ${LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE:-true}
LANGFUSE_INGESTION_QUEUE_DELAY_MS: ${LANGFUSE_INGESTION_QUEUE_DELAY_MS:-}
LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS: ${LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS:-}
REDIS_HOST: ${REDIS_HOST:-redis}
+2 -2
View File
@@ -28,9 +28,9 @@
"@opentelemetry/api": ">=1.0.0 <1.10.0",
"axios": "^1.8.2",
"https-proxy-agent": "^7.0.6",
"next": "^14.2.25",
"next": "^14.2.30",
"next-auth": "^4.24.11",
"zod": "^3.23.8"
"zod": "^3.25.62"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
+1 -1
View File
@@ -1,4 +1,4 @@
import { z } from "zod";
import { z } from "zod/v4";
import { removeEmptyEnvVariables } from "@langfuse/shared";
const EnvSchema = z.object({
+14 -58
View File
@@ -14,13 +14,16 @@ types:
CreateScoreRequest:
properties:
id: optional<string>
traceId: string
traceId: optional<string>
sessionId: optional<string>
observationId: optional<string>
datasetRunId: optional<string>
name: string
value:
type: CreateScoreValue
docs: The value of the score. Must be passed as string for categorical scores, and numeric for boolean and numeric scores. Boolean score values must equal either 1 or 0 (true or false)
observationId: optional<string>
comment: optional<string>
metadata: optional<unknown>
dataType:
type: optional<ScoreDataType>
docs: When set, must match the score value's type. If not set, will be inferred from the score value or config
@@ -64,62 +67,15 @@ types:
dataType: "BOOLEAN"
configId: "1234-5678-90ab-cdef"
traceId: "cdef-1234-5678-90ab"
BaseScore:
properties:
id: string
traceId: string
name: string
source: ScoreSource
observationId: optional<string>
timestamp: datetime
createdAt: datetime
updatedAt: datetime
authorUserId: optional<string>
comment: optional<string>
configId:
type: optional<string>
docs: Reference a score config on a score. When set, config and score name must be equal and value must comply to optionally defined numerical range
NumericScore:
extends: BaseScore
properties:
value:
type: double
docs: The numeric value of the score
BooleanScore:
extends: BaseScore
properties:
value:
type: double
docs: The numeric value of the score. Equals 1 for "True" and 0 for "False"
stringValue:
type: string
docs: The string representation of the score value. Is inferred from the numeric value and equals "True" or "False"
CategoricalScore:
extends: BaseScore
properties:
value:
type: optional<double>
docs: Only defined if a config is linked. Represents the numeric category mapping of the stringValue
stringValue:
type: string
docs: The string representation of the score value. If no config is linked, can be any string. Otherwise, must map to a config category
Score:
discriminant: "dataType"
union:
NUMERIC:
type: NumericScore
docs: "Score with NUMERIC data type"
CATEGORICAL:
type: CategoricalScore
docs: "Score with CATEGORICAL data type"
BOOLEAN:
type: BooleanScore
docs: "Score with BOOLEAN data type"
ScoreSource:
enum:
- ANNOTATION
- API
- EVAL
- value:
name: "contextrelevant"
value: "not relevant"
sessionId: "abyt-1234-5678-80ab"
- value:
name: "hallucination"
value: 0
datasetRunId: "7891-5678-90ab-hijk"
ScoreDataType:
enum:
- NUMERIC
@@ -0,0 +1,32 @@
name: langfuse-organizations
docs: |
## General Notes
This admin API is only available on self-hosted instances, not on Langfuse Cloud.
An administrator must set the `ADMIN_API_KEY` environment variable to use this API.
## Authentication
Authenticate with the API by setting the Authorization header to `Bearer $ADMIN_API_KEY` where
`$ADMIN_API_KEY` is the API key set via the container environment.
## Exports
- OpenAPI spec: https://cloud.langfuse.com/generated/organizations-api/openapi.yml
- Postman collection: https://cloud.langfuse.com/generated/organizations-postman/collection.json
## Looking for the Langfuse API?
Are you looking for the full Langfuse API?
Check out our [API reference](https://api.reference.langfuse.com/#overview).
error-discrimination:
strategy: status-code
auth: bearer
imports:
commons: commons.yml
errors:
- commons.Error
- commons.UnauthorizedError
- commons.AccessDeniedError
- commons.MethodNotAllowedError
@@ -0,0 +1,13 @@
errors:
Error:
status-code: 400
type: string
UnauthorizedError:
status-code: 401
type: string
AccessDeniedError:
status-code: 403
type: string
MethodNotAllowedError:
status-code: 405
type: string
@@ -0,0 +1,170 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json
imports:
commons: ./commons.yml
service:
auth: true
base-path: /api/admin
endpoints:
getAll:
docs: Get all organizations
method: GET
path: /organizations
response: Organizations
errors:
- commons.UnauthorizedError
- commons.MethodNotAllowedError
create:
docs: Create a new organization
method: POST
path: /organizations
request:
name: CreateOrganizationRequest
body:
properties:
name: string
metadata:
type: optional<map<string, unknown>>
docs: Optional metadata for the organization
response: Organization
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
getById:
docs: Get organization by ID
method: GET
path: /organizations/{organizationId}
path-parameters:
organizationId: string
response: Organization
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
update:
docs: Update an organization
method: PUT
path: /organizations/{organizationId}
path-parameters:
organizationId: string
request:
name: UpdateOrganizationRequest
body:
properties:
name: string
metadata:
type: optional<map<string, unknown>>
docs: Optional metadata for the organization
response: Organization
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
delete:
docs: Delete an organization
method: DELETE
path: /organizations/{organizationId}
path-parameters:
organizationId: string
response: DeleteOrganizationResponse
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
# API Key endpoints
getApiKeys:
docs: Get all API keys for an organization
method: GET
path: /organizations/{organizationId}/apiKeys
path-parameters:
organizationId: string
response: ApiKeyList
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
createApiKey:
docs: Create a new API key for an organization
method: POST
path: /organizations/{organizationId}/apiKeys
path-parameters:
organizationId: string
request:
name: CreateApiKeyRequest
body:
properties:
note:
type: optional<string>
docs: Optional note for the API key
response: ApiKeyResponse
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
deleteApiKey:
docs: Delete an API key for an organization
method: DELETE
path: /organizations/{organizationId}/apiKeys/{apiKeyId}
path-parameters:
organizationId: string
apiKeyId: string
response: DeleteOrganizationResponse
errors:
- commons.Error
- commons.UnauthorizedError
- commons.MethodNotAllowedError
types:
Organizations:
docs: List of organizations
properties:
organizations: list<Organization>
Organization:
docs: Organization object
properties:
id: string
name: string
createdAt: datetime
metadata:
type: map<string, unknown>
docs: Metadata for the organization
DeleteOrganizationResponse:
docs: Response for successful organization deletion
properties:
success: boolean
ApiKeyList:
docs: List of API keys for an organization
properties:
apiKeys: list<ApiKeySummary>
ApiKeySummary:
docs: Summary of an API key
properties:
id: string
createdAt: datetime
expiresAt: optional<datetime>
lastUsedAt: optional<datetime>
note: optional<string>
publicKey: string
displaySecretKey: string
ApiKeyResponse:
docs: Response for API key creation
properties:
id: string
createdAt: datetime
publicKey: string
secretKey: string
displaySecretKey: string
note: optional<string>
+17
View File
@@ -0,0 +1,17 @@
default-group: local
groups:
local:
generators:
- name: fernapi/fern-openapi
version: 0.1.7
output:
location: local-file-system
path: ../../../web/public/generated/organizations-api
config:
namespaceExport: Langfuse
allowCustomFetcher: true
- name: fernapi/fern-postman
version: 0.0.45
output:
location: local-file-system
path: ../../../web/public/generated/organizations-postman
+74 -5
View File
@@ -75,7 +75,7 @@ types:
type: list<ObservationsView>
docs: List of observations
scores:
type: list<Score>
type: list<ScoreV1>
docs: List of scores
Session:
properties:
@@ -240,7 +240,7 @@ types:
properties:
value: double
label: string
BaseScore:
BaseScoreV1:
properties:
id: string
traceId: string
@@ -252,6 +252,68 @@ types:
updatedAt: datetime
authorUserId: optional<string>
comment: optional<string>
metadata: optional<unknown>
configId:
type: optional<string>
docs: Reference a score config on a score. When set, config and score name must be equal and value must comply to optionally defined numerical range
queueId:
type: optional<string>
docs: Reference an annotation queue on a score. Populated if the score was initially created in an annotation queue.
environment:
type: optional<string>
docs: The environment from which this score originated. Can be any lowercase alphanumeric string with hyphens and underscores that does not start with 'langfuse'.
NumericScoreV1:
extends: BaseScoreV1
properties:
value:
type: double
docs: The numeric value of the score
BooleanScoreV1:
extends: BaseScoreV1
properties:
value:
type: double
docs: The numeric value of the score. Equals 1 for "True" and 0 for "False"
stringValue:
type: string
docs: The string representation of the score value. Is inferred from the numeric value and equals "True" or "False"
CategoricalScoreV1:
extends: BaseScoreV1
properties:
value:
type: optional<double>
docs: Only defined if a config is linked. Represents the numeric category mapping of the stringValue
stringValue:
type: string
docs: The string representation of the score value. If no config is linked, can be any string. Otherwise, must map to a config category
ScoreV1:
discriminant: "dataType"
union:
NUMERIC:
type: NumericScoreV1
docs: "Score with NUMERIC data type"
CATEGORICAL:
type: CategoricalScoreV1
docs: "Score with CATEGORICAL data type"
BOOLEAN:
type: BooleanScoreV1
docs: "Score with BOOLEAN data type"
BaseScore:
properties:
id: string
traceId: optional<string>
sessionId: optional<string>
observationId: optional<string>
datasetRunId: optional<string>
name: string
source: ScoreSource
timestamp: datetime
createdAt: datetime
updatedAt: datetime
authorUserId: optional<string>
comment: optional<string>
metadata: optional<unknown>
configId:
type: optional<string>
docs: Reference a score config on a score. When set, config and score name must be equal and value must comply to optionally defined numerical range
@@ -395,13 +457,13 @@ types:
docs: Unit used by this model.
type: optional<ModelUsageUnit>
inputPrice:
docs: Price (USD) per input unit
docs: Deprecated. See 'prices' instead. Price (USD) per input unit
type: optional<double>
outputPrice:
docs: Price (USD) per output unit
docs: Deprecated. See 'prices' instead. Price (USD) per output unit
type: optional<double>
totalPrice:
docs: Price (USD) per total unit. Cannot be set if input or output price is set.
docs: Deprecated. See 'prices' instead. Price (USD) per total unit. Cannot be set if input or output price is set.
type: optional<double>
tokenizerId:
docs: Optional. Tokenizer to be applied to observations which match to this model. See docs for more details.
@@ -411,6 +473,13 @@ types:
type: optional<unknown>
isLangfuseManaged:
type: boolean
prices:
docs: Price (USD) by usage type
type: map<string, ModelPrice>
ModelPrice:
properties:
price: double
# Utilities
ModelUsageUnit:
@@ -1,6 +1,7 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json
imports:
commons: ./commons.yml
pagination: ./utils/pagination.yml
service:
auth: true
base-path: /api/public
@@ -11,6 +12,23 @@ service:
path: /dataset-run-items
request: CreateDatasetRunItemRequest
response: commons.DatasetRunItem
list:
method: GET
docs: List dataset run items
path: /dataset-run-items
request:
name: ListDatasetRunItemsRequest
query-parameters:
datasetId: string
runName: string
page:
type: optional<integer>
docs: page number, starts at 1
limit:
type: optional<integer>
docs: limit of items per page
response: PaginatedDatasetRunItems
types:
CreateDatasetRunItemRequest:
properties:
@@ -26,3 +44,7 @@ types:
traceId:
type: optional<string>
docs: traceId should always be provided. For compatibility with older SDK versions it can also be inferred from the provided observationId.
PaginatedDatasetRunItems:
properties:
data: list<commons.DatasetRunItem>
meta: pagination.MetaResponse
+13 -2
View File
@@ -263,14 +263,17 @@ types:
ScoreBody:
properties:
id: optional<string>
traceId: string
traceId: optional<string>
sessionId: optional<string>
observationId: optional<string>
datasetRunId: optional<string>
name: string
environment: optional<string>
value:
type: commons.CreateScoreValue
docs: The value of the score. Must be passed as string for categorical scores, and numeric for boolean and numeric scores. Boolean score values must equal either 1 or 0 (true or false)
observationId: optional<string>
comment: optional<string>
metadata: optional<unknown>
dataType:
type: optional<commons.ScoreDataType>
docs: When set, must match the score value's type. If not set, will be inferred from the score value or config
@@ -314,6 +317,14 @@ types:
dataType: "BOOLEAN"
configId: "1234-5678-90ab-cdef"
traceId: "cdef-1234-5678-90ab"
- value:
name: "contextrelevant"
value: "not relevant"
sessionId: "abyt-1234-5678-80ab"
- value:
name: "hallucination"
value: 0
datasetRunId: "7891-5678-90ab-hijk"
BaseEvent:
properties:
+55 -62
View File
@@ -6,71 +6,64 @@ service:
auth: true
base-path: /api/public
endpoints:
daily:
docs: Get daily metrics of the Langfuse project
metrics:
docs: Get metrics from the Langfuse project using a query object
method: GET
path: /metrics/daily
path: /metrics
request:
name: GetDailyMetricsRequest
name: GetMetricsRequest
query-parameters:
page:
type: optional<integer>
docs: page number, starts at 1
limit:
type: optional<integer>
docs: limit of items per page
traceName:
type: optional<string>
docs: Optional filter by the name of the trace
userId:
type: optional<string>
docs: Optional filter by the userId associated with the trace
tags:
type: optional<string>
allow-multiple: true
docs: Optional filter for metrics where traces include all of these tags
environment:
type: optional<string>
allow-multiple: true
docs: Optional filter for metrics where events include any of these environments
fromTimestamp:
type: optional<datetime>
docs: Optional filter to only include traces and observations on or after a certain datetime (ISO 8601)
toTimestamp:
type: optional<datetime>
docs: Optional filter to only include traces and observations before a certain datetime (ISO 8601)
response: DailyMetrics
query:
type: string
docs: |
JSON string containing the query parameters with the following structure:
```json
{
"view": string, // Required. One of "traces", "observations", "scores-numeric", "scores-categorical"
"dimensions": [ // Optional. Default: []
{
"field": string // Field to group by, e.g. "name", "userId", "sessionId"
}
],
"metrics": [ // Required. At least one metric must be provided
{
"measure": string, // What to measure, e.g. "count", "latency", "value"
"aggregation": string // How to aggregate, e.g. "count", "sum", "avg", "p95", "histogram"
}
],
"filters": [ // Optional. Default: []
{
"column": string, // Column to filter on
"operator": string, // Operator, e.g. "=", ">", "<", "contains"
"value": any, // Value to compare against
"type": string, // Data type, e.g. "string", "number", "stringObject"
"key": string // Required only when filtering on metadata
}
],
"timeDimension": { // Optional. Default: null. If provided, results will be grouped by time
"granularity": string // One of "minute", "hour", "day", "week", "month", "auto"
},
"fromTimestamp": string, // Required. ISO datetime string for start of time range
"toTimestamp": string, // Required. ISO datetime string for end of time range
"orderBy": [ // Optional. Default: null
{
"field": string, // Field to order by
"direction": string // "asc" or "desc"
}
],
"config": { // Optional. Query-specific configuration
"bins": number, // Optional. Number of bins for histogram (1-100), default: 10
"row_limit": number // Optional. Row limit for results (1-1000)
}
}
```
response: MetricsResponse
types:
DailyMetrics:
MetricsResponse:
properties:
data:
type: list<DailyMetricsDetails>
docs: A list of daily metrics, only days with ingested data are included.
meta: pagination.MetaResponse
DailyMetricsDetails:
properties:
date: date
countTraces: integer
countObservations: integer
totalCost:
type: double
docs: Total model cost in USD
usage: list<UsageByModel>
UsageByModel:
docs: Daily usage of a given model. Usage corresponds to the unit set for the specific model (e.g. tokens).
properties:
model: optional<string>
inputUsage:
type: integer
docs: Total number of generation input units (e.g. tokens)
outputUsage:
type: integer
docs: Total number of generation output units (e.g. tokens)
totalUsage:
type: integer
docs: Total number of generation total units (e.g. tokens)
countTraces: integer
countObservations: integer
totalCost:
type: double
docs: Total model cost in USD
type: list<map<string, unknown>>
docs: |
The metrics data. Each item in the list contains the metric values and dimensions requested in the query.
Format varies based on the query parameters.
Histograms will return an array with [lower, upper, height] tuples.
+1 -1
View File
@@ -39,7 +39,7 @@ service:
docs: Optional filter for observations where the environment is one of the provided values.
fromStartTime:
type: optional<datetime>
docs: Retrieve only observations with a start_time or or after this datetime (ISO 8601).
docs: Retrieve only observations with a start_time on or after this datetime (ISO 8601).
toStartTime:
type: optional<datetime>
docs: Retrieve only observations with a start_time before this datetime (ISO 8601).
@@ -0,0 +1,80 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json
imports:
commons: ./commons.yml
pagination: ./utils/pagination.yml
service:
auth: true
base-path: /api/public
endpoints:
getOrganizationMemberships:
docs: Get all memberships for the organization associated with the API key (requires organization-scoped API key)
method: GET
path: /organizations/memberships
response: MembershipsResponse
updateOrganizationMembership:
docs: Create or update a membership for the organization associated with the API key (requires organization-scoped API key)
method: PUT
path: /organizations/memberships
request: MembershipRequest
response: MembershipResponse
getProjectMemberships:
docs: Get all memberships for a specific project (requires organization-scoped API key)
method: GET
path: /projects/{projectId}/memberships
path-parameters:
projectId: string
response: MembershipsResponse
updateProjectMembership:
docs: Create or update a membership for a specific project (requires organization-scoped API key). The user must already be a member of the organization.
method: PUT
path: /projects/{projectId}/memberships
path-parameters:
projectId: string
request: MembershipRequest
response: MembershipResponse
getOrganizationProjects:
docs: Get all projects for the organization associated with the API key (requires organization-scoped API key)
method: GET
path: /organizations/projects
response: OrganizationProjectsResponse
types:
MembershipRole:
enum:
- OWNER
- ADMIN
- MEMBER
- VIEWER
MembershipRequest:
properties:
userId: string
role: MembershipRole
MembershipResponse:
properties:
userId: string
role: MembershipRole
email: string
name: string
MembershipsResponse:
properties:
memberships: list<MembershipResponse>
OrganizationProject:
properties:
id: string
name: string
metadata: optional<map<string, unknown>>
createdAt: datetime
updatedAt: datetime
OrganizationProjectsResponse:
properties:
projects: list<OrganizationProject>
+121
View File
@@ -12,6 +12,85 @@ service:
path: /projects
response: Projects
create:
docs: Create a new project (requires organization-scoped API key)
method: POST
path: /projects
request:
name: CreateProjectRequest
body:
properties:
name: string
metadata:
type: optional<map<string, unknown>>
docs: Optional metadata for the project
retention:
type: integer
docs: Number of days to retain data. Must be 0 or at least 3 days. Requires data-retention entitlement for non-zero values. Optional.
response: Project
update:
docs: Update a project by ID (requires organization-scoped API key).
method: PUT
path: /projects/{projectId}
path-parameters:
projectId: string
request:
name: UpdateProjectRequest
body:
properties:
name: string
metadata:
type: optional<map<string, unknown>>
docs: Optional metadata for the project
retention:
type: integer
docs: Number of days to retain data. Must be 0 or at least 3 days. Requires data-retention entitlement for non-zero values. Optional.
response: Project
delete:
docs: Delete a project by ID (requires organization-scoped API key). Project deletion is processed asynchronously.
method: DELETE
path: /projects/{projectId}
path-parameters:
projectId: string
response:
status-code: 202
type: ProjectDeletionResponse
# API Key endpoints
getApiKeys:
docs: Get all API keys for a project (requires organization-scoped API key)
method: GET
path: /projects/{projectId}/apiKeys
path-parameters:
projectId: string
response: ApiKeyList
createApiKey:
docs: Create a new API key for a project (requires organization-scoped API key)
method: POST
path: /projects/{projectId}/apiKeys
path-parameters:
projectId: string
request:
name: CreateApiKeyRequest
body:
properties:
note:
type: optional<string>
docs: Optional note for the API key
response: ApiKeyResponse
deleteApiKey:
docs: Delete an API key for a project (requires organization-scoped API key)
method: DELETE
path: /projects/{projectId}/apiKeys/{apiKeyId}
path-parameters:
projectId: string
apiKeyId: string
response: ApiKeyDeletionResponse
types:
Projects:
properties:
@@ -21,3 +100,45 @@ types:
properties:
id: string
name: string
metadata:
type: map<string, unknown>
docs: Metadata for the project
retentionDays:
type: optional<integer>
docs: Number of days to retain data. Null or 0 means no retention. Omitted if no retention is configured.
ProjectDeletionResponse:
properties:
success: boolean
message: string
ApiKeyList:
docs: List of API keys for a project
properties:
apiKeys: list<ApiKeySummary>
ApiKeySummary:
docs: Summary of an API key
properties:
id: string
createdAt: datetime
expiresAt: optional<datetime>
lastUsedAt: optional<datetime>
note: optional<string>
publicKey: string
displaySecretKey: string
ApiKeyResponse:
docs: Response for API key creation
properties:
id: string
createdAt: datetime
publicKey: string
secretKey: string
displaySecretKey: string
note: optional<string>
ApiKeyDeletionResponse:
docs: Response for API key deletion
properties:
success: boolean
+199
View File
@@ -0,0 +1,199 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json
imports:
commons: ./commons.yml
service:
auth: true
base-path: /api/public/scim
endpoints:
getServiceProviderConfig:
docs: Get SCIM Service Provider Configuration (requires organization-scoped API key)
method: GET
path: /ServiceProviderConfig
response: ServiceProviderConfig
getResourceTypes:
docs: Get SCIM Resource Types (requires organization-scoped API key)
method: GET
path: /ResourceTypes
response: ResourceTypesResponse
getSchemas:
docs: Get SCIM Schemas (requires organization-scoped API key)
method: GET
path: /Schemas
response: SchemasResponse
listUsers:
docs: List users in the organization (requires organization-scoped API key)
method: GET
path: /Users
request:
name: ListUsersRequest
query-parameters:
filter:
docs: Filter expression (e.g. userName eq "value")
type: optional<string>
startIndex:
docs: 1-based index of the first result to return (default 1)
type: optional<integer>
count:
docs: Maximum number of results to return (default 100)
type: optional<integer>
response: ScimUsersListResponse
createUser:
docs: Create a new user in the organization (requires organization-scoped API key)
method: POST
path: /Users
request:
name: CreateUserRequest
body:
properties:
userName:
docs: User's email address (required)
type: string
name:
docs: User's name information
type: ScimName
emails:
docs: User's email addresses
type: optional<list<ScimEmail>>
active:
docs: Whether the user is active
type: optional<boolean>
password:
docs: Initial password for the user
type: optional<string>
response: ScimUser
getUser:
docs: Get a specific user by ID (requires organization-scoped API key)
method: GET
path: /Users/{userId}
path-parameters:
userId: string
response: ScimUser
deleteUser:
docs: Remove a user from the organization (requires organization-scoped API key). Note that this only removes the user from the organization but does not delete the user entity itself.
method: DELETE
path: /Users/{userId}
path-parameters:
userId: string
response: EmptyResponse
types:
ServiceProviderConfig:
properties:
schemas: list<string>
documentationUri: string
patch: ScimFeatureSupport
bulk: BulkConfig
filter: FilterConfig
changePassword: ScimFeatureSupport
sort: ScimFeatureSupport
etag: ScimFeatureSupport
authenticationSchemes: list<AuthenticationScheme>
meta: ResourceMeta
ScimFeatureSupport:
properties:
supported: boolean
BulkConfig:
properties:
supported: boolean
maxOperations: integer
maxPayloadSize: integer
FilterConfig:
properties:
supported: boolean
maxResults: integer
ResourceMeta:
properties:
resourceType: string
location: string
AuthenticationScheme:
properties:
name: string
description: string
specUri: string
type: string
primary: boolean
ResourceTypesResponse:
properties:
schemas: list<string>
totalResults: integer
Resources: list<ResourceType>
ResourceType:
properties:
schemas: optional<list<string>>
id: string
name: string
endpoint: string
description: string
schema: string
schemaExtensions: list<SchemaExtension>
meta: ResourceMeta
SchemaExtension:
properties:
schema: string
required: boolean
SchemasResponse:
properties:
schemas: list<string>
totalResults: integer
Resources: list<SchemaResource>
SchemaResource:
properties:
id: string
name: string
description: string
attributes: list<unknown>
meta: ResourceMeta
ScimUsersListResponse:
properties:
schemas: list<string>
totalResults: integer
startIndex: integer
itemsPerPage: integer
Resources: list<ScimUser>
ScimUser:
properties:
schemas: list<string>
id: string
userName: string
name: ScimName
emails: list<ScimEmail>
meta: UserMeta
UserMeta:
properties:
resourceType: string
created: optional<string>
lastModified: optional<string>
ScimName:
properties:
formatted: optional<string>
ScimEmail:
properties:
primary: boolean
value: string
type: string
EmptyResponse:
docs: Empty response for 204 No Content responses
properties: {}
+112
View File
@@ -0,0 +1,112 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json
imports:
pagination: ./utils/pagination.yml
commons: ./commons.yml
service:
auth: true
base-path: /api/public/v2
endpoints:
get:
docs: Get a list of scores (supports both trace and session scores)
method: GET
path: /scores
request:
name: GetScoresRequest
query-parameters:
page:
type: optional<integer>
docs: Page number, starts at 1.
limit:
type: optional<integer>
docs: Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit.
userId:
type: optional<string>
docs: Retrieve only scores with this userId associated to the trace.
name:
type: optional<string>
docs: Retrieve only scores with this name.
fromTimestamp:
type: optional<datetime>
docs: Optional filter to only include scores created on or after a certain datetime (ISO 8601)
toTimestamp:
type: optional<datetime>
docs: Optional filter to only include scores created before a certain datetime (ISO 8601)
environment:
type: optional<string>
allow-multiple: true
docs: Optional filter for scores where the environment is one of the provided values.
source:
type: optional<commons.ScoreSource>
docs: Retrieve only scores from a specific source.
operator:
type: optional<string>
docs: Retrieve only scores with <operator> value.
value:
type: optional<double>
docs: Retrieve only scores with <operator> value.
scoreIds:
type: optional<string>
docs: Comma-separated list of score IDs to limit the results to.
configId:
type: optional<string>
docs: Retrieve only scores with a specific configId.
queueId:
type: optional<string>
docs: Retrieve only scores with a specific annotation queueId.
dataType:
type: optional<commons.ScoreDataType>
docs: Retrieve only scores with a specific dataType.
traceTags:
type: optional<string>
allow-multiple: true
docs: Only scores linked to traces that include all of these tags will be returned.
response: GetScoresResponse
get-by-id:
docs: Get a score (supports both trace and session scores)
method: GET
path: /scores/{scoreId}
path-parameters:
scoreId:
type: string
docs: The unique langfuse identifier of a score
response: commons.Score
types:
GetScoresResponseTraceData:
properties:
userId:
type: optional<string>
docs: The user ID associated with the trace referenced by score
tags:
type: optional<list<string>>
docs: A list of tags associated with the trace referenced by score
environment:
type: optional<string>
docs: The environment of the trace referenced by score
GetScoresResponseDataNumeric:
extends: commons.NumericScore
properties:
trace: optional<GetScoresResponseTraceData>
GetScoresResponseDataCategorical:
extends: commons.CategoricalScore
properties:
trace: optional<GetScoresResponseTraceData>
GetScoresResponseDataBoolean:
extends: commons.BooleanScore
properties:
trace: optional<GetScoresResponseTraceData>
GetScoresResponseData:
discriminant: dataType
union:
NUMERIC: GetScoresResponseDataNumeric
CATEGORICAL: GetScoresResponseDataCategorical
BOOLEAN: GetScoresResponseDataBoolean
GetScoresResponse:
properties:
data: list<GetScoresResponseData>
meta: pagination.MetaResponse
+7 -106
View File
@@ -7,77 +7,13 @@ service:
base-path: /api/public
endpoints:
create:
docs: Create a score
docs: Create a score (supports both trace and session scores)
method: POST
path: /scores
request: CreateScoreRequest
response: CreateScoreResponse
get:
docs: Get a list of scores
method: GET
path: /scores
request:
name: GetScoresRequest
query-parameters:
page:
type: optional<integer>
docs: Page number, starts at 1.
limit:
type: optional<integer>
docs: Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit.
userId:
type: optional<string>
docs: Retrieve only scores with this userId associated to the trace.
name:
type: optional<string>
docs: Retrieve only scores with this name.
fromTimestamp:
type: optional<datetime>
docs: Optional filter to only include scores created on or after a certain datetime (ISO 8601)
toTimestamp:
type: optional<datetime>
docs: Optional filter to only include scores created before a certain datetime (ISO 8601)
environment:
type: optional<string>
allow-multiple: true
docs: Optional filter for scores where the environment is one of the provided values.
source:
type: optional<commons.ScoreSource>
docs: Retrieve only scores from a specific source.
operator:
type: optional<string>
docs: Retrieve only scores with <operator> value.
value:
type: optional<double>
docs: Retrieve only scores with <operator> value.
scoreIds:
type: optional<string>
docs: Comma-separated list of score IDs to limit the results to.
configId:
type: optional<string>
docs: Retrieve only scores with a specific configId.
queueId:
type: optional<string>
docs: Retrieve only scores with a specific annotation queueId.
dataType:
type: optional<commons.ScoreDataType>
docs: Retrieve only scores with a specific dataType.
traceTags:
type: optional<string>
allow-multiple: true
docs: Only scores linked to traces that include all of these tags will be returned.
response: GetScoresResponse
get-by-id:
docs: Get a score
method: GET
path: /scores/{scoreId}
path-parameters:
scoreId:
type: string
docs: The unique langfuse identifier of a score
response: commons.Score
delete:
docs: Delete a score
docs: Delete a score (supports both trace and session scores)
method: DELETE
path: /scores/{scoreId}
path-parameters:
@@ -88,13 +24,16 @@ types:
CreateScoreRequest:
properties:
id: optional<string>
traceId: string
traceId: optional<string>
sessionId: optional<string>
observationId: optional<string>
datasetRunId: optional<string>
name: string
value:
type: commons.CreateScoreValue
docs: The value of the score. Must be passed as string for categorical scores, and numeric for boolean and numeric scores. Boolean score values must equal either 1 or 0 (true or false)
observationId: optional<string>
comment: optional<string>
metadata: optional<unknown>
environment:
type: optional<string>
docs: The environment of the score. Can be any lowercase alphanumeric string with hyphens and underscores that does not start with 'langfuse'.
@@ -148,41 +87,3 @@ types:
id:
type: string
docs: The id of the created object in Langfuse
GetScoresResponseTraceData:
properties:
userId:
type: optional<string>
docs: The user ID associated with the trace referenced by score
tags:
type: optional<list<string>>
docs: A list of tags associated with the trace referenced by score
environment:
type: optional<string>
docs: The environment of the trace referenced by score
GetScoresResponseDataNumeric:
extends: commons.NumericScore
properties:
trace: GetScoresResponseTraceData
GetScoresResponseDataCategorical:
extends: commons.CategoricalScore
properties:
trace: GetScoresResponseTraceData
GetScoresResponseDataBoolean:
extends: commons.BooleanScore
properties:
trace: GetScoresResponseTraceData
GetScoresResponseData:
discriminant: dataType
union:
NUMERIC: GetScoresResponseDataNumeric
CATEGORICAL: GetScoresResponseDataCategorical
BOOLEAN: GetScoresResponseDataBoolean
GetScoresResponse:
properties:
data: list<GetScoresResponseData>
meta: pagination.MetaResponse
+9 -5
View File
@@ -1,6 +1,6 @@
{
"name": "langfuse",
"version": "3.45.2",
"version": "3.69.0",
"author": "engineering@langfuse.com",
"license": "MIT",
"private": true,
@@ -18,23 +18,25 @@
"db:seed:examples": "turbo run db:seed:examples",
"nuke": "bash ./scripts/nuke.sh",
"dx": "pnpm i && pnpm run infra:dev:prune && pnpm run infra:dev:up --pull always && pnpm --filter=shared run db:reset && pnpm --filter=shared run ch:reset && pnpm --filter=shared run db:seed:examples && pnpm run dev",
"dx-f": "pnpm i && pnpm run infra:dev:prune && pnpm run infra:dev:up --pull always && pnpm --filter=shared run db:reset -f && pnpm --filter=shared run ch:reset && pnpm --filter=shared run db:seed:examples && pnpm run dev",
"dx-f": "pnpm i && pnpm run infra:dev:prune && pnpm run infra:dev:up --pull always && pnpm --filter=shared run db:reset -f && SKIP_CONFIRM=1 pnpm --filter=shared run ch:reset && pnpm --filter=shared run db:seed:examples && pnpm run dev",
"dx:skip-infra": "pnpm i && pnpm --filter=shared run db:reset && pnpm --filter=shared run ch:reset && pnpm --filter=shared run db:seed:examples && pnpm run dev",
"build": "turbo run build",
"start": "turbo run start",
"dev": "turbo run dev",
"dev:worker": "turbo run dev --filter=worker",
"dev:web": "turbo run dev --filter=web",
"lint": "turbo run lint",
"test": "turbo run test",
"release": "dotenv -e ../.env -- release-it",
"prepare": "husky"
},
"devDependencies": {
"@release-it/bumper": "^7.0.1",
"@release-it/bumper": "^7.0.5",
"braces": "3.0.3",
"dotenv-cli": "^7.4.2",
"husky": "^9.0.11",
"prettier": "^3.3.3",
"release-it": "^18.1.2",
"release-it": "^19.0.3",
"turbo": "^1.13.4"
},
"release-it": {
@@ -84,7 +86,9 @@
"pnpm": {
"overrides": {
"nanoid": "^3.3.8",
"katex": "^0.16.21"
"katex": "^0.16.21",
"tar-fs": "^2.1.2",
"rollup@^4.0.0": "^4.22.4"
},
"patchedDependencies": {
"next-auth@4.24.11": "patches/next-auth@4.24.11.patch"
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP COLUMN IF EXISTS metadata;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default ADD COLUMN metadata Map(LowCardinality(String), String) AFTER comment;
@@ -0,0 +1 @@
DROP TABLE blob_storage_file_log ON CLUSTER default;
@@ -0,0 +1,21 @@
CREATE TABLE blob_storage_file_log ON CLUSTER default (
`id` String,
`project_id` String,
`entity_type` String,
`entity_id` String,
`event_id` String,
`bucket_name` String,
`bucket_path` String,
`created_at` DateTime64(3) DEFAULT now(),
`updated_at` DateTime64(3) DEFAULT now(),
event_ts DateTime64(3),
is_deleted UInt8,
) ENGINE = ReplicatedReplacingMergeTree(event_ts, is_deleted)
ORDER BY (
project_id,
entity_type,
entity_id,
event_id
);
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP COLUMN IF EXISTS session_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default ADD COLUMN session_id Nullable(String) AFTER trace_id SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ON CLUSTER default ADD INDEX IF NOT EXISTS idx_project_trace_observation (project_id, trace_id, observation_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores ON CLUSTER default MATERIALIZE INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ON CLUSTER default DROP INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default MODIFY COLUMN trace_id Nullable(String) SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default MODIFY COLUMN trace_id Nullable(String) SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ON CLUSTER default ADD INDEX IF NOT EXISTS idx_project_trace_observation (project_id, trace_id, observation_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores ON CLUSTER default MATERIALIZE INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP INDEX IF EXISTS idx_project_session SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ON CLUSTER default ADD INDEX IF NOT EXISTS idx_project_session (project_id, session_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores ON CLUSTER default MATERIALIZE INDEX IF EXISTS idx_project_session SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP COLUMN IF EXISTS dataset_run_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default ADD COLUMN dataset_run_id Nullable(String) AFTER session_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ON CLUSTER default DROP INDEX IF EXISTS idx_project_dataset_run SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ON CLUSTER default ADD INDEX IF NOT EXISTS idx_project_dataset_run (project_id, dataset_run_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores ON CLUSTER default MATERIALIZE INDEX IF EXISTS idx_project_dataset_run SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_traces ON CLUSTER default;
@@ -0,0 +1,15 @@
CREATE VIEW analytics_traces ON CLUSTER default AS
SELECT
project_id,
toStartOfHour(timestamp) AS hour,
uniq(id) AS countTraces,
max(user_id IS NOT NULL) AS hasUsers,
max(session_id IS NOT NULL) AS hasSessions,
max(if(environment != 'default', 1, 0)) AS hasEnvironments,
max(length(tags) > 0) AS hasTags
FROM
traces
WHERE toStartOfHour(timestamp) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
hour;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_observations ON CLUSTER default;
@@ -0,0 +1,18 @@
CREATE VIEW analytics_observations ON CLUSTER default AS
SELECT
project_id,
type,
toStartOfHour(start_time) AS hour,
uniq(id) AS countObservations,
max(level != 'DEFAULT') AS hasLevel,
max(provided_model_name IS NOT NULL) AS hasProvidedModelName,
max(length(provided_usage_details) > 0) AS hasProvidedUsageDetails,
max(length(provided_cost_details) > 0) AS hasProvidedCostDetails,
max(prompt_name IS NOT NULL) AS hasPromptName
FROM
observations
WHERE toStartOfHour(start_time) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
type,
hour;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_scores ON CLUSTER default;
@@ -0,0 +1,21 @@
CREATE VIEW analytics_scores ON CLUSTER default AS
SELECT
project_id,
toStartOfHour(timestamp) AS hour,
uniq(id) AS countScores,
max(source = 'ANNOTATION') AS hasAnnotation,
max(source = 'API') AS hasApi,
max(source = 'EVAL') AS hasEval,
max(observation_id IS NOT NULL) AS hasObservationScore,
max(session_id IS NOT NULL) AS hasSessionScore,
max(dataset_run_id IS NOT NULL) AS hasDatasetRunScore,
max(data_type = 'BOOLEAN') AS hasBoolScore,
max(data_type = 'NUMERIC') AS hasNumericScore,
max(data_type = 'CATEGORICAL') AS hasCategoricalScore,
max(comment IS NOT NULL) AS hasComment
FROM
scores
WHERE toStartOfHour(timestamp) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
hour;
@@ -0,0 +1 @@
ALTER TABLE scores DROP COLUMN IF EXISTS metadata;
@@ -0,0 +1 @@
ALTER TABLE scores ADD COLUMN metadata Map(LowCardinality(String), String) AFTER comment;
@@ -0,0 +1 @@
DROP TABLE blob_storage_file_log;
@@ -0,0 +1,22 @@
CREATE TABLE blob_storage_file_log
(
`id` String,
`project_id` String,
`entity_type` String,
`entity_id` String,
`event_id` String,
`bucket_name` String,
`bucket_path` String,
`created_at` DateTime64(3) DEFAULT now(),
`updated_at` DateTime64(3) DEFAULT now(),
event_ts DateTime64(3),
is_deleted UInt8,
) ENGINE = ReplacingMergeTree(event_ts, is_deleted)
ORDER BY (
project_id,
entity_type,
entity_id,
event_id
);
@@ -0,0 +1 @@
ALTER TABLE scores DROP COLUMN IF EXISTS session_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ADD COLUMN session_id Nullable(String) AFTER trace_id SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ADD INDEX IF NOT EXISTS idx_project_trace_observation (project_id, trace_id, observation_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores MATERIALIZE INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores DROP INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores MODIFY COLUMN trace_id Nullable(String) SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores MODIFY COLUMN trace_id Nullable(String) SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores DROP INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ADD INDEX IF NOT EXISTS idx_project_trace_observation (project_id, trace_id, observation_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores MATERIALIZE INDEX IF EXISTS idx_project_trace_observation SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores DROP INDEX IF EXISTS idx_project_session SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ADD INDEX IF NOT EXISTS idx_project_session (project_id, session_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores MATERIALIZE INDEX IF EXISTS idx_project_session SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores DROP COLUMN IF EXISTS dataset_run_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores ADD COLUMN dataset_run_id Nullable(String) AFTER session_id SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
ALTER TABLE scores DROP INDEX IF EXISTS idx_project_dataset_run SETTINGS mutations_sync = 2;
@@ -0,0 +1,2 @@
ALTER TABLE scores ADD INDEX IF NOT EXISTS idx_project_dataset_run (project_id, dataset_run_id) TYPE bloom_filter(0.001) GRANULARITY 1 SETTINGS mutations_sync = 2;
ALTER TABLE scores MATERIALIZE INDEX IF EXISTS idx_project_dataset_run SETTINGS mutations_sync = 2;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_traces;
@@ -0,0 +1,15 @@
CREATE VIEW analytics_traces AS
SELECT
project_id,
toStartOfHour(timestamp) AS hour,
uniq(id) AS countTraces,
max(user_id IS NOT NULL) AS hasUsers,
max(session_id IS NOT NULL) AS hasSessions,
max(if(environment != 'default', 1, 0)) AS hasEnvironments,
max(length(tags) > 0) AS hasTags
FROM
traces
WHERE toStartOfHour(timestamp) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
hour;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_observations;
@@ -0,0 +1,18 @@
CREATE VIEW analytics_observations AS
SELECT
project_id,
type,
toStartOfHour(start_time) AS hour,
uniq(id) AS countObservations,
max(level != 'DEFAULT') AS hasLevel,
max(provided_model_name IS NOT NULL) AS hasProvidedModelName,
max(length(provided_usage_details) > 0) AS hasProvidedUsageDetails,
max(length(provided_cost_details) > 0) AS hasProvidedCostDetails,
max(prompt_name IS NOT NULL) AS hasPromptName
FROM
observations
WHERE toStartOfHour(start_time) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
type,
hour;
@@ -0,0 +1 @@
DROP VIEW IF EXISTS analytics_scores;
@@ -0,0 +1,21 @@
CREATE VIEW analytics_scores AS
SELECT
project_id,
toStartOfHour(timestamp) AS hour,
uniq(id) AS countScores,
max(source = 'ANNOTATION') AS hasAnnotation,
max(source = 'API') AS hasApi,
max(source = 'EVAL') AS hasEval,
max(observation_id IS NOT NULL) AS hasObservationScore,
max(session_id IS NOT NULL) AS hasSessionScore,
max(dataset_run_id IS NOT NULL) AS hasDatasetRunScore,
max(data_type = 'BOOLEAN') AS hasBoolScore,
max(data_type = 'NUMERIC') AS hasNumericScore,
max(data_type = 'CATEGORICAL') AS hasCategoricalScore,
max(comment IS NOT NULL) AS hasComment
FROM
scores
WHERE toStartOfHour(timestamp) <= toStartOfHour(subtractHours(now(), 1))
GROUP BY
project_id,
hour;
+12 -4
View File
@@ -36,8 +36,12 @@ if [ "$CLICKHOUSE_CLUSTER_ENABLED" == "false" ] ; then
DATABASE_URL="${CLICKHOUSE_MIGRATION_URL}?username=${CLICKHOUSE_USER}&password=${CLICKHOUSE_PASSWORD}&database=${CLICKHOUSE_DB}&x-multi-statement=true&x-migrations-table-engine=MergeTree"
fi
# Execute the up command
migrate -source file://clickhouse/migrations/unclustered -database "$DATABASE_URL" down
# If SKIP_CONFIRM is set, automatically answer the confirmation prompt. Otherwise run interactively.
if [ "$SKIP_CONFIRM" = "1" ] || [ "$SKIP_CONFIRM" = "true" ]; then
printf 'y\n' | migrate -source file://clickhouse/migrations/unclustered -database "$DATABASE_URL" down
else
migrate -source file://clickhouse/migrations/unclustered -database "$DATABASE_URL" down
fi
else
if [ "$CLICKHOUSE_MIGRATION_SSL" = true ] ; then
DATABASE_URL="${CLICKHOUSE_MIGRATION_URL}?username=${CLICKHOUSE_USER}&password=${CLICKHOUSE_PASSWORD}&database=${CLICKHOUSE_DB}&x-multi-statement=true&secure=true&skip_verify=true&x-cluster-name=${CLICKHOUSE_CLUSTER_NAME}&x-migrations-table-engine=ReplicatedMergeTree"
@@ -45,6 +49,10 @@ else
DATABASE_URL="${CLICKHOUSE_MIGRATION_URL}?username=${CLICKHOUSE_USER}&password=${CLICKHOUSE_PASSWORD}&database=${CLICKHOUSE_DB}&x-multi-statement=true&x-cluster-name=${CLICKHOUSE_CLUSTER_NAME}&x-migrations-table-engine=ReplicatedMergeTree"
fi
# Execute the up command
migrate -source file://clickhouse/migrations/clustered -database "$DATABASE_URL" down
# If SKIP_CONFIRM is set, automatically answer the confirmation prompt. Otherwise run interactively.
if [ "$SKIP_CONFIRM" = "1" ] || [ "$SKIP_CONFIRM" = "true" ]; then
printf 'y\n' | migrate -source file://clickhouse/migrations/clustered -database "$DATABASE_URL" down
else
migrate -source file://clickhouse/migrations/clustered -database "$DATABASE_URL" down
fi
fi
+15 -13
View File
@@ -33,7 +33,7 @@
"scripts": {
"build": "tsc",
"dev": "tsc --watch",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --max-warnings 64",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --max-warnings 70",
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"db:migrate": "DISABLE_ERD=false dotenv -e ../../.env -- npx prisma migrate dev",
"db:push": "DISABLE_ERD=false dotenv -e ../../.env -- npx prisma db push",
@@ -60,17 +60,18 @@
"@aws-sdk/lib-storage": "^3.675.0",
"@aws-sdk/s3-request-presigner": "^3.679.0",
"@azure/storage-blob": "^12.26.0",
"@clickhouse/client": "^1.4.0",
"@langchain/anthropic": "^0.3.12",
"@langchain/aws": "^0.1.3",
"@langchain/core": "^0.3.37",
"@langchain/google-genai": "^0.1.9",
"@langchain/google-vertexai": "^0.1.8",
"@langchain/openai": "^0.3.17",
"@clickhouse/client": "^1.11.2",
"@google-cloud/storage": "^7.15.2",
"@langchain/anthropic": "^0.3.21",
"@langchain/aws": "^0.1.10",
"@langchain/core": "^0.3.57",
"@langchain/google-genai": "^0.2.10",
"@langchain/google-vertexai": "^0.2.10",
"@langchain/openai": "^0.5.12",
"@opentelemetry/api": ">=1.0.0 <1.10.0",
"@prisma/client": "^6.3.0",
"@react-email/components": "^0.0.19",
"@react-email/render": "^0.0.15",
"@react-email/components": "^0.0.42",
"@react-email/render": "^1.1.2",
"@types/bcryptjs": "^2.4.6",
"axios": "^1.8.2",
"bcryptjs": "^2.4.3",
@@ -81,8 +82,8 @@
"https-proxy-agent": "^7.0.6",
"ioredis": "^5.4.1",
"kysely": "^0.27.4",
"langchain": "^0.3.15",
"langfuse-langchain": "3.30.3",
"langchain": "^0.3.27",
"langfuse-langchain": "3.37.4",
"lodash": "^4.17.21",
"lossless-json": "^4.0.2",
"next-auth": "^4.24.11",
@@ -90,7 +91,7 @@
"prisma-extension-kysely": "^2.1.0",
"uuid": "^9.0.1",
"winston": "^3.15.0",
"zod": "^3.23.8",
"zod": "^3.25.62",
"zod-to-json-schema": "^3.23.5"
},
"devDependencies": {
@@ -100,6 +101,7 @@
"@types/node": "^20.11.29",
"@types/nodemailer": "^6.4.16",
"@types/pg": "^8.11.10",
"@types/react": "18.2.79",
"@types/uuid": "^9.0.8",
"@typescript-eslint/parser": "^7.12.0",
"eslint": "^8.57.0",
+127 -7
View File
@@ -4,6 +4,11 @@ export type Generated<T> = T extends ColumnType<infer S, infer I, infer U>
: ColumnType<T, T | undefined, T>;
export type Timestamp = ColumnType<Date, Date | string, Date | string>;
export const ApiKeyScope = {
ORGANIZATION: "ORGANIZATION",
PROJECT: "PROJECT"
} as const;
export type ApiKeyScope = (typeof ApiKeyScope)[keyof typeof ApiKeyScope];
export const Role = {
OWNER: "OWNER",
ADMIN: "ADMIN",
@@ -80,12 +85,35 @@ export const JobExecutionStatus = {
CANCELLED: "CANCELLED"
} as const;
export type JobExecutionStatus = (typeof JobExecutionStatus)[keyof typeof JobExecutionStatus];
export const BlobStorageIntegrationFileType = {
JSON: "JSON",
CSV: "CSV",
JSONL: "JSONL"
} as const;
export type BlobStorageIntegrationFileType = (typeof BlobStorageIntegrationFileType)[keyof typeof BlobStorageIntegrationFileType];
export const BlobStorageIntegrationType = {
S3: "S3",
S3_COMPATIBLE: "S3_COMPATIBLE",
AZURE_BLOB_STORAGE: "AZURE_BLOB_STORAGE"
} as const;
export type BlobStorageIntegrationType = (typeof BlobStorageIntegrationType)[keyof typeof BlobStorageIntegrationType];
export const DashboardWidgetViews = {
TRACES: "TRACES",
OBSERVATIONS: "OBSERVATIONS",
SCORES_NUMERIC: "SCORES_NUMERIC",
SCORES_CATEGORICAL: "SCORES_CATEGORICAL"
} as const;
export type DashboardWidgetViews = (typeof DashboardWidgetViews)[keyof typeof DashboardWidgetViews];
export const DashboardWidgetChartType = {
LINE_TIME_SERIES: "LINE_TIME_SERIES",
BAR_TIME_SERIES: "BAR_TIME_SERIES",
HORIZONTAL_BAR: "HORIZONTAL_BAR",
VERTICAL_BAR: "VERTICAL_BAR",
PIE: "PIE",
NUMBER: "NUMBER",
HISTOGRAM: "HISTOGRAM"
} as const;
export type DashboardWidgetChartType = (typeof DashboardWidgetChartType)[keyof typeof DashboardWidgetChartType];
export type Account = {
id: string;
user_id: string;
@@ -137,7 +165,9 @@ export type ApiKey = {
display_secret_key: string;
last_used_at: Timestamp | null;
expires_at: Timestamp | null;
project_id: string;
project_id: string | null;
organization_id: string | null;
scope: Generated<ApiKeyScope>;
};
export type AuditLog = {
id: string;
@@ -199,8 +229,8 @@ export type BlobStorageIntegration = {
type: BlobStorageIntegrationType;
bucket_name: string;
prefix: string;
access_key_id: string;
secret_access_key: string;
access_key_id: string | null;
secret_access_key: string | null;
region: string;
endpoint: string | null;
force_path_style: boolean;
@@ -208,6 +238,7 @@ export type BlobStorageIntegration = {
last_sync_at: Timestamp | null;
enabled: boolean;
export_frequency: string;
file_type: Generated<BlobStorageIntegrationFileType>;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
};
@@ -227,6 +258,33 @@ export type CronJobs = {
job_started_at: Timestamp | null;
state: string | null;
};
export type Dashboard = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
created_by: string | null;
updated_by: string | null;
project_id: string | null;
name: string;
description: string;
definition: unknown;
};
export type DashboardWidget = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
created_by: string | null;
updated_by: string | null;
project_id: string | null;
name: string;
description: string;
view: DashboardWidgetViews;
dimensions: unknown;
metrics: unknown;
filters: unknown;
chart_type: DashboardWidgetChartType;
chart_config: unknown;
};
export type Dataset = {
id: string;
project_id: string;
@@ -269,17 +327,29 @@ export type DatasetRuns = {
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
};
export type EvalTemplate = {
export type DefaultLlmModel = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
llm_api_key_id: string;
provider: string;
adapter: string;
model: string;
model_params: unknown | null;
};
export type EvalTemplate = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string | null;
name: string;
version: number;
prompt: string;
model: string;
provider: string;
model_params: unknown;
partner: string | null;
model: string | null;
provider: string | null;
model_params: unknown | null;
vars: Generated<string[]>;
output_schema: unknown;
};
@@ -305,6 +375,7 @@ export type JobExecution = {
updated_at: Generated<Timestamp>;
project_id: string;
job_configuration_id: string;
job_template_id: string | null;
status: JobExecutionStatus;
start_time: Timestamp | null;
end_time: Timestamp | null;
@@ -401,6 +472,24 @@ export type LlmApiKeys = {
config: unknown | null;
project_id: string;
};
export type LlmSchema = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
name: string;
description: string;
schema: unknown;
};
export type LlmTool = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
name: string;
description: string;
parameters: unknown;
};
export type Media = {
id: string;
sha_256_hash: string;
@@ -457,6 +546,7 @@ export type Organization = {
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
cloud_config: unknown | null;
metadata: unknown | null;
};
export type OrganizationMembership = {
id: string;
@@ -490,6 +580,7 @@ export type Project = {
deleted_at: Timestamp | null;
name: string;
retention_days: number | null;
metadata: unknown | null;
};
export type ProjectMembership = {
org_membership_id: string;
@@ -525,6 +616,13 @@ export type PromptDependency = {
child_label: string | null;
child_version: number | null;
};
export type PromptProtectedLabels = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
label: string;
};
export type ScoreConfig = {
id: string;
created_at: Generated<Timestamp>;
@@ -551,6 +649,21 @@ export type SsoConfig = {
auth_provider: string;
auth_config: unknown | null;
};
export type TableViewPreset = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
name: string;
table_name: string;
created_by: string | null;
updated_by: string | null;
filters: unknown;
column_order: unknown;
column_visibility: unknown;
search_query: string | null;
order_by: unknown | null;
};
export type TraceMedia = {
id: string;
project_id: string;
@@ -598,14 +711,19 @@ export type DB = {
blob_storage_integrations: BlobStorageIntegration;
comments: Comment;
cron_jobs: CronJobs;
dashboard_widgets: DashboardWidget;
dashboards: Dashboard;
dataset_items: DatasetItem;
dataset_run_items: DatasetRunItems;
dataset_runs: DatasetRuns;
datasets: Dataset;
default_llm_models: DefaultLlmModel;
eval_templates: EvalTemplate;
job_configurations: JobConfiguration;
job_executions: JobExecution;
llm_api_keys: LlmApiKeys;
llm_schemas: LlmSchema;
llm_tools: LlmTool;
media: Media;
membership_invitations: MembershipInvitation;
models: Model;
@@ -618,11 +736,13 @@ export type DB = {
project_memberships: ProjectMembership;
projects: Project;
prompt_dependencies: PromptDependency;
prompt_protected_labels: PromptProtectedLabels;
prompts: Prompt;
score_configs: ScoreConfig;
scores: LegacyPrismaScore;
Session: Session;
sso_configs: SsoConfig;
table_view_presets: TableViewPreset;
trace_media: TraceMedia;
trace_sessions: TraceSession;
traces: LegacyPrismaTrace;
@@ -0,0 +1,37 @@
-- CreateTable
CREATE TABLE "llm_schemas" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"project_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"schema" JSON NOT NULL,
CONSTRAINT "llm_schemas_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "llm_tools" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"project_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"parameters" JSON NOT NULL,
CONSTRAINT "llm_tools_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "llm_schemas_project_id_name_key" ON "llm_schemas"("project_id", "name");
-- CreateIndex
CREATE UNIQUE INDEX "llm_tools_project_id_name_key" ON "llm_tools"("project_id", "name");
-- AddForeignKey
ALTER TABLE "llm_schemas" ADD CONSTRAINT "llm_schemas_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "llm_tools" ADD CONSTRAINT "llm_tools_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,16 @@
-- CreateTable
CREATE TABLE "prompt_protected_labels" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"project_id" TEXT NOT NULL,
"label" TEXT NOT NULL,
CONSTRAINT "prompt_protected_labels_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "prompt_protected_labels_project_id_label_key" ON "prompt_protected_labels"("project_id", "label");
-- AddForeignKey
ALTER TABLE "prompt_protected_labels" ADD CONSTRAINT "prompt_protected_labels_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,5 @@
-- CreateEnum
CREATE TYPE "BlobStorageIntegrationFileType" AS ENUM ('JSON', 'CSV', 'JSONL');
-- AlterTable
ALTER TABLE "blob_storage_integrations" ADD COLUMN "file_type" "BlobStorageIntegrationFileType" NOT NULL DEFAULT 'CSV';
@@ -0,0 +1,17 @@
-- Delete duplicate membership invitations, keeping only the newest one for each email and org_id combination
WITH ranked_invitations AS (
SELECT
id,
email,
org_id,
ROW_NUMBER() OVER (PARTITION BY email, org_id ORDER BY updated_at DESC) as rn
FROM membership_invitations
)
DELETE FROM membership_invitations
WHERE id IN (
SELECT id FROM ranked_invitations WHERE rn > 1
);
-- CreateIndex
CREATE UNIQUE INDEX "membership_invitations_email_org_id_key" ON "membership_invitations"("email", "org_id");
@@ -0,0 +1,58 @@
-- CreateEnum
CREATE TYPE "DashboardWidgetViews" AS ENUM ('TRACES', 'OBSERVATIONS', 'SCORES_NUMERIC', 'SCORES_CATEGORICAL');
-- CreateEnum
CREATE TYPE "DashboardWidgetChartType" AS ENUM ('LINE_TIME_SERIES', 'BAR_TIME_SERIES', 'HORIZONTAL_BAR', 'VERTICAL_BAR', 'PIE');
-- CreateTable
CREATE TABLE "dashboards" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" TEXT,
"updated_by" TEXT,
"project_id" TEXT,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"definition" JSONB NOT NULL,
CONSTRAINT "dashboards_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "dashboard_widgets" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" TEXT,
"updated_by" TEXT,
"project_id" TEXT,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"view" "DashboardWidgetViews" NOT NULL,
"dimensions" JSONB NOT NULL,
"metrics" JSONB NOT NULL,
"filters" JSONB NOT NULL,
"chart_type" "DashboardWidgetChartType" NOT NULL,
"chart_config" JSONB NOT NULL,
CONSTRAINT "dashboard_widgets_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_updated_by_fkey" FOREIGN KEY ("updated_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboard_widgets" ADD CONSTRAINT "dashboard_widgets_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboard_widgets" ADD CONSTRAINT "dashboard_widgets_updated_by_fkey" FOREIGN KEY ("updated_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboard_widgets" ADD CONSTRAINT "dashboard_widgets_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,13 @@
-- CreateEnum
CREATE TYPE "ApiKeyScope" AS ENUM ('ORGANIZATION', 'PROJECT');
-- AlterTable
ALTER TABLE "api_keys" ADD COLUMN "organization_id" TEXT,
ADD COLUMN "scope" "ApiKeyScope" NOT NULL DEFAULT 'PROJECT',
ALTER COLUMN "project_id" DROP NOT NULL;
-- CreateIndex
CREATE INDEX "api_keys_organization_id_idx" ON "api_keys"("organization_id");
-- AddForeignKey
ALTER TABLE "api_keys" ADD CONSTRAINT "api_keys_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "organizations" ADD COLUMN "metadata" JSONB;
-- AlterTable
ALTER TABLE "projects" ADD COLUMN "metadata" JSONB;
@@ -0,0 +1,2 @@
INSERT INTO background_migrations (id, name, script, args)
VALUES ('c19b91d9-f9a2-468b-8209-95578f970c5b', '20250417_1737_migrate_event_log_to_blob_storage', 'migrateEventLogToBlobStorageRefTable', '{}');
@@ -0,0 +1,30 @@
-- CreateTable
CREATE TABLE "table_view_presets" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"project_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"table_name" TEXT NOT NULL,
"created_by" TEXT,
"updated_by" TEXT,
"filters" JSONB NOT NULL,
"column_order" JSONB NOT NULL,
"column_visibility" JSONB NOT NULL,
"search_query" TEXT,
"order_by" JSONB,
CONSTRAINT "table_view_presets_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "table_view_presets_project_id_table_name_name_key" ON "table_view_presets"("project_id", "table_name", "name");
-- AddForeignKey
ALTER TABLE "table_view_presets" ADD CONSTRAINT "table_view_presets_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "table_view_presets" ADD CONSTRAINT "table_view_presets_updated_by_fkey" FOREIGN KEY ("updated_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "table_view_presets" ADD CONSTRAINT "table_view_presets_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,2 @@
-- CreateIndex
CREATE INDEX CONCURRENTLY IF NOT EXISTS "trace_media_project_id_media_id_idx" ON "trace_media"("project_id", "media_id");
@@ -0,0 +1,2 @@
-- CreateIndex
CREATE INDEX CONCURRENTLY IF NOT EXISTS "observation_media_project_id_media_id_idx" ON "observation_media"("project_id", "media_id");
@@ -0,0 +1,3 @@
-- Index cannot be created concurrently in a transaction, so we need to create it separately
-- Prerequisite for migration 20250518075613_media_relax_id_uniqueness_to_project_only
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS "media_project_id_id_key" ON "media"("project_id", "id");
@@ -0,0 +1,21 @@
/*
Warnings:
- The primary key for the `media` table will be changed. If it partially fails, the table could be left without primary key constraint.
- A unique constraint covering the columns `[project_id,id]` on the table `media` will be added. If there are existing duplicate values, this will fail.
*/
-- DropForeignKey
ALTER TABLE "observation_media" DROP CONSTRAINT "observation_media_media_id_fkey";
-- DropForeignKey
ALTER TABLE "trace_media" DROP CONSTRAINT "trace_media_media_id_fkey";
-- AlterTable
ALTER TABLE "media" DROP CONSTRAINT "media_pkey";
-- AddForeignKey
ALTER TABLE "trace_media" ADD CONSTRAINT "trace_media_media_id_project_id_fkey" FOREIGN KEY ("media_id", "project_id") REFERENCES "media"("id", "project_id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "observation_media" ADD CONSTRAINT "observation_media_media_id_project_id_fkey" FOREIGN KEY ("media_id", "project_id") REFERENCES "media"("id", "project_id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,33 @@
/* Triple y and y_size in dashboards.definition->'widgets' */
WITH updated AS (
SELECT
id,
CASE
WHEN jsonb_array_length(definition->'widgets') = 0 THEN definition
ELSE jsonb_set(
definition, -- original JSON
'{widgets}', -- path to replace
(
SELECT jsonb_agg( -- rebuild widgets array
/* 1) y * 3 2) y_size * 3 */
jsonb_set(
jsonb_set(widget, '{y}',
to_jsonb( ((widget->>'y')::int * 3) ), /* y */
true
),
'{y_size}',
to_jsonb( ((widget->>'y_size')::int * 3) ),/* y_size */
true
)
)
FROM jsonb_array_elements(definition->'widgets') AS widget
),
true -- create path if absent
)
END AS new_def
FROM dashboards
)
UPDATE dashboards d
SET definition = u.new_def
FROM updated u
WHERE d.id = u.id;

Some files were not shown because too many files have changed in this diff Show More