[ 
https://issues.apache.org/jira/browse/CAMEL-21816?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]
Claus Ibsen updated CAMEL-21816:
--------------------------------
    Summary: camel-ai - Missing tool information when returning function call 
response  (was: Missing tool information when returning function call response)

> camel-ai - Missing tool information when returning function call response
> -------------------------------------------------------------------------
>
>                 Key: CAMEL-21816
>                 URL: https://issues.apache.org/jira/browse/CAMEL-21816
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-langchain4j-tools
>    Affects Versions: 4.10.0
>            Reporter: Bruno Meseguer
>            Priority: Major
>
> When a Camel route uses the LangChain4J-tools component, it calls the LLM, 
> providing metadata about the tools (tool routes) available the LLM can use.
> The LLM computes the request and decides if a tool call is necessary or not. 
> If the LLM performs a tool call, Camel executes the tool and returns the 
> result to the LLM.
> However, the current implementation does not provide the Tools metadata 
> (tools available) when returning the tool result.
> The consequence of Camel not including Tools metadata when returning the tool 
> response is that the LLM understands there are no more Tools available, and 
> concludes that subsequent tool calls are not allowed, forcing the LLM to 
> compose a final response.
> The expected behaviour from Camel is to always provide a full history of tool 
> calls and results, including the metadata of available tools the LLM can use 
> at all times.
> Let's assume Camel asks the LLM the following question:
>  * "what is the weather in London?"
> Camel calls the LLM and provides metadata listing the tools available to the 
> LLM. In this example, it would provide:
>  * Tool to find the geo-coordinates for a given city
>  * Tool to obtain weather information for a given longitude and latitude
> The LLM needs to first obtain from Camel the geo-coordinates for London, and 
> in a subsequent call, invoke the second tool to obtain the weather passing 
> the geo-coordinates obtained in the first call.
> When Camel returns the result of the geo-coordinates tool call, the current 
> implementation is missing to provide tools metadata. The sample below shows 
> all the data Camel needs to provide to allow the LLM to call a second time:
> {code:java}
> Request:
> - method: POST
> - url: http://localhost:11434/api/chat
> - headers: [Accept: application/json], [Content-Type: application/json], 
> [User-Agent: Apache Camel], [content-length: 2257]
> - body: {
>   "model" : "qwen2.5:7b-instruct",
>   "messages" : [ {
>     "role" : "system",
>     "content" : "    You are a meteorologist, and you need to answer 
> questions asked by the user about weather using at most 3 lines.\n\n    The 
> weather information is a JSON object and has the following fields:\n\n    
> maxTemperature is the maximum temperature of the day in Celsius degrees\n    
> minTemperature is the minimum temperature of the day in Celsius degrees\n    
> precipitation is the amount of water in mm\n    windSpeed is the speed of 
> wind in kilometers per hour\n    weather is the overall weather.\n"
>   }, {
>     "role" : "user",
>     "content" : "What is the weather in london ?"
>   }, {
>     "role" : "assistant",
>     "tool_calls" : [ {
>       "function" : {
>         "name" : "findCity",
>         "arguments" : {
>           "name" : "london"
>         }
>       }
>     } ]
>   }, {
>     "role" : "tool",
>     "content" : "{\n  \"results\" : [ {\n    \"latitude\" : 51.50853,\n    
> \"longitude\" : -0.12574\n  } ]\n}"
>   } ],
>   
>   "tools" : [ {
>     "type" : "function",
>     "function" : {
>       "name" : "forecast",
>       "description" : "Forecasts the weather for the given latitude and 
> longitude",
>       "parameters" : {
>         "type" : "object",
>         "properties" : {
>           "latitude" : {
>             "type" : "number"
>           },
>           "longitude" : {
>             "type" : "number"
>           }
>         },
>         "required" : [ "latitude", "longitude" ]
>       }
>     }
>   }, {
>     "type" : "function",
>     "function" : {
>       "name" : "findCity",
>       "description" : "Finds the latitude and longitude of a given city",
>       "parameters" : {
>         "type" : "object",
>         "properties" : {
>           "name" : {
>             "type" : "string"
>           }
>         },
>         "required" : [ "name" ]
>       }
>     }
>   } ],
>   "options" : {
>     "temperature" : 0.0,
>     "top_k" : 40,
>     "top_p" : 0.9
>   },
>   "stream" : false
> } {code}
> Note in the JSON data above that Camel provides both the result of the tool 
> call (provides latitude and longitude for the city of London), and also 
> provides (again) the list of available tools the LLM can use at all times if 
> it decides to call again.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to