Playing with LLMs

To explore the scripts below you need a connection to an LLM. Find more details at: How to setup LLM connections.

Chat with markdown input:

chat := GtLChat new.
chat sendMarkdown: 'Write a script for adding 2 and 40 in Smalltalk'.
  

Chat with markdown input and markdown output:

chat := GtLChat new markdownResponse.
chat sendMarkdown: 'Write a script for adding 2 and 40 in Smalltalk. And a short poem about it.'
  

Specifying code transformations as output:

chat := GtLChat new
		markdownResponse;
		addResponseFormatForMagrite: GtLCodeTransformations
			named: 'CodeTransformations';
	sendMarkdown: 'Create a class for a Person with a first and last name. Create a printing method. Use CodeTransformations to express the changes.'
  

Specifying instructions through Lepiter pages:

chat := GtLChat new
		markdownResponse;
		sendWith: [ :msg | 
			msg
				lepiterExplanations: #('Rewriting Pharo code by example');
				markdown: 'Provide the rewrite rule for removing all `self halt` statements from methods.' ]
  

Providing tools to search through Lepiter:

chat := GtLChat new
		markdownResponse;
		tools: GtLTools leSearch;
		sendWith: [ :msg | 
			msg
				markdown: 'Provide the rewrite rule for removing all `self halt` statements from methods. Document yourself by reading relevant Lepiter pages.' ]
  

Getting the result as a dedicated pharo script:

chat := GtLChat new
		markdownResponse;
		addResponseFormatForMagrite: GtLPharoScript named: 'PharoScript';
		sendWith: [ :msg | 
			msg
				lepiterExplanations: #('Querying with GT search filters by example');
				markdown: 'Provide a PharoScript with a search for methods that are in {{gtClass:BlElement}} and also refer to `assert:description:`.' ]
  

Wrapping a chat in a tool:

chat := GtLChat new
		markdownResponse;
		tools: (GtLTools withAll: {GtLToolForChatMethodSearch new});
		sendWith: [ :msg | 
			msg
				markdown: 'What are a few references of {{gtClass:BlElement}} that also refer to `assert:description:`.' ]
  

Providing pictures as input:

fileReference := BlExporter png
		element: (GtWorldElement allInstances
				detect: [ :aWorldElement | aWorldElement space isFocused ]);
		export.
chat := GtLChat new
		markdownResponse;
		sendWith: [ :m | 
			m
				markdown: 'What do you see in the picture?';
				images: {fileReference} ]
  

Using tools that return pictures:

chat := GtLChat new
		markdownResponse;
		tools: (GtLTools withAll: {GtLToolForWorldScreenshot new});
		sendMarkdown: 'Take a screenshot and describe what you see'
  

Allowing the LLM to change code and run examples:

chat := GtLChat new
		markdownResponse;
		tools: GtLTools gtSearch , GtLTools gtExamplesRun , GtLTools leSearch
				, GtLTools gtCodeChange;
		sendWith: [ :msg | 
			msg
				markdown: 'Create a BubbleSorter class that implements bubblesort. Create examples for it. Ensure that the examples are green.';
				lepiterExplanations: {'Examples by example'} ]
  

Change the resulting BubbleSorter class for example, by changing the comparison sign. And make it fix the examples.

chat sendWith: [ :msg | 
			msg
				markdown: 'Check the examples from {{gtClass:BubbleSorter}}. If they are red, make them green.';
				lepiterExplanations: {'Examples by example'} ]
  

Other examples of using tools:

chat := GtLChat new
		markdownResponse;
		tools: GtLTools gtSearch , GtLTools leSearch;
		lepiterExplanations: #('Examples by example');
		sendMarkdown: 'Explain the {{gtClass:BlElement}} class. Look for examples. Pick an interesing example and explain it.'
  
chat := GtLChat new
		markdownResponse;
		tools: GtLTools gtSearch , GtLTools leSearch;
		sendMarkdown: 'What Lepiter pages are relevant for learning about examples?'