A modern, interactive desktop assistant with long-term memory, chat history, and conversation summarization, powered by LLMs via OpenRouter.
- Animated Desktop Assistant: Friendly, always-on-top assistant with customizable GIF appearance (right-click to change).
- Conversational AI: Chat with a powerful LLM (Google Gemini, etc. via OpenRouter) in a modern GUI.
- Long-term Memory: All conversations are saved as JSON summaries and can be reloaded at any time.
- Threaded Conversation History: Browse, revisit, and continue any previous conversation thread.
- Multi-threaded Chat: Start new conversations with "New Conversation" or continue existing ones.
- User-friendly Interface: Clean, resizable chat window with color-coded messages and history navigation.
-
Clone the repository
git clone https://github.com/nortable/desktop_assistant.git cd desktop_assistant -
Create and activate virtual environment
# On Windows python -m venv venv .\venv\Scripts\activate # On macOS/Linux python3 -m venv venv source venv/bin/activate
-
Install requirements
pip install -r requirements.txt
-
Register and set your OpenRouter API key
- Go to OpenRouter.ai and sign up for an account.
- Get your API key from the OpenRouter dashboard.
- Open
desktop_assistant/agent.pyand set your API key:self.api_key = "sk-..." # Replace with your actual OpenRouter API key
- Or, for better security, you can set your API key as an environment variable:
And in
export OPENROUTER_API_KEY="sk-..."
agent.py:import os self.api_key = os.getenv("OPENROUTER_API_KEY", "sk-")
-
Run the assistant
python desktop_assistant/desktop_assistant.py
- Right-click the assistant to open the context menu.
- Start chatting, or open the chat window for a full conversation experience.
- Click "New Conversation" to start a new thread.
- All conversations are saved as JSON summaries in the
summariesfolder. - You can revisit and continue any previous thread.
- Python 3.8+
- See
requirements.txtfor all dependencies (Tkinter, Pillow, langchain, openai, etc.)
- If the bot says: Sorry, I encountered an error: API Error: No choices in API response
- I have no choice either, because most of the free model is still idiotic, you have to write the more meaningful prompt.
- deepseek/deepseek-chat-v3-0324:free
- google/gemini-2.0-flash-exp:free
- meta-llama/llama-4-maverick:free
MIT