Skip to content

Commit bec67e6

Browse files
authored
Merge pull request #1 from rahulapjs/patch
Patch
2 parents bdf3554 + 94c27a0 commit bec67e6

19 files changed

Lines changed: 471 additions & 6 deletions

README.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# SearchlyAI
2+
3+
SearchlyAI is a powerful Retrieve-Augmented Generation (RAG) search engine that allows users to ingest documents (PDF, TXT) and web pages, and then query them using natural language. It leverages Google's Gemini for embeddings and answer generation, and FAISS for efficient vector similarity search.
4+
5+
## 🚀 Features
6+
7+
- **Multi-Source Ingestion**: Support for PDF documents, text files, and web pages.
8+
- **Semantic Search**: Uses vector embeddings to understand the *meaning* behind your query, not just keyword matching.
9+
- **RAG Architecture**: Retrieves relevant context and generates natural language answers using LLMs.
10+
- **Session Management**: Keeps data isolated per session.
11+
- **Efficient Vector Storage**: Uses FAISS for lighting-fast similarity search.
12+
13+
## 🛠️ Tech Stack
14+
15+
### Backend
16+
- **Framework**: FastAPI
17+
- **LLM & Embeddings**: Google Gemini (via LangChain/GenerativeAI)
18+
- **Vector Store**: FAISS
19+
- **Validation**: Pydantic
20+
21+
### Frontend
22+
- **Framework**: React (Vite)
23+
- **Language**: TypeScript
24+
- **Styling**: (Pending - to be built)
25+
26+
## 📂 Project Structure
27+
28+
```
29+
SearchlyAI/
30+
├── backend/ # FastAPI Backend
31+
│ ├── app/ # Application logic
32+
│ └── data/ # Local vector store data
33+
├── frontend/ # React Frontend (Vite)
34+
├── docker-compose.yml # Docker orchestration
35+
└── README.md # This file
36+
```
37+
38+
## 🏎️ Getting Started
39+
40+
### Prerequisites
41+
- Docker & Docker Compose
42+
- Node.js (for local frontend dev)
43+
- Python 3.10+ (for local backend dev)
44+
- Google Gemini API Key
45+
46+
### Running with Docker
47+
48+
1. Set up your environment variables:
49+
```bash
50+
cp backend/.env.example backend/.env
51+
# Edit backend/.env and add your GEMINI_API_KEY
52+
```
53+
54+
2. Run the stack:
55+
```bash
56+
docker-compose up --build
57+
```
58+
59+
### Local Development
60+
61+
**Backend:**
62+
```bash
63+
cd backend
64+
python -m venv venv
65+
source venv/bin/activate # or venv\Scripts\activate on Windows
66+
pip install -r requirements.txt
67+
uvicorn main:app --reload
68+
```
69+
70+
**Frontend:**
71+
```bash
72+
cd frontend
73+
npm install
74+
npm run dev
75+
```
76+
77+
## 📄 License
78+
MIT

backend/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
# RAG Search Engine Backend
1+
# SearchlyAI Backend
22

3-
This is the backend for a RAG (Retrieval-Augmented Generation) Search Engine built with FastAPI.
3+
This is the backend API for SearchlyAI, built with FastAPI.
44

55
## Structure
66
- `app/api`: API route definitions
77
- `app/core`: Core configuration and logging
88
- `app/services`: Business logic (ingestion, chunking, embeddings, etc.)
99
- `app/schemas`: Pydantic models
1010
- `app/utils`: Helper functions
11-
- `app/llm`: LLM abstractions (OpenAI, Gemini)
1211

1312
## Setup
1413

@@ -24,7 +23,7 @@ This is the backend for a RAG (Retrieval-Augmented Generation) Search Engine bui
2423
```
2524

2625
3. Configure environment variables:
27-
Copy `.env.example` to `.env` and fill in your API keys.
26+
Copy `.env.example` to `.env` and fill in your API keys (Gemini API Key is required).
2827

2928
4. Run the server:
3029
```bash

backend/app/core/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
class Settings(BaseSettings):
66
# App
7-
APP_NAME: str = "SemanticSearch AI"
7+
APP_NAME: str = "SearchlyAI"
88
ENV: str = "development"
99

1010
# Gemini

backend/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
setup_logging()
1212

1313
app = FastAPI(
14-
title="SemanticSearch AI",
14+
title="SearchlyAI",
1515
description="AI-powered semantic search engine using RAG",
1616
version="1.0.0"
1717
)

frontend/.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

frontend/README.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# React + TypeScript + Vite
2+
3+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4+
5+
Currently, two official plugins are available:
6+
7+
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8+
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
9+
10+
## React Compiler
11+
12+
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
13+
14+
## Expanding the ESLint configuration
15+
16+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
17+
18+
```js
19+
export default defineConfig([
20+
globalIgnores(['dist']),
21+
{
22+
files: ['**/*.{ts,tsx}'],
23+
extends: [
24+
// Other configs...
25+
26+
// Remove tseslint.configs.recommended and replace with this
27+
tseslint.configs.recommendedTypeChecked,
28+
// Alternatively, use this for stricter rules
29+
tseslint.configs.strictTypeChecked,
30+
// Optionally, add this for stylistic rules
31+
tseslint.configs.stylisticTypeChecked,
32+
33+
// Other configs...
34+
],
35+
languageOptions: {
36+
parserOptions: {
37+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
38+
tsconfigRootDir: import.meta.dirname,
39+
},
40+
// other options...
41+
},
42+
},
43+
])
44+
```
45+
46+
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
47+
48+
```js
49+
// eslint.config.js
50+
import reactX from 'eslint-plugin-react-x'
51+
import reactDom from 'eslint-plugin-react-dom'
52+
53+
export default defineConfig([
54+
globalIgnores(['dist']),
55+
{
56+
files: ['**/*.{ts,tsx}'],
57+
extends: [
58+
// Other configs...
59+
// Enable lint rules for React
60+
reactX.configs['recommended-typescript'],
61+
// Enable lint rules for React DOM
62+
reactDom.configs.recommended,
63+
],
64+
languageOptions: {
65+
parserOptions: {
66+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
67+
tsconfigRootDir: import.meta.dirname,
68+
},
69+
// other options...
70+
},
71+
},
72+
])
73+
```

frontend/eslint.config.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import js from '@eslint/js'
2+
import globals from 'globals'
3+
import reactHooks from 'eslint-plugin-react-hooks'
4+
import reactRefresh from 'eslint-plugin-react-refresh'
5+
import tseslint from 'typescript-eslint'
6+
import { defineConfig, globalIgnores } from 'eslint/config'
7+
8+
export default defineConfig([
9+
globalIgnores(['dist']),
10+
{
11+
files: ['**/*.{ts,tsx}'],
12+
extends: [
13+
js.configs.recommended,
14+
tseslint.configs.recommended,
15+
reactHooks.configs.flat.recommended,
16+
reactRefresh.configs.vite,
17+
],
18+
languageOptions: {
19+
ecmaVersion: 2020,
20+
globals: globals.browser,
21+
},
22+
},
23+
])

frontend/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>frontend</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
<script type="module" src="/src/main.tsx"></script>
12+
</body>
13+
</html>

frontend/package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "frontend",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "module",
6+
"scripts": {
7+
"dev": "vite",
8+
"build": "tsc -b && vite build",
9+
"lint": "eslint .",
10+
"preview": "vite preview"
11+
},
12+
"dependencies": {
13+
"react": "^19.2.0",
14+
"react-dom": "^19.2.0"
15+
},
16+
"devDependencies": {
17+
"@eslint/js": "^9.39.1",
18+
"@types/node": "^24.10.1",
19+
"@types/react": "^19.2.5",
20+
"@types/react-dom": "^19.2.3",
21+
"@vitejs/plugin-react": "^5.1.1",
22+
"eslint": "^9.39.1",
23+
"eslint-plugin-react-hooks": "^7.0.1",
24+
"eslint-plugin-react-refresh": "^0.4.24",
25+
"globals": "^16.5.0",
26+
"typescript": "~5.9.3",
27+
"typescript-eslint": "^8.46.4",
28+
"vite": "^7.2.4"
29+
}
30+
}

frontend/public/vite.svg

Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)