Skip to content

Commit 08b0bab

Browse files
committed
Support openai-java v3.0.0+ only because of breaking changes in tool call classes: ChatCompletionMessageFunctionToolCall and ChatCompletionMessageToolCall
1 parent f2d4428 commit 08b0bab

File tree

4 files changed

+19
-12
lines changed

4 files changed

+19
-12
lines changed

dd-java-agent/instrumentation/openai-java/openai-java-1.0/build.gradle

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
apply from: "$rootDir/gradle/java.gradle"
22
apply plugin: 'idea'
33

4+
// ChatCompletionMessageFunctionToolCall introduced in v3.0.0
5+
def minVer = '3.0.0'
6+
47
muzzle {
58
pass {
69
group = "com.openai"
710
module = "openai-java"
8-
versions = "[0.45.0,3)"
9-
// TODO com.openai.models.chat.completions.ChatCompletionMessageToolCall changes in v3
10-
// assertInverse = true
11+
versions = "[$minVer,)"
12+
assertInverse = true
1113
}
1214
}
1315

1416
addTestSuiteForDir('latestDepTest', 'test')
1517

1618
dependencies {
17-
compileOnly group: 'com.openai', name: 'openai-java', version: '0.45.0'
19+
compileOnly group: 'com.openai', name: 'openai-java', version: minVer
1820
implementation project(':internal-api')
1921

20-
testImplementation group: 'com.openai', name: 'openai-java', version: '0.45.0'
22+
testImplementation group: 'com.openai', name: 'openai-java', version: minVer
2123
latestDepTestImplementation group: 'com.openai', name: 'openai-java', version: '+'
2224

2325
testImplementation project(':dd-java-agent:instrumentation:okhttp:okhttp-3.0')

dd-java-agent/instrumentation/openai-java/openai-java-1.0/src/main/java/datadog/trace/instrumentation/openai_java/ToolCallExtractor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.core.type.TypeReference;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.openai.models.chat.completions.ChatCompletionMessageFunctionToolCall;
56
import com.openai.models.chat.completions.ChatCompletionMessageToolCall;
67
import datadog.trace.api.llmobs.LLMObs;
78
import java.util.Collections;
@@ -16,11 +17,15 @@ public class ToolCallExtractor {
1617
private static final TypeReference<Map<String, Object>> MAP_TYPE_REF =
1718
new TypeReference<Map<String, Object>>() {};
1819

19-
// TODO add support for v3+
2020
public static LLMObs.ToolCall getToolCall(ChatCompletionMessageToolCall toolCall) {
21+
Optional<ChatCompletionMessageFunctionToolCall> functionToolCallOpt = toolCall.function();
22+
if (!functionToolCallOpt.isPresent()) {
23+
return null;
24+
}
2125
try {
22-
String toolId = toolCall.id();
23-
ChatCompletionMessageToolCall.Function function = toolCall.function();
26+
ChatCompletionMessageFunctionToolCall functionToolCall = functionToolCallOpt.get();
27+
String toolId = functionToolCall.id();
28+
ChatCompletionMessageFunctionToolCall.Function function = functionToolCall.function();
2429
String name = function.name();
2530
String argumentsJson = function.arguments();
2631

@@ -32,7 +37,7 @@ public static LLMObs.ToolCall getToolCall(ChatCompletionMessageToolCall toolCall
3237
}
3338

3439
String type = "function";
35-
Optional<String> typeOpt = toolCall._type().asString();
40+
Optional<String> typeOpt = functionToolCall._type().asString() ;
3641
if (typeOpt.isPresent()) {
3742
type = typeOpt.get();
3843
}

dd-java-agent/instrumentation/openai-java/openai-java-1.0/src/test/groovy/ChatCompletionServiceTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class ChatCompletionServiceTest extends OpenAiTest {
128128
resp.choices().size() == 1
129129
resp.choices().get(0).message().toolCalls().isPresent()
130130
resp.choices().get(0).message().toolCalls().get().size() == 1
131-
resp.choices().get(0).message().toolCalls().get().get(0).function().name() == "extract_student_info"
131+
resp.choices().get(0).message().toolCalls().get().get(0).function().get().function().name() == "extract_student_info"
132132
and:
133133
assertChatCompletionTrace(false)
134134
}

dd-java-agent/instrumentation/openai-java/openai-java-1.0/src/test/groovy/OpenAiTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.openai.models.ChatModel
1010
import com.openai.models.FunctionDefinition
1111
import com.openai.models.FunctionParameters
1212
import com.openai.models.chat.completions.ChatCompletionCreateParams
13-
import com.openai.models.chat.completions.ChatCompletionTool
13+
import com.openai.models.chat.completions.ChatCompletionFunctionTool
1414
import com.openai.models.completions.CompletionCreateParams
1515
import com.openai.models.embeddings.EmbeddingCreateParams
1616
import com.openai.models.embeddings.EmbeddingModel
@@ -144,7 +144,7 @@ abstract class OpenAiTest extends LlmObsSpecification {
144144
.addUserMessage("""David Nguyen is a sophomore majoring in computer science at Stanford University and has a GPA of 3.8.
145145
David is an active member of the university's Chess Club and the South Asian Student Association.
146146
He hopes to pursue a career in software engineering after graduating.""")
147-
.addTool(ChatCompletionTool.builder()
147+
.addTool(ChatCompletionFunctionTool.builder()
148148
.function(FunctionDefinition.builder()
149149
.name("extract_student_info")
150150
.description("Get the student information from the body of the input text")

0 commit comments

Comments
 (0)