Support GTP-4o with Azure OpenAI (#1144)

GPT-4o on Azure OpenAI was announced at Build yesterday, and it's
already working with LangChain4J!

This shows that the current code works with GPT-4o (all integration
tests are green on my side), with 2 downsides for the moment:

- It's not available in the Sweden Central region, which I typically use
as there are more models there: this is why I'm using East US, and had
to remove GPT 3.5 Turbo which isn't available there (then, GPT-4o
basically replaces both GPT 3.5 Turbo and GPT 4, so it makes sense)
- The CLI commands in the `deploy-azure-openai-models.sh` script
currently complains that the API version isn't correct, as it's not
updated yet. It should be super soon, and otherwise the trick is to
create it using the Azure AI Studio.

Those 2 issues should be very temporary.
This commit is contained in:
Julien Dubois 2024-05-22 15:40:35 +02:00 committed by GitHub
parent 92c5ed0297
commit cea41bd60a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 26 additions and 53 deletions

View File

@ -11,13 +11,14 @@ public class AzureOpenAiModelName {
public static final String GPT_3_5_TURBO_16K = "gpt-3.5-turbo-16k"; // alias for the latest model
public static final String GPT_3_5_TURBO_16K_0613 = "gpt-3.5-turbo-16k-0613"; // 16k context, functions
public static final String GPT_4 = "gpt-4"; // alias for the latest model
public static final String GPT_4 = "gpt-4"; // alias for the latest gpt-4
public static final String GPT_4_1106_PREVIEW = "gpt-4-1106-preview"; // 8k context
public static final String GPT_4_0613 = "gpt-4-0613"; // 8k context, functions
public static final String GPT_4_32K = "gpt-4-32k"; // alias for the latest model
public static final String GPT_4_32K_0613 = "gpt-4-32k-0613"; // 32k context, functions
public static final String GPT_4_O = "gpt-4o"; // alias for the latest gpt-4o model
// Use with AzureOpenAiLanguageModel and AzureOpenAiStreamingLanguageModel
public static final String TEXT_DAVINCI_002 = "text-davinci-002";

View File

@ -33,8 +33,7 @@ public class AzureOpenAIResponsibleAIIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void chat_message_should_trigger_content_filter_for_violence(String deploymentName, String gptVersion) {
@ -56,8 +55,7 @@ public class AzureOpenAIResponsibleAIIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void chat_message_should_trigger_content_filter_for_self_harm(String deploymentName, String gptVersion) {
@ -118,8 +116,7 @@ public class AzureOpenAIResponsibleAIIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void streaming_chat_message_should_trigger_content_filter_for_violence(String deploymentName, String gptVersion) throws Exception {
@ -167,8 +164,7 @@ public class AzureOpenAIResponsibleAIIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void streaming_language_should_trigger_content_filter_for_violence(String deploymentName, String gptVersion) throws Exception {

View File

@ -42,8 +42,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_generate_answer_and_return_token_usage_and_finish_reason_stop(String deploymentName, String gptVersion) {
@ -72,8 +71,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_generate_answer_and_return_token_usage_and_finish_reason_length(String deploymentName, String gptVersion) {
@ -103,8 +101,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_call_function_with_argument(String deploymentName, String gptVersion) {
@ -170,8 +167,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_call_function_with_no_argument(String deploymentName, String gptVersion) {
ChatLanguageModel model = AzureOpenAiChatModel.builder()
@ -205,8 +201,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_call_three_functions_in_parallel(String deploymentName, String gptVersion) throws Exception {
@ -284,8 +279,7 @@ public class AzureOpenAiChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_use_json_format(String deploymentName, String gptVersion) {
ChatLanguageModel model = AzureOpenAiChatModel.builder()

View File

@ -45,10 +45,8 @@ class AzureOpenAiStreamingChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1} with async client set to {2}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo, true",
"gpt-35-turbo, gpt-3.5-turbo, false",
"gpt-4, gpt-4, true",
"gpt-4, gpt-4, false"
"gpt-4o, gpt-4o, true",
"gpt-4o, gpt-4o, false"
})
void should_stream_answer(String deploymentName, String gptVersion, boolean useAsyncClient) throws Exception {
@ -104,10 +102,8 @@ class AzureOpenAiStreamingChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1} with custom async client set to {2} ")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo, true",
"gpt-35-turbo, gpt-3.5-turbo, false",
"gpt-4, gpt-4, true",
"gpt-4, gpt-4, false"
"gpt-4o, gpt-4o, true",
"gpt-4o, gpt-4o, false"
})
void should_custom_models_work(String deploymentName, String gptVersion, boolean useCustomAsyncClient) throws Exception {
@ -169,7 +165,7 @@ class AzureOpenAiStreamingChatModelIT {
}
@ParameterizedTest(name = "Deployment name {0}")
@ValueSource(strings = {"gpt-35-turbo", "gpt-4"})
@ValueSource(strings = {"gpt-4o"})
void should_use_json_format(String deploymentName) {
StreamingChatLanguageModel model = AzureOpenAiStreamingChatModel.builder()
@ -195,8 +191,7 @@ class AzureOpenAiStreamingChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_call_function_with_argument(String deploymentName, String gptVersion) throws Exception {
@ -301,8 +296,7 @@ class AzureOpenAiStreamingChatModelIT {
@ParameterizedTest(name = "Deployment name {0} using {1}")
@CsvSource({
"gpt-35-turbo, gpt-3.5-turbo",
"gpt-4, gpt-4"
"gpt-4o, gpt-4o"
})
void should_call_three_functions_in_parallel(String deploymentName, String gptVersion) throws Exception {

View File

@ -7,9 +7,9 @@ echo "Setting up environment variables..."
echo "----------------------------------"
PROJECT="langchain4j"
RESOURCE_GROUP="rg-$PROJECT"
LOCATION="swedencentral"
TAG="$PROJECT"
LOCATION="eastus"
AI_SERVICE="ai-$PROJECT"
TAG="$PROJECT"
echo "Creating the resource group..."
echo "------------------------------"
@ -28,22 +28,10 @@ az cognitiveservices account create \
--tags system="$TAG" \
--kind "OpenAI" \
--sku "S0"
# If you want to know the available models, run the following Azure CLI command:
# az cognitiveservices account list-models --resource-group "$RESOURCE_GROUP" --name "$AI_SERVICE" -o table
echo "Deploying a gpt-35-turbo model..."
echo "----------------------"
az cognitiveservices account deployment create \
--name "$AI_SERVICE" \
--resource-group "$RESOURCE_GROUP" \
--deployment-name "gpt-35-turbo" \
--model-name "gpt-35-turbo" \
--model-version "1106" \
--model-format "OpenAI" \
--sku-capacity 120 \
--sku-name "Standard"
echo "Deploying a gpt-35-turbo-instruct model..."
echo "----------------------"
az cognitiveservices account deployment create \
@ -56,14 +44,14 @@ az cognitiveservices account deployment create \
--sku-capacity 120 \
--sku-name "Standard"
echo "Deploying a gpt-4 model..."
echo "Deploying a gpt-4o model..."
echo "----------------------"
az cognitiveservices account deployment create \
--name "$AI_SERVICE" \
--resource-group "$RESOURCE_GROUP" \
--deployment-name "gpt-4" \
--model-name "gpt-4" \
--model-version "1106-Preview" \
--deployment-name "gpt-4o" \
--model-name "gpt-4o" \
--model-version "2024-05-13" \
--model-format "OpenAI" \
--sku-capacity 10 \
--sku-name "Standard"