Repository navigation
feat(api): update API spec from langfuse/langfuse ccfda83 #2122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # This file was auto-generated by Fern from our API Definition. | ||
|
|
||
| import typing | ||
|
|
||
| from ...core import enum | ||
|
|
||
| T_Result = typing.TypeVar("T_Result") | ||
|
|
||
|
|
||
| class BlobStorageIntegrationAuthType(enum.StrEnum): | ||
| """ | ||
| How Langfuse authenticates to the bucket. | ||
| - `ACCESS_KEYS`: stored access key ID and secret access key. | ||
| - `ROLE_ARN`: Langfuse assumes an IAM role in your AWS account (Amazon S3 only). Langfuse's cross-account role (`crossAccountRoleArn`) assumes your role with the integration's `externalId`, using a session limited to writing under the configured prefix. Requires an Enterprise plan and a deployment that configures a cross-account role; `crossAccountRoleArn` is not null when both apply. | ||
| """ | ||
|
|
||
| ACCESS_KEYS = "ACCESS_KEYS" | ||
| ROLE_ARN = "ROLE_ARN" | ||
|
|
||
| def visit( | ||
| self, | ||
| access_keys: typing.Callable[[], T_Result], | ||
| role_arn: typing.Callable[[], T_Result], | ||
| ) -> T_Result: | ||
| if self is BlobStorageIntegrationAuthType.ACCESS_KEYS: | ||
| return access_keys() | ||
| if self is BlobStorageIntegrationAuthType.ROLE_ARN: | ||
| return role_arn() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -11,6 +11,7 @@ | |
| from .blob_storage_export_frequency import BlobStorageExportFrequency | ||
| from .blob_storage_export_mode import BlobStorageExportMode | ||
| from .blob_storage_export_source import BlobStorageExportSource | ||
| from .blob_storage_integration_auth_type import BlobStorageIntegrationAuthType | ||
| from .blob_storage_integration_file_type_response import ( | ||
| BlobStorageIntegrationFileTypeResponse, | ||
| ) | ||
|
|
@@ -24,9 +25,33 @@ class BlobStorageIntegrationResponse(UniversalBaseModel): | |
| bucket_name: typing_extensions.Annotated[str, FieldMetadata(alias="bucketName")] | ||
| endpoint: typing.Optional[str] = None | ||
| region: str | ||
| auth_type: typing_extensions.Annotated[ | ||
| BlobStorageIntegrationAuthType, FieldMetadata(alias="authType") | ||
| ] | ||
|
Comment on lines
+28
to
+30
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 SDK users on a Langfuse server older than this spec get a pydantic ValidationError when listing or upserting blob storage integrations. The new response field Why this was flaggedThis triggers when the SDK runs against a self-hosted Langfuse deployment that has not yet picked up ccfda83, so its JSON has no Verification: Trigger: the SDK talks to a Langfuse server whose blob-storage integration responses predate IAM role auth and so carry no |
||
| access_key_id: typing_extensions.Annotated[ | ||
| typing.Optional[str], FieldMetadata(alias="accessKeyId") | ||
| ] = None | ||
| role_arn: typing_extensions.Annotated[ | ||
| typing.Optional[str], FieldMetadata(alias="roleArn") | ||
| ] = pydantic.Field(default=None) | ||
| """ | ||
| IAM role Langfuse assumes. May be set while `authType` is `ACCESS_KEYS` if the integration used `ROLE_ARN` before. | ||
| """ | ||
|
|
||
| external_id: typing_extensions.Annotated[ | ||
| typing.Optional[str], FieldMetadata(alias="externalId") | ||
| ] = pydantic.Field(default=None) | ||
| """ | ||
| External ID Langfuse passes when assuming `roleArn`. Require it in the role's trust policy with an `sts:ExternalId` condition. Null until the integration first uses `ROLE_ARN`. | ||
| """ | ||
|
|
||
| cross_account_role_arn: typing_extensions.Annotated[ | ||
| typing.Optional[str], FieldMetadata(alias="crossAccountRoleArn") | ||
| ] = pydantic.Field(default=None) | ||
| """ | ||
| Langfuse role that must be trusted by `roleArn`. Null when the deployment does not support IAM role auth or the organization is not on an Enterprise plan. | ||
| """ | ||
|
|
||
| prefix: str | ||
| export_frequency: typing_extensions.Annotated[ | ||
| BlobStorageExportFrequency, FieldMetadata(alias="exportFrequency") | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If a self-hosted server predates IAM role authentication and does not return
authType, the newly requiredBlobStorageIntegrationResponse.auth_typemakes listing integrations or reading an update's response raiseValidationError. These calls worked before this change, even for callers using only access keys. Give the field a backward-compatible default, such asACCESS_KEYS, so upgrading the SDK does not require upgrading the server.Prompt To Fix With AI