content: /*
   *  Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com).
   *  <p>
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *  <p>
   *  http://www.apache.org/licenses/LICENSE-2.0
   *  <p>
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package com.agentsflex.core.llm;
  
  
  import com.agentsflex.core.util.Maps;
  
  import java.util.List;
  import java.util.Map;
  
  /**
   * 每个大模型都可以有自己的实现类
   */
  public class ChatOptions {
  
      public static final ChatOptions DEFAULT = new ChatOptions() {
          @Override
          public void setTemperature(Float temperature) {
              throw new IllegalStateException("Can not set temperature to the default instance.");
          }
  
          @Override
          public void setMaxTokens(Integer maxTokens) {
              throw new IllegalStateException("Can not set maxTokens to the default instance.");
          }
      };
  
      private String model;
      private String seed;
      private Float temperature = 0.8f;
      private Float topP;
      private Integer topK;
      private Integer maxTokens;
      private List<String> stop;
  
      /**
       * 是否开启思考模式，适用于 Qwen3 等模型模型。
       */
      private Boolean enableThinking;
  
      /**
       * 额外的参数，用于传递给模型。
       */
      private Map<String, Object> extra;
  
      public String getModel() {
          return model;
      }
  
      public void setModel(String model) {
          this.model = model;
      }
  
      public String getSeed() {
          return seed;
      }
  
      public void setSeed(String seed) {
          this.seed = seed;
      }
  
      public Float getTemperature() {
          return temperature;
      }
  
      public void setTemperature(Float temperature) {
          this.temperature = temperature;
      }
  
      public Float getTopP() {
          return topP;
      }
  
      public void setTopP(Float topP) {
          this.topP = topP;
      }
  
      public Integer getTopK() {
          return topK;
      }
  
      public void setTopK(Integer topK) {
          this.topK = topK;
      }
  
      public Integer getMaxTokens() {
          return maxTokens;
      }
  
      public void setMaxTokens(Integer maxTokens) {
          this.maxTokens = maxTokens;
      }
  
      public List<String> getStop() {
          return stop;
      }
  
      public void setStop(List<String> stop) {
          this.stop = stop;
      }
  
      public Boolean getEnableThinking() {
          return enableThinking;
      }
  
      public void setEnableThinking(Boolean enableThinking) {
          this.enableThinking = enableThinking;
      }
  
      public Map<String, Object> getExtra() {
          return extra;
      }
  
      public void setExtra(Map<String, Object> extra) {
          this.extra = extra;
      }
  
      public void addExtra(String key, Object value) {
          if (extra == null) {
              extra = Maps.of(key, value);
          } else {
              extra.put(key, value);
          }
      }
  }
  