From 0726624ae1ee164e69bb16d51fb86b3bb417c6ec Mon Sep 17 00:00:00 2001 From: Aavash Shrestha Date: Tue, 25 Mar 2025 16:44:45 +0200 Subject: [PATCH 1/2] add readme --- README.md | 32 ++++++++++++++++++++++++++++++++ docs/images/screenshot.png | Bin 0 -> 330472 bytes 2 files changed, 32 insertions(+) create mode 100644 README.md create mode 100644 docs/images/screenshot.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..d523e4d --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +## Panda + +A terminal user interface for chatting with LLMs. + +I started this project because I wanted something lightweight that I can run in my terminal to talk with LLMs. +I could not keep up the project with my work and the everchanging landscape of LLMs and their capabilities. I also realized that the terminal is not the right interface for this kind of thing. + +However, I had to finish this and get a v0 out (have a bad habit of not being able to move on to a new side-project otherwise). Right now it can only talk to OpenAI's API (you need an OpenAI API Key) and is very basic in features. + +![Screenshot](docs/images/screenshot.png) + +### Usage + +Install with `go install github.com/aavshr/panda@latest` and run with `panda`. + +Clone the repository and build with `make build` if you just want to build it yourself. + +**Navigation** + +- `Esc` to focus out of a section +- `Enter` to focus into a section +- Use arrow keys or `hjkl` to navigate + +**Chat** + +- Use `Tab` to send a message + +**History** + +- Use `Enter` to start a new chat in that thread +- Use `Ctrl + D` to delete a thread +- Use `/` to filter threads diff --git a/docs/images/screenshot.png b/docs/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ab8c094053df1e0bdc83831b13f979a03eed02 GIT binary patch literal 330472 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