Relates to this discussion https://github.com/spring-projects/spring-ai/pull/4548#issuecomment-3375834339

Context

After fixing @ImportAutoConfiguration issue in #4494, test auto-configurations are now duplicated for most models. There is some exceptions (VertexAI, Bedrock, ...). This issue aims to centralise test auto-configurations for spring-ai-autoconfigure-model-xxx modules


Current config

Ollama config: ```java public static AutoConfigurations ollamaAutoConfig(Class<?>... additionalAutoConfigurations) { Class<?>[] dependencies = new Class[] { OllamaApiAutoConfiguration.class, RestClientAutoConfiguration.class, SpringAiRetryAutoConfiguration.class, ToolCallingAutoConfiguration.class }; Class<?>[] allAutoConfigurations = new Class[dependencies.length + additionalAutoConfigurations.length]; System.arraycopy(dependencies, 0, allAutoConfigurations, 0, dependencies.length); System.arraycopy(additionalAutoConfigurations, 0, allAutoConfigurations, dependencies.length, additionalAutoConfigurations.length);

return AutoConfigurations.of(allAutoConfigurations);

}


Deepseek config:
 ```java
public static AutoConfigurations deepSeekAutoConfig(Class<?>... additional) {
    Class<?>[] dependencies = { SpringAiRetryAutoConfiguration.class, ToolCallingAutoConfiguration.class,
            RestClientAutoConfiguration.class, WebClientAutoConfiguration.class };
    Class<?>[] all = Stream.concat(Arrays.stream(dependencies), Arrays.stream(additional)).toArray(Class<?>[]::new);
    return AutoConfigurations.of(all);
}

Open AI config: ```java private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withPropertyValues("spring.ai.openai.apiKey=" + System.getenv("OPENAI_API_KEY")) .withConfiguration( AutoConfigurations.of(SpringAiRetryAutoConfiguration.class, RestClientAutoConfiguration.class, WebClientAutoConfiguration.class, ToolCallingAutoConfiguration.class));


---

**Refactoring idea**

Centralise test auto-configurations in one place (may be in spring-ai-test).

Something like this

 ```java
public class SpringAiTestAutoConfigurations {

// Use AnnotationUtils to find all used auto-configurations in AutoConfiguration.after 
// then concatenate them with additionalConfigurations
public static AutoConfigurations of(Class<?>... additionalConfigurations) {
    Class<?>[] configurations = Arrays.stream(additionalConfigurations)
            .map(c -> AnnotationUtils.findAnnotation(c, AutoConfiguration.class))
            .filter(Objects::nonNull)
            .map(AutoConfiguration::after)
            .flatMap(ac -> Stream.concat(Arrays.stream(ac), Arrays.stream(additionalConfigurations)))
            .distinct()
            .toArray(Class<?>[]::new);
    return AutoConfigurations.of(configurations);
}

Then use it like this

private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
        .withPropertyValues("spring.ai.openai.apiKey=" + System.getenv("OPENAI_API_KEY"),
                "spring.ai.openai.chat.options.model=gpt-4o")
        .withConfiguration(SpringAiTestAutoConfigurations.of(OpenAiChatAutoConfiguration.class,
                ChatClientAutoConfiguration.class));

Should be done after #4494 is closed.

@ilayaperumalg @Kehrlann I'll be happy to submit a PR if you approve the refactoring.

Comment From: ilayaperumalg

@ielatif Thanks for the proposal and it looks good!