oceddyyy commited on
Commit
72c55b8
Β·
verified Β·
1 Parent(s): a39bfb3

Upload 6 files

Browse files
Files changed (4) hide show
  1. README.md +55 -55
  2. package-lock.json +0 -0
  3. package.json +60 -60
  4. vite.config.ts +59 -58
README.md CHANGED
@@ -1,55 +1,55 @@
1
- ---
2
- title: UnivAI Chatbot
3
- emoji: πŸ€–
4
- colorFrom: purple
5
- colorTo: blue
6
- sdk: docker
7
- sdk_version: "1.0.0"
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- # UnivAI Chatbot Interface & AI Backend
13
-
14
- This project merges a React UI (Vite) and a Flask AI backend into a single Hugging Face Space using Docker.
15
-
16
- ## Features
17
-
18
- - Conversational UI for university handbook queries
19
- - AI backend (Sentence Transformers + LLM) for semantic search and natural responses
20
- - Feedback API for upvote/downvote tuning
21
-
22
- ## Running Locally
23
-
24
- ```bash
25
- docker build -t univai-chatbot .
26
- docker run -p 7860:7860 univai-chatbot
27
- ```
28
-
29
- - UI available at `http://localhost:7860`
30
- - API available at `http://localhost:7860/api/chat` and `/api/feedback`
31
-
32
- ## Endpoints
33
-
34
- - **POST /api/chat**
35
- `{ "query": "your question", "dev_mode": false }` β†’ `{ "response": "answer" }`
36
- - **POST /api/feedback**
37
- `{ "query": "...", "response": "...", "feedback": "positive"|"negative" }` β†’ `{ "status": "success" }`
38
-
39
- ## Hugging Face Spaces
40
-
41
- - Push this repo and select Docker SDK.
42
- - The UI and AI will run together, with Nginx proxying `/api/` to the backend.
43
-
44
- ## File Structure
45
-
46
- - `src/` β€” React UI
47
- - `app.py` β€” Flask AI backend
48
- - `Dockerfile` β€” unified build
49
- - `nginx.conf` β€” reverse proxy config
50
- - `requirements.txt` β€” Python dependencies
51
- - `dataset.json` β€” university Q&A set
52
-
53
- ## Connecting UI to AI
54
-
55
- - The UI should send requests to `/api/chat` and `/api/feedback`.
 
1
+ ---
2
+ title: UnivAI Chatbot
3
+ emoji: πŸ€–
4
+ colorFrom: purple
5
+ colorTo: blue
6
+ sdk: docker
7
+ sdk_version: "1.0.0"
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # UnivAI Chatbot Interface & AI Backend
13
+
14
+ This project merges a React UI (Vite) and a Flask AI backend into a single Hugging Face Space using Docker.
15
+
16
+ ## Features
17
+
18
+ - Conversational UI for university handbook queries
19
+ - AI backend (Sentence Transformers + LLM) for semantic search and natural responses
20
+ - Feedback API for upvote/downvote tuning
21
+
22
+ ## Running Locally
23
+
24
+ ```bash
25
+ docker build -t univai-chatbot .
26
+ docker run -p 7860:7860 univai-chatbot
27
+ ```
28
+
29
+ - UI available at `http://localhost:7860`
30
+ - API available at `http://localhost:7860/api/chat` and `/api/feedback`
31
+
32
+ ## Endpoints
33
+
34
+ - **POST /api/chat**
35
+ `{ "query": "your question", "dev_mode": false }` β†’ `{ "response": "answer" }`
36
+ - **POST /api/feedback**
37
+ `{ "query": "...", "response": "...", "feedback": "positive"|"negative" }` β†’ `{ "status": "success" }`
38
+
39
+ ## Hugging Face Spaces
40
+
41
+ - Push this repo and select Docker SDK.
42
+ - The UI and AI will run together, with Nginx proxying `/api/` to the backend.
43
+
44
+ ## File Structure
45
+
46
+ - `src/` β€” React UI
47
+ - `app.py` β€” Flask AI backend
48
+ - `Dockerfile` β€” unified build
49
+ - `nginx.conf` β€” reverse proxy config
50
+ - `requirements.txt` β€” Python dependencies
51
+ - `dataset.json` β€” university Q&A set
52
+
53
+ ## Connecting UI to AI
54
+
55
+ - The UI should send requests to `/api/chat` and `/api/feedback`.
package-lock.json CHANGED
The diff for this file is too large to render. See raw diff
 
package.json CHANGED
@@ -1,60 +1,60 @@
1
-
2
- {
3
- "name": "UnivAI Chatbot Interface",
4
- "version": "0.1.0",
5
- "private": true,
6
- "dependencies": {
7
- "@radix-ui/react-accordion": "^1.2.3",
8
- "@radix-ui/react-alert-dialog": "^1.1.6",
9
- "@radix-ui/react-aspect-ratio": "^1.1.2",
10
- "@radix-ui/react-avatar": "^1.1.3",
11
- "@radix-ui/react-checkbox": "^1.1.4",
12
- "@radix-ui/react-collapsible": "^1.1.3",
13
- "@radix-ui/react-context-menu": "^2.2.6",
14
- "@radix-ui/react-dialog": "^1.1.6",
15
- "@radix-ui/react-dropdown-menu": "^2.1.6",
16
- "@radix-ui/react-hover-card": "^1.1.6",
17
- "@radix-ui/react-label": "^2.1.2",
18
- "@radix-ui/react-menubar": "^1.1.6",
19
- "@radix-ui/react-navigation-menu": "^1.2.5",
20
- "@radix-ui/react-popover": "^1.1.6",
21
- "@radix-ui/react-progress": "^1.1.2",
22
- "@radix-ui/react-radio-group": "^1.2.3",
23
- "@radix-ui/react-scroll-area": "^1.2.3",
24
- "@radix-ui/react-select": "^2.1.6",
25
- "@radix-ui/react-separator": "^1.1.2",
26
- "@radix-ui/react-slider": "^1.2.3",
27
- "@radix-ui/react-slot": "^1.1.2",
28
- "@radix-ui/react-switch": "^1.1.3",
29
- "@radix-ui/react-tabs": "^1.1.3",
30
- "@radix-ui/react-toggle": "^1.1.2",
31
- "@radix-ui/react-toggle-group": "^1.1.2",
32
- "@radix-ui/react-tooltip": "^1.1.8",
33
- "class-variance-authority": "^0.7.1",
34
- "clsx": "*",
35
- "cmdk": "^1.1.1",
36
- "embla-carousel-react": "^8.6.0",
37
- "input-otp": "^1.4.2",
38
- "lucide-react": "^0.487.0",
39
- "motion": "*",
40
- "next-themes": "^0.4.6",
41
- "react": "^18.3.1",
42
- "react-day-picker": "^8.10.1",
43
- "react-dom": "^18.3.1",
44
- "react-hook-form": "^7.55.0",
45
- "react-resizable-panels": "^2.1.7",
46
- "recharts": "^2.15.2",
47
- "sonner": "^2.0.3",
48
- "tailwind-merge": "*",
49
- "vaul": "^1.1.2"
50
- },
51
- "devDependencies": {
52
- "@types/node": "^20.10.0",
53
- "@vitejs/plugin-react-swc": "^3.10.2",
54
- "vite": "^5.4.19"
55
- },
56
- "scripts": {
57
- "dev": "vite",
58
- "build": "vite build"
59
- }
60
- }
 
1
+ {
2
+ "name": "univai_chatbot_interface",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "dependencies": {
6
+ "@radix-ui/react-accordion": "^1.2.3",
7
+ "@radix-ui/react-alert-dialog": "^1.1.6",
8
+ "@radix-ui/react-aspect-ratio": "^1.1.2",
9
+ "@radix-ui/react-avatar": "^1.1.3",
10
+ "@radix-ui/react-checkbox": "^1.1.4",
11
+ "@radix-ui/react-collapsible": "^1.1.3",
12
+ "@radix-ui/react-context-menu": "^2.2.6",
13
+ "@radix-ui/react-dialog": "^1.1.6",
14
+ "@radix-ui/react-dropdown-menu": "^2.1.6",
15
+ "@radix-ui/react-hover-card": "^1.1.6",
16
+ "@radix-ui/react-label": "^2.1.2",
17
+ "@radix-ui/react-menubar": "^1.1.6",
18
+ "@radix-ui/react-navigation-menu": "^1.2.5",
19
+ "@radix-ui/react-popover": "^1.1.6",
20
+ "@radix-ui/react-progress": "^1.1.2",
21
+ "@radix-ui/react-radio-group": "^1.2.3",
22
+ "@radix-ui/react-scroll-area": "^1.2.3",
23
+ "@radix-ui/react-select": "^2.1.6",
24
+ "@radix-ui/react-separator": "^1.1.2",
25
+ "@radix-ui/react-slider": "^1.2.3",
26
+ "@radix-ui/react-slot": "^1.1.2",
27
+ "@radix-ui/react-switch": "^1.1.3",
28
+ "@radix-ui/react-tabs": "^1.1.3",
29
+ "@radix-ui/react-toggle": "^1.1.2",
30
+ "@radix-ui/react-toggle-group": "^1.1.2",
31
+ "@radix-ui/react-tooltip": "^1.1.8",
32
+ "class-variance-authority": "^0.7.1",
33
+ "clsx": "*",
34
+ "cmdk": "^1.1.1",
35
+ "embla-carousel-react": "^8.6.0",
36
+ "input-otp": "^1.4.2",
37
+ "lucide-react": "^0.487.0",
38
+ "motion": "*",
39
+ "next-themes": "^0.4.6",
40
+ "react": "^18.3.1",
41
+ "react-day-picker": "^8.10.1",
42
+ "react-dom": "^18.3.1",
43
+ "react-hook-form": "^7.55.0",
44
+ "react-resizable-panels": "^2.1.7",
45
+ "recharts": "^2.15.2",
46
+ "sonner": "^2.0.3",
47
+ "tailwind-merge": "*",
48
+ "vaul": "^1.1.2"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^20.10.0",
52
+ "@types/react": "^19.2.2",
53
+ "@vitejs/plugin-react-swc": "^3.10.2",
54
+ "vite": "^5.4.19"
55
+ },
56
+ "scripts": {
57
+ "dev": "vite",
58
+ "build": "vite build"
59
+ }
60
+ }
vite.config.ts CHANGED
@@ -1,59 +1,60 @@
1
- import { defineConfig } from 'vite';
2
- import react from '@vitejs/plugin-react-swc';
3
- import path from 'path';
4
-
5
- export default defineConfig({
6
- plugins: [react()],
7
- resolve: {
8
- extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
9
- alias: {
10
- 'vaul@1.1.2': 'vaul',
11
- 'sonner@2.0.3': 'sonner',
12
- 'recharts@2.15.2': 'recharts',
13
- 'react-resizable-panels@2.1.7': 'react-resizable-panels',
14
- 'react-hook-form@7.55.0': 'react-hook-form',
15
- 'react-day-picker@8.10.1': 'react-day-picker',
16
- 'next-themes@0.4.6': 'next-themes',
17
- 'lucide-react@0.487.0': 'lucide-react',
18
- 'input-otp@1.4.2': 'input-otp',
19
- 'embla-carousel-react@8.6.0': 'embla-carousel-react',
20
- 'cmdk@1.1.1': 'cmdk',
21
- 'class-variance-authority@0.7.1': 'class-variance-authority',
22
- '@radix-ui/react-tooltip@1.1.8': '@radix-ui/react-tooltip',
23
- '@radix-ui/react-toggle@1.1.2': '@radix-ui/react-toggle',
24
- '@radix-ui/react-toggle-group@1.1.2': '@radix-ui/react-toggle-group',
25
- '@radix-ui/react-tabs@1.1.3': '@radix-ui/react-tabs',
26
- '@radix-ui/react-switch@1.1.3': '@radix-ui/react-switch',
27
- '@radix-ui/react-slot@1.1.2': '@radix-ui/react-slot',
28
- '@radix-ui/react-slider@1.2.3': '@radix-ui/react-slider',
29
- '@radix-ui/react-separator@1.1.2': '@radix-ui/react-separator',
30
- '@radix-ui/react-select@2.1.6': '@radix-ui/react-select',
31
- '@radix-ui/react-scroll-area@1.2.3': '@radix-ui/react-scroll-area',
32
- '@radix-ui/react-radio-group@1.2.3': '@radix-ui/react-radio-group',
33
- '@radix-ui/react-progress@1.1.2': '@radix-ui/react-progress',
34
- '@radix-ui/react-popover@1.1.6': '@radix-ui/react-popover',
35
- '@radix-ui/react-navigation-menu@1.2.5': '@radix-ui/react-navigation-menu',
36
- '@radix-ui/react-menubar@1.1.6': '@radix-ui/react-menubar',
37
- '@radix-ui/react-label@2.1.2': '@radix-ui/react-label',
38
- '@radix-ui/react-hover-card@1.1.6': '@radix-ui/react-hover-card',
39
- '@radix-ui/react-dropdown-menu@2.1.6': '@radix-ui/react-dropdown-menu',
40
- '@radix-ui/react-dialog@1.1.6': '@radix-ui/react-dialog',
41
- '@radix-ui/react-context-menu@2.2.6': '@radix-ui/react-context-menu',
42
- '@radix-ui/react-collapsible@1.1.3': '@radix-ui/react-collapsible',
43
- '@radix-ui/react-checkbox@1.1.4': '@radix-ui/react-checkbox',
44
- '@radix-ui/react-avatar@1.1.3': '@radix-ui/react-avatar',
45
- '@radix-ui/react-aspect-ratio@1.1.2': '@radix-ui/react-aspect-ratio',
46
- '@radix-ui/react-alert-dialog@1.1.6': '@radix-ui/react-alert-dialog',
47
- '@radix-ui/react-accordion@1.2.3': '@radix-ui/react-accordion',
48
- '@': path.resolve(__dirname, './src'),
49
- },
50
- },
51
- build: {
52
- target: 'esnext',
53
- outDir: 'dist',
54
- },
55
- server: {
56
- port: 3000,
57
- open: true,
58
- },
 
59
  });
 
1
+
2
+ import { defineConfig } from 'vite';
3
+ import react from '@vitejs/plugin-react-swc';
4
+ import path from 'path';
5
+
6
+ export default defineConfig({
7
+ plugins: [react()],
8
+ resolve: {
9
+ extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
10
+ alias: {
11
+ 'vaul@1.1.2': 'vaul',
12
+ 'sonner@2.0.3': 'sonner',
13
+ 'recharts@2.15.2': 'recharts',
14
+ 'react-resizable-panels@2.1.7': 'react-resizable-panels',
15
+ 'react-hook-form@7.55.0': 'react-hook-form',
16
+ 'react-day-picker@8.10.1': 'react-day-picker',
17
+ 'next-themes@0.4.6': 'next-themes',
18
+ 'lucide-react@0.487.0': 'lucide-react',
19
+ 'input-otp@1.4.2': 'input-otp',
20
+ 'embla-carousel-react@8.6.0': 'embla-carousel-react',
21
+ 'cmdk@1.1.1': 'cmdk',
22
+ 'class-variance-authority@0.7.1': 'class-variance-authority',
23
+ '@radix-ui/react-tooltip@1.1.8': '@radix-ui/react-tooltip',
24
+ '@radix-ui/react-toggle@1.1.2': '@radix-ui/react-toggle',
25
+ '@radix-ui/react-toggle-group@1.1.2': '@radix-ui/react-toggle-group',
26
+ '@radix-ui/react-tabs@1.1.3': '@radix-ui/react-tabs',
27
+ '@radix-ui/react-switch@1.1.3': '@radix-ui/react-switch',
28
+ '@radix-ui/react-slot@1.1.2': '@radix-ui/react-slot',
29
+ '@radix-ui/react-slider@1.2.3': '@radix-ui/react-slider',
30
+ '@radix-ui/react-separator@1.1.2': '@radix-ui/react-separator',
31
+ '@radix-ui/react-select@2.1.6': '@radix-ui/react-select',
32
+ '@radix-ui/react-scroll-area@1.2.3': '@radix-ui/react-scroll-area',
33
+ '@radix-ui/react-radio-group@1.2.3': '@radix-ui/react-radio-group',
34
+ '@radix-ui/react-progress@1.1.2': '@radix-ui/react-progress',
35
+ '@radix-ui/react-popover@1.1.6': '@radix-ui/react-popover',
36
+ '@radix-ui/react-navigation-menu@1.2.5': '@radix-ui/react-navigation-menu',
37
+ '@radix-ui/react-menubar@1.1.6': '@radix-ui/react-menubar',
38
+ '@radix-ui/react-label@2.1.2': '@radix-ui/react-label',
39
+ '@radix-ui/react-hover-card@1.1.6': '@radix-ui/react-hover-card',
40
+ '@radix-ui/react-dropdown-menu@2.1.6': '@radix-ui/react-dropdown-menu',
41
+ '@radix-ui/react-dialog@1.1.6': '@radix-ui/react-dialog',
42
+ '@radix-ui/react-context-menu@2.2.6': '@radix-ui/react-context-menu',
43
+ '@radix-ui/react-collapsible@1.1.3': '@radix-ui/react-collapsible',
44
+ '@radix-ui/react-checkbox@1.1.4': '@radix-ui/react-checkbox',
45
+ '@radix-ui/react-avatar@1.1.3': '@radix-ui/react-avatar',
46
+ '@radix-ui/react-aspect-ratio@1.1.2': '@radix-ui/react-aspect-ratio',
47
+ '@radix-ui/react-alert-dialog@1.1.6': '@radix-ui/react-alert-dialog',
48
+ '@radix-ui/react-accordion@1.2.3': '@radix-ui/react-accordion',
49
+ '@': path.resolve(__dirname, './src'),
50
+ },
51
+ },
52
+ build: {
53
+ target: 'esnext',
54
+ outDir: 'build',
55
+ },
56
+ server: {
57
+ port: 3000,
58
+ open: true,
59
+ },
60
  });