This commit is contained in:
2026-06-29 20:55:52 +07:00
parent bc81033924
commit c085a445e2
8 changed files with 137 additions and 71 deletions
+103 -13
View File
@@ -2,7 +2,31 @@
julia_version = "1.12.6" julia_version = "1.12.6"
manifest_format = "2.0" manifest_format = "2.0"
project_hash = "2fa6a293fb2eebf613585700dd4002877d4bff24" project_hash = "6e0efa362e5748de9ce219e0376be2f93d464376"
[[deps.Accessors]]
deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"]
git-tree-sha1 = "7063ad1083578215c7c4bf410368150abe8d5524"
uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
version = "0.1.45"
[deps.Accessors.extensions]
AxisKeysExt = "AxisKeys"
IntervalSetsExt = "IntervalSets"
LinearAlgebraExt = "LinearAlgebra"
StaticArraysExt = "StaticArrays"
StructArraysExt = "StructArrays"
TestExt = "Test"
UnitfulExt = "Unitful"
[deps.Accessors.weakdeps]
AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5"
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
[[deps.AliasTables]] [[deps.AliasTables]]
deps = ["PtrArrays", "Random"] deps = ["PtrArrays", "Random"]
@@ -66,6 +90,11 @@ git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193" uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.8" version = "0.7.8"
[[deps.CommonSolve]]
git-tree-sha1 = "99ee296f88c12485402e37c2fd025f95ae097637"
uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2"
version = "0.2.9"
[[deps.Compat]] [[deps.Compat]]
deps = ["TOML", "UUIDs"] deps = ["TOML", "UUIDs"]
git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad"
@@ -86,6 +115,30 @@ deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.3.0+1" version = "1.3.0+1"
[[deps.CompositionsBase]]
git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
version = "0.1.2"
weakdeps = ["InverseFunctions"]
[deps.CompositionsBase.extensions]
CompositionsBaseInverseFunctionsExt = "InverseFunctions"
[[deps.ConstructionBase]]
git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb"
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
version = "1.6.0"
[deps.ConstructionBase.extensions]
ConstructionBaseIntervalSetsExt = "IntervalSets"
ConstructionBaseLinearAlgebraExt = "LinearAlgebra"
ConstructionBaseStaticArraysExt = "StaticArrays"
[deps.ConstructionBase.weakdeps]
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
[[deps.Crayons]] [[deps.Crayons]]
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
@@ -134,10 +187,10 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
version = "1.11.0" version = "1.11.0"
[[deps.Distributions]] [[deps.Distributions]]
deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "Roots", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"]
git-tree-sha1 = "3c8a0a9a6d4a10bdfb6b751bd2b6051ed3e25fd4" git-tree-sha1 = "cd3c5ac74cd3923c8945c6a81518c46abd0e73a3"
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
version = "0.25.127" version = "0.25.129"
[deps.Distributions.extensions] [deps.Distributions.extensions]
DistributionsChainRulesCoreExt = "ChainRulesCore" DistributionsChainRulesCoreExt = "ChainRulesCore"
@@ -217,17 +270,17 @@ version = "1.11.0"
[[deps.GeneralUtils]] [[deps.GeneralUtils]]
deps = ["CSV", "DataFrames", "DataStructures", "Dates", "Distributions", "JSON", "NATS", "PrettyPrinting", "Random", "Revise", "SHA", "UUIDs"] deps = ["CSV", "DataFrames", "DataStructures", "Dates", "Distributions", "JSON", "NATS", "PrettyPrinting", "Random", "Revise", "SHA", "UUIDs"]
git-tree-sha1 = "8720a31344bc85ad610ae12f7e1247de22070765" git-tree-sha1 = "f1bad7621e6ac2d235adc8c593b0aff87bd1d93e"
repo-rev = "main" repo-rev = "main"
repo-url = "https://git.yiem.cc/ton/GeneralUtils" repo-url = "https://git.yiem.cc/ton/GeneralUtils"
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe" uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
version = "0.3.2" version = "0.4.2"
[[deps.HTTP]] [[deps.HTTP]]
deps = ["Base64", "CodecZlib", "Dates", "EnumX", "PrecompileTools", "Random", "Reseau", "SHA", "URIs", "UUIDs", "Zlib_jll"] deps = ["Base64", "CodecZlib", "Dates", "EnumX", "PrecompileTools", "Random", "Reseau", "SHA", "URIs", "UUIDs", "Zlib_jll"]
git-tree-sha1 = "a95f80749437ffb42948848d2d2ec81a5050ef4b" git-tree-sha1 = "69343dd8afb1671b84c3aa2dda511238d0919a55"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "2.4.0" version = "2.5.0"
[[deps.HashArrayMappedTries]] [[deps.HashArrayMappedTries]]
git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae"
@@ -273,6 +326,16 @@ git-tree-sha1 = "d6fe00b123e32ddd17231b35d69a6394e696fd5a"
uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5" uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5"
version = "1.11.0" version = "1.11.0"
[[deps.InverseFunctions]]
git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.17"
weakdeps = ["Dates", "Test"]
[deps.InverseFunctions.extensions]
InverseFunctionsDatesExt = "Dates"
InverseFunctionsTestExt = "Test"
[[deps.InvertedIndices]] [[deps.InvertedIndices]]
git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe"
uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
@@ -424,6 +487,11 @@ git-tree-sha1 = "3733419e9a71156b389f3e331672d2e95436783f"
uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b"
version = "3.6.2" version = "3.6.2"
[[deps.MacroTools]]
git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.16"
[[deps.Markdown]] [[deps.Markdown]]
deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
@@ -522,9 +590,9 @@ version = "1.8.2"
[[deps.PDMats]] [[deps.PDMats]]
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" git-tree-sha1 = "26766d4b5f1a410c218a19b85a672c6edb693c65"
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
version = "0.11.37" version = "0.11.40"
weakdeps = ["StatsBase"] weakdeps = ["StatsBase"]
[deps.PDMats.extensions] [deps.PDMats.extensions]
@@ -657,12 +725,34 @@ git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8"
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
version = "0.5.1+0" version = "0.5.1+0"
[[deps.Roots]]
deps = ["Accessors", "CommonSolve", "Printf"]
git-tree-sha1 = "91cfb1cb4f6e27557cc2df798a31eff6089a41eb"
uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665"
version = "3.0.0"
[deps.Roots.extensions]
RootsChainRulesCoreExt = "ChainRulesCore"
RootsForwardDiffExt = "ForwardDiff"
RootsIntervalRootFindingExt = "IntervalRootFinding"
RootsSymPyExt = "SymPy"
RootsSymPyPythonCallExt = "SymPyPythonCall"
RootsUnitfulExt = "Unitful"
[deps.Roots.weakdeps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807"
SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6"
SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
[[deps.SHA]] [[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0" version = "0.7.0"
[[deps.SQLLLM]] [[deps.SQLLLM]]
deps = ["CSV", "DataFrames", "DataStructures", "Dates", "FileIO", "HTTP", "JSON3", "LLMMCTS", "LibPQ", "PrettyPrinting", "Random", "Revise", "StatsBase", "Tables", "URIs", "UUIDs"] deps = ["CSV", "DataFrames", "DataStructures", "Dates", "FileIO", "GeneralUtils", "HTTP", "JSON", "LLMMCTS", "LibPQ", "PrettyPrinting", "Random", "Revise", "StatsBase", "Tables", "URIs", "UUIDs"]
path = "." path = "."
uuid = "2ebc79c7-cc10-4a3a-9665-d2e1d61e63d3" uuid = "2ebc79c7-cc10-4a3a-9665-d2e1d61e63d3"
version = "0.2.4" version = "0.2.4"
@@ -823,9 +913,9 @@ version = "1.0.1"
[[deps.Tables]] [[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"]
git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" git-tree-sha1 = "0f38a06c83f0007bbab3cf911262841c9a0f07e0"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.12.1" version = "1.13.0"
[[deps.Tar]] [[deps.Tar]]
deps = ["ArgTools", "SHA"] deps = ["ArgTools", "SHA"]
+4 -1
View File
@@ -9,8 +9,9 @@ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
GeneralUtils = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3" HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
LLMMCTS = "d76c5a4d-449e-4835-8cc4-dd86ec44f241" LLMMCTS = "d76c5a4d-449e-4835-8cc4-dd86ec44f241"
LibPQ = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1" LibPQ = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
PrettyPrinting = "54e16d92-306c-5ea0-a30b-337be88ac337" PrettyPrinting = "54e16d92-306c-5ea0-a30b-337be88ac337"
@@ -23,3 +24,5 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
[compat] [compat]
Dates = "1.11.0" Dates = "1.11.0"
GeneralUtils = "0.4.2"
JSON = "1.6.1"
View File
+13 -40
View File
@@ -2,7 +2,7 @@ module interface
export decisionMaker, evaluator, reflector, transition, query export decisionMaker, evaluator, reflector, transition, query
using LibPQ, DataStructures, JSON3, UUIDs, PrettyPrinting, Dates using LibPQ, DataStructures, JSON, UUIDs, PrettyPrinting, Dates
using GeneralUtils, LLMMCTS using GeneralUtils, LLMMCTS
using ..util, ..llmfunction using ..util, ..llmfunction
@@ -106,33 +106,6 @@ function decisionMaker(state::T1, additionalinfo, text2textInstructLLM::Function
; querySQLVectorDBF::Union{T2, Nothing}=nothing, maxattempt=10 ; querySQLVectorDBF::Union{T2, Nothing}=nothing, maxattempt=10
)::Dict{String, Any} where {T1<:AbstractDict, T2<:Function} )::Dict{String, Any} where {T1<:AbstractDict, T2<:Function}
# lessonDict =
# if isfile("lesson.json")
# lessonDict = copy(JSON3.read("lesson.json"))
# else
# lessonDict = nothing
# end
# lessonDict = nothing
# lesson =
# if lessonDict === nothing
# ""
# else
# """
# You have attempted to help the user before and failed, either because your reasoning for the
# recommendation was incorrect or your response did not exactly match the user expectation.
# The following lesson(s) give a plan to avoid failing to help the user in the same way you
# did previously. Use them to improve your strategy to help the user.
# Here are some lessons in JSON format:
# $(JSON3.write(lessonDict))
# When providing the thought and action for the current trial, that into account these failed
# trajectories and make sure not to repeat the same mistakes and incorrect answers.
# """
# end
systemmsg = systemmsg =
""" """
You are a helpful assistant that find the data from a database to satisfy the user's question. You are a helpful assistant that find the data from a database to satisfy the user's question.
@@ -188,7 +161,7 @@ similarSQL_ = "None"
if length(state["thoughtHistory"]) == 1 if length(state["thoughtHistory"]) == 1
sql, distance = querySQLVectorDBF(state["thoughtHistory"]["question"]) sql, distance = querySQLVectorDBF(state["thoughtHistory"]["question"])
similarSQL_ = sql !== nothing ? sql : "None" similarSQL_ = sql !== nothing ? sql : "None"
end end
for attempt in 1:maxattempt for attempt in 1:maxattempt
@@ -211,7 +184,7 @@ similarSQL_ = "None"
$workprogress $workprogress
</progress> </progress>
<suggestion> This is your mentor's suggestion for the immediately preceding action and observation <suggestion> This is your mentor's suggestion for the immediately preceding action and observation
$(state["suggestion"]) $(state["suggestion"])
</suggestion> </suggestion>
P.S. $errornote P.S. $errornote
</context> </context>
@@ -239,7 +212,7 @@ $(state["suggestion"])
responsedict = nothing responsedict = nothing
try try
responsedict = copy(JSON3.read(response)) responsedict = copy(JSON.parse(response))
catch catch
println("\nERROR YiemAgent generatechat() failed to parse response: $response", @__FILE__, ":", @__LINE__, " $(Dates.now())") println("\nERROR YiemAgent generatechat() failed to parse response: $response", @__FILE__, ":", @__LINE__, " $(Dates.now())")
continue continue
@@ -307,10 +280,10 @@ responsedict["thoughthistory"] = state["thoughtHistory"]
responsedict["system"] = systemmsg responsedict["system"] = systemmsg
responsedict["prompt"] = prompt responsedict["prompt"] = prompt
responsedict["context"] = context responsedict["context"] = context
responsedict["think"] = think responsedict["think"] = think
# # read sessionId # # read sessionId
# sessionid = JSON3.read("/appfolder/app/sessionid.json") # sessionid = JSON.parse("/appfolder/app/sessionid.json")
# # save to filename ./log/decisionlog.txt # # save to filename ./log/decisionlog.txt
# println("saving SQLLLM decisionMaker() to disk") # println("saving SQLLLM decisionMaker() to disk")
# filename = "agent_decision_log_$(sessionid[:id]).json" # filename = "agent_decision_log_$(sessionid[:id]).json"
@@ -324,7 +297,7 @@ responsedict["thoughthistory"] = state["thoughtHistory"]
# end # end
# else # else
# # read the file and append new data # # read the file and append new data
# decisionlist = copy(JSON3.read(filepath)) # decisionlist = copy(JSON.parse(filepath))
# push!(decisionlist, responsedict) # push!(decisionlist, responsedict)
# println("Appending new data to file $filepath") # println("Appending new data to file $filepath")
# open(filepath, "w") do io # open(filepath, "w") do io
@@ -343,7 +316,7 @@ end
# # lessonDict = # # lessonDict =
# # if isfile("lesson.json") # # if isfile("lesson.json")
# # lessonDict = copy(JSON3.read("lesson.json")) # # lessonDict = copy(JSON.parse("lesson.json"))
# # else # # else
# # lessonDict = nothing # # lessonDict = nothing
# # end # # end
@@ -754,7 +727,7 @@ function evaluator(state::T1, thoughtDict, text2textInstructLLM::Function, llmFo
# responsedict[:think] = think # responsedict[:think] = think
# # read sessionId # # read sessionId
# sessionid = JSON3.read("/appfolder/app/sessionid.json") # sessionid = JSON.parse("/appfolder/app/sessionid.json")
# # save to filename ./log/decisionlog.txt # # save to filename ./log/decisionlog.txt
# println("saving SQLLLM evaluator() to disk") # println("saving SQLLLM evaluator() to disk")
# filename = "agent_evaluator_log_$(sessionid[:id]).json" # filename = "agent_evaluator_log_$(sessionid[:id]).json"
@@ -768,7 +741,7 @@ function evaluator(state::T1, thoughtDict, text2textInstructLLM::Function, llmFo
# end # end
# else # else
# # read the file and append new data # # read the file and append new data
# decisionlist = copy(JSON3.read(filepath)) # decisionlist = copy(JSON.parse(filepath))
# push!(decisionlist, responsedict) # push!(decisionlist, responsedict)
# println("Appending new data to file $filepath") # println("Appending new data to file $filepath")
# open(filepath, "w") do io # open(filepath, "w") do io
@@ -917,7 +890,7 @@ function reflector(config::T1, state::T2)::String where {T1<:AbstractDict, T2<:A
error("Not valid JSON") error("Not valid JSON")
end end
reflectionDict = copy(JSON3.read(responseJsonStr)) reflectionDict = copy(JSON.parse(responseJsonStr))
# check if dict has all required value # check if dict has all required value
dummya::AbstractString = reflectionDict[:reflection] dummya::AbstractString = reflectionDict[:reflection]
@@ -1295,7 +1268,7 @@ function query(query::T, executeSQL::Function, text2textInstructLLM::Function;
end end
latestKey, latestInd = GeneralUtils.findHighestIndexKey(resultState[:thoughtHistory], "observation") latestKey, latestInd = GeneralUtils.findHighestIndexKey(resultState[:thoughtHistory], "observation")
action_input = "action_input_$latestInd" # latest sql action_input = "action_input_$latestInd" # latest sql
sql = resultState["thoughtHistory"][action_input] sql = resultState["thoughtHistory"][action_input]
extractedTableContent = resultState["thoughtHistory"][latestKey] extractedTableContent = resultState["thoughtHistory"][latestKey]
# add to vectorDB only if the answer is achieved and the state is terminal # add to vectorDB only if the answer is achieved and the state is terminal
@@ -1355,7 +1328,7 @@ function makeNewState(currentstate::T1, thoughtDict::T4, rawresponse, response::
newstate["reward"] = reward newstate["reward"] = reward
newstate["select"] = select newstate["select"] = select
newstate["isterminal"] = isterminal newstate["isterminal"] = isterminal
newstate["rawresponse"] = rawresponse # whatever return from action newstate["rawresponse"] = rawresponse # whatever return from action
newNodeKey = GeneralUtils.uuid4snakecase() newNodeKey = GeneralUtils.uuid4snakecase()
+7 -7
View File
@@ -3,7 +3,7 @@ module llmfunction
export listAllTable_json, listAllTable_str, tableinfo, getdata, finalAnswerBox, export listAllTable_json, listAllTable_str, tableinfo, getdata, finalAnswerBox,
getTableNameFromSQL, extractContent_dataframe, SQLexecution, compareState getTableNameFromSQL, extractContent_dataframe, SQLexecution, compareState
using HTTP, JSON3, URIs, Random, PrettyPrinting, UUIDs, LibPQ, Tables, DataFrames, CSV, using HTTP, JSON, URIs, Random, PrettyPrinting, UUIDs, LibPQ, Tables, DataFrames, CSV,
DataStructures, StatsBase, Dates DataStructures, StatsBase, Dates
using GeneralUtils, LLMMCTS using GeneralUtils, LLMMCTS
using ..util using ..util
@@ -189,7 +189,7 @@ function tableinfo(executeSQL::Function, tablenames::T
end end
end end
if !isempty(notExistingTable) if !isempty(notExistingTable)
result = "Error, the following tables does not exist in the database: $(JSON3.write(notExistingTable))" result = "Error, the following tables does not exist in the database: $(JSON.json(notExistingTable))"
return (result=result,) return (result=result,)
end end
@@ -297,7 +297,7 @@ context = args["context"]
result["thought"], result["code"] result["thought"], result["code"]
else else
nothing, state["question"] nothing, state["question"]
end end
# make new state # make new state
newNodeKey = GeneralUtils.uuid4snakecase() newNodeKey = GeneralUtils.uuid4snakecase()
@@ -319,7 +319,7 @@ newstate["code"] = sql
newstate["errorexplain"] = thought newstate["errorexplain"] = thought
newstate["errormsg"] = errormsg newstate["errormsg"] = errormsg
newstate["reward"] = reward newstate["reward"] = reward
newstate["isterminal"] = isterminal newstate["isterminal"] = isterminal
if response !== nothing if response !== nothing
extracted = extractContent_dataframe(response, context, text2textInstructLLM) extracted = extractContent_dataframe(response, context, text2textInstructLLM)
newstate["response"] = extracted newstate["response"] = extracted
@@ -779,7 +779,7 @@ function getTableNameFromSQL(sql::T, text2textInstructLLM::Function,
response = GeneralUtils.deFormatLLMtext(response, llmFormatName) response = GeneralUtils.deFormatLLMtext(response, llmFormatName)
responsedict = GeneralUtils.textToDict(response, header; responsedict = GeneralUtils.textToDict(response, header;
dictKey=dictkey, symbolkey=false) dictKey=dictkey, symbolkey=false)
response = copy(JSON3.read(responsedict["table_name"])) response = copy(JSON.parse(responsedict["table_name"]))
return response return response
catch e catch e
@@ -876,7 +876,7 @@ potentialSolution = []
d[v] = thoughtHistory[latestKeys[i]] d[v] = thoughtHistory[latestKeys[i]]
end end
push!(potentialSolution, d) push!(potentialSolution, d)
end end
""" """
# put potential solutions from potentialSolution into the following form # put potential solutions from potentialSolution into the following form
@@ -948,7 +948,7 @@ potentialSolution = []
responsedict["selected_response_number"] = responsedict["selected_response_number"][1] # some time "6\nThe trajectories are incomplete" is generated but I only need the number. responsedict["selected_response_number"] = responsedict["selected_response_number"][1] # some time "6\nThe trajectories are incomplete" is generated but I only need the number.
try try
responsedict["selected_response_number"] = parse(Int, responsedict["selected_response_number"]) # convert string "5" into integer 5 responsedict["selected_response_number"] = parse(Int, responsedict["selected_response_number"]) # convert string "5" into integer 5
catch catch
errornote = "In your previous attempt, Selected_response_number was not a number. It must be a number." errornote = "In your previous attempt, Selected_response_number was not a number. It must be a number."
println("\nERROR SQLLLM compareState() Attempt $attempt. $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())") println("\nERROR SQLLLM compareState() Attempt $attempt. $errornote ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
+6 -6
View File
@@ -1,9 +1,9 @@
using Revise using Revise
using LibPQ, Dates, JSON3, PrettyPrinting, UUIDs, DataFrames, DataStructures, Base64 using LibPQ, Dates, JSON, PrettyPrinting, UUIDs, DataFrames, DataStructures, Base64
using GeneralUtils, SQLLLM using GeneralUtils, SQLLLM
config = JSON3.read("/appfolder/app/dev/YiemAgent/test/config.json") config = JSON.parse("/appfolder/app/dev/YiemAgent/test/config.json")
function executeSQL(sql::T) where {T<:AbstractString} function executeSQL(sql::T) where {T<:AbstractString}
host = config[:externalservice][:wineDB][:host] host = config[:externalservice][:wineDB][:host]
@@ -173,7 +173,7 @@ function similarSommelierDecision(recentevents::T1; maxdistance::Integer=3
println("\n~~~ found similar decision. row id $rowid, distance $distance ", @__FILE__, " ", @__LINE__) println("\n~~~ found similar decision. row id $rowid, distance $distance ", @__FILE__, " ", @__LINE__)
output_b64 = df[1, :function_output_base64] # pick the closest match output_b64 = df[1, :function_output_base64] # pick the closest match
_output_str = String(base64decode(output_b64)) _output_str = String(base64decode(output_b64))
output = copy(JSON3.read(_output_str)) output = copy(JSON.parse(_output_str))
return output return output
else else
println("\n~~~ similar decision not found, max distance $maxdistance ", @__FILE__, " ", @__LINE__) println("\n~~~ similar decision not found, max distance $maxdistance ", @__FILE__, " ", @__LINE__)
@@ -193,7 +193,7 @@ function insertSommelierDecision(recentevents::T1, decision::T2; maxdistance::In
if row == 0 || distance > maxdistance # no close enough SQL stored in the database if row == 0 || distance > maxdistance # no close enough SQL stored in the database
recentevents_embedding = getEmbedding(recentevents)[1] recentevents_embedding = getEmbedding(recentevents)[1]
recentevents = replace(recentevents, "'" => "") recentevents = replace(recentevents, "'" => "")
decision_json = JSON3.write(decision) decision_json = JSON.json(decision)
decision_base64 = base64encode(decision_json) decision_base64 = base64encode(decision_json)
decision = replace(decision_json, "'" => "") decision = replace(decision_json, "'" => "")
@@ -212,14 +212,14 @@ sessionId = GeneralUtils.uuid4snakecase()
d = Dict(:id => sessionId) d = Dict(:id => sessionId)
filepath = "/appfolder/app/sessionid.json" filepath = "/appfolder/app/sessionid.json"
open(filepath, "w") do io open(filepath, "w") do io
JSON3.pretty(io, d) JSON.pretty(io, d)
end end
# query = "How many German wines do you have?" # query = "How many German wines do you have?"
# highValueStateList = copy(JSON3.read("/appfolder/app/highValueState_1.json")) # highValueStateList = copy(JSON.parse("/appfolder/app/highValueState_1.json"))
# selectedState = SQLLLM.compareState(query, highValueStateList, text2textInstructLLM) # selectedState = SQLLLM.compareState(query, highValueStateList, text2textInstructLLM)
+2 -2
View File
@@ -1,5 +1,5 @@
using Revise using Revise
using LibPQ, JSON3, PrettyPrinting, UUIDs, DataFrames, DataStructures, Dates, MQTTClient, Random using LibPQ, JSON, PrettyPrinting, UUIDs, DataFrames, DataStructures, Dates, MQTTClient, Random
using SQLLLM, GeneralUtils using SQLLLM, GeneralUtils
@@ -39,7 +39,7 @@ df = DataFrame(result)
config = copy(JSON3.read("config.json")) config = copy(JSON.parse("config.json"))
msgMeta = GeneralUtils.generate_msgMeta( msgMeta = GeneralUtils.generate_msgMeta(
config[:externalservice][:text2textinstruct][:mqtttopic]; config[:externalservice][:text2textinstruct][:mqtttopic];
+2 -2
View File
@@ -1,8 +1,8 @@
# using Revise # using Revise
# using SQLLLM, LLMMCTS, DataStructures, JSON3 # using SQLLLM, LLMMCTS, DataStructures, JSON
# query = "How many German wines do you have?" # query = "How many German wines do you have?"
# highValueStateList = copy(JSON3.read("/appfolder/app/highValueState_1.json")) # highValueStateList = copy(JSON.parse("/appfolder/app/highValueState_1.json"))
# selectedState = SQLLLM.compareState(query, highValueStateList) # selectedState = SQLLLM.compareState(query, highValueStateList)