From 0c39c507f5c01680486b617a6294457e19271e8c Mon Sep 17 00:00:00 2001 From: narawat lamaiin Date: Sun, 28 Apr 2024 15:58:02 +0700 Subject: [PATCH] update --- src/interface.jl | 18 ++++++++++++------ src/mcts.jl | 35 +++++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/interface.jl b/src/interface.jl index 54a1ff7..7cc276c 100644 --- a/src/interface.jl +++ b/src/interface.jl @@ -107,17 +107,23 @@ function decisionMaker(a::T1, state::T2)::String where {T1<:agent, T2<:AbstractD "Thought_2": "reasoning", ... "Thought_n": "reasoning", - "Action_1": "action to take", + "Action_1": {"action": "action to take", "input": "Action input"}, "Observation_1": "result of the action" } Here are some examples: { - "Question": "I would like to buy a sedan", - "Thought_1": "I have many car in my inventory suitable for several usage scenarios", - "Thought_2": "It would be better if I know what the user intend to do with his car", + "Question": "I would like to buy a sedan.", + "Thought_1": "I have many cars in my inventory suitable for several usage scenarios.", + "Thought_2": "It would be better if I knew what the user intends to do with his car."1, "Thought_3": "I will ask the user what is the intended usecase", - "Action_1": "Chatbox[What will you use it for?]" + "Action_1": {"action": "Chatbox", "input": "What will you use it for?"} + } + { + "Question": "I'm looking for a sedan.", + "Thought_1": "I have many types of sedans in my inventory, each with diverse features.", + "Thought_2": "It would be easier to make a recommendation if I knew what feature the user is looking for. I should ask the user.", + "Action_1": {"action": "Chatbox", "input": "Do you have any specific feature in mind?"} } $reflect @@ -307,7 +313,7 @@ function conversation(a::T, userinput::Dict) where {T<:agent} - else #[WORKING] new thinking + else #[PENDING] new thinking initialState = Dict( # deepcopy the info to prevent modifying the info unintentionally during MCTS planning diff --git a/src/mcts.jl b/src/mcts.jl index 9bcb67c..154bb35 100644 --- a/src/mcts.jl +++ b/src/mcts.jl @@ -121,15 +121,28 @@ function expand(a::T1, node::MCTSNode, state::T2, decisionMaker::Function, state for sample in 1:n thoughtJstr = decisionMaker(a, state) thoughtDict = copy(JSON3.read(thoughtJstr)) + + """ Example of thoughtDict + Dict{Symbol, Any} with 3 entries: + :Thought_1 => "The customer wants to buy a bottle of wine. This is a good start!" + :Action_1 => Dict{Symbol, Any}( + :action=>"Chatbox", + :input=>"What occasion are you buying the wine for?" + ) + :Observation_1 => "" + """ latestActionKey = GeneralUtils.findHighestIndexKey(thoughtDict, "Action") + _action = thoughtDict[latestActionKey] + action = _action[:action] + actioninput = _action[:input] - error("--> expand") - newState = transition(node.state, action) #[] Implement your transition function + newState = transition(a, node.state, action, actioninput) #[] Implement your transition function + if newState ∉ keys(node.children) node.children[newState] = MCTSNode(newState, 0, 0.0, Dict{T, MCTSNode}()) end end - + error("--> expand") end """ @@ -192,9 +205,17 @@ function backpropagate(node::MCTSNode, reward::Float64) end end -""" +""" Get a new state # Arguments + - `a::T1` + one of YiemAgent's agent + - `state::T2` + current game state + - `action::String` + name of LLM's function to be used + - `actioninput::String` + input to LLM function # Return @@ -205,12 +226,14 @@ julia> # TODO - [] update docstring - - [] implement the function + - [WORKING] implement the function # Signature """ -function transition(state, action) +function transition(a::T1, state::T2, action::T3, + actioninput::T3) where {T1<:agent, T2<:AbstractDict, T3<:AbstractString} + error("--> transition") end """