From 7229b1a2ff71d62eea1551ebd0afb6e5c4e6918f Mon Sep 17 00:00:00 2001 From: Nimar Date: Wed, 17 Sep 2025 16:07:07 +0200 Subject: [PATCH 1/5] =?UTF-8?q?fix(message-placeholders):=20use=20plain=20?= =?UTF-8?q?text=20langchain=20format=20for=20placeh=E2=80=A6=20(#616)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/prompt/promptClients.ts | 13 ++-- tests/e2e/prompts.e2e.test.ts | 68 +++++++++++---------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/packages/client/src/prompt/promptClients.ts b/packages/client/src/prompt/promptClients.ts index 66e96564..2388377c 100644 --- a/packages/client/src/prompt/promptClients.ts +++ b/packages/client/src/prompt/promptClients.ts @@ -452,11 +452,14 @@ export class ChatPromptClient extends BasePromptClient { JSON.stringify(placeholderValue), ); } else { - // Convert unresolved placeholder to Langchain MessagesPlaceholder - messagesWithPlaceholdersReplaced.push({ - variableName: item.name, - optional: false, - }); + // Convert unresolved placeholder to Langchain MessagesPlaceholder format + // see: https://js.langchain.com/docs/concepts/prompt_templates/#messagesplaceholder + // we convert it to the format without using the class explicitly. Therefore, we + // don't have to import langchain as a dependency. + messagesWithPlaceholdersReplaced.push([ + "placeholder", + `{${item.name}}`, + ]); } } else if ( "role" in item && diff --git a/tests/e2e/prompts.e2e.test.ts b/tests/e2e/prompts.e2e.test.ts index d9019f78..d54d2b67 100644 --- a/tests/e2e/prompts.e2e.test.ts +++ b/tests/e2e/prompts.e2e.test.ts @@ -1099,20 +1099,12 @@ describe("Langfuse Prompts E2E", () => { role: "system", content: "You are a {role} assistant", // Langchain format }); - expect(langchainPrompt[1]).toEqual({ - variableName: "examples", - optional: false, - }); + expect(langchainPrompt[1]).toEqual(["placeholder", "{examples}"]); - // Verify compatibility with real Langchain MessagesPlaceholder - const realMessagesPlaceholder = new MessagesPlaceholder("examples"); + // Verify it's in the tuple format that LangChain supports const placeholderItem = langchainPrompt[1] as any; - expect(placeholderItem.variableName).toBe( - realMessagesPlaceholder.variableName, - ); - expect(placeholderItem.optional).toBe( - realMessagesPlaceholder.optional, - ); + expect(placeholderItem[0]).toBe("placeholder"); + expect(placeholderItem[1]).toBe("{examples}"); expect(langchainPrompt[2]).toEqual({ role: "user", content: "Help me with {task}", // Langchain format @@ -1184,10 +1176,10 @@ describe("Langfuse Prompts E2E", () => { role: "user", content: "Help me with {task}", }); - expect(langchainPrompt[3]).toEqual({ - variableName: "unresolved_history", - optional: false, - }); + expect(langchainPrompt[3]).toEqual([ + "placeholder", + "{unresolved_history}", + ]); }); it("should handle non-standard placeholder values by stringifying them", () => { @@ -1226,22 +1218,9 @@ describe("Langfuse Prompts E2E", () => { const client = new ChatPromptClient(mockPrompt); const langchainMessages = client.getLangchainPrompt(); - const messages: any[] = []; - for (const msg of langchainMessages) { - if ("role" in msg && "content" in msg) { - messages.push([msg.role, msg.content]); - } else if ("variableName" in msg) { - // Create real Langchain MessagesPlaceholder - messages.push( - new MessagesPlaceholder({ - variableName: msg.variableName, - optional: msg.optional, - }), - ); - } - } - - const langchainPrompt = ChatPromptTemplate.fromMessages(messages); + // Now we can pass the messages directly since placeholders are in LangChain format + const langchainPrompt = + ChatPromptTemplate.fromMessages(langchainMessages); // Test that the prompt compiles correctly with Langchain expect(langchainPrompt).toBeDefined(); @@ -1266,6 +1245,31 @@ describe("Langfuse Prompts E2E", () => { expect(formatted[3].content).toBe("Help me with coding"); }); + it("should work directly with ChatPromptTemplate.fromMessages() for unresolved placeholders", async () => { + const mockPrompt = createMockPrompt([ + { role: "system", content: "You are a helpful assistant" }, + { type: ChatMessageType.Placeholder, name: "msg_history" }, + { role: "user", content: "Help me with this" }, + ]); + + const client = new ChatPromptClient(mockPrompt); + + const langchainPrompt = ChatPromptTemplate.fromMessages( + client.getLangchainPrompt(), + ); + + expect(langchainPrompt).toBeDefined(); + // Should be able to use it with placeholders + const formatted = await langchainPrompt.formatMessages({ + msg_history: [ + { role: "user", content: "Previous question" }, + { role: "assistant", content: "Previous answer" }, + ], + }); + + expect(formatted).toHaveLength(4); // system + 2 history + user + }); + it("should return prompt with placeholders unchanged when no fill-ins provided", () => { const mockPrompt = createMockPrompt([ { role: "system", content: "You are a {{role}} assistant" }, From f23386cfdb0df9ce88d5cd412c2c0ae3c3a2b7df Mon Sep 17 00:00:00 2001 From: Nimar Date: Thu, 18 Sep 2025 15:24:49 +0200 Subject: [PATCH 2/5] chore: add test for observation error level through langchain integration (#637) --- tests/e2e/langchain.e3e.test.ts | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/tests/e2e/langchain.e3e.test.ts b/tests/e2e/langchain.e3e.test.ts index 84985418..f19d1106 100644 --- a/tests/e2e/langchain.e3e.test.ts +++ b/tests/e2e/langchain.e3e.test.ts @@ -685,4 +685,77 @@ describe("Langchain integration E2E tests", () => { ); expect(graphObservations.length).toBeGreaterThan(0); }); + + it("should set observation level to ERROR when LangChain operation fails", async () => { + const testConfig = { + runName: "Test error handling:" + nanoid(), + sessionId: "my-session", + userId: "my-user", + tags: ["error-test", "testEnv"], + traceMetadata: { isTrace: true, expectsError: true }, + version: "1.2.3", + query: "Hello world", + maxTokens: 50, + }; + + const handler = new CallbackHandler({ + sessionId: testConfig.sessionId, + userId: testConfig.userId, + tags: testConfig.tags, + version: testConfig.version, + traceMetadata: testConfig.traceMetadata, + }); + + // Use an invalid model name to trigger an error + const llm = new ChatOpenAI({ + model: "invalid-model-name-that-does-not-exist", + maxTokens: testConfig.maxTokens, + }); + + const prompt = ChatPromptTemplate.fromTemplate("{query}"); + const chain = prompt.pipe(llm); + + // Execute chain and expect it to throw an error + let caughtError: Error | null = null; + try { + await chain.invoke( + { query: testConfig.query }, + { callbacks: [handler], runName: testConfig.runName }, + ); + } catch (error) { + caughtError = error as Error; + } + + // Verify an error was thrown + expect(caughtError).toBeDefined(); + expect(caughtError?.message).toContain("model"); + + await testEnv.spanProcessor.forceFlush(); + await waitForServerIngestion(1_000); + + const traceId = handler.last_trace_id; + expect(traceId).toBeDefined(); + + const trace = await langfuseClient.api.trace.get(traceId!); + + expect(trace).toMatchObject({ + sessionId: testConfig.sessionId, + userId: testConfig.userId, + name: testConfig.runName, + tags: testConfig.tags, + version: testConfig.version, + }); + + // Find the generation observation that should have failed + const errorObservation = trace.observations.find( + (o) => o.name === "ChatOpenAI" && o.type === "GENERATION", + ); + expect(errorObservation).toBeDefined(); + + // Verify the observation level is set to ERROR + expect(errorObservation!.level).toBe("ERROR"); + + expect(errorObservation!.statusMessage).toBeDefined(); + expect(errorObservation!.statusMessage).toContain("model"); + }); }); From 2aff295209db2906e9c3935f7e72563311bbfe4f Mon Sep 17 00:00:00 2001 From: langfuse-bot Date: Thu, 18 Sep 2025 15:54:44 +0200 Subject: [PATCH 3/5] feat(api): update API spec from langfuse/langfuse 0b68c41 (#640) --- packages/core/src/api/Client.ts | 18 +- .../annotationQueues/client/Client.ts | 576 +++++++++++++++--- .../GetAnnotationQueueItemsRequest.ts | 12 +- .../requests/GetAnnotationQueuesRequest.ts | 8 +- .../types/AnnotationQueueAssignmentRequest.ts | 7 + ...CreateAnnotationQueueAssignmentResponse.ts | 9 + .../types/CreateAnnotationQueueRequest.ts | 9 + ...DeleteAnnotationQueueAssignmentResponse.ts | 7 + .../resources/annotationQueues/types/index.ts | 4 + .../blobStorageIntegrations/client/Client.ts | 457 ++++++++++++++ .../blobStorageIntegrations/client/index.ts | 1 + .../blobStorageIntegrations/index.ts | 2 + .../types/BlobStorageExportFrequency.ts | 10 + .../types/BlobStorageExportMode.ts | 13 + .../BlobStorageIntegrationDeletionResponse.ts | 7 + .../types/BlobStorageIntegrationFileType.ts | 10 + .../types/BlobStorageIntegrationResponse.ts | 26 + .../types/BlobStorageIntegrationType.ts | 13 + .../types/BlobStorageIntegrationsResponse.ts | 9 + .../CreateBlobStorageIntegrationRequest.ts | 32 + .../blobStorageIntegrations/types/index.ts | 8 + .../api/resources/comments/client/Client.ts | 82 ++- .../client/requests/GetCommentsRequest.ts | 20 +- .../resources/datasetItems/client/Client.ts | 108 ++-- .../client/requests/GetDatasetItemsRequest.ts | 8 +- .../datasetRunItems/client/Client.ts | 56 +- .../requests/ListDatasetRunItemsRequest.ts | 8 +- .../api/resources/datasets/client/Client.ts | 160 +++-- .../client/requests/GetDatasetRunsRequest.ts | 8 +- .../client/requests/GetDatasetsRequest.ts | 8 +- .../api/api/resources/health/client/Client.ts | 30 +- packages/core/src/api/api/resources/index.ts | 5 + .../api/resources/ingestion/client/Client.ts | 37 +- .../ingestion/types/ObservationType.ts | 19 +- .../resources/llmConnections/client/Client.ts | 341 +++++++++++ .../resources/llmConnections/client/index.ts | 2 + .../requests/GetLlmConnectionsRequest.ts | 14 + .../llmConnections/client/requests/index.ts | 1 + .../api/api/resources/llmConnections/index.ts | 2 + .../llmConnections/types/LlmAdapter.ts | 19 + .../llmConnections/types/LlmConnection.ts | 26 + .../types/PaginatedLlmConnections.ts | 10 + .../types/UpsertLlmConnectionRequest.ts | 25 + .../resources/llmConnections/types/index.ts | 4 + .../api/api/resources/media/client/Client.ts | 82 ++- .../api/resources/metrics/client/Client.ts | 30 +- .../api/api/resources/models/client/Client.ts | 108 ++-- .../client/requests/GetModelsRequest.ts | 8 +- .../resources/observations/client/Client.ts | 56 +- .../client/requests/GetObservationsRequest.ts | 28 +- .../resources/organizations/client/Client.ts | 389 ++++++++++-- .../types/DeleteMembershipRequest.ts | 7 + .../types/MembershipDeletionResponse.ts | 8 + .../resources/organizations/types/index.ts | 2 + .../api/resources/projects/client/Client.ts | 186 +++--- .../resources/promptVersion/client/Client.ts | 30 +- .../api/resources/prompts/client/Client.ts | 82 ++- .../client/requests/GetPromptRequest.ts | 8 +- .../client/requests/ListPromptsMetaRequest.ts | 16 +- .../api/api/resources/scim/client/Client.ts | 186 +++--- .../scim/client/requests/ListUsersRequest.ts | 12 +- .../api/api/resources/score/client/Client.ts | 56 +- .../resources/scoreConfigs/client/Client.ts | 82 ++- .../client/requests/GetScoreConfigsRequest.ts | 8 +- .../api/resources/scoreV2/client/Client.ts | 61 +- .../client/requests/GetScoresRequest.ts | 62 +- .../api/resources/sessions/client/Client.ts | 56 +- .../client/requests/GetSessionsRequest.ts | 20 +- .../api/api/resources/trace/client/Client.ts | 108 ++-- .../trace/client/requests/GetTracesRequest.ts | 40 +- .../core/src/api/core/auth/AuthProvider.ts | 5 + .../core/src/api/core/auth/AuthRequest.ts | 9 + packages/core/src/api/core/auth/index.ts | 2 + packages/core/src/api/core/fetcher/Fetcher.ts | 17 +- packages/core/src/api/core/fetcher/index.ts | 10 +- .../api/core/fetcher/requestWithRetries.ts | 66 +- packages/core/src/api/core/headers.ts | 26 +- 77 files changed, 3115 insertions(+), 982 deletions(-) create mode 100644 packages/core/src/api/api/resources/annotationQueues/types/AnnotationQueueAssignmentRequest.ts create mode 100644 packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueAssignmentResponse.ts create mode 100644 packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueRequest.ts create mode 100644 packages/core/src/api/api/resources/annotationQueues/types/DeleteAnnotationQueueAssignmentResponse.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/client/Client.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/client/index.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/index.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportFrequency.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportMode.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationDeletionResponse.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationFileType.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationResponse.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationType.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationsResponse.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/CreateBlobStorageIntegrationRequest.ts create mode 100644 packages/core/src/api/api/resources/blobStorageIntegrations/types/index.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/client/Client.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/client/index.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/client/requests/GetLlmConnectionsRequest.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/client/requests/index.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/index.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/types/LlmAdapter.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/types/LlmConnection.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/types/PaginatedLlmConnections.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/types/UpsertLlmConnectionRequest.ts create mode 100644 packages/core/src/api/api/resources/llmConnections/types/index.ts create mode 100644 packages/core/src/api/api/resources/organizations/types/DeleteMembershipRequest.ts create mode 100644 packages/core/src/api/api/resources/organizations/types/MembershipDeletionResponse.ts create mode 100644 packages/core/src/api/core/auth/AuthProvider.ts create mode 100644 packages/core/src/api/core/auth/AuthRequest.ts diff --git a/packages/core/src/api/Client.ts b/packages/core/src/api/Client.ts index 6c523222..8d94e158 100644 --- a/packages/core/src/api/Client.ts +++ b/packages/core/src/api/Client.ts @@ -5,12 +5,14 @@ import * as core from "./core/index.js"; import { mergeHeaders } from "./core/headers.js"; import { AnnotationQueues } from "./api/resources/annotationQueues/client/Client.js"; +import { BlobStorageIntegrations } from "./api/resources/blobStorageIntegrations/client/Client.js"; import { Comments } from "./api/resources/comments/client/Client.js"; import { DatasetItems } from "./api/resources/datasetItems/client/Client.js"; import { DatasetRunItems } from "./api/resources/datasetRunItems/client/Client.js"; import { Datasets } from "./api/resources/datasets/client/Client.js"; import { Health } from "./api/resources/health/client/Client.js"; import { Ingestion } from "./api/resources/ingestion/client/Client.js"; +import { LlmConnections } from "./api/resources/llmConnections/client/Client.js"; import { Media } from "./api/resources/media/client/Client.js"; import { Metrics } from "./api/resources/metrics/client/Client.js"; import { Models } from "./api/resources/models/client/Client.js"; @@ -42,7 +44,7 @@ export declare namespace LangfuseAPIClient { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -64,7 +66,7 @@ export declare namespace LangfuseAPIClient { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -72,12 +74,14 @@ export declare namespace LangfuseAPIClient { export class LangfuseAPIClient { protected readonly _options: LangfuseAPIClient.Options; protected _annotationQueues: AnnotationQueues | undefined; + protected _blobStorageIntegrations: BlobStorageIntegrations | undefined; protected _comments: Comments | undefined; protected _datasetItems: DatasetItems | undefined; protected _datasetRunItems: DatasetRunItems | undefined; protected _datasets: Datasets | undefined; protected _health: Health | undefined; protected _ingestion: Ingestion | undefined; + protected _llmConnections: LlmConnections | undefined; protected _media: Media | undefined; protected _metrics: Metrics | undefined; protected _models: Models | undefined; @@ -111,6 +115,12 @@ export class LangfuseAPIClient { return (this._annotationQueues ??= new AnnotationQueues(this._options)); } + public get blobStorageIntegrations(): BlobStorageIntegrations { + return (this._blobStorageIntegrations ??= new BlobStorageIntegrations( + this._options, + )); + } + public get comments(): Comments { return (this._comments ??= new Comments(this._options)); } @@ -135,6 +145,10 @@ export class LangfuseAPIClient { return (this._ingestion ??= new Ingestion(this._options)); } + public get llmConnections(): LlmConnections { + return (this._llmConnections ??= new LlmConnections(this._options)); + } + public get media(): Media { return (this._media ??= new Media(this._options)); } diff --git a/packages/core/src/api/api/resources/annotationQueues/client/Client.ts b/packages/core/src/api/api/resources/annotationQueues/client/Client.ts index 0ca9474c..fd55791e 100644 --- a/packages/core/src/api/api/resources/annotationQueues/client/Client.ts +++ b/packages/core/src/api/api/resources/annotationQueues/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace AnnotationQueues { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace AnnotationQueues { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -101,6 +101,21 @@ export class AnnotationQueues { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -108,16 +123,7 @@ export class AnnotationQueues { "/api/public/annotation-queues", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -188,6 +194,134 @@ export class AnnotationQueues { } } + /** + * Create an annotation queue + * + * @param {LangfuseAPI.CreateAnnotationQueueRequest} request + * @param {AnnotationQueues.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.annotationQueues.createQueue({ + * name: "name", + * description: undefined, + * scoreConfigIds: ["scoreConfigIds", "scoreConfigIds"] + * }) + */ + public createQueue( + request: LangfuseAPI.CreateAnnotationQueueRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__createQueue(request, requestOptions), + ); + } + + private async __createQueue( + request: LangfuseAPI.CreateAnnotationQueueRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/annotation-queues", + ), + method: "POST", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.AnnotationQueue, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling POST /api/public/annotation-queues.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * Get an annotation queue by ID * @@ -216,6 +350,21 @@ export class AnnotationQueues { queueId: string, requestOptions?: AnnotationQueues.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -223,16 +372,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -351,6 +491,21 @@ export class AnnotationQueues { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -358,16 +513,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}/items`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -469,6 +615,21 @@ export class AnnotationQueues { itemId: string, requestOptions?: AnnotationQueues.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -476,16 +637,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}/items/${encodeURIComponent(itemId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -591,6 +743,21 @@ export class AnnotationQueues { request: LangfuseAPI.CreateAnnotationQueueItemRequest, requestOptions?: AnnotationQueues.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -598,16 +765,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}/items`, ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -717,6 +875,21 @@ export class AnnotationQueues { request: LangfuseAPI.UpdateAnnotationQueueItemRequest, requestOptions?: AnnotationQueues.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -724,16 +897,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}/items/${encodeURIComponent(itemId)}`, ), method: "PATCH", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -840,6 +1004,21 @@ export class AnnotationQueues { ): Promise< core.WithRawResponse > { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -847,16 +1026,7 @@ export class AnnotationQueues { `/api/public/annotation-queues/${encodeURIComponent(queueId)}/items/${encodeURIComponent(itemId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -927,6 +1097,268 @@ export class AnnotationQueues { } } + /** + * Create an assignment for a user to an annotation queue + * + * @param {string} queueId - The unique identifier of the annotation queue + * @param {LangfuseAPI.AnnotationQueueAssignmentRequest} request + * @param {AnnotationQueues.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.annotationQueues.createQueueAssignment("queueId", { + * userId: "userId" + * }) + */ + public createQueueAssignment( + queueId: string, + request: LangfuseAPI.AnnotationQueueAssignmentRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__createQueueAssignment(queueId, request, requestOptions), + ); + } + + private async __createQueueAssignment( + queueId: string, + request: LangfuseAPI.AnnotationQueueAssignmentRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): Promise< + core.WithRawResponse + > { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + `/api/public/annotation-queues/${encodeURIComponent(queueId)}/assignments`, + ), + method: "POST", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.CreateAnnotationQueueAssignmentResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling POST /api/public/annotation-queues/{queueId}/assignments.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Delete an assignment for a user to an annotation queue + * + * @param {string} queueId - The unique identifier of the annotation queue + * @param {LangfuseAPI.AnnotationQueueAssignmentRequest} request + * @param {AnnotationQueues.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.annotationQueues.deleteQueueAssignment("queueId", { + * userId: "userId" + * }) + */ + public deleteQueueAssignment( + queueId: string, + request: LangfuseAPI.AnnotationQueueAssignmentRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__deleteQueueAssignment(queueId, request, requestOptions), + ); + } + + private async __deleteQueueAssignment( + queueId: string, + request: LangfuseAPI.AnnotationQueueAssignmentRequest, + requestOptions?: AnnotationQueues.RequestOptions, + ): Promise< + core.WithRawResponse + > { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + `/api/public/annotation-queues/${encodeURIComponent(queueId)}/assignments`, + ), + method: "DELETE", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.DeleteAnnotationQueueAssignmentResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling DELETE /api/public/annotation-queues/{queueId}/assignments.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + protected async _getAuthorizationHeader(): Promise { const username = await core.Supplier.get(this._options.username); const password = await core.Supplier.get(this._options.password); diff --git a/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueueItemsRequest.ts b/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueueItemsRequest.ts index 33e28fee..bcc85fcc 100644 --- a/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueueItemsRequest.ts +++ b/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueueItemsRequest.ts @@ -9,16 +9,10 @@ import * as LangfuseAPI from "../../../../index.js"; * {} */ export interface GetAnnotationQueueItemsRequest { - /** - * Filter by status - */ + /** Filter by status */ status?: LangfuseAPI.AnnotationQueueStatus; - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueuesRequest.ts b/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueuesRequest.ts index af4c11b0..9c5f6852 100644 --- a/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueuesRequest.ts +++ b/packages/core/src/api/api/resources/annotationQueues/client/requests/GetAnnotationQueuesRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetAnnotationQueuesRequest { - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/annotationQueues/types/AnnotationQueueAssignmentRequest.ts b/packages/core/src/api/api/resources/annotationQueues/types/AnnotationQueueAssignmentRequest.ts new file mode 100644 index 00000000..c3df03ab --- /dev/null +++ b/packages/core/src/api/api/resources/annotationQueues/types/AnnotationQueueAssignmentRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface AnnotationQueueAssignmentRequest { + userId: string; +} diff --git a/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueAssignmentResponse.ts b/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueAssignmentResponse.ts new file mode 100644 index 00000000..2d9cdbe3 --- /dev/null +++ b/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueAssignmentResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateAnnotationQueueAssignmentResponse { + userId: string; + queueId: string; + projectId: string; +} diff --git a/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueRequest.ts b/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueRequest.ts new file mode 100644 index 00000000..41e801a6 --- /dev/null +++ b/packages/core/src/api/api/resources/annotationQueues/types/CreateAnnotationQueueRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateAnnotationQueueRequest { + name: string; + description?: string; + scoreConfigIds: string[]; +} diff --git a/packages/core/src/api/api/resources/annotationQueues/types/DeleteAnnotationQueueAssignmentResponse.ts b/packages/core/src/api/api/resources/annotationQueues/types/DeleteAnnotationQueueAssignmentResponse.ts new file mode 100644 index 00000000..ce043b0f --- /dev/null +++ b/packages/core/src/api/api/resources/annotationQueues/types/DeleteAnnotationQueueAssignmentResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DeleteAnnotationQueueAssignmentResponse { + success: boolean; +} diff --git a/packages/core/src/api/api/resources/annotationQueues/types/index.ts b/packages/core/src/api/api/resources/annotationQueues/types/index.ts index ce407e9a..4cdc5338 100644 --- a/packages/core/src/api/api/resources/annotationQueues/types/index.ts +++ b/packages/core/src/api/api/resources/annotationQueues/types/index.ts @@ -4,6 +4,10 @@ export * from "./AnnotationQueue.js"; export * from "./AnnotationQueueItem.js"; export * from "./PaginatedAnnotationQueues.js"; export * from "./PaginatedAnnotationQueueItems.js"; +export * from "./CreateAnnotationQueueRequest.js"; export * from "./CreateAnnotationQueueItemRequest.js"; export * from "./UpdateAnnotationQueueItemRequest.js"; export * from "./DeleteAnnotationQueueItemResponse.js"; +export * from "./AnnotationQueueAssignmentRequest.js"; +export * from "./DeleteAnnotationQueueAssignmentResponse.js"; +export * from "./CreateAnnotationQueueAssignmentResponse.js"; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/client/Client.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/client/Client.ts new file mode 100644 index 00000000..2a9752df --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/client/Client.ts @@ -0,0 +1,457 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as core from "../../../../core/index.js"; +import * as LangfuseAPI from "../../../index.js"; +import { + mergeHeaders, + mergeOnlyDefinedHeaders, +} from "../../../../core/headers.js"; +import * as errors from "../../../../errors/index.js"; + +export declare namespace BlobStorageIntegrations { + export interface Options { + environment: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + username?: core.Supplier; + password?: core.Supplier; + /** Override the X-Langfuse-Sdk-Name header */ + xLangfuseSdkName?: core.Supplier; + /** Override the X-Langfuse-Sdk-Version header */ + xLangfuseSdkVersion?: core.Supplier; + /** Override the X-Langfuse-Public-Key header */ + xLangfusePublicKey?: core.Supplier; + /** Additional headers to include in requests. */ + headers?: Record< + string, + string | core.Supplier | null | undefined + >; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Override the X-Langfuse-Sdk-Name header */ + xLangfuseSdkName?: string | undefined; + /** Override the X-Langfuse-Sdk-Version header */ + xLangfuseSdkVersion?: string | undefined; + /** Override the X-Langfuse-Public-Key header */ + xLangfusePublicKey?: string | undefined; + /** Additional query string parameters to include in the request. */ + queryParams?: Record; + /** Additional headers to include in the request. */ + headers?: Record< + string, + string | core.Supplier | null | undefined + >; + } +} + +export class BlobStorageIntegrations { + protected readonly _options: BlobStorageIntegrations.Options; + + constructor(_options: BlobStorageIntegrations.Options) { + this._options = _options; + } + + /** + * Get all blob storage integrations for the organization (requires organization-scoped API key) + * + * @param {BlobStorageIntegrations.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.blobStorageIntegrations.getBlobStorageIntegrations() + */ + public getBlobStorageIntegrations( + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__getBlobStorageIntegrations(requestOptions), + ); + } + + private async __getBlobStorageIntegrations( + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): Promise< + core.WithRawResponse + > { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/integrations/blob-storage", + ), + method: "GET", + headers: _headers, + queryParameters: requestOptions?.queryParams, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.BlobStorageIntegrationsResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling GET /api/public/integrations/blob-storage.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Create or update a blob storage integration for a specific project (requires organization-scoped API key). The configuration is validated by performing a test upload to the bucket. + * + * @param {LangfuseAPI.CreateBlobStorageIntegrationRequest} request + * @param {BlobStorageIntegrations.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.blobStorageIntegrations.upsertBlobStorageIntegration({ + * projectId: "projectId", + * type: "S3", + * bucketName: "bucketName", + * endpoint: undefined, + * region: "region", + * accessKeyId: undefined, + * secretAccessKey: undefined, + * prefix: undefined, + * exportFrequency: "hourly", + * enabled: true, + * forcePathStyle: true, + * fileType: "JSON", + * exportMode: "FULL_HISTORY", + * exportStartDate: undefined + * }) + */ + public upsertBlobStorageIntegration( + request: LangfuseAPI.CreateBlobStorageIntegrationRequest, + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__upsertBlobStorageIntegration(request, requestOptions), + ); + } + + private async __upsertBlobStorageIntegration( + request: LangfuseAPI.CreateBlobStorageIntegrationRequest, + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/integrations/blob-storage", + ), + method: "PUT", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.BlobStorageIntegrationResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling PUT /api/public/integrations/blob-storage.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Delete a blob storage integration by ID (requires organization-scoped API key) + * + * @param {string} id + * @param {BlobStorageIntegrations.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.blobStorageIntegrations.deleteBlobStorageIntegration("id") + */ + public deleteBlobStorageIntegration( + id: string, + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__deleteBlobStorageIntegration(id, requestOptions), + ); + } + + private async __deleteBlobStorageIntegration( + id: string, + requestOptions?: BlobStorageIntegrations.RequestOptions, + ): Promise< + core.WithRawResponse + > { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + `/api/public/integrations/blob-storage/${encodeURIComponent(id)}`, + ), + method: "DELETE", + headers: _headers, + queryParameters: requestOptions?.queryParams, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.BlobStorageIntegrationDeletionResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling DELETE /api/public/integrations/blob-storage/{id}.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + const username = await core.Supplier.get(this._options.username); + const password = await core.Supplier.get(this._options.password); + if (username != null && password != null) { + return core.BasicAuth.toAuthorizationHeader({ + username: username, + password: password, + }); + } + + return undefined; + } +} diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/client/index.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/client/index.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/index.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/index.ts new file mode 100644 index 00000000..f095e147 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/index.ts @@ -0,0 +1,2 @@ +export * from "./types/index.js"; +export * from "./client/index.js"; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportFrequency.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportFrequency.ts new file mode 100644 index 00000000..cc5e38e6 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportFrequency.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BlobStorageExportFrequency = "hourly" | "daily" | "weekly"; +export const BlobStorageExportFrequency = { + Hourly: "hourly", + Daily: "daily", + Weekly: "weekly", +} as const; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportMode.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportMode.ts new file mode 100644 index 00000000..f0dc1616 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageExportMode.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BlobStorageExportMode = + | "FULL_HISTORY" + | "FROM_TODAY" + | "FROM_CUSTOM_DATE"; +export const BlobStorageExportMode = { + FullHistory: "FULL_HISTORY", + FromToday: "FROM_TODAY", + FromCustomDate: "FROM_CUSTOM_DATE", +} as const; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationDeletionResponse.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationDeletionResponse.ts new file mode 100644 index 00000000..96919b81 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationDeletionResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface BlobStorageIntegrationDeletionResponse { + message: string; +} diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationFileType.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationFileType.ts new file mode 100644 index 00000000..35826dc4 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationFileType.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BlobStorageIntegrationFileType = "JSON" | "CSV" | "JSONL"; +export const BlobStorageIntegrationFileType = { + Json: "JSON", + Csv: "CSV", + Jsonl: "JSONL", +} as const; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationResponse.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationResponse.ts new file mode 100644 index 00000000..60bb3b29 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as LangfuseAPI from "../../../index.js"; + +export interface BlobStorageIntegrationResponse { + id: string; + projectId: string; + type: LangfuseAPI.BlobStorageIntegrationType; + bucketName: string; + endpoint?: string; + region: string; + accessKeyId?: string; + prefix: string; + exportFrequency: LangfuseAPI.BlobStorageExportFrequency; + enabled: boolean; + forcePathStyle: boolean; + fileType: LangfuseAPI.BlobStorageIntegrationFileType; + exportMode: LangfuseAPI.BlobStorageExportMode; + exportStartDate?: string; + nextSyncAt?: string; + lastSyncAt?: string; + createdAt: string; + updatedAt: string; +} diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationType.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationType.ts new file mode 100644 index 00000000..f4250350 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BlobStorageIntegrationType = + | "S3" + | "S3_COMPATIBLE" + | "AZURE_BLOB_STORAGE"; +export const BlobStorageIntegrationType = { + S3: "S3", + S3Compatible: "S3_COMPATIBLE", + AzureBlobStorage: "AZURE_BLOB_STORAGE", +} as const; diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationsResponse.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationsResponse.ts new file mode 100644 index 00000000..e80bb5a2 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/BlobStorageIntegrationsResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as LangfuseAPI from "../../../index.js"; + +export interface BlobStorageIntegrationsResponse { + data: LangfuseAPI.BlobStorageIntegrationResponse[]; +} diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/CreateBlobStorageIntegrationRequest.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/CreateBlobStorageIntegrationRequest.ts new file mode 100644 index 00000000..3b904819 --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/CreateBlobStorageIntegrationRequest.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as LangfuseAPI from "../../../index.js"; + +export interface CreateBlobStorageIntegrationRequest { + /** ID of the project in which to configure the blob storage integration */ + projectId: string; + type: LangfuseAPI.BlobStorageIntegrationType; + /** Name of the storage bucket */ + bucketName: string; + /** Custom endpoint URL (required for S3_COMPATIBLE type) */ + endpoint?: string; + /** Storage region */ + region: string; + /** Access key ID for authentication */ + accessKeyId?: string; + /** Secret access key for authentication (will be encrypted when stored) */ + secretAccessKey?: string; + /** Path prefix for exported files (must end with forward slash if provided) */ + prefix?: string; + exportFrequency: LangfuseAPI.BlobStorageExportFrequency; + /** Whether the integration is active */ + enabled: boolean; + /** Use path-style URLs for S3 requests */ + forcePathStyle: boolean; + fileType: LangfuseAPI.BlobStorageIntegrationFileType; + exportMode: LangfuseAPI.BlobStorageExportMode; + /** Custom start date for exports (required when exportMode is FROM_CUSTOM_DATE) */ + exportStartDate?: string; +} diff --git a/packages/core/src/api/api/resources/blobStorageIntegrations/types/index.ts b/packages/core/src/api/api/resources/blobStorageIntegrations/types/index.ts new file mode 100644 index 00000000..495fd9fd --- /dev/null +++ b/packages/core/src/api/api/resources/blobStorageIntegrations/types/index.ts @@ -0,0 +1,8 @@ +export * from "./BlobStorageIntegrationType.js"; +export * from "./BlobStorageIntegrationFileType.js"; +export * from "./BlobStorageExportMode.js"; +export * from "./BlobStorageExportFrequency.js"; +export * from "./CreateBlobStorageIntegrationRequest.js"; +export * from "./BlobStorageIntegrationResponse.js"; +export * from "./BlobStorageIntegrationsResponse.js"; +export * from "./BlobStorageIntegrationDeletionResponse.js"; diff --git a/packages/core/src/api/api/resources/comments/client/Client.ts b/packages/core/src/api/api/resources/comments/client/Client.ts index 664920a2..72afae74 100644 --- a/packages/core/src/api/api/resources/comments/client/Client.ts +++ b/packages/core/src/api/api/resources/comments/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Comments { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Comments { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -94,6 +94,21 @@ export class Comments { request: LangfuseAPI.CreateCommentRequest, requestOptions?: Comments.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -101,16 +116,7 @@ export class Comments { "/api/public/comments", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -237,6 +243,21 @@ export class Comments { _queryParams["authorUserId"] = authorUserId; } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -244,16 +265,7 @@ export class Comments { "/api/public/comments", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -352,6 +364,21 @@ export class Comments { commentId: string, requestOptions?: Comments.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -359,16 +386,7 @@ export class Comments { `/api/public/comments/${encodeURIComponent(commentId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/comments/client/requests/GetCommentsRequest.ts b/packages/core/src/api/api/resources/comments/client/requests/GetCommentsRequest.ts index 0532c6c9..de1a2124 100644 --- a/packages/core/src/api/api/resources/comments/client/requests/GetCommentsRequest.ts +++ b/packages/core/src/api/api/resources/comments/client/requests/GetCommentsRequest.ts @@ -7,24 +7,14 @@ * {} */ export interface GetCommentsRequest { - /** - * Page number, starts at 1. - */ + /** Page number, starts at 1. */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit */ limit?: number; - /** - * Filter comments by object type (trace, observation, session, prompt). - */ + /** Filter comments by object type (trace, observation, session, prompt). */ objectType?: string; - /** - * Filter comments by object id. If objectType is not provided, an error will be thrown. - */ + /** Filter comments by object id. If objectType is not provided, an error will be thrown. */ objectId?: string; - /** - * Filter comments by author user id. - */ + /** Filter comments by author user id. */ authorUserId?: string; } diff --git a/packages/core/src/api/api/resources/datasetItems/client/Client.ts b/packages/core/src/api/api/resources/datasetItems/client/Client.ts index 06f2b748..2fe9e002 100644 --- a/packages/core/src/api/api/resources/datasetItems/client/Client.ts +++ b/packages/core/src/api/api/resources/datasetItems/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace DatasetItems { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace DatasetItems { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -97,6 +97,21 @@ export class DatasetItems { request: LangfuseAPI.CreateDatasetItemRequest, requestOptions?: DatasetItems.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -104,16 +119,7 @@ export class DatasetItems { "/api/public/dataset-items", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -213,6 +219,21 @@ export class DatasetItems { id: string, requestOptions?: DatasetItems.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -220,16 +241,7 @@ export class DatasetItems { `/api/public/dataset-items/${encodeURIComponent(id)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -354,6 +366,21 @@ export class DatasetItems { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -361,16 +388,7 @@ export class DatasetItems { "/api/public/dataset-items", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -469,6 +487,21 @@ export class DatasetItems { id: string, requestOptions?: DatasetItems.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -476,16 +509,7 @@ export class DatasetItems { `/api/public/dataset-items/${encodeURIComponent(id)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/datasetItems/client/requests/GetDatasetItemsRequest.ts b/packages/core/src/api/api/resources/datasetItems/client/requests/GetDatasetItemsRequest.ts index 4e91451e..fc18f872 100644 --- a/packages/core/src/api/api/resources/datasetItems/client/requests/GetDatasetItemsRequest.ts +++ b/packages/core/src/api/api/resources/datasetItems/client/requests/GetDatasetItemsRequest.ts @@ -10,12 +10,8 @@ export interface GetDatasetItemsRequest { datasetName?: string; sourceTraceId?: string; sourceObservationId?: string; - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/datasetRunItems/client/Client.ts b/packages/core/src/api/api/resources/datasetRunItems/client/Client.ts index d00cedff..920e1828 100644 --- a/packages/core/src/api/api/resources/datasetRunItems/client/Client.ts +++ b/packages/core/src/api/api/resources/datasetRunItems/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace DatasetRunItems { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace DatasetRunItems { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -95,6 +95,21 @@ export class DatasetRunItems { request: LangfuseAPI.CreateDatasetRunItemRequest, requestOptions?: DatasetRunItems.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -102,16 +117,7 @@ export class DatasetRunItems { "/api/public/dataset-run-items", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -231,6 +237,21 @@ export class DatasetRunItems { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -238,16 +259,7 @@ export class DatasetRunItems { "/api/public/dataset-run-items", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/datasetRunItems/client/requests/ListDatasetRunItemsRequest.ts b/packages/core/src/api/api/resources/datasetRunItems/client/requests/ListDatasetRunItemsRequest.ts index 5dbd80ed..e4a14635 100644 --- a/packages/core/src/api/api/resources/datasetRunItems/client/requests/ListDatasetRunItemsRequest.ts +++ b/packages/core/src/api/api/resources/datasetRunItems/client/requests/ListDatasetRunItemsRequest.ts @@ -12,12 +12,8 @@ export interface ListDatasetRunItemsRequest { datasetId: string; runName: string; - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/datasets/client/Client.ts b/packages/core/src/api/api/resources/datasets/client/Client.ts index a6b5d233..d137aec1 100644 --- a/packages/core/src/api/api/resources/datasets/client/Client.ts +++ b/packages/core/src/api/api/resources/datasets/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Datasets { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Datasets { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -101,6 +101,21 @@ export class Datasets { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -108,16 +123,7 @@ export class Datasets { "/api/public/v2/datasets", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -216,6 +222,21 @@ export class Datasets { datasetName: string, requestOptions?: Datasets.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -223,16 +244,7 @@ export class Datasets { `/api/public/v2/datasets/${encodeURIComponent(datasetName)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -335,6 +347,21 @@ export class Datasets { request: LangfuseAPI.CreateDatasetRequest, requestOptions?: Datasets.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -342,16 +369,7 @@ export class Datasets { "/api/public/v2/datasets", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -456,6 +474,21 @@ export class Datasets { runName: string, requestOptions?: Datasets.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -463,16 +496,7 @@ export class Datasets { `/api/public/datasets/${encodeURIComponent(datasetName)}/runs/${encodeURIComponent(runName)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -574,6 +598,21 @@ export class Datasets { runName: string, requestOptions?: Datasets.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -581,16 +620,7 @@ export class Datasets { `/api/public/datasets/${encodeURIComponent(datasetName)}/runs/${encodeURIComponent(runName)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -705,6 +735,21 @@ export class Datasets { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -712,16 +757,7 @@ export class Datasets { `/api/public/datasets/${encodeURIComponent(datasetName)}/runs`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetRunsRequest.ts b/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetRunsRequest.ts index b1ab0103..718975ea 100644 --- a/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetRunsRequest.ts +++ b/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetRunsRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetDatasetRunsRequest { - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetsRequest.ts b/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetsRequest.ts index 4a86e001..3ea32a3b 100644 --- a/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetsRequest.ts +++ b/packages/core/src/api/api/resources/datasets/client/requests/GetDatasetsRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetDatasetsRequest { - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/health/client/Client.ts b/packages/core/src/api/api/resources/health/client/Client.ts index 9b63823b..f7a0428e 100644 --- a/packages/core/src/api/api/resources/health/client/Client.ts +++ b/packages/core/src/api/api/resources/health/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Health { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Health { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -84,6 +84,21 @@ export class Health { private async __health( requestOptions?: Health.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -91,16 +106,7 @@ export class Health { "/api/public/health", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/index.ts b/packages/core/src/api/api/resources/index.ts index 058c7048..5db0a2dc 100644 --- a/packages/core/src/api/api/resources/index.ts +++ b/packages/core/src/api/api/resources/index.ts @@ -1,5 +1,7 @@ export * as annotationQueues from "./annotationQueues/index.js"; export * from "./annotationQueues/types/index.js"; +export * as blobStorageIntegrations from "./blobStorageIntegrations/index.js"; +export * from "./blobStorageIntegrations/types/index.js"; export * as comments from "./comments/index.js"; export * from "./comments/types/index.js"; export * as commons from "./commons/index.js"; @@ -14,6 +16,8 @@ export * as health from "./health/index.js"; export * from "./health/types/index.js"; export * as ingestion from "./ingestion/index.js"; export * from "./ingestion/types/index.js"; +export * as llmConnections from "./llmConnections/index.js"; +export * from "./llmConnections/types/index.js"; export * as media from "./media/index.js"; export * from "./media/types/index.js"; export * as metrics from "./metrics/index.js"; @@ -50,6 +54,7 @@ export * from "./datasetItems/client/requests/index.js"; export * from "./datasetRunItems/client/requests/index.js"; export * from "./datasets/client/requests/index.js"; export * from "./ingestion/client/requests/index.js"; +export * from "./llmConnections/client/requests/index.js"; export * from "./metrics/client/requests/index.js"; export * from "./models/client/requests/index.js"; export * from "./observations/client/requests/index.js"; diff --git a/packages/core/src/api/api/resources/ingestion/client/Client.ts b/packages/core/src/api/api/resources/ingestion/client/Client.ts index f503814a..23345c16 100644 --- a/packages/core/src/api/api/resources/ingestion/client/Client.ts +++ b/packages/core/src/api/api/resources/ingestion/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Ingestion { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Ingestion { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -61,8 +61,9 @@ export class Ingestion { } /** - * Batched ingestion for Langfuse Tracing. - * If you want to use tracing via the API, such as to build your own Langfuse client implementation, this is the only API route you need to implement. + * **Legacy endpoint for batch ingestion for Langfuse Observability.** + * + * -> Please use the OpenTelemetry endpoint (`/api/public/otel`). Learn more: https://langfuse.com/integrations/native/opentelemetry * * Within each batch, there can be multiple events. * Each event has a type, an id, a timestamp, metadata and a body. @@ -72,7 +73,7 @@ export class Ingestion { * I.e. if you want to update a trace, you'd use the same body id, but separate event IDs. * * Notes: - * - Introduction to data model: https://langfuse.com/docs/tracing-data-model + * - Introduction to data model: https://langfuse.com/docs/observability/data-model * - Batch sizes are limited to 3.5 MB in total. You need to adjust the number of events per batch accordingly. * - The API does not return a 4xx status code for input errors. Instead, it responds with a 207 status code, which includes a list of the encountered errors. * @@ -153,6 +154,21 @@ export class Ingestion { request: LangfuseAPI.IngestionRequest, requestOptions?: Ingestion.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -160,16 +176,7 @@ export class Ingestion { "/api/public/ingestion", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", diff --git a/packages/core/src/api/api/resources/ingestion/types/ObservationType.ts b/packages/core/src/api/api/resources/ingestion/types/ObservationType.ts index 88ebeb1e..bd06bcaa 100644 --- a/packages/core/src/api/api/resources/ingestion/types/ObservationType.ts +++ b/packages/core/src/api/api/resources/ingestion/types/ObservationType.ts @@ -2,9 +2,26 @@ * This file was auto-generated by Fern from our API Definition. */ -export type ObservationType = "SPAN" | "GENERATION" | "EVENT"; +export type ObservationType = + | "SPAN" + | "GENERATION" + | "EVENT" + | "AGENT" + | "TOOL" + | "CHAIN" + | "RETRIEVER" + | "EVALUATOR" + | "EMBEDDING" + | "GUARDRAIL"; export const ObservationType = { Span: "SPAN", Generation: "GENERATION", Event: "EVENT", + Agent: "AGENT", + Tool: "TOOL", + Chain: "CHAIN", + Retriever: "RETRIEVER", + Evaluator: "EVALUATOR", + Embedding: "EMBEDDING", + Guardrail: "GUARDRAIL", } as const; diff --git a/packages/core/src/api/api/resources/llmConnections/client/Client.ts b/packages/core/src/api/api/resources/llmConnections/client/Client.ts new file mode 100644 index 00000000..b76e98fa --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/client/Client.ts @@ -0,0 +1,341 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as core from "../../../../core/index.js"; +import * as LangfuseAPI from "../../../index.js"; +import { + mergeHeaders, + mergeOnlyDefinedHeaders, +} from "../../../../core/headers.js"; +import * as errors from "../../../../errors/index.js"; + +export declare namespace LlmConnections { + export interface Options { + environment: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + username?: core.Supplier; + password?: core.Supplier; + /** Override the X-Langfuse-Sdk-Name header */ + xLangfuseSdkName?: core.Supplier; + /** Override the X-Langfuse-Sdk-Version header */ + xLangfuseSdkVersion?: core.Supplier; + /** Override the X-Langfuse-Public-Key header */ + xLangfusePublicKey?: core.Supplier; + /** Additional headers to include in requests. */ + headers?: Record< + string, + string | core.Supplier | null | undefined + >; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Override the X-Langfuse-Sdk-Name header */ + xLangfuseSdkName?: string | undefined; + /** Override the X-Langfuse-Sdk-Version header */ + xLangfuseSdkVersion?: string | undefined; + /** Override the X-Langfuse-Public-Key header */ + xLangfusePublicKey?: string | undefined; + /** Additional query string parameters to include in the request. */ + queryParams?: Record; + /** Additional headers to include in the request. */ + headers?: Record< + string, + string | core.Supplier | null | undefined + >; + } +} + +export class LlmConnections { + protected readonly _options: LlmConnections.Options; + + constructor(_options: LlmConnections.Options) { + this._options = _options; + } + + /** + * Get all LLM connections in a project + * + * @param {LangfuseAPI.GetLlmConnectionsRequest} request + * @param {LlmConnections.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.llmConnections.list() + */ + public list( + request: LangfuseAPI.GetLlmConnectionsRequest = {}, + requestOptions?: LlmConnections.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__list(request, requestOptions), + ); + } + + private async __list( + request: LangfuseAPI.GetLlmConnectionsRequest = {}, + requestOptions?: LlmConnections.RequestOptions, + ): Promise> { + const { page, limit } = request; + const _queryParams: Record< + string, + string | string[] | object | object[] | null + > = {}; + if (page != null) { + _queryParams["page"] = page.toString(); + } + + if (limit != null) { + _queryParams["limit"] = limit.toString(); + } + + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/llm-connections", + ), + method: "GET", + headers: _headers, + queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.PaginatedLlmConnections, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling GET /api/public/llm-connections.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Create or update an LLM connection. The connection is upserted on provider. + * + * @param {LangfuseAPI.UpsertLlmConnectionRequest} request + * @param {LlmConnections.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.llmConnections.upsert({ + * provider: "provider", + * adapter: "anthropic", + * secretKey: "secretKey", + * baseURL: undefined, + * customModels: undefined, + * withDefaultModels: undefined, + * extraHeaders: undefined + * }) + */ + public upsert( + request: LangfuseAPI.UpsertLlmConnectionRequest, + requestOptions?: LlmConnections.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__upsert(request, requestOptions), + ); + } + + private async __upsert( + request: LangfuseAPI.UpsertLlmConnectionRequest, + requestOptions?: LlmConnections.RequestOptions, + ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/llm-connections", + ), + method: "PUT", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.LlmConnection, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling PUT /api/public/llm-connections.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + const username = await core.Supplier.get(this._options.username); + const password = await core.Supplier.get(this._options.password); + if (username != null && password != null) { + return core.BasicAuth.toAuthorizationHeader({ + username: username, + password: password, + }); + } + + return undefined; + } +} diff --git a/packages/core/src/api/api/resources/llmConnections/client/index.ts b/packages/core/src/api/api/resources/llmConnections/client/index.ts new file mode 100644 index 00000000..82648c6f --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/client/index.ts @@ -0,0 +1,2 @@ +export {}; +export * from "./requests/index.js"; diff --git a/packages/core/src/api/api/resources/llmConnections/client/requests/GetLlmConnectionsRequest.ts b/packages/core/src/api/api/resources/llmConnections/client/requests/GetLlmConnectionsRequest.ts new file mode 100644 index 00000000..bea8b736 --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/client/requests/GetLlmConnectionsRequest.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * {} + */ +export interface GetLlmConnectionsRequest { + /** page number, starts at 1 */ + page?: number; + /** limit of items per page */ + limit?: number; +} diff --git a/packages/core/src/api/api/resources/llmConnections/client/requests/index.ts b/packages/core/src/api/api/resources/llmConnections/client/requests/index.ts new file mode 100644 index 00000000..e9ff61e0 --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/client/requests/index.ts @@ -0,0 +1 @@ +export { type GetLlmConnectionsRequest } from "./GetLlmConnectionsRequest.js"; diff --git a/packages/core/src/api/api/resources/llmConnections/index.ts b/packages/core/src/api/api/resources/llmConnections/index.ts new file mode 100644 index 00000000..f095e147 --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/index.ts @@ -0,0 +1,2 @@ +export * from "./types/index.js"; +export * from "./client/index.js"; diff --git a/packages/core/src/api/api/resources/llmConnections/types/LlmAdapter.ts b/packages/core/src/api/api/resources/llmConnections/types/LlmAdapter.ts new file mode 100644 index 00000000..f897fc86 --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/types/LlmAdapter.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type LlmAdapter = + | "anthropic" + | "openai" + | "azure" + | "bedrock" + | "google-vertex-ai" + | "google-ai-studio"; +export const LlmAdapter = { + Anthropic: "anthropic", + OpenAi: "openai", + Azure: "azure", + Bedrock: "bedrock", + GoogleVertexAi: "google-vertex-ai", + GoogleAiStudio: "google-ai-studio", +} as const; diff --git a/packages/core/src/api/api/resources/llmConnections/types/LlmConnection.ts b/packages/core/src/api/api/resources/llmConnections/types/LlmConnection.ts new file mode 100644 index 00000000..8a06f34a --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/types/LlmConnection.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * LLM API connection configuration (secrets excluded) + */ +export interface LlmConnection { + id: string; + /** Provider name (e.g., 'openai', 'my-gateway'). Must be unique in project, used for upserting. */ + provider: string; + /** The adapter used to interface with the LLM */ + adapter: string; + /** Masked version of the secret key for display purposes */ + displaySecretKey: string; + /** Custom base URL for the LLM API */ + baseURL?: string; + /** List of custom model names available for this connection */ + customModels: string[]; + /** Whether to include default models for this adapter */ + withDefaultModels: boolean; + /** Keys of extra headers sent with requests (values excluded for security) */ + extraHeaderKeys: string[]; + createdAt: string; + updatedAt: string; +} diff --git a/packages/core/src/api/api/resources/llmConnections/types/PaginatedLlmConnections.ts b/packages/core/src/api/api/resources/llmConnections/types/PaginatedLlmConnections.ts new file mode 100644 index 00000000..313d1250 --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/types/PaginatedLlmConnections.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as LangfuseAPI from "../../../index.js"; + +export interface PaginatedLlmConnections { + data: LangfuseAPI.LlmConnection[]; + meta: LangfuseAPI.utils.MetaResponse; +} diff --git a/packages/core/src/api/api/resources/llmConnections/types/UpsertLlmConnectionRequest.ts b/packages/core/src/api/api/resources/llmConnections/types/UpsertLlmConnectionRequest.ts new file mode 100644 index 00000000..4e5816df --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/types/UpsertLlmConnectionRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as LangfuseAPI from "../../../index.js"; + +/** + * Request to create or update an LLM connection (upsert) + */ +export interface UpsertLlmConnectionRequest { + /** Provider name (e.g., 'openai', 'my-gateway'). Must be unique in project, used for upserting. */ + provider: string; + /** The adapter used to interface with the LLM */ + adapter: LangfuseAPI.LlmAdapter; + /** Secret key for the LLM API. */ + secretKey: string; + /** Custom base URL for the LLM API */ + baseURL?: string; + /** List of custom model names */ + customModels?: string[]; + /** Whether to include default models. Default is true. */ + withDefaultModels?: boolean; + /** Extra headers to send with requests */ + extraHeaders?: Record; +} diff --git a/packages/core/src/api/api/resources/llmConnections/types/index.ts b/packages/core/src/api/api/resources/llmConnections/types/index.ts new file mode 100644 index 00000000..423941fb --- /dev/null +++ b/packages/core/src/api/api/resources/llmConnections/types/index.ts @@ -0,0 +1,4 @@ +export * from "./LlmConnection.js"; +export * from "./PaginatedLlmConnections.js"; +export * from "./UpsertLlmConnectionRequest.js"; +export * from "./LlmAdapter.js"; diff --git a/packages/core/src/api/api/resources/media/client/Client.ts b/packages/core/src/api/api/resources/media/client/Client.ts index 8a364bf2..e3bcd1ac 100644 --- a/packages/core/src/api/api/resources/media/client/Client.ts +++ b/packages/core/src/api/api/resources/media/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Media { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Media { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -88,6 +88,21 @@ export class Media { mediaId: string, requestOptions?: Media.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -95,16 +110,7 @@ export class Media { `/api/public/media/${encodeURIComponent(mediaId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -211,6 +217,21 @@ export class Media { request: LangfuseAPI.PatchMediaBody, requestOptions?: Media.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -218,16 +239,7 @@ export class Media { `/api/public/media/${encodeURIComponent(mediaId)}`, ), method: "PATCH", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -333,6 +345,21 @@ export class Media { request: LangfuseAPI.GetMediaUploadUrlRequest, requestOptions?: Media.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -340,16 +367,7 @@ export class Media { "/api/public/media", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", diff --git a/packages/core/src/api/api/resources/metrics/client/Client.ts b/packages/core/src/api/api/resources/metrics/client/Client.ts index 511484b8..fb8b8805 100644 --- a/packages/core/src/api/api/resources/metrics/client/Client.ts +++ b/packages/core/src/api/api/resources/metrics/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Metrics { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Metrics { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -96,6 +96,21 @@ export class Metrics { string | string[] | object | object[] | null > = {}; _queryParams["query"] = query; + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -103,16 +118,7 @@ export class Metrics { "/api/public/metrics", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/models/client/Client.ts b/packages/core/src/api/api/resources/models/client/Client.ts index a17f5066..6103e98a 100644 --- a/packages/core/src/api/api/resources/models/client/Client.ts +++ b/packages/core/src/api/api/resources/models/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Models { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Models { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -98,6 +98,21 @@ export class Models { request: LangfuseAPI.CreateModelRequest, requestOptions?: Models.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -105,16 +120,7 @@ export class Models { "/api/public/models", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -229,6 +235,21 @@ export class Models { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -236,16 +257,7 @@ export class Models { "/api/public/models", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -342,6 +354,21 @@ export class Models { id: string, requestOptions?: Models.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -349,16 +376,7 @@ export class Models { `/api/public/models/${encodeURIComponent(id)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -457,6 +475,21 @@ export class Models { id: string, requestOptions?: Models.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -464,16 +497,7 @@ export class Models { `/api/public/models/${encodeURIComponent(id)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/models/client/requests/GetModelsRequest.ts b/packages/core/src/api/api/resources/models/client/requests/GetModelsRequest.ts index e3058ac4..2173e95d 100644 --- a/packages/core/src/api/api/resources/models/client/requests/GetModelsRequest.ts +++ b/packages/core/src/api/api/resources/models/client/requests/GetModelsRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetModelsRequest { - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; } diff --git a/packages/core/src/api/api/resources/observations/client/Client.ts b/packages/core/src/api/api/resources/observations/client/Client.ts index 665d511d..db66a965 100644 --- a/packages/core/src/api/api/resources/observations/client/Client.ts +++ b/packages/core/src/api/api/resources/observations/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Observations { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Observations { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -88,6 +88,21 @@ export class Observations { observationId: string, requestOptions?: Observations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -95,16 +110,7 @@ export class Observations { `/api/public/observations/${encodeURIComponent(observationId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -273,6 +279,21 @@ export class Observations { _queryParams["version"] = version; } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -280,16 +301,7 @@ export class Observations { "/api/public/observations", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/observations/client/requests/GetObservationsRequest.ts b/packages/core/src/api/api/resources/observations/client/requests/GetObservationsRequest.ts index 7f6963be..53b5c415 100644 --- a/packages/core/src/api/api/resources/observations/client/requests/GetObservationsRequest.ts +++ b/packages/core/src/api/api/resources/observations/client/requests/GetObservationsRequest.ts @@ -9,37 +9,23 @@ import * as LangfuseAPI from "../../../../index.js"; * {} */ export interface GetObservationsRequest { - /** - * Page number, starts at 1. - */ + /** Page number, starts at 1. */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. */ limit?: number; name?: string; userId?: string; type?: string; traceId?: string; - /** - * Optional filter for observations with a specific level (e.g. "DEBUG", "DEFAULT", "WARNING", "ERROR"). - */ + /** Optional filter for observations with a specific level (e.g. "DEBUG", "DEFAULT", "WARNING", "ERROR"). */ level?: LangfuseAPI.ObservationLevel; parentObservationId?: string; - /** - * Optional filter for observations where the environment is one of the provided values. - */ + /** Optional filter for observations where the environment is one of the provided values. */ environment?: string | string[]; - /** - * Retrieve only observations with a start_time on or after this datetime (ISO 8601). - */ + /** Retrieve only observations with a start_time on or after this datetime (ISO 8601). */ fromStartTime?: string; - /** - * Retrieve only observations with a start_time before this datetime (ISO 8601). - */ + /** Retrieve only observations with a start_time before this datetime (ISO 8601). */ toStartTime?: string; - /** - * Optional filter to only include observations with a certain version. - */ + /** Optional filter to only include observations with a certain version. */ version?: string; } diff --git a/packages/core/src/api/api/resources/organizations/client/Client.ts b/packages/core/src/api/api/resources/organizations/client/Client.ts index 07205ff3..17bb5b11 100644 --- a/packages/core/src/api/api/resources/organizations/client/Client.ts +++ b/packages/core/src/api/api/resources/organizations/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Organizations { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Organizations { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -85,6 +85,21 @@ export class Organizations { private async __getOrganizationMemberships( requestOptions?: Organizations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -92,16 +107,7 @@ export class Organizations { "/api/public/organizations/memberships", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -203,6 +209,21 @@ export class Organizations { request: LangfuseAPI.MembershipRequest, requestOptions?: Organizations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -210,16 +231,7 @@ export class Organizations { "/api/public/organizations/memberships", ), method: "PUT", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -293,6 +305,132 @@ export class Organizations { } } + /** + * Delete a membership from the organization associated with the API key (requires organization-scoped API key) + * + * @param {LangfuseAPI.DeleteMembershipRequest} request + * @param {Organizations.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.organizations.deleteOrganizationMembership({ + * userId: "userId" + * }) + */ + public deleteOrganizationMembership( + request: LangfuseAPI.DeleteMembershipRequest, + requestOptions?: Organizations.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__deleteOrganizationMembership(request, requestOptions), + ); + } + + private async __deleteOrganizationMembership( + request: LangfuseAPI.DeleteMembershipRequest, + requestOptions?: Organizations.RequestOptions, + ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + "/api/public/organizations/memberships", + ), + method: "DELETE", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.MembershipDeletionResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling DELETE /api/public/organizations/memberships.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * Get all memberships for a specific project (requires organization-scoped API key) * @@ -321,6 +459,21 @@ export class Organizations { projectId: string, requestOptions?: Organizations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -328,16 +481,7 @@ export class Organizations { `/api/public/projects/${encodeURIComponent(projectId)}/memberships`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -442,6 +586,21 @@ export class Organizations { request: LangfuseAPI.MembershipRequest, requestOptions?: Organizations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -449,16 +608,7 @@ export class Organizations { `/api/public/projects/${encodeURIComponent(projectId)}/memberships`, ), method: "PUT", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -532,6 +682,135 @@ export class Organizations { } } + /** + * Delete a membership from a specific project (requires organization-scoped API key). The user must be a member of the organization. + * + * @param {string} projectId + * @param {LangfuseAPI.DeleteMembershipRequest} request + * @param {Organizations.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link LangfuseAPI.Error} + * @throws {@link LangfuseAPI.UnauthorizedError} + * @throws {@link LangfuseAPI.AccessDeniedError} + * @throws {@link LangfuseAPI.MethodNotAllowedError} + * @throws {@link LangfuseAPI.NotFoundError} + * + * @example + * await client.organizations.deleteProjectMembership("projectId", { + * userId: "userId" + * }) + */ + public deleteProjectMembership( + projectId: string, + request: LangfuseAPI.DeleteMembershipRequest, + requestOptions?: Organizations.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__deleteProjectMembership(projectId, request, requestOptions), + ); + } + + private async __deleteProjectMembership( + projectId: string, + request: LangfuseAPI.DeleteMembershipRequest, + requestOptions?: Organizations.RequestOptions, + ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)), + `/api/public/projects/${encodeURIComponent(projectId)}/memberships`, + ), + method: "DELETE", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: + requestOptions?.timeoutInSeconds != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { + data: _response.body as LangfuseAPI.MembershipDeletionResponse, + rawResponse: _response.rawResponse, + }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new LangfuseAPI.Error( + _response.error.body as unknown, + _response.rawResponse, + ); + case 401: + throw new LangfuseAPI.UnauthorizedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 403: + throw new LangfuseAPI.AccessDeniedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 405: + throw new LangfuseAPI.MethodNotAllowedError( + _response.error.body as unknown, + _response.rawResponse, + ); + case 404: + throw new LangfuseAPI.NotFoundError( + _response.error.body as unknown, + _response.rawResponse, + ); + default: + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.LangfuseAPIError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.LangfuseAPITimeoutError( + "Timeout exceeded when calling DELETE /api/public/projects/{projectId}/memberships.", + ); + case "unknown": + throw new errors.LangfuseAPIError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * Get all projects for the organization associated with the API key (requires organization-scoped API key) * @@ -557,6 +836,21 @@ export class Organizations { private async __getOrganizationProjects( requestOptions?: Organizations.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -564,16 +858,7 @@ export class Organizations { "/api/public/organizations/projects", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/organizations/types/DeleteMembershipRequest.ts b/packages/core/src/api/api/resources/organizations/types/DeleteMembershipRequest.ts new file mode 100644 index 00000000..6ae67466 --- /dev/null +++ b/packages/core/src/api/api/resources/organizations/types/DeleteMembershipRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DeleteMembershipRequest { + userId: string; +} diff --git a/packages/core/src/api/api/resources/organizations/types/MembershipDeletionResponse.ts b/packages/core/src/api/api/resources/organizations/types/MembershipDeletionResponse.ts new file mode 100644 index 00000000..274b200f --- /dev/null +++ b/packages/core/src/api/api/resources/organizations/types/MembershipDeletionResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface MembershipDeletionResponse { + message: string; + userId: string; +} diff --git a/packages/core/src/api/api/resources/organizations/types/index.ts b/packages/core/src/api/api/resources/organizations/types/index.ts index 24a8a89e..fa7f563b 100644 --- a/packages/core/src/api/api/resources/organizations/types/index.ts +++ b/packages/core/src/api/api/resources/organizations/types/index.ts @@ -1,6 +1,8 @@ export * from "./MembershipRole.js"; export * from "./MembershipRequest.js"; +export * from "./DeleteMembershipRequest.js"; export * from "./MembershipResponse.js"; +export * from "./MembershipDeletionResponse.js"; export * from "./MembershipsResponse.js"; export * from "./OrganizationProject.js"; export * from "./OrganizationProjectsResponse.js"; diff --git a/packages/core/src/api/api/resources/projects/client/Client.ts b/packages/core/src/api/api/resources/projects/client/Client.ts index fe20ce2c..f8396e72 100644 --- a/packages/core/src/api/api/resources/projects/client/Client.ts +++ b/packages/core/src/api/api/resources/projects/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Projects { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Projects { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -83,6 +83,21 @@ export class Projects { private async __get( requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -90,16 +105,7 @@ export class Projects { "/api/public/projects", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -202,6 +208,21 @@ export class Projects { request: LangfuseAPI.CreateProjectRequest, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -209,16 +230,7 @@ export class Projects { "/api/public/projects", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -327,6 +339,21 @@ export class Projects { request: LangfuseAPI.UpdateProjectRequest, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -334,16 +361,7 @@ export class Projects { `/api/public/projects/${encodeURIComponent(projectId)}`, ), method: "PUT", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -445,6 +463,21 @@ export class Projects { projectId: string, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -452,16 +485,7 @@ export class Projects { `/api/public/projects/${encodeURIComponent(projectId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -560,6 +584,21 @@ export class Projects { projectId: string, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -567,16 +606,7 @@ export class Projects { `/api/public/projects/${encodeURIComponent(projectId)}/apiKeys`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -680,6 +710,21 @@ export class Projects { request: LangfuseAPI.CreateApiKeyRequest = {}, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -687,16 +732,7 @@ export class Projects { `/api/public/projects/${encodeURIComponent(projectId)}/apiKeys`, ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -801,6 +837,21 @@ export class Projects { apiKeyId: string, requestOptions?: Projects.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -808,16 +859,7 @@ export class Projects { `/api/public/projects/${encodeURIComponent(projectId)}/apiKeys/${encodeURIComponent(apiKeyId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/promptVersion/client/Client.ts b/packages/core/src/api/api/resources/promptVersion/client/Client.ts index 6efa7a35..23fb252e 100644 --- a/packages/core/src/api/api/resources/promptVersion/client/Client.ts +++ b/packages/core/src/api/api/resources/promptVersion/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace PromptVersion { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace PromptVersion { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -96,6 +96,21 @@ export class PromptVersion { request: LangfuseAPI.UpdatePromptRequest, requestOptions?: PromptVersion.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -103,16 +118,7 @@ export class PromptVersion { `/api/public/v2/prompts/${encodeURIComponent(name)}/versions/${encodeURIComponent(version)}`, ), method: "PATCH", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", diff --git a/packages/core/src/api/api/resources/prompts/client/Client.ts b/packages/core/src/api/api/resources/prompts/client/Client.ts index 5a207750..59d096fc 100644 --- a/packages/core/src/api/api/resources/prompts/client/Client.ts +++ b/packages/core/src/api/api/resources/prompts/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Prompts { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Prompts { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -104,6 +104,21 @@ export class Prompts { _queryParams["label"] = label; } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -111,16 +126,7 @@ export class Prompts { `/api/public/v2/prompts/${encodeURIComponent(promptName)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -253,6 +259,21 @@ export class Prompts { _queryParams["toUpdatedAt"] = toUpdatedAt; } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -260,16 +281,7 @@ export class Prompts { "/api/public/v2/prompts", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -384,6 +396,21 @@ export class Prompts { request: LangfuseAPI.CreatePromptRequest, requestOptions?: Prompts.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -391,16 +418,7 @@ export class Prompts { "/api/public/v2/prompts", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", diff --git a/packages/core/src/api/api/resources/prompts/client/requests/GetPromptRequest.ts b/packages/core/src/api/api/resources/prompts/client/requests/GetPromptRequest.ts index abc4c3f2..2fddaf0a 100644 --- a/packages/core/src/api/api/resources/prompts/client/requests/GetPromptRequest.ts +++ b/packages/core/src/api/api/resources/prompts/client/requests/GetPromptRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetPromptRequest { - /** - * Version of the prompt to be retrieved. - */ + /** Version of the prompt to be retrieved. */ version?: number; - /** - * Label of the prompt to be retrieved. Defaults to "production" if no label or version is set. - */ + /** Label of the prompt to be retrieved. Defaults to "production" if no label or version is set. */ label?: string; } diff --git a/packages/core/src/api/api/resources/prompts/client/requests/ListPromptsMetaRequest.ts b/packages/core/src/api/api/resources/prompts/client/requests/ListPromptsMetaRequest.ts index 75e08f44..9a448c23 100644 --- a/packages/core/src/api/api/resources/prompts/client/requests/ListPromptsMetaRequest.ts +++ b/packages/core/src/api/api/resources/prompts/client/requests/ListPromptsMetaRequest.ts @@ -10,20 +10,12 @@ export interface ListPromptsMetaRequest { name?: string; label?: string; tag?: string; - /** - * page number, starts at 1 - */ + /** page number, starts at 1 */ page?: number; - /** - * limit of items per page - */ + /** limit of items per page */ limit?: number; - /** - * Optional filter to only include prompt versions created/updated on or after a certain datetime (ISO 8601) - */ + /** Optional filter to only include prompt versions created/updated on or after a certain datetime (ISO 8601) */ fromUpdatedAt?: string; - /** - * Optional filter to only include prompt versions created/updated before a certain datetime (ISO 8601) - */ + /** Optional filter to only include prompt versions created/updated before a certain datetime (ISO 8601) */ toUpdatedAt?: string; } diff --git a/packages/core/src/api/api/resources/scim/client/Client.ts b/packages/core/src/api/api/resources/scim/client/Client.ts index d64a4a7b..d85f2100 100644 --- a/packages/core/src/api/api/resources/scim/client/Client.ts +++ b/packages/core/src/api/api/resources/scim/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Scim { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Scim { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -85,6 +85,21 @@ export class Scim { private async __getServiceProviderConfig( requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -92,16 +107,7 @@ export class Scim { "/api/public/scim/ServiceProviderConfig", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -197,6 +203,21 @@ export class Scim { private async __getResourceTypes( requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -204,16 +225,7 @@ export class Scim { "/api/public/scim/ResourceTypes", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -309,6 +321,21 @@ export class Scim { private async __getSchemas( requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -316,16 +343,7 @@ export class Scim { "/api/public/scim/Schemas", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -441,6 +459,21 @@ export class Scim { _queryParams["count"] = count.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -448,16 +481,7 @@ export class Scim { "/api/public/scim/Users", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -564,6 +588,21 @@ export class Scim { request: LangfuseAPI.CreateUserRequest, requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -571,16 +610,7 @@ export class Scim { "/api/public/scim/Users", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -682,6 +712,21 @@ export class Scim { userId: string, requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -689,16 +734,7 @@ export class Scim { `/api/public/scim/Users/${encodeURIComponent(userId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -797,6 +833,21 @@ export class Scim { userId: string, requestOptions?: Scim.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -804,16 +855,7 @@ export class Scim { `/api/public/scim/Users/${encodeURIComponent(userId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/scim/client/requests/ListUsersRequest.ts b/packages/core/src/api/api/resources/scim/client/requests/ListUsersRequest.ts index eb24c34d..3f7d09ac 100644 --- a/packages/core/src/api/api/resources/scim/client/requests/ListUsersRequest.ts +++ b/packages/core/src/api/api/resources/scim/client/requests/ListUsersRequest.ts @@ -7,16 +7,10 @@ * {} */ export interface ListUsersRequest { - /** - * Filter expression (e.g. userName eq "value") - */ + /** Filter expression (e.g. userName eq "value") */ filter?: string; - /** - * 1-based index of the first result to return (default 1) - */ + /** 1-based index of the first result to return (default 1) */ startIndex?: number; - /** - * Maximum number of results to return (default 100) - */ + /** Maximum number of results to return (default 100) */ count?: number; } diff --git a/packages/core/src/api/api/resources/score/client/Client.ts b/packages/core/src/api/api/resources/score/client/Client.ts index 18db6ab6..69fa81c5 100644 --- a/packages/core/src/api/api/resources/score/client/Client.ts +++ b/packages/core/src/api/api/resources/score/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Score { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Score { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -101,6 +101,21 @@ export class Score { request: LangfuseAPI.CreateScoreRequest, requestOptions?: Score.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -108,16 +123,7 @@ export class Score { "/api/public/scores", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -219,6 +225,21 @@ export class Score { scoreId: string, requestOptions?: Score.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -226,16 +247,7 @@ export class Score { `/api/public/scores/${encodeURIComponent(scoreId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/scoreConfigs/client/Client.ts b/packages/core/src/api/api/resources/scoreConfigs/client/Client.ts index b827e357..b53c191a 100644 --- a/packages/core/src/api/api/resources/scoreConfigs/client/Client.ts +++ b/packages/core/src/api/api/resources/scoreConfigs/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace ScoreConfigs { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace ScoreConfigs { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -95,6 +95,21 @@ export class ScoreConfigs { request: LangfuseAPI.CreateScoreConfigRequest, requestOptions?: ScoreConfigs.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -102,16 +117,7 @@ export class ScoreConfigs { "/api/public/score-configs", ), method: "POST", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", @@ -226,6 +232,21 @@ export class ScoreConfigs { _queryParams["limit"] = limit.toString(); } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -233,16 +254,7 @@ export class ScoreConfigs { "/api/public/score-configs", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -341,6 +353,21 @@ export class ScoreConfigs { configId: string, requestOptions?: ScoreConfigs.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -348,16 +375,7 @@ export class ScoreConfigs { `/api/public/score-configs/${encodeURIComponent(configId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/scoreConfigs/client/requests/GetScoreConfigsRequest.ts b/packages/core/src/api/api/resources/scoreConfigs/client/requests/GetScoreConfigsRequest.ts index a24a8f8c..0fea1d91 100644 --- a/packages/core/src/api/api/resources/scoreConfigs/client/requests/GetScoreConfigsRequest.ts +++ b/packages/core/src/api/api/resources/scoreConfigs/client/requests/GetScoreConfigsRequest.ts @@ -7,12 +7,8 @@ * {} */ export interface GetScoreConfigsRequest { - /** - * Page number, starts at 1. - */ + /** Page number, starts at 1. */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit */ limit?: number; } diff --git a/packages/core/src/api/api/resources/scoreV2/client/Client.ts b/packages/core/src/api/api/resources/scoreV2/client/Client.ts index a96fcf61..3182e373 100644 --- a/packages/core/src/api/api/resources/scoreV2/client/Client.ts +++ b/packages/core/src/api/api/resources/scoreV2/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace ScoreV2 { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace ScoreV2 { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -101,6 +101,7 @@ export class ScoreV2 { value, scoreIds, configId, + sessionId, queueId, dataType, traceTags, @@ -161,6 +162,10 @@ export class ScoreV2 { _queryParams["configId"] = configId; } + if (sessionId != null) { + _queryParams["sessionId"] = sessionId; + } + if (queueId != null) { _queryParams["queueId"] = queueId; } @@ -177,6 +182,21 @@ export class ScoreV2 { } } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -184,16 +204,7 @@ export class ScoreV2 { "/api/public/v2/scores", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -292,6 +303,21 @@ export class ScoreV2 { scoreId: string, requestOptions?: ScoreV2.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -299,16 +325,7 @@ export class ScoreV2 { `/api/public/v2/scores/${encodeURIComponent(scoreId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/scoreV2/client/requests/GetScoresRequest.ts b/packages/core/src/api/api/resources/scoreV2/client/requests/GetScoresRequest.ts index e66d8b88..ba1f53ca 100644 --- a/packages/core/src/api/api/resources/scoreV2/client/requests/GetScoresRequest.ts +++ b/packages/core/src/api/api/resources/scoreV2/client/requests/GetScoresRequest.ts @@ -9,64 +9,36 @@ import * as LangfuseAPI from "../../../../index.js"; * {} */ export interface GetScoresRequest { - /** - * Page number, starts at 1. - */ + /** Page number, starts at 1. */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. */ limit?: number; - /** - * Retrieve only scores with this userId associated to the trace. - */ + /** Retrieve only scores with this userId associated to the trace. */ userId?: string; - /** - * Retrieve only scores with this name. - */ + /** Retrieve only scores with this name. */ name?: string; - /** - * Optional filter to only include scores created on or after a certain datetime (ISO 8601) - */ + /** Optional filter to only include scores created on or after a certain datetime (ISO 8601) */ fromTimestamp?: string; - /** - * Optional filter to only include scores created before a certain datetime (ISO 8601) - */ + /** Optional filter to only include scores created before a certain datetime (ISO 8601) */ toTimestamp?: string; - /** - * Optional filter for scores where the environment is one of the provided values. - */ + /** Optional filter for scores where the environment is one of the provided values. */ environment?: string | string[]; - /** - * Retrieve only scores from a specific source. - */ + /** Retrieve only scores from a specific source. */ source?: LangfuseAPI.ScoreSource; - /** - * Retrieve only scores with value. - */ + /** Retrieve only scores with value. */ operator?: string; - /** - * Retrieve only scores with value. - */ + /** Retrieve only scores with value. */ value?: number; - /** - * Comma-separated list of score IDs to limit the results to. - */ + /** Comma-separated list of score IDs to limit the results to. */ scoreIds?: string; - /** - * Retrieve only scores with a specific configId. - */ + /** Retrieve only scores with a specific configId. */ configId?: string; - /** - * Retrieve only scores with a specific annotation queueId. - */ + /** Retrieve only scores with a specific sessionId. */ + sessionId?: string; + /** Retrieve only scores with a specific annotation queueId. */ queueId?: string; - /** - * Retrieve only scores with a specific dataType. - */ + /** Retrieve only scores with a specific dataType. */ dataType?: LangfuseAPI.ScoreDataType; - /** - * Only scores linked to traces that include all of these tags will be returned. - */ + /** Only scores linked to traces that include all of these tags will be returned. */ traceTags?: string | string[]; } diff --git a/packages/core/src/api/api/resources/sessions/client/Client.ts b/packages/core/src/api/api/resources/sessions/client/Client.ts index 1fd9dbf5..15d3d44e 100644 --- a/packages/core/src/api/api/resources/sessions/client/Client.ts +++ b/packages/core/src/api/api/resources/sessions/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Sessions { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Sessions { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -117,6 +117,21 @@ export class Sessions { } } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -124,16 +139,7 @@ export class Sessions { "/api/public/sessions", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -232,6 +238,21 @@ export class Sessions { sessionId: string, requestOptions?: Sessions.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -239,16 +260,7 @@ export class Sessions { `/api/public/sessions/${encodeURIComponent(sessionId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null diff --git a/packages/core/src/api/api/resources/sessions/client/requests/GetSessionsRequest.ts b/packages/core/src/api/api/resources/sessions/client/requests/GetSessionsRequest.ts index 89cb194a..a7b99ab0 100644 --- a/packages/core/src/api/api/resources/sessions/client/requests/GetSessionsRequest.ts +++ b/packages/core/src/api/api/resources/sessions/client/requests/GetSessionsRequest.ts @@ -7,24 +7,14 @@ * {} */ export interface GetSessionsRequest { - /** - * Page number, starts at 1 - */ + /** Page number, starts at 1 */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. */ limit?: number; - /** - * Optional filter to only include sessions created on or after a certain datetime (ISO 8601) - */ + /** Optional filter to only include sessions created on or after a certain datetime (ISO 8601) */ fromTimestamp?: string; - /** - * Optional filter to only include sessions created before a certain datetime (ISO 8601) - */ + /** Optional filter to only include sessions created before a certain datetime (ISO 8601) */ toTimestamp?: string; - /** - * Optional filter for sessions where the environment is one of the provided values. - */ + /** Optional filter for sessions where the environment is one of the provided values. */ environment?: string | string[]; } diff --git a/packages/core/src/api/api/resources/trace/client/Client.ts b/packages/core/src/api/api/resources/trace/client/Client.ts index 0a7fec10..16f92037 100644 --- a/packages/core/src/api/api/resources/trace/client/Client.ts +++ b/packages/core/src/api/api/resources/trace/client/Client.ts @@ -26,7 +26,7 @@ export declare namespace Trace { /** Additional headers to include in requests. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } @@ -48,7 +48,7 @@ export declare namespace Trace { /** Additional headers to include in the request. */ headers?: Record< string, - string | core.Supplier | undefined + string | core.Supplier | null | undefined >; } } @@ -88,6 +88,21 @@ export class Trace { traceId: string, requestOptions?: Trace.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -95,16 +110,7 @@ export class Trace { `/api/public/traces/${encodeURIComponent(traceId)}`, ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -203,6 +209,21 @@ export class Trace { traceId: string, requestOptions?: Trace.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -210,16 +231,7 @@ export class Trace { `/api/public/traces/${encodeURIComponent(traceId)}`, ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: requestOptions?.queryParams, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -397,6 +409,21 @@ export class Trace { _queryParams["fields"] = fields; } + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -404,16 +431,7 @@ export class Trace { "/api/public/traces", ), method: "GET", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, timeoutMs: requestOptions?.timeoutInSeconds != null @@ -514,6 +532,21 @@ export class Trace { request: LangfuseAPI.DeleteTracesRequest, requestOptions?: Trace.RequestOptions, ): Promise> { + let _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + Authorization: await this._getAuthorizationHeader(), + "X-Langfuse-Sdk-Name": + requestOptions?.xLangfuseSdkName ?? this._options?.xLangfuseSdkName, + "X-Langfuse-Sdk-Version": + requestOptions?.xLangfuseSdkVersion ?? + this._options?.xLangfuseSdkVersion, + "X-Langfuse-Public-Key": + requestOptions?.xLangfusePublicKey ?? + this._options?.xLangfusePublicKey, + }), + requestOptions?.headers, + ); const _response = await core.fetcher({ url: core.url.join( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -521,16 +554,7 @@ export class Trace { "/api/public/traces", ), method: "DELETE", - headers: mergeHeaders( - this._options?.headers, - mergeOnlyDefinedHeaders({ - Authorization: await this._getAuthorizationHeader(), - "X-Langfuse-Sdk-Name": requestOptions?.xLangfuseSdkName, - "X-Langfuse-Sdk-Version": requestOptions?.xLangfuseSdkVersion, - "X-Langfuse-Public-Key": requestOptions?.xLangfusePublicKey, - }), - requestOptions?.headers, - ), + headers: _headers, contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", diff --git a/packages/core/src/api/api/resources/trace/client/requests/GetTracesRequest.ts b/packages/core/src/api/api/resources/trace/client/requests/GetTracesRequest.ts index fba8541b..28afff05 100644 --- a/packages/core/src/api/api/resources/trace/client/requests/GetTracesRequest.ts +++ b/packages/core/src/api/api/resources/trace/client/requests/GetTracesRequest.ts @@ -7,47 +7,27 @@ * {} */ export interface GetTracesRequest { - /** - * Page number, starts at 1 - */ + /** Page number, starts at 1 */ page?: number; - /** - * Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. - */ + /** Limit of items per page. If you encounter api issues due to too large page sizes, try to reduce the limit. */ limit?: number; userId?: string; name?: string; sessionId?: string; - /** - * Optional filter to only include traces with a trace.timestamp on or after a certain datetime (ISO 8601) - */ + /** Optional filter to only include traces with a trace.timestamp on or after a certain datetime (ISO 8601) */ fromTimestamp?: string; - /** - * Optional filter to only include traces with a trace.timestamp before a certain datetime (ISO 8601) - */ + /** Optional filter to only include traces with a trace.timestamp before a certain datetime (ISO 8601) */ toTimestamp?: string; - /** - * Format of the string [field].[asc/desc]. Fields: id, timestamp, name, userId, release, version, public, bookmarked, sessionId. Example: timestamp.asc - */ + /** Format of the string [field].[asc/desc]. Fields: id, timestamp, name, userId, release, version, public, bookmarked, sessionId. Example: timestamp.asc */ orderBy?: string; - /** - * Only traces that include all of these tags will be returned. - */ + /** Only traces that include all of these tags will be returned. */ tags?: string | string[]; - /** - * Optional filter to only include traces with a certain version. - */ + /** Optional filter to only include traces with a certain version. */ version?: string; - /** - * Optional filter to only include traces with a certain release. - */ + /** Optional filter to only include traces with a certain release. */ release?: string; - /** - * Optional filter for traces where the environment is one of the provided values. - */ + /** Optional filter for traces where the environment is one of the provided values. */ environment?: string | string[]; - /** - * Comma-separated list of fields to include in the response. Available field groups are 'core' (always included), 'io' (input, output, metadata), 'scores', 'observations', 'metrics'. If not provided, all fields are included. Example: 'core,scores,metrics' - */ + /** Comma-separated list of fields to include in the response. Available field groups: 'core' (always included), 'io' (input, output, metadata), 'scores', 'observations', 'metrics'. If not specified, all fields are returned. Example: 'core,scores,metrics'. Note: Excluded 'observations' or 'scores' fields return empty arrays; excluded 'metrics' returns -1 for 'totalCost' and 'latency'. */ fields?: string; } diff --git a/packages/core/src/api/core/auth/AuthProvider.ts b/packages/core/src/api/core/auth/AuthProvider.ts new file mode 100644 index 00000000..65e6ad5e --- /dev/null +++ b/packages/core/src/api/core/auth/AuthProvider.ts @@ -0,0 +1,5 @@ +import { AuthRequest } from "./AuthRequest.js"; + +export interface AuthProvider { + getAuthRequest(): Promise; +} diff --git a/packages/core/src/api/core/auth/AuthRequest.ts b/packages/core/src/api/core/auth/AuthRequest.ts new file mode 100644 index 00000000..ccd69f5e --- /dev/null +++ b/packages/core/src/api/core/auth/AuthRequest.ts @@ -0,0 +1,9 @@ +/** + * Request parameters for authentication requests. + */ +export interface AuthRequest { + /** + * The headers to be included in the request. + */ + headers: Record; +} diff --git a/packages/core/src/api/core/auth/index.ts b/packages/core/src/api/core/auth/index.ts index 59c0fe7a..3e147a6d 100644 --- a/packages/core/src/api/core/auth/index.ts +++ b/packages/core/src/api/core/auth/index.ts @@ -1,2 +1,4 @@ +export { type AuthProvider } from "./AuthProvider.js"; +export { type AuthRequest } from "./AuthRequest.js"; export { BasicAuth } from "./BasicAuth.js"; export { BearerToken } from "./BearerToken.js"; diff --git a/packages/core/src/api/core/fetcher/Fetcher.ts b/packages/core/src/api/core/fetcher/Fetcher.ts index 1e34013a..a74add35 100644 --- a/packages/core/src/api/core/fetcher/Fetcher.ts +++ b/packages/core/src/api/core/fetcher/Fetcher.ts @@ -1,18 +1,18 @@ import { toJson } from "../json.js"; import { APIResponse } from "./APIResponse.js"; -import { - abortRawResponse, - toRawResponse, - unknownRawResponse, -} from "./RawResponse.js"; -import { Supplier } from "./Supplier.js"; import { createRequestUrl } from "./createRequestUrl.js"; import { getErrorResponseBody } from "./getErrorResponseBody.js"; import { getFetchFn } from "./getFetchFn.js"; import { getRequestBody } from "./getRequestBody.js"; import { getResponseBody } from "./getResponseBody.js"; import { makeRequest } from "./makeRequest.js"; +import { + abortRawResponse, + toRawResponse, + unknownRawResponse, +} from "./RawResponse.js"; import { requestWithRetries } from "./requestWithRetries.js"; +import { Supplier } from "./Supplier.js"; export type FetchFunction = ( args: Fetcher.Args, @@ -23,7 +23,10 @@ export declare namespace Fetcher { url: string; method: string; contentType?: string; - headers?: Record | undefined>; + headers?: Record< + string, + string | Supplier | null | undefined + >; queryParameters?: Record; body?: unknown; timeoutMs?: number; diff --git a/packages/core/src/api/core/fetcher/index.ts b/packages/core/src/api/core/fetcher/index.ts index 85b9d782..92168bae 100644 --- a/packages/core/src/api/core/fetcher/index.ts +++ b/packages/core/src/api/core/fetcher/index.ts @@ -1,13 +1,13 @@ export type { APIResponse } from "./APIResponse.js"; -export { fetcher } from "./Fetcher.js"; +export type { BinaryResponse } from "./BinaryResponse.js"; export type { Fetcher, FetchFunction } from "./Fetcher.js"; +export { fetcher } from "./Fetcher.js"; export { getHeader } from "./getHeader.js"; -export { Supplier } from "./Supplier.js"; +export { HttpResponsePromise } from "./HttpResponsePromise.js"; +export type { RawResponse, WithRawResponse } from "./RawResponse.js"; export { abortRawResponse, toRawResponse, unknownRawResponse, } from "./RawResponse.js"; -export type { RawResponse, WithRawResponse } from "./RawResponse.js"; -export { HttpResponsePromise } from "./HttpResponsePromise.js"; -export { type BinaryResponse } from "./BinaryResponse.js"; +export { Supplier } from "./Supplier.js"; diff --git a/packages/core/src/api/core/fetcher/requestWithRetries.ts b/packages/core/src/api/core/fetcher/requestWithRetries.ts index 48d5f847..04347a63 100644 --- a/packages/core/src/api/core/fetcher/requestWithRetries.ts +++ b/packages/core/src/api/core/fetcher/requestWithRetries.ts @@ -3,12 +3,60 @@ const MAX_RETRY_DELAY = 60000; // in milliseconds const DEFAULT_MAX_RETRIES = 2; const JITTER_FACTOR = 0.2; // 20% random jitter -function addJitter(delay: number): number { - // Generate a random value between -JITTER_FACTOR and +JITTER_FACTOR - const jitterMultiplier = 1 + (Math.random() * 2 - 1) * JITTER_FACTOR; +function addPositiveJitter(delay: number): number { + // Generate a random value between 0 and +JITTER_FACTOR + const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR; return delay * jitterMultiplier; } +function addSymmetricJitter(delay: number): number { + // Generate a random value in a JITTER_FACTOR-sized percentage range around delay + const jitterMultiplier = 1 + (Math.random() - 0.5) * JITTER_FACTOR; + return delay * jitterMultiplier; +} + +function getRetryDelayFromHeaders( + response: Response, + retryAttempt: number, +): number { + // Check for Retry-After header first (RFC 7231), with no jitter + const retryAfter = response.headers.get("Retry-After"); + if (retryAfter) { + // Parse as number of seconds... + const retryAfterSeconds = parseInt(retryAfter, 10); + if (!isNaN(retryAfterSeconds) && retryAfterSeconds > 0) { + return Math.min(retryAfterSeconds * 1000, MAX_RETRY_DELAY); + } + + // ...or as an HTTP date; both are valid + const retryAfterDate = new Date(retryAfter); + if (!isNaN(retryAfterDate.getTime())) { + const delay = retryAfterDate.getTime() - Date.now(); + if (delay > 0) { + return Math.min(Math.max(delay, 0), MAX_RETRY_DELAY); + } + } + } + + // Then check for industry-standard X-RateLimit-Reset header, with positive jitter + const rateLimitReset = response.headers.get("X-RateLimit-Reset"); + if (rateLimitReset) { + const resetTime = parseInt(rateLimitReset, 10); + if (!isNaN(resetTime)) { + // Assume Unix timestamp in epoch seconds + const delay = resetTime * 1000 - Date.now(); + if (delay > 0) { + return addPositiveJitter(Math.min(delay, MAX_RETRY_DELAY)); + } + } + } + + // Fall back to exponential backoff, with symmetric jitter + return addSymmetricJitter( + Math.min(INITIAL_RETRY_DELAY * Math.pow(2, retryAttempt), MAX_RETRY_DELAY), + ); +} + export async function requestWithRetries( requestFn: () => Promise, maxRetries: number = DEFAULT_MAX_RETRIES, @@ -17,16 +65,10 @@ export async function requestWithRetries( for (let i = 0; i < maxRetries; ++i) { if ([408, 429].includes(response.status) || response.status >= 500) { - // Calculate base delay using exponential backoff (in milliseconds) - const baseDelay = Math.min( - INITIAL_RETRY_DELAY * Math.pow(2, i), - MAX_RETRY_DELAY, - ); - - // Add jitter to the delay - const delayWithJitter = addJitter(baseDelay); + // Get delay with appropriate jitter applied + const delay = getRetryDelayFromHeaders(response, i); - await new Promise((resolve) => setTimeout(resolve, delayWithJitter)); + await new Promise((resolve) => setTimeout(resolve, delay)); response = await requestFn(); } else { break; diff --git a/packages/core/src/api/core/headers.ts b/packages/core/src/api/core/headers.ts index 29a627ad..1864d3b7 100644 --- a/packages/core/src/api/core/headers.ts +++ b/packages/core/src/api/core/headers.ts @@ -2,11 +2,18 @@ import * as core from "./index.js"; export function mergeHeaders( ...headersArray: ( - | Record | undefined> + | Record< + string, + string | core.Supplier | null | undefined + > + | null | undefined )[] -): Record> { - const result: Record> = {}; +): Record> { + const result: Record< + string, + string | core.Supplier + > = {}; for (const [key, value] of headersArray .filter((headers) => headers != null) @@ -23,11 +30,18 @@ export function mergeHeaders( export function mergeOnlyDefinedHeaders( ...headersArray: ( - | Record | undefined> + | Record< + string, + string | core.Supplier | null | undefined + > + | null | undefined )[] -): Record> { - const result: Record> = {}; +): Record> { + const result: Record< + string, + string | core.Supplier + > = {}; for (const [key, value] of headersArray .filter((headers) => headers != null) From 882146b50c43340e6d1334a15b01203a4c6f45fc Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Fri, 19 Sep 2025 16:41:21 +0200 Subject: [PATCH 4/5] fix(openai): parse response usage (#641) --- packages/openai/src/parseOpenAI.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/openai/src/parseOpenAI.ts b/packages/openai/src/parseOpenAI.ts index 2bf853fd..7b47a16d 100644 --- a/packages/openai/src/parseOpenAI.ts +++ b/packages/openai/src/parseOpenAI.ts @@ -137,9 +137,27 @@ export const parseUsageDetails = ( output_tokens_details, } = completionUsage; + let finalInputTokens = input_tokens as number; + Object.keys(input_tokens_details ?? {}).forEach((key) => { + finalInputTokens = Math.max( + finalInputTokens - + input_tokens_details[key as keyof typeof input_tokens_details], + 0, + ); + }); + + let finalOutputTokens = output_tokens as number; + Object.keys(output_tokens_details ?? {}).forEach((key) => { + finalOutputTokens = Math.max( + finalOutputTokens - + output_tokens_details[key as keyof typeof output_tokens_details], + 0, + ); + }); + return { - input: input_tokens, - output: output_tokens, + input: finalInputTokens, + output: finalOutputTokens, total: total_tokens, ...Object.fromEntries( Object.entries(input_tokens_details ?? {}).map(([key, value]) => [ From 58aea44566ed7876f735fc06cf948a3ed18bf556 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Fri, 19 Sep 2025 16:43:13 +0200 Subject: [PATCH 5/5] chore: release v4.2.0 --- CHANGELOG.md | 15 +++++++++++++++ package.json | 2 +- packages/client/package.json | 2 +- packages/core/package.json | 2 +- packages/langchain/package.json | 2 +- packages/openai/package.json | 2 +- packages/otel/package.json | 2 +- packages/tracing/package.json | 2 +- 8 files changed, 22 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 905979fa..a3ceb1f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [4.2.0](https://github.com/langfuse/langfuse-js/compare/v4.1.0...v4.2.0) (2025-09-19) + +### ✨ Features + +* **api:** update API spec from langfuse/langfuse 0b68c41 ([#640](https://github.com/langfuse/langfuse-js/issues/640)) ([2aff295](https://github.com/langfuse/langfuse-js/commit/2aff295209db2906e9c3935f7e72563311bbfe4f)) + +### 🐛 Bug Fixes + +* **message-placeholders:** use plain text langchain format for placeh… ([#616](https://github.com/langfuse/langfuse-js/issues/616)) ([7229b1a](https://github.com/langfuse/langfuse-js/commit/7229b1a2ff71d62eea1551ebd0afb6e5c4e6918f)) +* **openai:** parse response usage ([#641](https://github.com/langfuse/langfuse-js/issues/641)) ([882146b](https://github.com/langfuse/langfuse-js/commit/882146b50c43340e6d1334a15b01203a4c6f45fc)) + +### 🔧 Maintenance + +* add test for observation error level through langchain integration ([#637](https://github.com/langfuse/langfuse-js/issues/637)) ([f23386c](https://github.com/langfuse/langfuse-js/commit/f23386cfdb0df9ce88d5cd412c2c0ae3c3a2b7df)) + ## [4.1.0](https://github.com/langfuse/langfuse-js/compare/v4.0.1...v4.1.0) (2025-09-17) ### ✨ Features diff --git a/package.json b/package.json index 12bdcfde..6e520230 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "langfuse-js", - "version": "4.1.0", + "version": "4.2.0", "description": "Langfuse JavaScript / TypeScript SDK", "author": "Langfuse", "license": "MIT", diff --git a/packages/client/package.json b/packages/client/package.json index 469ad079..64f72437 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/client", - "version": "4.1.0", + "version": "4.2.0", "description": "Langfuse API client for universal JavaScript environments", "type": "module", "sideEffects": false, diff --git a/packages/core/package.json b/packages/core/package.json index 5c7953e5..beb16b1c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/core", - "version": "4.1.0", + "version": "4.2.0", "description": "Core functions and utilities for Langfuse packages", "type": "module", "sideEffects": false, diff --git a/packages/langchain/package.json b/packages/langchain/package.json index 17141d58..d6f6e174 100644 --- a/packages/langchain/package.json +++ b/packages/langchain/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/langchain", - "version": "4.1.0", + "version": "4.2.0", "description": "Langfuse integration for LangChain", "type": "module", "sideEffects": false, diff --git a/packages/openai/package.json b/packages/openai/package.json index 9f3d7392..5c035feb 100644 --- a/packages/openai/package.json +++ b/packages/openai/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/openai", - "version": "4.1.0", + "version": "4.2.0", "description": "Langfuse integration for OpenAI SDK", "type": "module", "sideEffects": false, diff --git a/packages/otel/package.json b/packages/otel/package.json index 4468ce68..4279f5ea 100644 --- a/packages/otel/package.json +++ b/packages/otel/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/otel", - "version": "4.1.0", + "version": "4.2.0", "author": "Langfuse", "license": "MIT", "engines": { diff --git a/packages/tracing/package.json b/packages/tracing/package.json index 06c095d7..97c994c0 100644 --- a/packages/tracing/package.json +++ b/packages/tracing/package.json @@ -1,6 +1,6 @@ { "name": "@langfuse/tracing", - "version": "4.1.0", + "version": "4.2.0", "author": "Langfuse", "license": "MIT", "engines": {