package com.ch.jedge.jbot.agent;

import com.ch.jedge.jbot.knbase.JedgeGptApp;
import com.ch.jedge.jbot.knbase.intent.JedgeGdeQuery;

import java.util.HashMap;
import java.util.Map;


/**
 *  记录当前会话的任务状态、 行为历史，
 *  根据每次的状态输入，输出一个intent序列，并执行这个序列。
 *      根据当前会话的意图上下文、状态上下文，判断用户当前最大可能意图序列，并执行这个意图序列。
 *      :: 执行的意图序列，可能是回答问题，也可能是调用API，也可能是修改当前的任务状态值，目标值等。
 *      :: 也可能会自主持续调度一系列的后期任务.
 *      :: 需要加载当前App的任务空间等。
 */
public class JedgeGdeAgentRunner {
    private final JedgeGptApp mGdeApp;
    private final JedgeGdeSession mGdeSession;

    // 记录分解后的关键字池，及其与主题的关联度
    // 记录参数池：记录能够被识别出来的参数及其值；  这里面也包含了：主题、目标、任务、意图等重要关键字。
    // 按照数据库支持的意图语句范围，生成一个意图语句（含可能性），并与VDB的意图域中的数据进行匹配；
    // 讲判定的一个或多个意图，并计算push到一个意图池中，判断这个意图池最大概率的被执行的可能性，并调度执行该意图。
    // 可能是500ms刷一次执行意图的冲动。可能是直接生产回答，也可能是执行一个API。


    //持续刷新状态，  生成Objective，  匹配参数，生成动作。
    // 支持哪些任务目标？
    //      1、简单咨询：    针对一个问题、获得答案；
    //      2、带目标的咨询： 针对一个复杂的约束问题、有针对性地提出问题，给出复杂的回答；
    //      3、
    private final Map<String, JedgeRunnerKey> mDialogKeys = new HashMap<>();

    private static class JedgeRunnerKey {

    }

    private static class JedgeRunnerEntity {

    }

    private static class JedgeRunnerIntent {

    }

    public JedgeGdeAgentRunner(JedgeGptApp app, JedgeGdeSession s) {
        this.mGdeApp = app;
        this.mGdeSession = s;
    }


    public void refreshStatus() {
        //刷新用户的意图，可能诗调度到某个大模型，也可能是执行某个API，也可能什么也不做。

//        mGdeApp.getMgModule().highLog(String.format("Refreshing runner  : %s", mGdeSession.getSessionId()));
    }

    //理解语义，并生成各种关联缓存参数
    public void saveDialogQuery(JedgeGdeQuery gdeQuery) {
        mGdeApp.getMgModule().exMarkLog(String.format("Saving Query  : %s", gdeQuery.query_));

    }
}
