diff --git a/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.cs b/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.cs index 98c707b..637e14b 100644 --- a/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.cs +++ b/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.cs @@ -1,4 +1,5 @@ using System.Windows.Controls; +using Dynamo.ViewModels; using Dynamo.Wpf.Extensions; namespace DynamoAssistant @@ -47,8 +48,8 @@ public override void Loaded(ViewLoadedParams p) // Set the owner of the window to the Dynamo window. Owner = p.DynamoWindow }; - - assistantMenuItem = new MenuItem { Header = "Show Dynamo Assistant", IsCheckable = true }; + viewModel.dynamoViewModel = p.DynamoWindow.DataContext as DynamoViewModel; + assistantMenuItem = new MenuItem { Header = "Open Copilot", IsCheckable = true }; assistantMenuItem.Checked += (sender, args) => p.AddToExtensionsSideBar(this, window); assistantMenuItem.Unchecked += (sender, args) => p.CloseExtensioninInSideBar(this); p.AddExtensionMenuItem(assistantMenuItem); @@ -78,7 +79,7 @@ public override string Name { get { - return "Dynamo Assistant"; + return "Copilot"; } } diff --git a/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.csproj b/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.csproj index 1e86dc1..adf01cb 100644 --- a/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.csproj +++ b/src/DynamoAssistantViewExtension/DynamoAssistantViewExtension.csproj @@ -10,6 +10,7 @@ true + diff --git a/src/DynamoAssistantViewExtension/DynamoAssistantWindowViewModel.cs b/src/DynamoAssistantViewExtension/DynamoAssistantWindowViewModel.cs index 30054fd..a5f1638 100644 --- a/src/DynamoAssistantViewExtension/DynamoAssistantWindowViewModel.cs +++ b/src/DynamoAssistantViewExtension/DynamoAssistantWindowViewModel.cs @@ -1,12 +1,14 @@ -using Dynamo.Core; +using System; +using System.Collections.ObjectModel; +using System.Windows.Input; +using Dynamo.Core; using Dynamo.Extensions; +using Dynamo.Models; using Dynamo.UI.Commands; +using Dynamo.ViewModels; using OpenAI_API; using OpenAI_API.Chat; using OpenAI_API.Models; -using System; -using System.Collections.ObjectModel; -using System.Windows.Input; namespace DynamoAssistant { @@ -14,12 +16,15 @@ public class DynamoAssistantWindowViewModel : NotificationObject, IDisposable { private string userInput; private readonly ReadyParams readyParams; + internal DynamoViewModel dynamoViewModel; + + // Chat GPT related fields private readonly OpenAIAPI chatGPTClient; private readonly Conversation conversation; private static readonly string apikey = "Your API Key"; /// - /// + /// User input to the Copilot /// public string UserInput { @@ -36,6 +41,11 @@ public string UserInput } } + /// + /// Dynamo Model getter + /// + internal DynamoModel dynamoModel => dynamoViewModel.Model; + public ObservableCollection Messages { get; set; } = new ObservableCollection(); public DynamoAssistantWindowViewModel(ReadyParams p) @@ -46,23 +56,38 @@ public DynamoAssistantWindowViewModel(ReadyParams p) chatGPTClient = new OpenAIAPI(new APIAuthentication(apikey)); // ChatGPT lets you start a new chat. conversation = chatGPTClient.Chat.CreateConversation(); - conversation.Model = Model.DefaultChatModel; - conversation.RequestParameters.Temperature = 0; + conversation.Model = Model.GPT4_Turbo; + // Adjust this value for more or less "creativity" in the response + conversation.RequestParameters.Temperature = 0.2; // Display a welcome message - Messages.Add("Assistant:\nWelcome to Dynamo world and ask me anything to get started!"); + Messages.Add("Copilot:\nWelcome to Dynamo world and ask me anything to get started!\n"); } internal async void SendMessage(string msg) { // Send the user's input to the ChatGPT API and receive a response conversation?.AppendUserInput(msg); - string response = await conversation.GetResponseFromChatbotAsync(); // Display user message first - Messages.Add("You:\n" + msg); + Messages.Add("You:\n" + msg + "\n"); + string response = await conversation.GetResponseFromChatbotAsync(); // Display the chatbot's response - Messages.Add("Assistant:\n" + response); + Messages.Add("Copilot:\n" + response + "\n"); + //var pythonNode = new PythonNodeModels.PythonNode(); + //dynamoModel.ExecuteCommand(new DynamoModel.CreateNodeCommand(pythonNode, 0, 0, false, false)); + + // create a Dynamo note example + CreateNote("A1BE9F01-55C4-495E-B24C-099D018A29CE", "This is a sample Note.", 0, 0, true); + } + + internal void CreateNote(string nodeId, string noteText, double x, double y, bool defaultPosition) + { + dynamoModel.ExecuteCommand(new DynamoModel.CreateNoteCommand(nodeId, noteText, x, y, defaultPosition)); + Messages.Add("Copilot:\nYour note has been created!\n"); } + /// + /// Dispose function + /// public void Dispose() { // Do nothing @@ -74,10 +99,7 @@ public ICommand EnterCommand { get { - if (enterCommand == null) - { - enterCommand = new DelegateCommand(Enter); - } + enterCommand ??= new DelegateCommand(Enter); return enterCommand; }