update
This commit is contained in:
@@ -198,7 +198,17 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function,
|
||||
header = ["Comprehension:", "Plan:", "Action_name:", "Action_input:"]
|
||||
dictkey = ["comprehension", "plan", "action_name", "action_input"]
|
||||
|
||||
llmkwargs=Dict(
|
||||
:num_ctx => 32768,
|
||||
:temperature => 0.1,
|
||||
)
|
||||
|
||||
for attempt in 1:10
|
||||
if attempt > 1
|
||||
println("\nERROR SQLLLM decisionMaker() attempt $attempt/10 ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
llmkwargs[:temperature] = 0.1 * attempt
|
||||
end
|
||||
|
||||
QandA = generatequestion(state, context, text2textInstructLLM; similarSQL=similarSQL_)
|
||||
|
||||
usermsg =
|
||||
@@ -220,8 +230,8 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function,
|
||||
]
|
||||
|
||||
# put in model format
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="llama3instruct")
|
||||
response = text2textInstructLLM(prompt, modelsize="medium")
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="qwen")
|
||||
response = text2textInstructLLM(prompt; llmkwargs=llmkwargs)
|
||||
|
||||
# LLM tends to generate observation given that it is in the input
|
||||
response =
|
||||
@@ -249,8 +259,8 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function,
|
||||
end
|
||||
|
||||
if occursin("NULL", response)
|
||||
errornote = "\nSQL decisionMaker() NULL response is not allowed"
|
||||
println("Attempt $attempt $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
errornote = "\nYour previous attempt was NULL. This is not allowed"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
end
|
||||
|
||||
@@ -272,10 +282,12 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function,
|
||||
# check whether response has all header
|
||||
detected_kw = GeneralUtils.detect_keyword(header, response)
|
||||
if 0 ∈ values(detected_kw)
|
||||
errornote = "\nSQLLLM decisionMaker() response does not have all header"
|
||||
errornote = "\nYour previous attempt did not have all points according to the required response format"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote \n$response", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
elseif sum(values(detected_kw)) > length(header)
|
||||
errornote = "\nSQLLLM decisionMaker() response has duplicated header"
|
||||
errornote = "\nYour previous attempt has duplicated points according to the required response format"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote \n$response", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
end
|
||||
|
||||
@@ -298,43 +310,33 @@ function decisionMaker(state::T1, context, text2textInstructLLM::Function,
|
||||
|
||||
toollist = ["TABLEINFO", "RUNSQL"]
|
||||
if responsedict[:action_name] ∉ toollist
|
||||
errornote = "\nYou must only use the given functions"
|
||||
println("Attempt $attempt $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
errornote = "\nYour previous attempt has action_name that is not in the tool list"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
end
|
||||
|
||||
for i in toollist
|
||||
if occursin(i, responsedict[:action_input])
|
||||
errornote = "\n action_name is in action_input which is not allowed."
|
||||
println("Attempt $attempt $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
errornote = "\nYour previous attempt has action_name in action_input which is not allowed"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
end
|
||||
end
|
||||
|
||||
for i ∈ Symbol.(dictkey)
|
||||
if length(JSON3.write(responsedict[i])) == 0
|
||||
errornote = "\n $i is empty"
|
||||
println("Attempt $attempt $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
errornote = "\nYour previous attempt has empty value for $i"
|
||||
println("\nERROR SQLLLM decisionMaker() $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
continue
|
||||
end
|
||||
end
|
||||
|
||||
# check whether response has all header
|
||||
detected_kw = GeneralUtils.detect_keyword(header, response)
|
||||
if 0 ∈ values(detected_kw)
|
||||
errornote = "\nSQL decisionMaker() response does not have all header"
|
||||
continue
|
||||
elseif sum(values(detected_kw)) > length(header)
|
||||
errornote = "\nSQL decisionMaker() response has duplicated header"
|
||||
continue
|
||||
end
|
||||
|
||||
state[:decisionMaker] = responsedict
|
||||
|
||||
return responsedict
|
||||
|
||||
end
|
||||
error("DecisionMaker failed to generate a thought \n", response)
|
||||
error("SQLLLM DecisionMaker() failed to generate a thought \n", response)
|
||||
end
|
||||
|
||||
|
||||
@@ -446,7 +448,7 @@ function evaluator(state::T1, text2textInstructLLM::Function
|
||||
]
|
||||
|
||||
# put in model format
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="llama3instruct")
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="qwen")
|
||||
|
||||
header = ["Trajectory_evaluation:", "Answer_evaluation:", "Accepted_as_answer:", "Score:", "Suggestion:"]
|
||||
dictkey = ["trajectory_evaluation", "answer_evaluation", "accepted_as_answer", "score", "suggestion"]
|
||||
@@ -601,7 +603,7 @@ function reflector(config::T1, state::T2)::String where {T1<:AbstractDict, T2<:A
|
||||
]
|
||||
|
||||
# put in model format
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="llama3instruct")
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="qwen")
|
||||
externalService = config[:externalservice][:text2textinstruct]
|
||||
|
||||
# apply LLM specific instruct format
|
||||
@@ -1011,7 +1013,7 @@ function query(query::T, executeSQL::Function, text2textInstructLLM::Function;
|
||||
# JSON3.pretty(io, highValueState)
|
||||
# end
|
||||
selected = compareState(query, highValueState, text2textInstructLLM)
|
||||
resultState = highValueState[selected]
|
||||
resultState = highValueState[selected] #BUG compareState() select 0
|
||||
end
|
||||
latestKey, latestInd = GeneralUtils.findHighestIndexKey(resultState[:thoughtHistory], "observation")
|
||||
action_input = Symbol("action_input_$latestInd") # latest sql
|
||||
@@ -1029,7 +1031,9 @@ function query(query::T, executeSQL::Function, text2textInstructLLM::Function;
|
||||
println("query() return nothing")
|
||||
end
|
||||
|
||||
return (text=extracted, rawresponse=resultState[:rawresponse])
|
||||
result = (text=extracted, rawresponse=resultState[:rawresponse])
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
@@ -1172,7 +1176,7 @@ function generatequestion(state::T1, context, text2textInstructLLM::Function;
|
||||
]
|
||||
|
||||
# put in model format
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="llama3instruct")
|
||||
prompt = GeneralUtils.formatLLMtext(_prompt; formatname="qwen")
|
||||
|
||||
try
|
||||
response = text2textInstructLLM(prompt, modelsize="medium")
|
||||
@@ -1190,7 +1194,7 @@ function generatequestion(state::T1, context, text2textInstructLLM::Function;
|
||||
responsedict = GeneralUtils.textToDict(response, header;
|
||||
dictKey=dictkey, symbolkey=true)
|
||||
response = "Q1: " * responsedict[:q1]
|
||||
# println("\nSQLLLM generatequestion() ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
# println("\nERROR SQLLLM generatequestion() ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
pprintln(Dict(responsedict))
|
||||
return response
|
||||
catch e
|
||||
@@ -1198,7 +1202,7 @@ function generatequestion(state::T1, context, text2textInstructLLM::Function;
|
||||
showerror(io, e)
|
||||
errorMsg = String(take!(io))
|
||||
st = sprint((io, v) -> show(io, "text/plain", v), stacktrace(catch_backtrace()))
|
||||
println("\nSQLLLM generatequestion() Attempt $attempt. Error occurred: $errorMsg\n$st ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
println("\nERROR SQLLLM generatequestion() Attempt $attempt. Error occurred: $errorMsg\n$st ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
end
|
||||
end
|
||||
error("generatequestion failed to generate a thought ", response)
|
||||
|
||||
@@ -22,9 +22,9 @@ Default system message template:
|
||||
<Your responsibility does NOT includes>
|
||||
-
|
||||
</Your responsibility does NOT includes>
|
||||
<At each round of conversation, you will be given the following>
|
||||
<At each round of conversation, you will be given the following information>
|
||||
|
||||
</At each round of conversation, you will be given the following>
|
||||
</At each round of conversation, you will be given the following information>
|
||||
<You must follow the following guidelines>
|
||||
-
|
||||
</You must follow the following guidelines>
|
||||
|
||||
Reference in New Issue
Block a user