{"id":41389886,"url":"https://github.com/kevensen/gollama-chat","last_synced_at":"2026-01-23T12:28:49.262Z","repository":{"id":315976745,"uuid":"1053558456","full_name":"kevensen/gollama-chat","owner":"kevensen","description":"Text UI chat program to interface with Ollama using the Bubbletea framework","archived":false,"fork":false,"pushed_at":"2025-10-06T22:55:41.000Z","size":10324,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-07T00:19:51.813Z","etag":null,"topics":["ai","bubbletea","chat-application","chatbot","golang","llm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kevensen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-09T16:00:31.000Z","updated_at":"2025-10-06T22:55:12.000Z","dependencies_parsed_at":"2025-09-22T01:16:01.955Z","dependency_job_id":"78d6f54a-cfd0-4cde-a341-40063e29ee19","html_url":"https://github.com/kevensen/gollama-chat","commit_stats":null,"previous_names":["kevensen/gollama-chat"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/kevensen/gollama-chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevensen%2Fgollama-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevensen%2Fgollama-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevensen%2Fgollama-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevensen%2Fgollama-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kevensen","download_url":"https://codeload.github.com/kevensen/gollama-chat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevensen%2Fgollama-chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28691344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T11:01:27.039Z","status":"ssl_error","status_checked_at":"2026-01-23T11:00:26.909Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","bubbletea","chat-application","chatbot","golang","llm"],"created_at":"2026-01-23T12:28:49.200Z","updated_at":"2026-01-23T12:28:49.251Z","avatar_url":"https://github.com/kevensen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gollama-chat\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/Icon.png\" alt=\"Icon\" width=\"200\"/\u003e\n\u003c/div\u003e\n\nA text user interface (TUI) for chatting with Large Language Models via Ollama.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/Screenshot.png\" alt=\"Icon\" width=\"800\"/\u003e\n\u003c/div\u003e\n\n\n## Features\n\n- **Clean TUI**: Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) for a responsive terminal interface\n- **Tab-based Navigation**: Switch between Chat and Settings tabs\n- **Ollama Integration**: Chat with any Ollama-supported model\n- **Configurable**: Customize Ollama URL, model, temperature, and more\n- **Message History**: In-memory chat history (cleared on exit)\n- **Keyboard Navigation**: Fully keyboard-driven interface\n\n## Installation\n\n### Prerequisites\n\n- Go 1.21 or later\n- [Ollama](https://ollama.ai/) installed and running\n\n### Building from Source\n\n```bash\ngit clone https://github.com/kevensen/gollama-chat.git\ncd gollama-chat\nmake build\n```\n\n## Usage\n\n### Starting the Application\n\n#### Terminal Mode (Default)\n```bash\n# Run directly\nmake run\n\n# Or run the binary\n./bin/gollama-chat\n```\n\n#### Download the Binary\n\n1. Go to the releases page: https://github.com/kevensen/gollama-chat/releases.\n2. Download your binary to a directory in yourpath.\n3. Make the binary executable\n```\nchmod u+x \u003cpath to binary\u003e\n```\n4. If on Macos, you will need ensure the binary is trusted:\n```\nxattr -d com.apple.quarantine \u003cpath to binary\u003e\n```\n\n### Command Line Options\n\n```bash\ngollama-chat [options]\n\nOptions:\n  -h                Show help\n```\n\nExamples:\n```bash\n# Run in terminal mode\n./gollama-chat\n```\n\n### Configuration\n\nThe application stores its configuration in:\n- **Linux/macOS**: `~/.local/share/gollama-chat/settings/settings.json`\n- **Windows**: `%LOCALAPPDATA%\\gollama-chat\\settings\\settings.json`\n\nDefault configuration:\n```json\n{\n  \"chatModel\": \"llama3.3:latest\",\n  \"embeddingModel\": \"embeddinggemma:latest\",\n  \"ragEnabled\": true,\n  \"ollamaURL\": \"http://localhost:11434\",\n  \"chromaDBURL\": \"http://localhost:8000\",\n  \"chromaDBDistance\": 1.0,\n  \"maxDocuments\": 5,\n  \"selectedCollections\": {},\n  \"defaultSystemPrompt\": \"You are a helpful Q\u0026A bot. Your purpose is to provide direct, accurate answers to user questions. When providing lists of items (such as countries, capitals, features, etc.), format your response using proper numbered or bulleted lists. Be consistent in your formatting. If you don't know the answer, state that you are unable to provide a response.\"\n}\n```\n\n### Keyboard Shortcuts\n\n#### Global\n- `Tab` / `Shift+Tab` - Switch between tabs\n- `Ctrl+C` - Quit application\n\n#### Chat Tab\n- `Enter` - Send message\n- `Ctrl+L` - Clear chat history\n- `Ctrl+S` - Toggle system prompt display\n- `Ctrl+Shift+C` - Copy conversation history to clipboard\n- `↑` / `↓` - Scroll through messages\n- `←` / `→` - Move cursor in input\n\n#### Settings Tab\n- `↑` / `↓` - Navigate between fields\n- `Enter` - Edit selected field\n- `S` - Save configuration\n- `R` - Reset to defaults\n- `Esc` - Cancel editing\n\n## Configuration Options\n\n| Setting | Description | Default |\n|---------|-------------|---------|\n| `chatModel` | Model to use for chat | `llama3.3:latest` |\n| `embeddingModel` | Model to use for embeddings in RAG | `embeddinggemma:latest` |\n| `ragEnabled` | Enable RAG (Retrieval Augmented Generation) | `true` |\n| `ollamaURL` | URL of the Ollama server | `http://localhost:11434` |\n| `chromaDBURL` | URL of the ChromaDB server | `http://localhost:8000` |\n| `chromaDBDistance` | Distance threshold for similarity search | `1.0` |\n| `maxDocuments` | Maximum documents to retrieve for RAG | `5` |\n| `selectedCollections` | Selected collections for RAG queries | `{}` |\n| `defaultSystemPrompt` | Default system prompt for conversations | (See configuration example) |\n\n## Project Structure\n\n```\ngollama-chat/\n├── cmd/\n│   └── main.go                 # Application entry point\n├── internal/\n│   ├── configuration/          # Configuration management\n│   │   ├── configuration.go\n│   │   └── models/\n│   │       └── models.go\n│   ├── rag/                    # RAG (Retrieval Augmented Generation)\n│   │   ├── service.go\n│   │   └── service_test.go\n│   └── tui/                    # Text User Interface\n│       ├── ascii/\n│       │   └── ascii.go\n│       ├── core/\n│       │   ├── tui.go         # Main TUI controller\n│       │   ├── tui_test.go\n│       │   └── height_31_test.go\n│       ├── tabs/              # Tab implementations\n│       │   ├── chat/\n│       │   │   ├── chat.go    # Chat functionality\n│       │   │   ├── chat_test.go\n│       │   │   ├── messages.go\n│       │   │   ├── message_cache.go\n│       │   │   ├── model_context.go\n│       │   │   ├── styles.go\n│       │   │   ├── system_prompt.go\n│       │   │   ├── token_counts.go\n│       │   │   └── input/\n│       │   │       ├── input.go\n│       │   │       ├── input_test.go\n│       │   │       └── PERFORMANCE_TESTING.md\n│       │   ├── configuration/\n│       │   │   ├── configuration.go # Settings tab\n│       │   │   ├── models/\n│       │   │   └── utils/\n│       │   │       └── connection/\n│       │   └── rag/\n│       │       ├── rag.go\n│       │       ├── collections_service.go\n│       │       └── README.md\n│       └── util/\n│           ├── util.go\n│           └── util_test.go\n├── images/                    # Application images\n│   ├── Icon.png\n│   └── Screenshot.png\n├── bin/                       # Built binaries\n├── Makefile                   # Build automation\n├── go.mod                     # Go module definition\n├── TESTING.md                 # Testing documentation\n├── TEST_COVERAGE_STRATEGY.md  # Coverage strategy\n└── README.md                  # This file\n```\n\n## Development\n\n### Building\n\n```bash\nmake build\n```\n\n### Running\n\n```bash\nmake run\n```\n\n### Development Workflow\n\n```bash\nmake dev  # Runs fmt, vet, test, and build\n```\n\n### Testing\n\n```bash\n# Run all tests\nmake test\n\n# Run tests with coverage report\nmake test-coverage\n\n# Run performance regression tests\nmake test-performance\n\n# Run input component benchmarks\nmake test-input-bench\n```\n\n#### Performance Testing\n\nThe project includes comprehensive performance testing to prevent input latency regressions:\n\n- **Input Performance**: Benchmarks for typing responsiveness and character insertion\n- **Regression Prevention**: Automated performance threshold monitoring\n- **Memory Profiling**: Allocation pattern analysis and optimization\n- **Real-world Scenarios**: Complex editing and Unicode handling tests\n\nSee [`internal/tui/tabs/chat/input/PERFORMANCE_TESTING.md`](internal/tui/tabs/chat/input/PERFORMANCE_TESTING.md) for detailed performance testing documentation.\n\n## Architecture\n\nThe application follows principles of high cohesion and loose coupling:\n\n- **Configuration**: Centralized configuration management with JSON persistence\n- **TUI Controller**: Main application state and tab management\n- **Composable Views**: Each tab is a separate, reusable component\n- **Message Passing**: Uses Bubble Tea's message-based architecture\n\n## Requirements\n\n- Ollama server running locally or accessible via network\n- Terminal with color support\n- Go 1.21+ for building from source\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Run `make dev` to ensure code quality\n5. Submit a pull request\n\n## Roadmap\n\n- [ ] Message persistence options\n- [ ] Multiple conversation support\n- [ ] Model switching during chat\n- [ ] Export conversations\n- [ ] Streaming responses\n- [ ] MCP Integration\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevensen%2Fgollama-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkevensen%2Fgollama-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevensen%2Fgollama-chat/lists"}