Skip to content

Integration of chat llm behavior #112

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 29 commits into
base: ros2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
aae269a
skeleton
doumdi Feb 12, 2025
2147929
Adding ChatDesire and ChatStrategy, WIP.
doumdi Feb 17, 2025
41b2d34
Base chatbot demo
doumdi Feb 17, 2025
ece85d4
Demo enabling ChatStrategy working. WIP.
doumdi Feb 17, 2025
115d087
Working chat with ollama
doumdi Feb 19, 2025
c4019c7
Working chatbot
doumdi Feb 20, 2025
5e0c07e
Updated to ros2 branch
doumdi Feb 26, 2025
7568fc4
Merge branch 'ros2' of https://github.com/introlab/t-top into chat-llm
doumdi Feb 27, 2025
2f0edaa
Working ChatGPT with function calls, WIP.
doumdi Mar 3, 2025
2bc8bc1
Working simple function calls
doumdi Mar 3, 2025
1337637
Starting separation into configuration files
doumdi Apr 1, 2025
c042a6d
Merge branch 'ros2' of https://github.com/introlab/t-top into chat-llm
doumdi Apr 14, 2025
63c5450
Sending function calls from tools to publisher
doumdi Apr 14, 2025
07f0f1a
Calling external services, WIP
doumdi Apr 15, 2025
5ec34ef
Calling external services, WIP
doumdi Apr 15, 2025
2c26a5d
WIP, adding service to chatbot demo
doumdi Apr 15, 2025
3b459ed
Callbacks blocking after calling service, why ?
doumdi Apr 16, 2025
aa770de
Trying another thread, same result, not receiving subscriber message
doumdi Apr 16, 2025
56c2cd0
Workaround to avoid service call blocking the executor
doumdi Apr 23, 2025
7e91731
Working version to raise or lower volume
doumdi Apr 23, 2025
8a77196
Cleanup
doumdi Apr 23, 2025
e496b7b
Added documentation, cleanup launch files
doumdi Apr 24, 2025
c915ead
Updated documentation
doumdi Apr 25, 2025
3fc9285
Fixed pull request comments.
doumdi Apr 30, 2025
d051e8c
Address remaining pull request comments.
doumdi Apr 30, 2025
7bbd393
Fixing last things before merge
doumdi May 1, 2025
4fed255
Merge branch 'ros2' of https://github.com/introlab/t-top into chat-llm
doumdi May 1, 2025
1761561
Fix openai api for openai > 1.0.0
philippewarren May 1, 2025
31bce37
Merge branch 'chat-llm' of https://github.com/introlab/t-top into cha…
philippewarren May 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Demo enabling ChatStrategy working. WIP.
  • Loading branch information
doumdi committed Feb 17, 2025
commit ece85d490f65a7db42f41ebdc201c8dc667d718d
64 changes: 62 additions & 2 deletions ros/demos/chatbot/src/chatbot_node.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,64 @@
int main(int argc, char* argv[])
{

#include <hbba_lite/core/DesireSet.h>
#include <hbba_lite/core/RosFilterPool.h>
#include <hbba_lite/core/GecodeSolver.h>
#include <hbba_lite/core/HbbaLite.h>
#include <hbba_lite/core/RosStrategyStateLogger.h>

#include <t_top_hbba_lite/Strategies.h>

#include <memory>

using namespace std;

constexpr bool WAIT_FOR_SERVICE = true;
constexpr const char* NODE_NAME = "chatbot_node";

int startNode() {

auto node = rclcpp::Node::make_shared(NODE_NAME);

auto desireSet = make_shared<DesireSet>();
auto filterPool = make_shared<RosFilterPool>(node, WAIT_FOR_SERVICE);

vector<unique_ptr<BaseStrategy>> strategies;

//strategies.emplace_back(createSpeechToTextStrategy(filterPool));
//strategies.emplace_back(createTalkStrategy(filterPool, desireSet, node));
strategies.emplace_back(createChatStrategy(filterPool, desireSet, node));


auto solver = make_unique<GecodeSolver>();
auto strategyStateLogger = make_unique<RosTopicStrategyStateLogger>(node);
HbbaLite hbba(desireSet, move(strategies), {{"sound", 1}}, move(solver), move(strategyStateLogger));


desireSet->addDesire(make_unique<ChatDesire>());


rclcpp::executors::MultiThreadedExecutor executor(rclcpp::ExecutorOptions(), 2);

RCLCPP_INFO_STREAM(node->get_logger(), "Chatbot started");
executor.add_node(node);
executor.spin();
return 0;
}



int main(int argc, char** argv)
{
rclcpp::init(argc, argv);

try
{
return startNode();
}
catch (const std::exception& e)
{
RCLCPP_ERROR_STREAM(rclcpp::get_logger(NODE_NAME), "Chatbot crashed (" << e.what() << ")");
return -1;
}

rclcpp::shutdown();
}
4 changes: 2 additions & 2 deletions ros/utils/t_top_hbba_lite/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ target_include_directories(t_top_hbba_lite_cpp
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
ament_target_dependencies(t_top_hbba_lite_cpp rclcpp hbba_lite nav_msgs sensor_msgs behavior_msgs std_msgs std_msgs daemon_ros_client)
ament_target_dependencies(t_top_hbba_lite_cpp rclcpp hbba_lite nav_msgs sensor_msgs behavior_msgs perception_msgs std_msgs std_msgs daemon_ros_client)

ament_export_dependencies(rclcpp hbba_lite nav_msgs sensor_msgs behavior_msgs std_msgs std_msgs daemon_ros_client)
ament_export_dependencies(rclcpp hbba_lite nav_msgs sensor_msgs behavior_msgs perception_msgs std_msgs std_msgs daemon_ros_client)
ament_export_targets(export_t_top_hbba_lite_cpp HAS_LIBRARY_TARGET)

install(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <behavior_msgs/msg/done.hpp>
#include <behavior_msgs/msg/sound_file.hpp>

#include <perception_msgs/msg/transcript.hpp>

#include <memory>

class FaceAnimationStrategy : public Strategy<FaceAnimationDesire>
Expand Down Expand Up @@ -181,7 +183,7 @@ class ChatStrategy : public Strategy<ChatDesire>
std::shared_ptr<DesireSet> m_desireSet;
std::shared_ptr<rclcpp::Node> m_node;

rclcpp::Subscription<behavior_msgs::msg::Text>::SharedPtr m_transcriptSubscriber;
rclcpp::Subscription<perception_msgs::msg::Transcript>::SharedPtr m_transcriptSubscriber;
rclcpp::Subscription<behavior_msgs::msg::Done>::SharedPtr m_chatDoneSubscriber;
rclcpp::Subscription<behavior_msgs::msg::Done>::SharedPtr m_talkDoneSubscriber;

Expand All @@ -201,7 +203,7 @@ class ChatStrategy : public Strategy<ChatDesire>
void onEnabling(const ChatDesire& desire) override;

private:
void transcriptSubscriberCallback(const behavior_msgs::msg::Text::SharedPtr msg);
void transcriptSubscriberCallback(const perception_msgs::msg::Transcript::SharedPtr msg);
void chatDoneSubscriberCallback(const behavior_msgs::msg::Done::SharedPtr msg);
void talkDoneSubscriberCallback(const behavior_msgs::msg::Done::SharedPtr msg);
};
Expand Down
24 changes: 10 additions & 14 deletions ros/utils/t_top_hbba_lite/src/Strategies.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,16 +264,20 @@ ChatStrategy::ChatStrategy(
: Strategy<ChatDesire>(
utility,
{{"sound", 1}},
{{"chat/filter_state", FilterConfiguration::onOff()}},
{
{"talk/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)},
{"speech_to_text/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)},
{"vad/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)}
},
move(filterPool)),
m_desireSet(move(desireSet)),
m_node(move(node))
{
//TODO verify topics
m_transcriptSubscriber = m_node->create_subscription<behavior_msgs::msg::Text>(
"/transcript",
m_transcriptSubscriber = m_node->create_subscription<perception_msgs::msg::Transcript>(
"speech_to_text/transcript",
1,
[this](const behavior_msgs::msg::Text::SharedPtr msg) { transcriptSubscriberCallback(msg); });
[this](const perception_msgs::msg::Transcript::SharedPtr msg) { transcriptSubscriberCallback(msg); });

m_chatDoneSubscriber = m_node->create_subscription<behavior_msgs::msg::Done>(
"chat/done",
Expand Down Expand Up @@ -310,7 +314,7 @@ void ChatStrategy::onEnabling(const ChatDesire& desire)

}

void ChatStrategy::transcriptSubscriberCallback(const behavior_msgs::msg::Text::SharedPtr msg)
void ChatStrategy::transcriptSubscriberCallback(const perception_msgs::msg::Transcript::SharedPtr msg)
{
// LISTENING DONE
disableFilter("vad/filter_state");
Expand Down Expand Up @@ -625,13 +629,5 @@ unique_ptr<BaseStrategy> createChatStrategy(
shared_ptr<rclcpp::Node> node,
uint16_t utility)
{
return make_unique<Strategy<ChatDesire>>(
utility,
unordered_map<string, uint16_t>{},
unordered_map<string, FilterConfiguration>{
{"talk/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)},
{"speech_to_text/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)},
{"vad/filter_state", FilterConfiguration::onOff(FilterConfiguration::DefaultState::DISABLED)},
},
move(filterPool));
return make_unique<ChatStrategy>(utility, move(filterPool), move(desireSet), move(node));
}