Jacek Zadrożny commited on
Commit
ed9cfa3
·
1 Parent(s): 5a209a3

Docs: Update README.md and consolidate deployment info

Browse files

- Updated README.md with comprehensive project information, installation instructions, and deployment details for Hugging Face Spaces.
- Consolidated information from README_DEPLOYMENT.md into the main README.md.
- Deleted the now redundant README_DEPLOYMENT.md.
- Corrected Gradio SDK version in README metadata.

Files changed (2) hide show
  1. README.md +59 -50
  2. README_DEPLOYMENT.md +0 -91
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: ♿
4
  colorFrom: blue
5
  colorTo: green
6
  sdk: gradio
7
- sdk_version: 6.1.0
8
  python_version: "3.10"
9
  app_file: app.py
10
  pinned: true
@@ -13,74 +13,83 @@ short_description: Inteligentny asystent do spraw dostępności cyfrowej
13
 
14
  # 🤖 A11y Expert - Asystent Dostępności Cyfrowej
15
 
16
- Inteligentny agent AI wyspecjalizowany w dostępności cyfrowej, wykorzystujący RAG (Retrieval-Augmented Generation) z bazą wiedzy WCAG, ARIA i najlepszych praktyk.
17
 
18
- ## ✨ Funkcje
19
 
20
- - 💬 **Rozmowa w języku polskim i angielskim** - automatyczna detekcja języka
21
- - 📚 **Baza wiedzy** - WCAG 2.2, ARIA, i praktyczne przykłady
22
- - 🔍 **RAG** - odpowiedzi oparte na oficjalnej dokumentacji
23
- - 🎯 **Specjalistyczne odpowiedzi** - cytowanie kryteriów i źródeł
24
- - ⚡ **Streaming** - płynne generowanie odpowiedzi
25
 
26
- ## 🚀 Jak używać
27
 
28
- 1. Wpisz pytanie o dostępność cyfrową
29
- 2. Zadaj pytanie po polsku lub angielsku
30
- 3. Otrzymaj szczegółową odpowiedź z cytowaniem źródeł
 
31
 
32
- **Przykładowe pytania:**
33
- - "Jakie są wymagania WCAG 2.2 dla etykiet formularzy?"
34
- - "Wyjaśnij rolę 'alert' w ARIA i podaj przykład"
35
- - "Czy ten przycisk jest dostępny? `<div onclick='...'>Click me</div>`"
36
 
37
- ## 🔧 Technologie
38
 
39
- - **Gradio** - interfejs użytkownika
40
- - **OpenAI GPT-4** - model językowy
41
- - **LanceDB** - wektorowa baza danych
42
- - **RAG** - wyszukiwanie semantyczne w bazie wiedzy
43
 
44
- ## 📝 Konfiguracja (dla developerów)
 
45
 
46
- ### Zmienne środowiskowe
47
- ```bash
48
- OPENAI_API_KEY=sk-... # Wymagane
49
- SERVER_HOST=0.0.0.0 # Dla Hugging Face Spaces
50
- SERVER_PORT=7860 # Port Gradio
51
- LOG_LEVEL=INFO # Poziom logowania
52
- ```
53
 
54
- ### Instalacja lokalna
55
- ```bash
56
- pip install -r requirements.txt
57
- cp .env.example .env
58
- # Ustaw OPENAI_API_KEY w .env
59
- python app.py
60
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
- ### Test przed wdrożeniem
 
 
 
 
 
 
 
 
63
  ```bash
64
  python test_startup.py
65
  ```
66
 
67
- ## 📖 Dokumentacja
 
 
68
 
69
- - [Deployment Guide](./README_DEPLOYMENT.md) - szczegółowy przewodnik wdrożeniowy
70
- - [WCAG 2.2](https://www.w3.org/TR/WCAG22/) - oficjalna specyfikacja
71
- - [ARIA](https://www.w3.org/TR/wai-aria/) - dostępne komponenty internetowe
72
 
73
- ## 🐛 Rozwiązane problemy
74
 
75
- Konflikty pętli zdarzeń asyncio
76
- ✅ Brak czyszczenia zasobów przy shutdown
77
- ✅ Konflikty wersji bibliotek (Pydantic 2.x)
78
- ✅ Graceful shutdown na Hugging Face Spaces
79
 
80
- ## 📄 Licencja
81
 
82
- Ten projekt służy celom edukacyjnym. Baza wiedzy pochodzi z publicznych źródeł (W3C, MDN).
 
 
83
 
84
- ## 👨‍💻 Autor
85
 
86
- Stworzony z pomocą GitHub Copilot CLI
 
4
  colorFrom: blue
5
  colorTo: green
6
  sdk: gradio
7
+ sdk_version: "4.29.0"
8
  python_version: "3.10"
9
  app_file: app.py
10
  pinned: true
 
13
 
14
  # 🤖 A11y Expert - Asystent Dostępności Cyfrowej
15
 
16
+ Inteligentny agent AI wyspecjalizowany w dostępności cyfrowej (a11y), wykorzystujący RAG (Retrieval-Augmented Generation) z bazą wiedzy WCAG, ARIA i najlepszych praktyk.
17
 
18
+ ## ✨ Główne Funkcje
19
 
20
+ - **Obsługa wielu języków**: Płynna rozmowa po polsku i angielsku z automatycznym wykrywaniem języka.
21
+ - **Bogata baza wiedzy**: Odpowiedzi oparte na standardach WCAG 2.2, ARIA oraz sprawdzonych praktykach dostępności.
22
+ - **Wiarygodne odpowiedzi (RAG)**: Każda odpowiedź jest generowana w oparciu o konkretne źródła z bazy wektorowej, z możliwością cytowania.
23
+ - **Streaming odpowiedzi**: Agent generuje odpowiedzi w sposób płynny, token po tokenie.
 
24
 
25
+ ## 🔧 Architektura i Technologie
26
 
27
+ - **Interfejs użytkownika**: Gradio
28
+ - **Model językowy**: OpenAI GPT-4 (lub nowszy)
29
+ - **Wektorowa baza danych**: LanceDB do przechowywania i przeszukiwania wiedzy.
30
+ - **Wyszukiwanie semantyczne**: Architektura RAG do precyzyjnego odnajdywania informacji.
31
 
32
+ ---
 
 
 
33
 
34
+ ## 🛠️ Uruchomienie i Rozwój
35
 
36
+ ### 1. Wymagania wstępne
 
 
 
37
 
38
+ - Python 3.10+
39
+ - Klucz API OpenAI
40
 
41
+ ### 2. Instalacja lokalna
 
 
 
 
 
 
42
 
43
+ 1. **Sklonuj repozytorium:**
44
+ ```bash
45
+ git clone <URL_repozytorium>
46
+ cd <nazwa_repozytorium>
47
+ ```
48
+
49
+ 2. **Zainstaluj zależności:**
50
+ ```bash
51
+ pip install -r requirements.txt
52
+ ```
53
+
54
+ 3. **Skonfiguruj zmienne środowiskowe:**
55
+ - Skopiuj plik `.env.example` do `.env`:
56
+ ```bash
57
+ cp .env.example .env
58
+ ```
59
+ - Otwórz plik `.env` i wklej swój klucz API OpenAI:
60
+ ```
61
+ OPENAI_API_KEY="sk-..."
62
+ ```
63
 
64
+ 4. **Uruchom aplikację:**
65
+ ```bash
66
+ python app.py
67
+ ```
68
+ Aplikacja będzie dostępna pod adresem `http://127.0.0.1:7860`.
69
+
70
+ ### 3. Testowanie
71
+
72
+ Przed wdrożeniem warto uruchomić prosty test startowy, aby upewnić się, że agent inicjalizuje się poprawnie:
73
  ```bash
74
  python test_startup.py
75
  ```
76
 
77
+ ---
78
+
79
+ ## ☁️ Wdrożenie na Hugging Face Spaces
80
 
81
+ Aplikacja jest skonfigurowana do wdrożenia jako Gradio App na Hugging Face Spaces.
 
 
82
 
83
+ ### 1. Konfiguracja w Hugging Face
84
 
85
+ - W ustawieniach swojego Space, w sekcji **Secrets**, dodaj sekret o nazwie `OPENAI_API_KEY` i wklej swój klucz API.
 
 
 
86
 
87
+ ### 2. Kluczowe aspekty wdrożenia
88
 
89
+ - **Baza danych `lancedb`**: Baza jest tylko do odczytu i musi znajdować się w repozytorium, aby była dostępna dla aplikacji. Zalecane jest użycie `git lfs` do śledzenia katalogu `lancedb/`.
90
+ - **Plik `app.py`**: Logika startowa aplikacji jest dostosowana do wymogów HF Spaces - nie używa bloku `if __name__ == "__main__:"` do uruchomienia i nie wymaga ręcznego wywoływania `demo.launch()`.
91
+ - **Zarządzanie zasobami**: Mechanizm `atexit` został celowo wyłączony, aby uniknąć przedwczesnego zamykania aplikacji w środowisku HF Spaces.
92
 
93
+ ## 📄 Licencja
94
 
95
+ Ten projekt służy celom edukacyjnym. Baza wiedzy pochodzi z publicznych źródeł (W3C, MDN).
README_DEPLOYMENT.md DELETED
@@ -1,91 +0,0 @@
1
- # Deployment Guide for Hugging Face Spaces
2
-
3
- ## Problemy rozwiązane w tej wersji
4
-
5
- ### 1. Konflikty pętli zdarzeń asyncio
6
- - **Problem**: `asyncio.run()` przed `demo.launch()` tworzył zamkniętą pętlę zdarzeń
7
- - **Rozwiązanie**: Używamy jednej, globalnej pętli zdarzeń z `asyncio.get_event_loop()`
8
-
9
- ### 2. Brak czyszczenia zasobów
10
- - **Problem**: Zasoby (cache, połączenia DB) nie były zamykane przy shutdown
11
- - **Rozwiązanie**: Dodano `atexit.register(cleanup_resources)` i metody `close()` dla wszystkich klientów
12
-
13
- ### 3. Konflikty wersji bibliotek
14
- - **Problem**: Brak określonych wersji w requirements.txt
15
- - **Rozwiązanie**: Określono zakresy kompatybilnych wersji dla wszystkich bibliotek
16
-
17
- ## Konfiguracja dla Hugging Face Spaces
18
-
19
- ### 1. Zmienne środowiskowe (Secrets)
20
- W ustawieniach Space dodaj:
21
- ```
22
- OPENAI_API_KEY=sk-...
23
- SERVER_HOST=0.0.0.0
24
- SERVER_PORT=7860
25
- LOG_LEVEL=INFO
26
- ```
27
-
28
- ### 2. Struktura plików
29
- Upewnij się, że:
30
- - `lancedb/` folder jest w `.gitignore` (jeśli nie jest częścią repo)
31
- - `cache/` folder jest w `.gitignore`
32
- - `.env` NIE jest commitowany (tylko `.env.example`)
33
-
34
- ### 3. app.py Configuration
35
- Aplikacja automatycznie:
36
- - Tworzy pętlę zdarzeń tylko jeśli nie istnieje
37
- - Rejestruje funkcję czyszczącą zasoby
38
- - Zamyka wszystkie połączenia przy shutdown
39
- - Wyłapuje KeyboardInterrupt dla graceful shutdown
40
-
41
- ### 4. Testowanie lokalnie
42
- ```bash
43
- # Zainstaluj zależności
44
- pip install -r requirements.txt
45
-
46
- # Skopiuj i edytuj .env
47
- cp .env.example .env
48
- # Ustaw OPENAI_API_KEY w .env
49
-
50
- # Uruchom aplikację
51
- python app.py
52
- ```
53
-
54
- ### 5. Monitorowanie na Hugging Face
55
- Sprawdź logi, czy widzisz:
56
- - ✅ "A11y Expert Agent is ready!"
57
- - ✅ "Launching Gradio app..."
58
- - Brak błędów asyncio RuntimeError
59
-
60
- ## Potencjalne problemy i rozwiązania
61
-
62
- ### Problem: "RuntimeError: Event loop is closed"
63
- **Rozwiązanie**: Upewnij się, że używasz tej zaktualizowanej wersji `app.py`
64
-
65
- ### Problem: Aplikacja zamyka się po kilku sekundach
66
- **Możliwe przyczyny**:
67
- 1. Brak OPENAI_API_KEY → sprawdź Secrets
68
- 2. Brak dostępu do lancedb → upewnij się, że folder istnieje i ma dane
69
- 3. Konflikt portów → Hugging Face używa 7860
70
-
71
- ### Problem: "Table doesn't exist"
72
- **Rozwiązanie**: Upewnij się, że `lancedb/` folder z danymi jest dostępny:
73
- - Jeśli dane są w repo: użyj Git LFS
74
- - Jeśli dane są generowane: uruchom skrypt ETL przed startem
75
-
76
- ## Porady optymalizacyjne
77
-
78
- 1. **Używaj cache**: `diskcache` znacząco przyspiesza embeddings
79
- 2. **Limituj history**: Agent przechowuje tylko 4 ostatnie wiadomości
80
- 3. **Monitoruj memory**: LanceDB + cache mogą zużywać pamięć
81
- 4. **Timeout na Hugging Face**: Free tier ma limit czasu bezczynności
82
-
83
- ## Sprawdzenie czy wszystko działa
84
-
85
- ✅ Checklist:
86
- - [ ] Aplikacja startuje bez błędów
87
- - [ ] Agent odpowiada na pytania
88
- - [ ] Streaming działa płynnie
89
- - [ ] Brak ostrzeżeń asyncio w logach
90
- - [ ] Aplikacja nie crashuje po kilku minutach
91
- - [ ] Graceful shutdown przy SIGTERM