Moldable Chat: Tool-augmented interaction

To transform the chat into an "agent", we can provide tools that the LLM can choose to run.

For example, to allow the LLM to answer questions about how Ludo is used in the book, we can add tools for searching through Lepiter:

c := GtLChat new
		markdownResponse;
		tools: GtLTools leSearch;
		sendMarkdown: 'What is Ludo and what is it used for in the Glamorous Toolit Book?'
  

To answer our question, the LLM first needs to read the relevant pages from the book. To read them, it needs to find them in the book. To know which knowledge base the book is in, it needs to retrieve the available knowledge bases. Each of these steps should be accessible through tools. For example, the last step is supported by GtLToolForLepiterKnowledgeBases GtLAbstractMagritteFunctionTool << #GtLToolForLepiterKnowledgeBases slots: {}; tag: 'Tools'; package: 'Gt4LlmCore' .

c := GtLChat new
		markdownResponse;
		addResponseFormatForMagrite: GtLPharoScript named: 'PharoScript';
		gtPageExplanation: 'Querying with GT search filters by example';
	sendMarkdown: 'Provide a PharoScript with a search for methods that are in {{gtClass:BlElement}} and also refer to `assert:description:`.'
  
c := GtLChat new
		markdownResponse;
		tools: (GtLTools withAll: {GtLToolForChatMethodSearch new});
	sendMarkdown: 'What are a few references of {{gtClass:BlElement}} that also refer to `assert:description:`.'