diff --git a/src/interface.jl b/src/interface.jl index 4c7b3d5..7cef731 100644 --- a/src/interface.jl +++ b/src/interface.jl @@ -210,7 +210,7 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function, - State your step by step reasoning about the current situation. 3) Plan: Given the current circumstances, outline a detailed, step-by-step plan to accomplish the task. Be specific. 4) Action_name (Must be aligned with your plan): Can be one of the following functions: - - GETDATA[SQL], which you can use to get the data from the database. "SQL" is a single SQL command to be executed against the database. + - GETDATA, which you can use to get the data from the database. Action_input for this function must be a single SQL query to be executed against the database. For more effective text search, it's necessary to use case-insensitivity and the ILIKE operator. Do not wrap the SQL as it will be executed against the database directly and SQL must be ended with ';'. 5) Action_input: Input to the action @@ -282,13 +282,20 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function, header = ["Understanding", "Reasoning", "Plan", "Action_name", "Action_input", "Observation"] - # detect if there are more than 1 key per categories + #[TESTING] detect if there are more than 1 key per categories count = GeneralUtils.countGivenWords(response, header) - if sum(count) > length(header) - errornote = "\nSQL decisionMaker() duplicated keywords" - println("Attempt $attempt $errornote ", @__FILE__, " ", @__LINE__) - continue + duplicateKeywordFlag = false + for (i, v) in enumerate(count) + keyword = header[i] + keywordNumber = v + if keywordNumber > 1 + errornote = "\nSQL query has duplicated keyword, $keyword" + println("Attempt $attempt $errornote ", @__FILE__, " ", @__LINE__) + duplicateKeywordFlag = true + break + end end + duplicateKeywordFlag == true ? continue : nothing # textToDict() search for action_input responsedict = GeneralUtils.textToDict(response, header, @@ -317,7 +324,7 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function, for i in toollist if occursin(i, responsedict[:action_input]) - errornote = "\nSQL decisionMaker() action_name is in action_input which is not allowed." + errornote = "\n action_name is in action_input which is not allowed." println("Attempt $attempt $errornote ", @__FILE__, " ", @__LINE__) continue end @@ -325,7 +332,7 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function, for i ∈ [:understanding, :reasoning, :plan, :action_name, :action_input] if length(JSON3.write(responsedict[i])) == 0 - errornote = "\nSQL decisionMaker() $i is empty" + errornote = "\n $i is empty" println("Attempt $attempt $errornote ", @__FILE__, " ", @__LINE__) continue end @@ -335,7 +342,7 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function, for i ∈ [:understanding, :reasoning, :plan, :action_name, :action_input] matchkeys = GeneralUtils.findMatchingDictKey(responsedict, i) if length(matchkeys) > 1 - errornote = "\nSQL decisionMaker() $i has more than one key" + errornote = "\n $i has more than one key" println("Attempt $attempt $errornote ", @__FILE__, " ", @__LINE__) continue end