Skip to content

Commit 2af9284

Browse files
committed
wip
1 parent 2994ded commit 2af9284

14 files changed

Lines changed: 1993 additions & 21 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,8 @@ var eval = braintrust.<String, String>evalBuilder()
5757
.taskFunction(getFoodType)
5858
.scorers(
5959
Scorer.of(
60-
"fruit_scorer",
61-
result -> "fruit".equals(result) ? 1.0 : 0.0),
62-
Scorer.of(
63-
"vegetable_scorer",
64-
result -> "vegetable".equals(result) ? 1.0 : 0.0))
60+
"exact_match",
61+
(expected, result) -> expected.equals(result) ? 1.0 : 0.0))
6562
.build();
6663
var result = eval.run();
6764
System.out.println("\n\n" + result.createReportString());

‎examples/build.gradle‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,18 @@ task runSpringAI(type: JavaExec) {
141141
suspend = false
142142
}
143143
}
144+
145+
146+
task runRemoteEval(type: JavaExec) {
147+
group = 'Braintrust SDK Examples'
148+
description = 'Run the remote eval example'
149+
classpath = sourceSets.main.runtimeClasspath
150+
mainClass = 'dev.braintrust.examples.RemoteEvalExample'
151+
systemProperty 'org.slf4j.simpleLogger.log.dev.braintrust', braintrustLogLevel
152+
debugOptions {
153+
enabled = true
154+
port = 5566
155+
server = true
156+
suspend = false
157+
}
158+
}

‎examples/src/main/java/dev/braintrust/examples/ExperimentExample.java‎

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,8 @@ public static void main(String[] args) throws Exception {
3434
var eval =
3535
braintrust
3636
.<String, String>evalBuilder()
37-
.name("java-eval-x-" + System.currentTimeMillis()) // NOTE: if you use a
38-
// constant, additional runs
39-
// will append new cases to
40-
// the same experiment
37+
// NOTE: pre-existing experiment names will append results
38+
.name("java-eval-x-" + System.currentTimeMillis())
4139
.cases(
4240
new DatasetCase<>(
4341
"strawberry",
@@ -49,14 +47,13 @@ public static void main(String[] args) throws Exception {
4947
DatasetCase.of("asparagus", "vegetable"),
5048
DatasetCase.of("apple", "fruit"),
5149
DatasetCase.of("banana", "fruit"))
50+
// Or, to fetch a remote dataset:
51+
// .dataset(braintrust.fetchDataset("my-dataset-name"))
5252
.taskFunction(getFoodType)
5353
.scorers(
5454
Scorer.of(
55-
"fruit_scorer",
56-
result -> "fruit".equals(result) ? 1.0 : 0.0),
57-
Scorer.of(
58-
"vegetable_scorer",
59-
result -> "vegetable".equals(result) ? 1.0 : 0.0))
55+
"exact_match",
56+
(expected, result) -> expected.equals(result) ? 1.0 : 0.0))
6057
.build();
6158
var result = eval.run();
6259
System.out.println("\n\n" + result.createReportString());
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package dev.braintrust.examples;
2+
3+
import com.openai.client.okhttp.OpenAIOkHttpClient;
4+
import com.openai.models.ChatModel;
5+
import com.openai.models.chat.completions.ChatCompletionCreateParams;
6+
import dev.braintrust.Braintrust;
7+
import dev.braintrust.devserver.Devserver;
8+
import dev.braintrust.devserver.RemoteEval;
9+
import dev.braintrust.eval.Scorer;
10+
import dev.braintrust.instrumentation.openai.BraintrustOpenAI;
11+
import java.util.List;
12+
import java.util.concurrent.CountDownLatch;
13+
14+
/** Simple Dev Server for Remote Evals */
15+
public class RemoteEvalExample {
16+
public static void main(String[] args) throws Exception {
17+
var braintrust = Braintrust.get();
18+
var openTelemetry = braintrust.openTelemetryCreate();
19+
var openAIClient = BraintrustOpenAI.wrapOpenAI(openTelemetry, OpenAIOkHttpClient.fromEnv());
20+
21+
RemoteEval<String, String> foodTypeEval =
22+
RemoteEval.<String, String>builder()
23+
.name("food-type-classifier")
24+
.config(braintrust.config())
25+
.taskFunction(
26+
food -> {
27+
var request =
28+
ChatCompletionCreateParams.builder()
29+
.model(ChatModel.GPT_4O_MINI)
30+
.addSystemMessage("Return a one word answer")
31+
.addUserMessage(
32+
"What kind of food is " + food + "?")
33+
.maxTokens(50L)
34+
.temperature(0.0)
35+
.build();
36+
var response =
37+
openAIClient.chat().completions().create(request);
38+
return response.choices()
39+
.get(0)
40+
.message()
41+
.content()
42+
.orElse("")
43+
.toLowerCase();
44+
})
45+
.scorers(
46+
List.of(
47+
Scorer.of(
48+
"exact_match",
49+
(expected, result) ->
50+
expected.equals(result) ? 1.0 : 0.0)))
51+
.build();
52+
53+
Devserver devserver =
54+
Devserver.builder()
55+
.registerEval(foodTypeEval)
56+
.host("localhost") // set to 0.0.0.0 to bind all interfaces
57+
.port(8300)
58+
.build();
59+
60+
System.out.println("Starting Braintrust dev server");
61+
devserver.start();
62+
// await shutdown
63+
CountDownLatch latch = new CountDownLatch(1);
64+
Runtime.getRuntime()
65+
.addShutdownHook(
66+
new Thread(
67+
() -> {
68+
System.out.println("Shutting down...");
69+
devserver.stop();
70+
latch.countDown();
71+
}));
72+
latch.await();
73+
}
74+
}

0 commit comments

Comments
 (0)