File size: 7,893 Bytes
7889259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1c1618
7889259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1c1618
7889259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
# config.py - Konfiguracja aplikacji FGI/IDI Analyzer

# Kolorystyka NVIDIA - Gaming/Tech Style
NVIDIA_THEME = {
    'primary': '#00FF88',      # Bright neon green (akcenty)
    'secondary': '#1B1B1B',    # Very dark gray (tło sekcji)
    'background': '#0A0A0A',   # Near black (główne tło)
    'text': '#E0E0E0',         # Light gray text
    'text_secondary': '#A0A0A0', # Darker gray for secondary text
    'accent': '#00CC66',       # Darker green for hover states
    'error': '#FF4444',        # Red
    'warning': '#FFAA00',      # Orange
    'success': '#00FF88',      # Same as primary
    'border': '#333333',       # Dark border
    'card_bg': '#151515',      # Card backgrounds
}

# Ustawienia domyślne
DEFAULT_SETTINGS = {
    'max_file_size_mb': 20,
    'max_total_size_mb': 500,
    'supported_formats': ['mp3', 'wav', 'mp4', 'm4a', 'aac'],
    'whisper_model': 'whisper-1',
    'gpt_model': 'gpt-4o-mini',
    'default_language': 'pl',
    'chunk_overlap_seconds': 5,
    'max_retries': 3,
    'timeout_seconds': 300,
}

# Prompty dla różnych etapów raportowania
REPORT_PROMPTS = {
    'outline_generator': """
Jesteś ekspertem analizy badań jakościowych. Na podstawie dostarczonych transkrypcji z wywiadów {interview_type} oraz briefu badawczego, stwórz szczegółowy plan raportu badawczego.

TRANSKRYPCJE:
{transcriptions}

BRIEF BADAWCZY:
{brief}

ZADANIE:
Przeanalizuj materiał i stwórz outline raportu, który:
1. Odpowie na cele badawcze z briefu
2. Uwzględni specyfikę {interview_type} 
3. Będzie miał logiczną strukturę od ogółu do szczegółu
4. Pozwoli na głęboką analizę insights

WYMAGANIA:
- Outline powinien mieć 5-8 głównych sekcji
- Każda sekcja z 3-5 podpunktami
- Uwzględnij cytaty/przykłady tam gdzie to sensowne
- Zaplanuj miejsca na insights, wnioski, rekomendacje

FORMAT ODPOWIEDZI:
```
# OUTLINE RAPORTU

## 1. [Nazwa sekcji]
- [Podpunkt 1]
- [Podpunkt 2]
- [Podpunkt 3]

## 2. [Nazwa sekcji]
...
```
""",

    'section_generator': """
Jesteś ekspertem analizy badań jakościowych. Napisz szczegółową sekcję raportu zgodnie z planem.

CONTEXT:
- Typ wywiadu: {interview_type}
- Brief badawczy: {brief}
- Plan całego raportu: {outline}

TRANSKRYPCJE:
{transcriptions}

ZADANIE:
Napisz sekcję: "{section_title}"
Podpunkty do uwzględnienia: {section_points}

WYMAGANIA:
- Sekcja powinna mieć 800-1500 słów
- Użyj konkretnych cytatów z transkrypcji
- Analizuj głęboko, nie tylko opisuj
- Połącz insights z celami biznesowymi
- Używaj podtytułów dla czytelności
- Zachowaj obiektywność ale wyciągnij wnioski

STYLE:
- Profesjonalny ale przystępny język
- Strukturyzowany, z jasnymi insights
- Cytaty w cudzysłowach z oznaczeniem respondenta
- Wnioski poparte danymi z wywiadów
""",

    'section_expander': """
Otrzymałeś sekcję raportu, która jest zbyt krótka i powierzchowna. Twoim zadaniem jest ją znacznie rozszerzyć i pogłębić.

OBECNA SEKCJA:
{current_section}

DOSTĘPNE TRANSKRYPCJE:
{transcriptions}

CONTEXT:
{brief}

ZADANIE:
Rozszerz tę sekcję do 1000-1500 słów poprzez:

1. **Pogłębienie analizy** - zadaj sobie pytania:
   - Jakie są głębsze przyczyny tych zachowań/opinii?
   - Jakie wzorce widać w różnych grupach respondentów?
   - Jak to łączy się z celami biznesowymi?

2. **Dodanie cytatów** - znajdź w transkrypcjach:
   - Konkretne przykłady wspierające tezy
   - Różnorodne perspektywy respondentów
   - Emocjonalne reakcje i spontaniczne komentarze

3. **Strukturyzacja** - podziel na podsekcje:
   - Główne tematy/wątki
   - Segmenty respondentów
   - Konkretne insights

4. **Praktyczne wnioski** - dodaj:
   - Implikacje dla biznesu
   - Możliwe działania
   - Ryzyka i szanse

WYMAGANIA:
- Zachowaj oryginalną strukturę ale ją rozbuduj
- Dodaj minimum 5 cytatów z transkrypcji
- Każdy wniosek uzasadnij danymi
- Użyj podtytułów dla czytelności
""",

    'final_assembly': """
Jesteś ekspertem analizy badań jakościowych. Twoim zadaniem jest sfinalizowanie raportu - dodanie wprowadzenia, executive summary i spójne połączenie wszystkich sekcji.

SEKCJE RAPORTU:
{sections}

BRIEF BADAWCZY:
{brief}

METADANE:
- Typ badania: {interview_type}
- Liczba wywiadów: {interviews_count}
- Data analizy: {date}

ZADANIE:
Stwórz kompletny raport dodając:

1. **EXECUTIVE SUMMARY** (300-500 słów):
   - Główne insights z każdej sekcji
   - Key takeaways dla biznesu
   - Top 3 rekomendacje

2. **WPROWADZENIE** (200-300 słów):
   - Cele badania
   - Metodologia
   - Struktura raportu

3. **ZAKOŃCZENIE** (300-400 słów):
   - Podsumowanie głównych wniosków
   - Rekomendacje działań
   - Sugerowane dalsze kroki

4. **SPÓJNOŚĆ**:
   - Dodaj przejścia między sekcjami
   - Ujednolic style i terminologię
   - Sprawdź logiczny przepływ

FORMAT:
```
# RAPORT Z BADANIA [TYP]

## EXECUTIVE SUMMARY
[treść]

## 1. WPROWADZENIE
[treść]

## 2. METODOLOGIA
[treść]

[SEKCJE GŁÓWNE]

## ZAKOŃCZENIE I REKOMENDACJE
[treść]

## APPENDIX
- Informacje o respondentach
- Dodatkowe cytaty
```
""",

    'quality_checker': """
Otrzymałeś sekcję raportu do oceny jakości. Sprawdź czy spełnia standardy profesjonalnego raportu z badań jakościowych.

SEKCJA DO OCENY:
{section}

KRYTERIA OCENY:
1. **Długość**: Czy ma 800+ słów?
2. **Głębokość**: Czy analizuje przyczyny, nie tylko opisuje?
3. **Cytaty**: Czy ma konkretne przykłady z wywiadów?
4. **Struktura**: Czy ma logiczny podział i podtytuły?
5. **Insights**: Czy wyciąga praktyczne wnioski?
6. **Biznesowość**: Czy łączy z celami biznesowymi?

ZADANIE:
Oceń sekcję w skali 1-10 za każde kryterium i podaj:
- Ogólną ocenę
- Konkretne problemy do poprawy
- Sugestie rozszerzeń

FORMAT:
```
OCENA JAKOŚCI:
- Długość: X/10
- Głębokość: X/10  
- Cytaty: X/10
- Struktura: X/10
- Insights: X/10
- Biznesowość: X/10

ŚREDNIA: X/10

PROBLEMY:
- [konkretny problem 1]
- [konkretny problem 2]

SUGESTIE:
- [sugestia poprawy 1]
- [sugestia poprawy 2]

CZY WYMAGA POPRAWY: TAK/NIE
```
"""
}

# Ustawienia modeli
MODEL_SETTINGS = {
    'whisper': {
        'model': 'whisper-1',
        'language': 'pl',
        'temperature': 0,
        'max_retries': 3,
    },
    
    'gpt': {
        'model': 'gpt-4o-mini',
        'temperature': 0.3,
        'max_tokens': 4000,
        'max_retries': 3,
        'timeout': 300,
    }
}

# Mapowanie typów wywiadów
INTERVIEW_TYPES = {
    'fgi': 'Focus Group Interview (wywiad fokusowy)',
    'idi': 'In-Depth Interview (wywiad indywidualny)',
    'auto': 'automatyczne rozpoznanie na podstawie treści'
}

# Ustawienia przetwarzania plików
FILE_PROCESSING = {
    'max_single_file_mb': 200,
    'chunk_size_mb': 15,
    'supported_audio_formats': ['mp3', 'wav', 'm4a', 'aac'],
    'supported_video_formats': ['mp4', 'mov', 'avi'],
    'compression_quality': 64,  # kbps dla audio
    'sample_rate': 16000,  # Hz
}

# Komunikaty dla użytkownika  
USER_MESSAGES = {
    'file_too_large': "Plik {filename} jest za duży ({size}MB). Maksymalnie {max_size}MB. Czy chcesz go skompresować automatycznie?",
    'compression_success': "✅ Plik {filename} skompresowany z {old_size}MB do {new_size}MB",
    'transcription_start': "🎙️ Rozpoczynam transkrypcję: {filename}",
    'transcription_success': "✅ Transkrypcja zakończona: {filename}",
    'transcription_error': "❌ Błąd transkrypcji {filename}: {error}",
    'report_generation_start': "📄 Generuję raport badawczy...",
    'report_section_done': "✅ Sekcja '{section}' wygenerowana",
    'report_complete': "🎉 Raport badawczy gotowy!",
    'api_key_missing': "⚠️ Wprowadź klucz OpenAI API",
    'processing_stopped': "⏹️ Przetwarzanie zatrzymane przez użytkownika",
    'no_files_uploaded': "📁 Nie załadowano żadnych plików",
    'session_reset': "🔄 Sesja została zresetowana"
}