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
6 changes: 6 additions & 0 deletions core/src/main/java/com/google/adk/utils/ModelNameUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ public class ModelNameUtils {
private static final Pattern GEMINI_2_PATTERN = Pattern.compile("^gemini-2\\..*");
private static final Pattern PATH_PATTERN =
Pattern.compile("^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$");
private static final Pattern APIGEE_PATTERN =
Pattern.compile("^apigee/(?:[^/]+/)?(?:[^/]+/)?(.+)$");

public static boolean isGemini2Model(String modelString) {
if (modelString == null) {
Expand All @@ -28,6 +30,10 @@ private static String extractModelName(String modelString) {
if (matcher.matches()) {
return matcher.group(1);
}
Matcher apigeeMatcher = APIGEE_PATTERN.matcher(modelString);
if (apigeeMatcher.matches()) {
return apigeeMatcher.group(1);
}
return modelString;
}

Expand Down
72 changes: 72 additions & 0 deletions core/src/test/java/com/google/adk/utils/ModelNameUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.google.adk.utils;

import static com.google.common.truth.Truth.assertThat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class ModelNameUtilsTest {

@Test
public void isGemini2Model_withGemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withNonGemini2Model_returnsFalse() {
assertThat(ModelNameUtils.isGemini2Model("gemini-1.5-pro")).isFalse();
}

@Test
public void isGemini2Model_withPathBasedGemini2Model_returnsTrue() {
assertThat(
ModelNameUtils.isGemini2Model(
"projects/test-project/locations/us-central1/publishers/google/models/gemini-2.5-flash"))
.isTrue();
}

@Test
public void isGemini2Model_withPathBasedNonGemini2Model_returnsFalse() {
assertThat(
ModelNameUtils.isGemini2Model(
"projects/test-project/locations/us-central1/publishers/google/models/gemini-1.5-pro"))
.isFalse();
}

@Test
public void isGemini2Model_withApigeeGemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withApigeeV1Gemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/v1/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withApigeeProviderGemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/gemini/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withApigeeProviderVertexGemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/vertex_ai/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withApigeeProviderV1Gemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/gemini/v1/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withApigeeProviderV1BetaGemini2Model_returnsTrue() {
assertThat(ModelNameUtils.isGemini2Model("apigee/vertex_ai/v1beta/gemini-2.5-flash")).isTrue();
}

@Test
public void isGemini2Model_withNullModel_returnsFalse() {
assertThat(ModelNameUtils.isGemini2Model(null)).isFalse();
}
}