String getLatestElasticsearchVersion()

in genai-function-calling/spring-ai/src/main/java/example/ElasticsearchTools.java [23:49]


    String getLatestElasticsearchVersion(@ToolParam(description = "Major version to filter by (e.g. 7, 8). Defaults to latest") @Nullable Integer majorVersion) {
        ReleasesResponse response = WebClient.create().get().uri("https://artifacts.elastic.co/releases/stack.json")
                .exchangeToMono(res -> res.mutate()
                        // Fix incorrect content-type from artifacts.elastic.co
                        .headers(hdrs -> hdrs.setContentType(MediaType.APPLICATION_JSON))
                        .build()
                        .bodyToMono(ReleasesResponse.class))
                .block();
        return response.releases().stream()
                // Filter out non-release versions (e.g. -rc1) and remove " GA" suffix
                .map(release -> release.version().replace(" GA", ""))
                .filter(version -> !version.contains("-"))
                .filter(version -> {
                    if (majorVersion == null) {
                        return true;
                    }
                    return version.startsWith(majorVersion + ".");
                })
                // "8.9.1" > "8.10.0", so coerce to an integer: 80901 < 81000
                .max(Comparator.comparingInt(v -> {
                    String[] parts = v.split("\\.");
                    return Integer.parseInt(parts[0]) * 10000 +
                            Integer.parseInt(parts[1]) * 100 +
                            Integer.parseInt(parts[2]);
                }))
                .orElseThrow();
    }