ModelInfo.java

/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *--------------------------------------------------------------------------------------------*/

package com.github.copilot.sdk.json;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Information about an available model.
 *
 * @since 1.0.1
 */
@JsonIgnoreProperties(ignoreUnknown = true)
public class ModelInfo {

    /**
     * Model identifier (e.g., "claude-sonnet-4.5").
     */
    @JsonProperty("id")
    private String id;

    /**
     * Display name.
     */
    @JsonProperty("name")
    private String name;

    /**
     * Model capabilities and limits.
     */
    @JsonProperty("capabilities")
    private ModelCapabilities capabilities;

    /**
     * Policy state.
     */
    @JsonProperty("policy")
    private ModelPolicy policy;

    /**
     * Billing information.
     */
    @JsonProperty("billing")
    private ModelBilling billing;

    /**
     * Supported reasoning effort levels (only present if model supports reasoning
     * effort).
     */
    @JsonProperty("supportedReasoningEfforts")
    private List<String> supportedReasoningEfforts;

    /**
     * Default reasoning effort level (only present if model supports reasoning
     * effort).
     */
    @JsonProperty("defaultReasoningEffort")
    private String defaultReasoningEffort;

    public String getId() {
        return id;
    }

    public ModelInfo setId(String id) {
        this.id = id;
        return this;
    }

    public String getName() {
        return name;
    }

    public ModelInfo setName(String name) {
        this.name = name;
        return this;
    }

    public ModelCapabilities getCapabilities() {
        return capabilities;
    }

    public ModelInfo setCapabilities(ModelCapabilities capabilities) {
        this.capabilities = capabilities;
        return this;
    }

    public ModelPolicy getPolicy() {
        return policy;
    }

    public ModelInfo setPolicy(ModelPolicy policy) {
        this.policy = policy;
        return this;
    }

    public ModelBilling getBilling() {
        return billing;
    }

    public ModelInfo setBilling(ModelBilling billing) {
        this.billing = billing;
        return this;
    }

    /**
     * Gets the supported reasoning effort levels.
     *
     * @return the list of supported reasoning effort levels, or {@code null} if the
     *         model doesn't support reasoning effort
     */
    public List<String> getSupportedReasoningEfforts() {
        return supportedReasoningEfforts;
    }

    /**
     * Sets the supported reasoning effort levels.
     *
     * @param supportedReasoningEfforts
     *            the list of supported reasoning effort levels
     * @return this instance for method chaining
     */
    public ModelInfo setSupportedReasoningEfforts(List<String> supportedReasoningEfforts) {
        this.supportedReasoningEfforts = supportedReasoningEfforts;
        return this;
    }

    /**
     * Gets the default reasoning effort level.
     *
     * @return the default reasoning effort level, or {@code null} if the model
     *         doesn't support reasoning effort
     */
    public String getDefaultReasoningEffort() {
        return defaultReasoningEffort;
    }

    /**
     * Sets the default reasoning effort level.
     *
     * @param defaultReasoningEffort
     *            the default reasoning effort level
     * @return this instance for method chaining
     */
    public ModelInfo setDefaultReasoningEffort(String defaultReasoningEffort) {
        this.defaultReasoningEffort = defaultReasoningEffort;
        return this;
    }
}