[[contribution-guidelines]]
= Contribution Guidelines

== Code Formatting and Javadoc

Before submitting a PR, please run the following commands to ensure proper formatting and Javadoc processing

```
./mvnw spring-javaformat:apply javadoc:javadoc -Pjavadoc
```

The `-Pjavadoc` is a profile that enables Javadoc processing so as to avoid a long build time when developing.

== Contributing a New AI Model Implementation

This section outlines the steps for contributing a new AI model implementation.
AI models vary significantly, with diverse inputs and outputs -- from chat models that
translate text input into text output, to text-to-image models that generate images
from text descriptions.
Complex models may even handle multiple types of input and output, such as combining text,
images, and videos to produce mixed media output.

To contribute a new model, adhere to the following steps:

. *Create a Low-Level Client API Class*: If no existing Java client suits the AI model,
you'll need to develop a low-level client API class. This often involves utilizing the
`RestClient` class from the Spring Framework, similar to the `OpenAiApi` class.

. *Create a Model implementation*
Ensure your client conforms to the link:https://docs.spring.io/spring-ai/reference/api/generic-model.html[Generic Model API].
Use existing request and response classes if your model's inputs and outputs are supported.
If not, create new classes for the Generic Model API and establish a new Java package.
When logging Personally Identifiable Information (PII), mark it with https://github.com/spring-projects/spring-ai/tree/main/spring-ai-core/src/main/java/org/springframework/ai/util/LoggingMarkers.java[`PII_MARKER`] Slf4j marker.

. *Implement Auto-Configuration and a Spring Boot Starter*: This step involves creating the
necessary auto-configuration and Spring Boot Starter to easily instantiate the new model with
Spring Boot applications.

. *Write Tests*: All new classes should be accompanied by comprehensive tests.
Existing tests can serve as a useful reference for structuring and implementing your tests.

. *Document Your Contribution*: Ensure your documentation follows the existing format,
For an example of the suggested structure and formatting, refer to the
link:https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html[Open AI Chat documentation].

By following these guidelines, we can greatly expand the framework's range of supported models
while following a common implementation and documentation pattern.
