// Code generated by Fern. DO NOT EDIT.

package ingestion

import (
    core "pentagi/pkg/observability/langfuse/api/core"
    internal "pentagi/pkg/observability/langfuse/api/internal"
    context "context"
    api "pentagi/pkg/observability/langfuse/api"
    option "pentagi/pkg/observability/langfuse/api/option"
)


type Client struct {
    WithRawResponse *RawClient

    options *core.RequestOptions
    baseURL string
    caller *internal.Caller
}

func NewClient(options *core.RequestOptions) *Client {
    return &Client{
        WithRawResponse: NewRawClient(options),
        options: options,
        baseURL: options.BaseURL,
        caller: internal.NewCaller(
            &internal.CallerParams{
                Client: options.HTTPClient,
                MaxAttempts: options.MaxAttempts,
            },
        ),
    }
}

// **Legacy endpoint for batch ingestion for Langfuse Observability.**
// 
// -> Please use the OpenTelemetry endpoint (`/api/public/otel/v1/traces`). 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.
// Internally, we refer to this as the "event envelope" as it tells us something about the event but not the trace.
// We use the event id within this envelope to deduplicate messages to avoid processing the same event twice, i.e. the event id should be unique per request.
// The event.body.id is the ID of the actual trace and will be used for updates and will be visible within the Langfuse App.
// 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/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.
func (c *Client) Batch(
    ctx context.Context,
    request *api.IngestionBatchRequest,
    opts ...option.RequestOption,
) (*api.IngestionResponse, error){
    response, err := c.WithRawResponse.Batch(
        ctx,
        request,
        opts...,
    )
    if err != nil {
        return nil, err
    }
    return response.Body, nil
}

