package com.easyagents.agent.runtime.knowledge;

import com.easyagents.agent.runtime.AgentRuntimeContext;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 传递给知识库检索器的请求。
 */
public class AgentKnowledgeRetrievalRequest {

    private String query;
    private int limit;
    private double scoreThreshold;
    private AgentKnowledgeSpec knowledgeSpec;
    private AgentRuntimeContext runtimeContext = new AgentRuntimeContext();
    private Map<String, Object> metadata = new LinkedHashMap<>();

    /**
     * 获取查询。
     *
     * @return 查询
     */
    public String getQuery() {
        return query;
    }

    /**
     * 设置查询。
     *
     * @param query 查询
     */
    public void setQuery(String query) {
        this.query = query;
    }

    /**
     * 获取检索数量限制。
     *
     * @return 检索数量限制
     */
    public int getLimit() {
        return limit;
    }

    /**
     * 设置检索数量限制。
     *
     * @param limit 检索数量限制
     */
    public void setLimit(int limit) {
        this.limit = limit;
    }

    /**
     * 获取分数阈值。
     *
     * @return 分数阈值
     */
    public double getScoreThreshold() {
        return scoreThreshold;
    }

    /**
     * 设置分数阈值。
     *
     * @param scoreThreshold 分数阈值
     */
    public void setScoreThreshold(double scoreThreshold) {
        this.scoreThreshold = scoreThreshold;
    }

    /**
     * 获取知识库声明。
     *
     * @return 知识库声明
     */
    public AgentKnowledgeSpec getKnowledgeSpec() {
        return knowledgeSpec;
    }

    /**
     * 设置知识库声明。
     *
     * @param knowledgeSpec 知识库声明
     */
    public void setKnowledgeSpec(AgentKnowledgeSpec knowledgeSpec) {
        this.knowledgeSpec = knowledgeSpec;
    }

    /**
     * 获取运行时上下文。
     *
     * @return 运行时上下文
     */
    public AgentRuntimeContext getRuntimeContext() {
        return runtimeContext;
    }

    /**
     * 设置运行时上下文。
     *
     * @param runtimeContext 运行时上下文
     */
    public void setRuntimeContext(AgentRuntimeContext runtimeContext) {
        this.runtimeContext = runtimeContext == null ? new AgentRuntimeContext() : runtimeContext;
    }

    /**
     * 获取元数据。
     *
     * @return 元数据
     */
    public Map<String, Object> getMetadata() {
        return metadata;
    }

    /**
     * 设置元数据。
     *
     * @param metadata 元数据
     */
    public void setMetadata(Map<String, Object> metadata) {
        this.metadata = metadata == null ? new LinkedHashMap<>() : metadata;
    }
}
