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 @@ -14,7 +14,7 @@
public class ExperimentExample {
public static void main(String[] args) throws Exception {
var config = BraintrustConfig.fromEnvironment();
var openTelemetry = BraintrustTracing.quickstart(config, true);
var openTelemetry = BraintrustTracing.of(config, true);
var openAIClient = BraintrustOpenAI.wrapOpenAI(openTelemetry, OpenAIOkHttpClient.fromEnv());

Function<String, String> getFoodType =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static void main(String[] args) throws Exception {
"\nWARNING envar OPEN_AI_API_KEY not found. This example will likely fail.\n");
}
var braintrustConfig = BraintrustConfig.fromEnvironment();
var openTelemetry = BraintrustTracing.quickstart(braintrustConfig, true);
var openTelemetry = BraintrustTracing.of(braintrustConfig, true);
var tracer = BraintrustTracing.getTracer(openTelemetry);
OpenAIClient openAIClient =
BraintrustOpenAI.wrapOpenAI(openTelemetry, OpenAIOkHttpClient.fromEnv());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
public class SimpleOpenTelemetryExample {
public static void main(String[] args) throws Exception {
var braintrustConfig = BraintrustConfig.fromEnvironment();
var openTelemetry = BraintrustTracing.quickstart(braintrustConfig, true);
var openTelemetry = BraintrustTracing.of(braintrustConfig, true);
var tracer = BraintrustTracing.getTracer(openTelemetry);

var span = tracer.spanBuilder("hello-java").startSpan();
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/dev/braintrust/api/ApiException.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package dev.braintrust.api;

/** Exception thrown when API operations fail. */
public class ApiException extends RuntimeException {
class ApiException extends RuntimeException {

public ApiException(String message) {
super(message);
Expand Down
343 changes: 180 additions & 163 deletions src/main/java/dev/braintrust/api/BraintrustApiClient.java

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion src/main/java/dev/braintrust/config/BaseConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class BaseConfig {

protected <T> @Nonnull T getConfig(@Nonnull String settingName, @Nonnull T defaultValue) {
Objects.requireNonNull(defaultValue);
return getConfig(settingName, defaultValue, (Class<T>) defaultValue.getClass());
return Objects.requireNonNull(
getConfig(settingName, defaultValue, (Class<T>) defaultValue.getClass()));
}

protected <T> @Nullable T getConfig(
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/braintrust/config/BraintrustConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public Optional<String> getBraintrustParentValue() {
/** fetch all project info and IDs from the braintrust api */
public URI fetchProjectURI() {
try {
var client = new BraintrustApiClient(this);
var client = BraintrustApiClient.of(this);
var orgAndProject = client.getProjectAndOrgInfo().orElseThrow();
return new URI(
appUrl()
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/braintrust/eval/Eval.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public final class Eval<INPUT, OUTPUT> {
private Eval(Builder<INPUT, OUTPUT> builder) {
this.experimentName = builder.experimentName;
this.config = Objects.requireNonNull(builder.config);
this.client = new BraintrustApiClient(config);
this.client = BraintrustApiClient.of(config);
if (null == builder.projectId) {
this.orgAndProject = client.getProjectAndOrgInfo().orElseThrow();
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import io.opentelemetry.api.OpenTelemetry;

public class BraintrustOpenAI {
/** Instrument openai client with braintrust traces */
public static OpenAIClient wrapOpenAI(OpenTelemetry openTelemetry, OpenAIClient openAIClient) {
if ("true".equalsIgnoreCase(System.getenv("BRAINTRUST_X_OTEL_LOGS"))) {
return io.opentelemetry.instrumentation.openai.v1_1.OpenAITelemetry.builder(
Expand Down
1 change: 1 addition & 0 deletions src/main/java/dev/braintrust/log/BraintrustLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public final class BraintrustLogger {

static {
// BT logger will filter log levels so make the impl most permissive
// FIXME: Don't ship this -- we don't want to set common slf4j log properties
System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
// Initialize with default SLF4J implementation
var defaultLogger = LoggerFactory.getLogger(LOGGER_NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* Custom log exporter for Braintrust that adds the x-bt-parent header dynamically based on log
* attributes.
*/
public class BraintrustLogExporter implements LogRecordExporter {
class BraintrustLogExporter implements LogRecordExporter {

private final BraintrustConfig config;
private final String logsEndpoint;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* Custom span exporter for Braintrust that adds the x-bt-parent header dynamically based on span
* attributes.
*/
public class BraintrustSpanExporter implements SpanExporter {
class BraintrustSpanExporter implements SpanExporter {

private final BraintrustConfig config;
private final String tracesEndpoint;
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/dev/braintrust/trace/BraintrustTracing.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static Tracer getTracer(OpenTelemetry openTelemetry) {
* `enable` method.
*/
public static OpenTelemetry quickstart() {
return quickstart(BraintrustConfig.fromEnvironment(), true);
return of(BraintrustConfig.fromEnvironment(), true);
}

/**
Expand All @@ -62,8 +62,7 @@ public static OpenTelemetry quickstart() {
* If you're looking for more options for configuring Braintrust and OpenTelemetry, consult the
* `enable` method.
*/
public static OpenTelemetry quickstart(
@Nonnull BraintrustConfig config, boolean registerGlobal) {
public static OpenTelemetry of(@Nonnull BraintrustConfig config, boolean registerGlobal) {
var tracerBuilder = SdkTracerProvider.builder();
var loggerBuilder = SdkLoggerProvider.builder();
var meterBuilder = SdkMeterProvider.builder();
Expand Down
85 changes: 0 additions & 85 deletions src/main/java/dev/braintrust/trace/DebugSpanExporter.java

This file was deleted.

9 changes: 7 additions & 2 deletions src/test/java/dev/braintrust/config/BaseConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.junit.jupiter.api.Assertions.*;

import java.util.Map;
import javax.annotation.Nonnull;
import org.junit.jupiter.api.Test;

public class BaseConfigTest {
Expand Down Expand Up @@ -186,21 +187,25 @@ static class TestConfig extends BaseConfig {
super(envOverrides);
}

@Nonnull
@Override
public <T> T getConfig(String settingName, T defaultValue) {
public <T> T getConfig(@Nonnull String settingName, @Nonnull T defaultValue) {
return super.getConfig(settingName, defaultValue);
}

@Override
public <T> T getConfig(String settingName, T defaultValue, Class<T> settingClass) {
public <T> T getConfig(
@Nonnull String settingName, T defaultValue, @Nonnull Class<T> settingClass) {
return super.getConfig(settingName, defaultValue, settingClass);
}

@Nonnull
@Override
public String getRequiredConfig(String settingName) {
return super.getRequiredConfig(settingName);
}

@Nonnull
@Override
public <T> T getRequiredConfig(String settingName, Class<T> settingClass) {
return super.getRequiredConfig(settingName, settingClass);
Expand Down
21 changes: 16 additions & 5 deletions src/test/java/dev/braintrust/config/BraintrustConfigTest.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
package dev.braintrust.config;

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

class BraintrustConfigTest {
@Test
void parentLogic() {
void parentDefaultsToProjectName() {
var defaultConfig = BraintrustConfig.of("BRAINTRUST_API_KEY", "foobar");
assertTrue(
defaultConfig.getBraintrustParentValue().isPresent(),
"default config should have a parent");
assertEquals(
"project_name:" + defaultConfig.defaultProjectName().orElseThrow(),
defaultConfig.getBraintrustParentValue().orElseThrow());
}

@Test
void parentUsesProjectId() {
var defaultConfig =
BraintrustConfig.of(
"BRAINTRUST_API_KEY", "foobar",
"BRAINTRUST_DEFAULT_PROJECT_ID", "12345");
assertEquals(
"project_id:" + defaultConfig.defaultProjectId().orElseThrow(),
defaultConfig.getBraintrustParentValue().orElseThrow());
}
}