Explorar o código

fix: add provider_id, model_id, and tools to SubmitToolResults request

The SubmitToolResults handler was missing critical fields needed for the
LLM provider to continue the conversation after tool execution:

- Added workspace_id and model_id from session
- Added provider_id lookup from workspace settings (matching HandleLlmStreamMessage)
- Added available tools filtered by user permissions

This fixes the "you must provide a model parameter" error that occurred
when submitting tool results to continue the conversation.
fszontagh hai 7 meses
pai
achega
d103d2446e
Modificáronse 1 ficheiros con 29 adicións e 0 borrados
  1. 29 0
      webserver/src/http_server.cpp

+ 29 - 0
webserver/src/http_server.cpp

@@ -7489,6 +7489,35 @@ void HttpServer::HandleLlmSubmitToolResults(const httplib::Request& req, httplib
         ::smartbotic::llm::SubmitToolResultsRequest tool_request;
         tool_request.set_session_id(session_id);
         tool_request.set_user_id(auth_user->user_id);
+        tool_request.set_workspace_id(session.workspace_id());
+        tool_request.set_model_id(session.model_id());
+
+        // Get workspace settings to find provider_id (same as HandleLlmStreamMessage)
+        if (!session.workspace_id().empty() && workspaceService_) {
+            auto ws_result = workspaceService_->GetWorkspace(session.workspace_id(), false);
+            if (ws_result.success && ws_result.workspace) {
+                try {
+                    if (ws_result.workspace->settings.contains("llm_provider_id")) {
+                        std::string provider_id = ws_result.workspace->settings["llm_provider_id"].get<std::string>();
+                        if (!provider_id.empty()) {
+                            tool_request.set_provider_id(provider_id);
+                            spdlog::debug("SubmitToolResults: Using provider_id '{}' from workspace settings", provider_id);
+                        }
+                    }
+                } catch (...) {
+                    // Ignore JSON errors
+                }
+            }
+        }
+
+        // Add available tools (filtered by permissions)
+        auto tools = toolService_->GetAvailableTools(*auth_user, session.workspace_id());
+        for (const auto& tool : tools) {
+            auto* t = tool_request.add_tools();
+            t->set_name(tool.name);
+            t->set_description(tool.description);
+            t->set_input_schema(tool.input_schema);
+        }
 
         for (const auto& result : body["tool_results"]) {
             auto* tool_result = tool_request.add_tool_results();