Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package com.braintrustdata.api.client

import com.braintrustdata.api.core.ClientOptions
import com.braintrustdata.api.core.getPackageVersion
import com.braintrustdata.api.models.*
import com.braintrustdata.api.services.async.*

Expand All @@ -11,51 +12,78 @@ constructor(
private val clientOptions: ClientOptions,
) : BraintrustClientAsync {

private val clientOptionsWithUserAgent =
if (clientOptions.headers.containsKey("User-Agent")) clientOptions
else
clientOptions
.toBuilder()
.putHeader("User-Agent", "${javaClass.simpleName}/Java ${getPackageVersion()}")
.build()

// Pass the original clientOptions so that this client sets its own User-Agent.
private val sync: BraintrustClient by lazy { BraintrustClientImpl(clientOptions) }

private val topLevel: TopLevelServiceAsync by lazy { TopLevelServiceAsyncImpl(clientOptions) }
private val topLevel: TopLevelServiceAsync by lazy {
TopLevelServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val projects: ProjectServiceAsync by lazy { ProjectServiceAsyncImpl(clientOptions) }
private val projects: ProjectServiceAsync by lazy {
ProjectServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val experiments: ExperimentServiceAsync by lazy {
ExperimentServiceAsyncImpl(clientOptions)
ExperimentServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val datasets: DatasetServiceAsync by lazy { DatasetServiceAsyncImpl(clientOptions) }
private val datasets: DatasetServiceAsync by lazy {
DatasetServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val prompts: PromptServiceAsync by lazy { PromptServiceAsyncImpl(clientOptions) }
private val prompts: PromptServiceAsync by lazy {
PromptServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val roles: RoleServiceAsync by lazy { RoleServiceAsyncImpl(clientOptions) }
private val roles: RoleServiceAsync by lazy { RoleServiceAsyncImpl(clientOptionsWithUserAgent) }

private val groups: GroupServiceAsync by lazy { GroupServiceAsyncImpl(clientOptions) }
private val groups: GroupServiceAsync by lazy {
GroupServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val acls: AclServiceAsync by lazy { AclServiceAsyncImpl(clientOptions) }
private val acls: AclServiceAsync by lazy { AclServiceAsyncImpl(clientOptionsWithUserAgent) }

private val users: UserServiceAsync by lazy { UserServiceAsyncImpl(clientOptions) }
private val users: UserServiceAsync by lazy { UserServiceAsyncImpl(clientOptionsWithUserAgent) }

private val projectScores: ProjectScoreServiceAsync by lazy {
ProjectScoreServiceAsyncImpl(clientOptions)
ProjectScoreServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val projectTags: ProjectTagServiceAsync by lazy {
ProjectTagServiceAsyncImpl(clientOptions)
ProjectTagServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val functions: FunctionServiceAsync by lazy { FunctionServiceAsyncImpl(clientOptions) }
private val functions: FunctionServiceAsync by lazy {
FunctionServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val views: ViewServiceAsync by lazy { ViewServiceAsyncImpl(clientOptions) }
private val views: ViewServiceAsync by lazy { ViewServiceAsyncImpl(clientOptionsWithUserAgent) }

private val organizations: OrganizationServiceAsync by lazy {
OrganizationServiceAsyncImpl(clientOptions)
OrganizationServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val apiKeys: ApiKeyServiceAsync by lazy { ApiKeyServiceAsyncImpl(clientOptions) }
private val apiKeys: ApiKeyServiceAsync by lazy {
ApiKeyServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val aiSecrets: AiSecretServiceAsync by lazy { AiSecretServiceAsyncImpl(clientOptions) }
private val aiSecrets: AiSecretServiceAsync by lazy {
AiSecretServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val envVars: EnvVarServiceAsync by lazy { EnvVarServiceAsyncImpl(clientOptions) }
private val envVars: EnvVarServiceAsync by lazy {
EnvVarServiceAsyncImpl(clientOptionsWithUserAgent)
}

private val evals: EvalServiceAsync by lazy { EvalServiceAsyncImpl(clientOptions) }
private val evals: EvalServiceAsync by lazy { EvalServiceAsyncImpl(clientOptionsWithUserAgent) }

override fun sync(): BraintrustClient = sync

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package com.braintrustdata.api.client

import com.braintrustdata.api.core.ClientOptions
import com.braintrustdata.api.core.getPackageVersion
import com.braintrustdata.api.models.*
import com.braintrustdata.api.services.blocking.*

Expand All @@ -11,47 +12,66 @@ constructor(
private val clientOptions: ClientOptions,
) : BraintrustClient {

private val clientOptionsWithUserAgent =
if (clientOptions.headers.containsKey("User-Agent")) clientOptions
else
clientOptions
.toBuilder()
.putHeader("User-Agent", "${javaClass.simpleName}/Java ${getPackageVersion()}")
.build()

// Pass the original clientOptions so that this client sets its own User-Agent.
private val async: BraintrustClientAsync by lazy { BraintrustClientAsyncImpl(clientOptions) }

private val topLevel: TopLevelService by lazy { TopLevelServiceImpl(clientOptions) }
private val topLevel: TopLevelService by lazy {
TopLevelServiceImpl(clientOptionsWithUserAgent)
}

private val projects: ProjectService by lazy { ProjectServiceImpl(clientOptions) }
private val projects: ProjectService by lazy { ProjectServiceImpl(clientOptionsWithUserAgent) }

private val experiments: ExperimentService by lazy { ExperimentServiceImpl(clientOptions) }
private val experiments: ExperimentService by lazy {
ExperimentServiceImpl(clientOptionsWithUserAgent)
}

private val datasets: DatasetService by lazy { DatasetServiceImpl(clientOptions) }
private val datasets: DatasetService by lazy { DatasetServiceImpl(clientOptionsWithUserAgent) }

private val prompts: PromptService by lazy { PromptServiceImpl(clientOptions) }
private val prompts: PromptService by lazy { PromptServiceImpl(clientOptionsWithUserAgent) }

private val roles: RoleService by lazy { RoleServiceImpl(clientOptions) }
private val roles: RoleService by lazy { RoleServiceImpl(clientOptionsWithUserAgent) }

private val groups: GroupService by lazy { GroupServiceImpl(clientOptions) }
private val groups: GroupService by lazy { GroupServiceImpl(clientOptionsWithUserAgent) }

private val acls: AclService by lazy { AclServiceImpl(clientOptions) }
private val acls: AclService by lazy { AclServiceImpl(clientOptionsWithUserAgent) }

private val users: UserService by lazy { UserServiceImpl(clientOptions) }
private val users: UserService by lazy { UserServiceImpl(clientOptionsWithUserAgent) }

private val projectScores: ProjectScoreService by lazy {
ProjectScoreServiceImpl(clientOptions)
ProjectScoreServiceImpl(clientOptionsWithUserAgent)
}

private val projectTags: ProjectTagService by lazy { ProjectTagServiceImpl(clientOptions) }
private val projectTags: ProjectTagService by lazy {
ProjectTagServiceImpl(clientOptionsWithUserAgent)
}

private val functions: FunctionService by lazy { FunctionServiceImpl(clientOptions) }
private val functions: FunctionService by lazy {
FunctionServiceImpl(clientOptionsWithUserAgent)
}

private val views: ViewService by lazy { ViewServiceImpl(clientOptions) }
private val views: ViewService by lazy { ViewServiceImpl(clientOptionsWithUserAgent) }

private val organizations: OrganizationService by lazy {
OrganizationServiceImpl(clientOptions)
OrganizationServiceImpl(clientOptionsWithUserAgent)
}

private val apiKeys: ApiKeyService by lazy { ApiKeyServiceImpl(clientOptions) }
private val apiKeys: ApiKeyService by lazy { ApiKeyServiceImpl(clientOptionsWithUserAgent) }

private val aiSecrets: AiSecretService by lazy { AiSecretServiceImpl(clientOptions) }
private val aiSecrets: AiSecretService by lazy {
AiSecretServiceImpl(clientOptionsWithUserAgent)
}

private val envVars: EnvVarService by lazy { EnvVarServiceImpl(clientOptions) }
private val envVars: EnvVarService by lazy { EnvVarServiceImpl(clientOptionsWithUserAgent) }

private val evals: EvalService by lazy { EvalServiceImpl(clientOptions) }
private val evals: EvalService by lazy { EvalServiceImpl(clientOptionsWithUserAgent) }

override fun async(): BraintrustClientAsync = async

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@ private constructor(
@get:JvmName("headers") val headers: ListMultimap<String, String>,
@get:JvmName("queryParams") val queryParams: ListMultimap<String, String>,
@get:JvmName("responseValidation") val responseValidation: Boolean,
@get:JvmName("maxRetries") val maxRetries: Int,
) {

fun toBuilder() = Builder().from(this)

companion object {

const val PRODUCTION_URL = "https://api.braintrust.dev"
Expand All @@ -42,6 +45,25 @@ private constructor(
private var maxRetries: Int = 2
private var apiKey: String? = null

@JvmSynthetic
internal fun from(clientOptions: ClientOptions) = apply {
httpClient = clientOptions.httpClient
jsonMapper = clientOptions.jsonMapper
clock = clientOptions.clock
baseUrl = clientOptions.baseUrl
headers =
clientOptions.headers.asMap().mapValuesTo(mutableMapOf()) { (_, value) ->
value.toMutableList()
}
queryParams =
clientOptions.queryParams.asMap().mapValuesTo(mutableMapOf()) { (_, value) ->
value.toMutableList()
}
responseValidation = clientOptions.responseValidation
maxRetries = clientOptions.maxRetries
apiKey = clientOptions.apiKey
}

fun httpClient(httpClient: HttpClient) = apply { this.httpClient = httpClient }

fun jsonMapper(jsonMapper: JsonMapper) = apply { this.jsonMapper = jsonMapper }
Expand Down Expand Up @@ -129,6 +151,7 @@ private constructor(
headers.toUnmodifiable(),
queryParams.toUnmodifiable(),
responseValidation,
maxRetries,
)
}
}
Expand Down