feat(api): update API spec from langfuse/langfuse 6191e50#1736
feat(api): update API spec from langfuse/langfuse 6191e50#1736langfuse-bot wants to merge 1 commit into
Conversation
|
@claude review |
There was a problem hiding this comment.
Auto-generated Fern SDK update mirroring the API spec — new dashboard_widgets unstable client, additive enum values (PARQUET file type, RUNNING sync status), and docstring clarifications.
Extended reasoning...
Overview
This PR is a fully auto-generated Fern SDK regeneration from the upstream API definition (every touched file carries the "auto-generated by Fern" header). Changes are purely additive: a new BlobStorageIntegrationFileTypeResponse enum that adds PARQUET, a new RUNNING value on BlobStorageSyncStatus, docstring updates noting the 27-hour exportStartDate tolerance, and a brand-new unstable.dashboard_widgets subclient with its associated request/response types.
Security risks
None. These are typed HTTP client bindings with no auth, crypto, or input-handling logic. The generator emits standard httpx request/response code identical in shape to the rest of the SDK.
Level of scrutiny
Low. This is a mechanical codegen update touching only langfuse/api/ (auto-generated surface), with no changes to hand-written SDK code, tracing, or ingestion. Additive enum members are backwards-compatible for consumers, and the new dashboard-widgets client is opt-in under the unstable namespace.
Other factors
The bug hunting system found no issues. The response-side enum split (BlobStorageIntegrationFileTypeResponse distinct from the request BlobStorageIntegrationFileType) is deliberate — the docstring explicitly notes PARQUET is UI-settable but not API-settable, which is the exact reason to separate response from request types.
Greptile Summary
This is an automated API spec sync from the upstream
langfuse/langfuserepository (commit6191e50), generated via Fern. It adds a newdashboard_widgetssub-client under theunstablenamespace, introduces aBlobStorageIntegrationFileTypeResponseenum that exposes thePARQUETfile type (which can be set via the UI but not yet via the API), and extendsBlobStorageSyncStatuswith a newRUNNINGvalue.unstable/dashboard_widgetsmodule: AddsRawDashboardWidgetsClient/AsyncRawDashboardWidgetsClientand their thin-wrapper counterparts, exposing a singlePOST /api/public/unstable/dashboard-widgetsendpoint; nine supporting type models are also added.BlobStorageIntegrationFileTypeResponse: New response-only enum separating the read-onlyPARQUETvalue from the writableBlobStorageIntegrationFileType, andBlobStorageIntegrationResponse.file_typeis updated to use it.BlobStorageSyncStatus.RUNNING: New enum value added with doc-comment update;export_start_dategains a constraint note about future-date validation.Confidence Score: 4/5
The changes are auto-generated from the upstream API spec and are purely additive — new module, new enum values, doc updates — with no existing behaviour removed or broken.
All findings are style/quality observations in Fern-generated code: lazy imports that violate the project's import rule, and unreachable duplicate error handlers inherited from the existing generation pattern. The BlobStorageIntegrationResponse.file_type type change from BlobStorageIntegrationFileType to BlobStorageIntegrationFileTypeResponse is a type-level change for a response model, unlikely to affect callers in practice.
langfuse/api/unstable/dashboard_widgets/raw_client.py — contains the duplicate error-handler blocks; langfuse/api/unstable/client.py — contains the lazy sub-module imports inside property bodies
Sequence Diagram
%%{init: {'theme': 'neutral'}}%% sequenceDiagram participant Caller participant DashboardWidgetsClient participant RawDashboardWidgetsClient participant LangfuseAPI as Langfuse API Caller->>DashboardWidgetsClient: create(name, view, dimensions, metrics, filters, chart_type, chart_config) DashboardWidgetsClient->>RawDashboardWidgetsClient: create(...) RawDashboardWidgetsClient->>LangfuseAPI: POST /api/public/unstable/dashboard-widgets LangfuseAPI-->>RawDashboardWidgetsClient: 200 DashboardWidget JSON alt 400 Bad Request LangfuseAPI-->>RawDashboardWidgetsClient: BadRequestError (PublicApiError) else 401 Unauthorized LangfuseAPI-->>RawDashboardWidgetsClient: UnauthorizedError else 403 Forbidden LangfuseAPI-->>RawDashboardWidgetsClient: AccessDeniedError else 429 Rate Limited LangfuseAPI-->>RawDashboardWidgetsClient: TooManyRequestsError else 500 Internal Server Error LangfuseAPI-->>RawDashboardWidgetsClient: InternalServerError end RawDashboardWidgetsClient-->>DashboardWidgetsClient: HttpResponse[DashboardWidget] DashboardWidgetsClient-->>Caller: DashboardWidget%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% sequenceDiagram participant Caller participant DashboardWidgetsClient participant RawDashboardWidgetsClient participant LangfuseAPI as Langfuse API Caller->>DashboardWidgetsClient: create(name, view, dimensions, metrics, filters, chart_type, chart_config) DashboardWidgetsClient->>RawDashboardWidgetsClient: create(...) RawDashboardWidgetsClient->>LangfuseAPI: POST /api/public/unstable/dashboard-widgets LangfuseAPI-->>RawDashboardWidgetsClient: 200 DashboardWidget JSON alt 400 Bad Request LangfuseAPI-->>RawDashboardWidgetsClient: BadRequestError (PublicApiError) else 401 Unauthorized LangfuseAPI-->>RawDashboardWidgetsClient: UnauthorizedError else 403 Forbidden LangfuseAPI-->>RawDashboardWidgetsClient: AccessDeniedError else 429 Rate Limited LangfuseAPI-->>RawDashboardWidgetsClient: TooManyRequestsError else 500 Internal Server Error LangfuseAPI-->>RawDashboardWidgetsClient: InternalServerError end RawDashboardWidgetsClient-->>DashboardWidgetsClient: HttpResponse[DashboardWidget] DashboardWidgetsClient-->>Caller: DashboardWidgetPrompt To Fix All With AI
Reviews (1): Last reviewed commit: "feat(api): update API spec from langfuse..." | Re-trigger Greptile
Context used:
Learned From
langfuse/langfuse-python#1387