jaczad commited on
Commit
8e0cbbd
1 Parent(s): 6a00c56

z terminala trudniej

Browse files
Files changed (1) hide show
  1. app.py +59 -0
app.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pickle
2
+ import numpy as np
3
+ from sentence_transformers import SentenceTransformer
4
+ from scipy.spatial.distance import cosine
5
+ import gradio as gr
6
+ from openai import OpenAI
7
+ client=OpenAI()
8
+ model = SentenceTransformer("quanthome/paraphrase-multilingual-MiniLM-L12-v2")
9
+ # Funkcja do znajdowania najbardziej podobnych tekstów
10
+ def find_similar(text, vector_map, model, top_n=5):
11
+ query_embedding = model.encode([text])[0]
12
+ similarities = []
13
+
14
+ for key, embedding in vector_map.items():
15
+ similarity = 1 - cosine(query_embedding, embedding) # 1 - cosine distance gives similarity
16
+ similarities.append((key, similarity))
17
+
18
+ # Sortowanie po podobieństwie malejąco
19
+ similarities = sorted(similarities, key=lambda x: x[1], reverse=True)
20
+
21
+ return similarities[:top_n]
22
+
23
+
24
+ # Odczytanie słownika z pliku
25
+ with open('vector_map.pkl', 'rb') as f:
26
+ vector_map = pickle.load(f)
27
+
28
+ # Przykładowe wyszukiwanie
29
+ def szukaj(query_text):
30
+ top_n_results = find_similar(query_text, vector_map, model, top_n=5)
31
+ context=''
32
+ for text, similarity in top_n_results:
33
+ context=context+text
34
+ jaczat=client.chat.completions.create(
35
+ model='gpt-4o',
36
+ temperature=0.2,
37
+ max_tokens=512,
38
+ messages=[
39
+ {'role': 'system',
40
+ 'content': 'Nazywasz się Jacek i jesteś ekspertem cyfrowej dostępności. Odpowiadasz konkretnie i krótko na pytania na podstawie kontekstu podanego przez użytkownika.'},
41
+ {'role': 'user',
42
+ 'content': query_text+context}
43
+ ]
44
+ )
45
+ return jaczat.choices[0].message.content
46
+ demo=gr.Interface(
47
+ fn=szukaj,
48
+ inputs=gr.Text(label='Pytanie'),
49
+ outputs=gr.Markdown(),
50
+ theme=gr.themes.Glass(font='OpenSans'),
51
+ title='JaCzat',
52
+ description='Tu możesz zapytać o wszystko dotyczące cyfrowej dostępności, w tym przede wszystkim WCAG. Jeżeli odpowiedź jest Twoim zdaniem błędna lub niesatysfakcjonująca, kliknij na flagę "Źle". A jeżeli odpowiedź jest prawidłowa - kliknij "Dobrze". To pomoże mi rozwijać pomocnika na przyszłość. Nie zbieram żadnych danych osobowych i proszę Cię, żeby ich tu nie wpisywać. Potem będę miał problem z ich usuwaniem.',
53
+ submit_btn='Zapytaj',
54
+ clear_btn='Wyczyść',
55
+ allow_flagging='manual',
56
+ show_progress='minimal',
57
+ flagging_dir='jaczat.csv',
58
+ flagging_options=['Dobrze', 'Źle']
59
+ ).launch(inbrowser=True, show_api=False)