jaczad commited on
Commit
2f29ee2
1 Parent(s): 382b914

Dodane informacje o planie i deklaracji dostępności.

Browse files
Files changed (2) hide show
  1. app.py +55 -72
  2. vector_map.pkl +3 -0
app.py CHANGED
@@ -1,74 +1,57 @@
1
- import pandas as pd
2
- from sklearn.metrics.pairwise import cosine_similarity
3
  import numpy as np
4
- from openai import OpenAI
5
- import ast
6
  import gradio as gr
7
- # Inicjalizuj klienta API
8
- client = OpenAI()
9
-
10
- # Wczytaj plik CSV
11
- df = pd.read_csv('ally.csv')
12
-
13
-
14
- # Przekształć stringi z powrotem do list
15
- df['embedding'] = df['embedding'].apply(ast.literal_eval)
16
-
17
- # Następnie przekształć listy na tablice numpy
18
- df['embedding'] = df['embedding'].apply(np.array)
19
-
20
- def znajdz_najblizsze_teksty(tekst_wejsciowy, df, client, top_n=2):
21
- # Wygeneruj embedding dla tekstu wejściowego
22
- response = client.embeddings.create(input=tekst_wejsciowy, model="text-embedding-3-large")
23
- embedding_wejsciowy = response.data[0].embedding
24
-
25
- # Oblicz podobieństwo kosinusowe między embeddingiem wejściowym a wszystkimi innymi embeddingami
26
- df['podobienstwo'] = df['embedding'].apply(lambda x: cosine_similarity([x], [embedding_wejsciowy])[0][0])
27
-
28
- # Posortuj DataFrame według podobieństwa i zwróć top_n najbardziej podobnych tekstów
29
- return df.sort_values('podobienstwo'
30
- , ascending=False).head(top_n)['text']
31
-
32
-
33
- # Użyj funkcji do znalezienia najbardziej podobnych tekstów
34
- def answer(tekst_wejsciowy, history):
35
- najblizsze_teksty = znajdz_najblizsze_teksty(tekst_wejsciowy, df, client)
36
- kontekst = "\n".join(najblizsze_teksty)
37
- prompt = f"Kontekst: {kontekst}\n Pytanie: {tekst_wejsciowy}"
38
- response = client.chat.completions.create(
39
- model="gpt-4o",
40
- messages=[
41
- {
42
- "role": "system",
43
- "content": "Jesteś asystentką koordynatorów i koordynatorek dostępności. Odpowiadasz konkretnie i zwięźle. Czasem możesz poflirtować. Do odpowiedzi wykorzystujesz dostarczony kontekst."
44
- },
45
- {
46
- "role": "user",
47
- "content": prompt
48
- }
49
- ],
50
- temperature=0.1,
51
- max_tokens=1024,
52
- top_p=1,
53
- frequency_penalty=0,
54
- presence_penalty=0)
55
- odp = response.choices[0].message.content
56
- return(odp)
57
-
58
- demo = gr.ChatInterface(
59
- fn = answer,
60
- title = "Ally - asystentka koordynatorów dostępności",
61
- description= "Ally jest asystentką, która odpowie na pytania dotyczące dostępności. Dużo się nauczyła i wciąż się uczy, ale może jednak popełniać błędy.",
62
- clear_btn= None,
63
- submit_btn= "Zapytaj",
64
- retry_btn=None,
65
- undo_btn=None,
66
- examples=[
67
- "Jestem zupełnie świeżym koordynatorem dostępności i nie wiem, od czego zacząć.",
68
- "Za co odpowiada koordynator do spraw dostępności?",
69
- "Jakie wymiary powinna mieć kabina windy?",
70
- "Co to jest plan wdrażania dostępności?",
71
- "Czym jest deklaracja dostępności?",
72
- "Kto jest najlepszą specjalistką od tworzenia planu wdrazania dostępności?"
73
- ]
74
- ).launch()
 
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, history):
30
+ top_n_results = find_similar(query_text, vector_map, model, top_n=2)
31
+ context=''
32
+ for text, similarity in top_n_results:
33
+ context=context+text
34
+ jaczat=client.chat.completions.create(
35
+ model='gpt-4o-mini',
36
+ temperature=0.0,
37
+ max_tokens=1024,
38
+ messages=[
39
+ {'role': 'system',
40
+ 'content': 'Jesteś asystentką koordynatorów dostępności i masz na imię Ally. Odpowiadasz rzetelnie i miło na pytania zadawane przez użytkowników. Nie musisz odpowiadać na wulgarne i chamskie uwagi.'+context},
41
+ {'role': 'user',
42
+ 'content': query_text}
43
+ ]
44
+ )
45
+ return jaczat.choices[0].message.content
46
+ demo=gr.ChatInterface(
47
+ fn=szukaj,
48
+ theme=gr.themes.Monochrome(),
49
+ autofocus=True,
50
+ title='Ally - asystentka koordynatorów dostępności',
51
+ description='Ally chętnie odpowie na Twoje pytania i wątpliwości dotyczące dostępności architektonicznej i zadań osób koordynujących dostępność w organizacji. Ponieważ Ally jest oparta o model sztucznej inteligencji, to może się mylić, chociaż na pewnorzadziej, niż człowiek.',
52
+ submit_btn='Zapytaj',
53
+ clear_btn=None,
54
+ retry_btn=None,
55
+ undo_btn=None,
56
+ show_progress='minimal',
57
+ ).launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vector_map.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7d35af280ac839c9963c03aadd83096b24e8864be9c1fa8fe9a16449f439e9f3
3
+ size 381834