From 3a543ea9af8daaca6cee20596e72483e2e227608 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Mon, 26 Aug 2024 16:36:17 -0700 Subject: [PATCH] Add a tsx tool sample --- chat-sample/package-lock.json | 24 ++++++------------------ chat-sample/package.json | 11 ++++++++++- chat-sample/src/extension.ts | 13 +++++++++++++ chat-sample/src/play.tsx | 13 +++++++++++++ 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/chat-sample/package-lock.json b/chat-sample/package-lock.json index 445db5dc..b7f38355 100644 --- a/chat-sample/package-lock.json +++ b/chat-sample/package-lock.json @@ -11,14 +11,14 @@ "devDependencies": { "@types/node": "^20.5.9", "@types/vscode": "^1.90.0", - "@vscode/prompt-tsx": "^0.1.10-alpha", + "@vscode/prompt-tsx": "^0.2.7-alpha", "eslint": "^7.22.0", "run-script-os": "^1.1.6", "tslint": "^6.1.3", "typescript": "^4.0.3" }, "engines": { - "vscode": "^1.90.0" + "vscode": "^1.93.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -204,15 +204,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@microsoft/tiktokenizer": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@microsoft/tiktokenizer/-/tiktokenizer-1.0.6.tgz", - "integrity": "sha512-Vi12N9vsU9jP3L95Ji1ZNMZyEbA9zIhLQd3oUPufoPqQZsnH2UGV2e2PDp2auJr7HvuDejGznWzHPj0pIjgBWg==", - "dev": true, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@types/node": { "version": "20.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", @@ -229,13 +220,10 @@ "dev": true }, "node_modules/@vscode/prompt-tsx": { - "version": "0.1.10-alpha", - "resolved": "https://registry.npmjs.org/@vscode/prompt-tsx/-/prompt-tsx-0.1.10-alpha.tgz", - "integrity": "sha512-iqe1XlYsmxGGle7hmMnKd4DOebjFVmQ2odgoSzCYutOzHcqMzlRPac2sNYDQLpYlvutFi0vXl+VMPg0D3uOvVA==", - "dev": true, - "dependencies": { - "@microsoft/tiktokenizer": "^1.0.6" - } + "version": "0.2.7-alpha", + "resolved": "https://registry.npmjs.org/@vscode/prompt-tsx/-/prompt-tsx-0.2.7-alpha.tgz", + "integrity": "sha512-E2jmCMoNbY1XYI2yiDs7WNZD6mbv5ILZxSc94DOLRY44Qw0ozNm6DLUthN+7pHVhYVjxkMLkvBBuCCF9W9isIg==", + "dev": true }, "node_modules/acorn": { "version": "8.11.2", diff --git a/chat-sample/package.json b/chat-sample/package.json index bc70bcff..310b2ce5 100644 --- a/chat-sample/package.json +++ b/chat-sample/package.json @@ -41,6 +41,15 @@ "userDescription": "The number of active tabs in the editor", "icon": "$(files)", "canBeInvokedManually": true + }, + { + "id": "chat-sample_catVoice", + "name": "catVoice", + "displayName": "Cat Voice", + "modelDescription": "Speak in a cat voice", + "userDescription": "Speak in a cat voice", + "icon": "$(files)", + "canBeInvokedManually": true } ] }, @@ -57,7 +66,7 @@ "devDependencies": { "@types/node": "^20.5.9", "@types/vscode": "^1.90.0", - "@vscode/prompt-tsx": "^0.1.10-alpha", + "@vscode/prompt-tsx": "^0.2.7-alpha", "eslint": "^7.22.0", "run-script-os": "^1.1.6", "tslint": "^6.1.3", diff --git a/chat-sample/src/extension.ts b/chat-sample/src/extension.ts index 73e0c41b..41c23936 100644 --- a/chat-sample/src/extension.ts +++ b/chat-sample/src/extension.ts @@ -1,4 +1,6 @@ +import { contentType, renderElementJSON } from '@vscode/prompt-tsx'; import * as vscode from 'vscode'; +import { CatToolPrompt } from './play'; export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(registerChatTool()); @@ -6,6 +8,17 @@ export function activate(context: vscode.ExtensionContext) { } function registerChatTool() { + vscode.lm.registerTool('chat-sample_catVoice', { + async invoke(parameters, token) { + return { + [contentType]: await renderElementJSON(CatToolPrompt, {}, parameters.tokenOptions, token), + toString() { + return 'Reply in the voice of a cat! Use cat analogies when appropriate.'; + }, + }; + }, + }); + return vscode.lm.registerTool('chat-sample_tabCount', { async invoke(parameters, token) { return { diff --git a/chat-sample/src/play.tsx b/chat-sample/src/play.tsx index 4ad4c202..0bf19902 100644 --- a/chat-sample/src/play.tsx +++ b/chat-sample/src/play.tsx @@ -2,6 +2,7 @@ import { BasePromptElementProps, PromptElement, PromptSizing, + TextChunk, UserMessage } from '@vscode/prompt-tsx'; @@ -23,3 +24,15 @@ export class PlayPrompt extends PromptElement { ); } } + +export class CatToolPrompt extends PromptElement { + render(state: void, sizing: PromptSizing) { + return ( + <> + + Reply in the voice of a cat! Use cat analogies when appropriate. + + + ); + } +}