Spaces:
Sleeping
Sleeping
| # How to Contribute to Perplexica | |
| Thanks for your interest in contributing to Perplexica! Your help makes this project better. This guide explains how to contribute effectively. | |
| Perplexica is a modern AI chat application with advanced search capabilities. | |
| ## Project Structure | |
| Perplexica's codebase is organized as follows: | |
| - **UI Components and Pages**: | |
| - **Components (`src/components`)**: Reusable UI components. | |
| - **Pages and Routes (`src/app`)**: Next.js app directory structure with page components. | |
| - Main app routes include: home (`/`), chat (`/c`), discover (`/discover`), and library (`/library`). | |
| - **API Routes (`src/app/api`)**: Server endpoints implemented with Next.js route handlers. | |
| - **Backend Logic (`src/lib`)**: Contains all the backend functionality including search, database, and API logic. | |
| - The search system lives in `src/lib/agents/search`. | |
| - The search pipeline is split into classification, research, widgets, and writing. | |
| - Database functionality is in `src/lib/db`. | |
| - Chat model and embedding model providers are in `src/lib/models/providers`, and models are loaded via `src/lib/models/registry.ts`. | |
| - Prompt templates are in `src/lib/prompts`. | |
| - SearXNG integration is in `src/lib/searxng.ts`. | |
| - Upload search lives in `src/lib/uploads`. | |
| ### Where to make changes | |
| If you are not sure where to start, use this section as a map. | |
| - **Search behavior and reasoning** | |
| - `src/lib/agents/search` contains the core chat and search pipeline. | |
| - `classifier.ts` decides whether research is needed and what should run. | |
| - `researcher/` gathers information in the background. | |
| - **Add or change a search capability** | |
| - Research tools (web, academic, discussions, uploads, scraping) live in `src/lib/agents/search/researcher/actions`. | |
| - Tools are registered in `src/lib/agents/search/researcher/actions/index.ts`. | |
| - **Add or change widgets** | |
| - Widgets live in `src/lib/agents/search/widgets`. | |
| - Widgets run in parallel with research and show structured results in the UI. | |
| - **Model integrations** | |
| - Providers live in `src/lib/models/providers`. | |
| - Add new providers there and wire them into the model registry so they show up in the app. | |
| - **Architecture docs** | |
| - High level overview: `docs/architecture/README.md` | |
| - High level flow: `docs/architecture/WORKING.md` | |
| ## API Documentation | |
| Perplexica includes API documentation for programmatic access. | |
| - **Search API**: For detailed documentation, see `docs/API/SEARCH.md`. | |
| ## Setting Up Your Environment | |
| Before diving into coding, setting up your local environment is key. Here's what you need to do: | |
| 1. Run `npm install` to install all dependencies. | |
| 2. Use `npm run dev` to start the application in development mode. | |
| 3. Open http://localhost:3000 and complete the setup in the UI (API keys, models, search backend URL, etc.). | |
| Database migrations are applied automatically on startup. | |
| For full installation options (Docker and non Docker), see the installation guide in the repository README. | |
| **Please note**: Docker configurations are present for setting up production environments, whereas `npm run dev` is used for development purposes. | |
| ## Coding and Contribution Practices | |
| Before committing changes: | |
| 1. Ensure that your code functions correctly by thorough testing. | |
| 2. Always run `npm run format:write` to format your code according to the project's coding standards. This helps maintain consistency and code quality. | |
| 3. We currently do not have a code of conduct, but it is in the works. In the meantime, please be mindful of how you engage with the project and its community. | |
| Following these steps will help maintain the integrity of Perplexica's codebase and facilitate a smoother integration of your valuable contributions. Thank you for your support and commitment to improving Perplexica. | |