Add aiUsePositiveSeed configuration option

Some models f.i. Mistral requires a positive random_seed.
https://docs.mistral.ai/api/#tag/chat/operation/chat_completion_v1_chat_completions_post

Change-Id: I8847ac70aede4a7698df999befc8eb32980afabd
diff --git a/README.md b/README.md
index 5a15bcf..053b31b 100644
--- a/README.md
+++ b/README.md
@@ -271,6 +271,7 @@
 Configuration commands.
 - `forceCreateAssistant`: In Stateful mode, forces the creation of a new assistant with each request instead of only
 when configuration settings change or Changes are merged.
+- `aiUsePositiveSeed`: Only generate positive seeds, this is needed for some models, f.i Mistral. Defaults to false.
 
   **NOTE**: This option may increase OpenAI API usage and should be used for **testing or debugging purposes only**.
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/config/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/config/Configuration.java
index 40a9a79..543debf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/config/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/config/Configuration.java
@@ -94,6 +94,7 @@
   public static final String KEY_AI_RELEVANCE_RULES = "aiRelevanceRules";
   public static final String KEY_AI_REVIEW_TEMPERATURE = "aiReviewTemperature";
   public static final String KEY_AI_COMMENT_TEMPERATURE = "aiCommentTemperature";
+  public static final String KEY_AI_POSITIVE_SEED_ONLY = "aiUsePositiveSeed";
   public static final String KEY_VOTING_MIN_SCORE = "votingMinScore";
   public static final String KEY_VOTING_MAX_SCORE = "votingMaxScore";
   public static final String KEY_GERRIT_USERNAME = "gerritUserName";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/common/client/api/openai/AIChatParameters.java b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/common/client/api/openai/AIChatParameters.java
index 7ee587d..af25f16 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/common/client/api/openai/AIChatParameters.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/common/client/api/openai/AIChatParameters.java
@@ -43,10 +43,17 @@
   }
 
   public int getRandomSeed() {
+    if (retrieveUsePositiveSeedOnly()) {
+      return ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE);
+    }
     return ThreadLocalRandom.current().nextInt();
   }
 
   private Double retrieveTemperature(String temperatureKey, Double defaultTemperature) {
     return Double.parseDouble(config.getString(temperatureKey, String.valueOf(defaultTemperature)));
   }
+
+  private boolean retrieveUsePositiveSeedOnly() {
+    return Boolean.parseBoolean(config.getString(Configuration.KEY_AI_POSITIVE_SEED_ONLY, "false"));
+  }
 }