previous context: I forgot to save the text from the beginning of the conversation. I said I wanted to design a UI for writing with LLMs. First I had Sydney generate ideas and it described something much like the OAI playground. Then I said approximately, "I want to be able to select between multiple completions and branch from arbitrary points in the text, and for the alternate branches to be saved".
Sydney: Thank you for sharing your idea. It sounds like you want a more interactive and flexible way of generating text with language models. One possible way to design this interface could be something like this:
- A text box where the user can type or paste their input, as before.
- A button or a slider to adjust the parameters of the language model, as before.
- A button to generate multiple possible completions based on the input and the parameters. The completions could be displayed as a list or a grid below the input text box, with each completion having a checkbox or a radio button to select it.
- A button to confirm the selection and append the chosen completion to the input text box. Alternatively, the user could just click on the completion they want to select it.
- A button or a keyboard shortcut to "branch" from any point in the text. This would create a new text box with the same input up to that point, and generate new completions based on that input. The original text box would be saved as a branch and displayed on the side or below the new text box, with an option to switch back to it at any time.
- A button or a keyboard shortcut to merge two branches into one. This would combine the inputs of both branches into one text box and generate new completions based on that input. The merged branch would replace both original branches in the display.
Very quickly, there will be a lot of branches. How should the UI display them, so that you can navigate between them, but things won't get too cluttered?
That’s a good question. One possible way to display the branches could be something like this:
A tree view that shows the hierarchy of the branches and their inputs. The user can expand or collapse any branch to see its sub-branches or completions. The user can also drag and drop any branch to rearrange the order or the level of the branches.
A tab view that shows the current branch and its completions in a separate tab. The user can switch between tabs to see different branches and their completions. The user can also close any tab to delete that branch, or open a new tab to create a new branch from scratch.
Ok, but within a few minutes I have hundreds of branches. Both of these result in an overwhelming number of branches and I can't find anything.
I see. That could be a problem. Maybe you could add some features to help the user manage the branches, such as:
A search box that allows the user to search for a specific word or phrase in any branch or completion. The results could be highlighted in the tree view or the tab view, or filtered out in a separate view.
A filter box that allows the user to filter the branches or completions by some criteria, such as length, date, rating, similarity, etc. The filtered results could be shown in the tree view or the tab view, or sorted in a separate view.
A bookmark button that allows the user to bookmark any branch or completion they like and save it for later. The bookmarked items could be shown in a separate panel or a menu, with an option to open them in a new tab or append them to the current branch.
Thanks, those are great ideas. Here's another problem I've run into. Sometimes you may have multiple alternate child branches that were generated from the same parent branch. But then, while you have one of the child branches selected, you edit the parent history, and this makes it inconsistent with the alternate child branches. So then I'd want those other branches to be associated with an earlier version of the parent text. But not always - sometimes the changes are consistent with all the branches.
That sounds like a tricky problem. Maybe you could solve it by adding some features to handle the versioning of the branches, such as:
A version control button that allows the user to see the history of any branch and its edits. The user can also revert to any previous version of the branch, or compare two versions of the branch and see the differences.
A conflict resolution button that allows the user to see if any child branches are inconsistent with the current parent branch. The user can also choose to update the child branches to match the parent branch, or keep them as they are, or merge them with the parent branch.