import pickle import numpy as np from sentence_transformers import SentenceTransformer from scipy.spatial.distance import cosine import gradio as gr from openai import OpenAI client=OpenAI() model = SentenceTransformer("quanthome/paraphrase-multilingual-MiniLM-L12-v2") # Funkcja do znajdowania najbardziej podobnych tekstów def find_similar(text, vector_map, model, top_n=5): query_embedding = model.encode([text])[0] similarities = [] for key, embedding in vector_map.items(): similarity = 1 - cosine(query_embedding, embedding) # 1 - cosine distance gives similarity similarities.append((key, similarity)) # Sortowanie po podobieństwie malejąco similarities = sorted(similarities, key=lambda x: x[1], reverse=True) return similarities[:top_n] # Odczytanie słownika z pliku with open('vector_map.pkl', 'rb') as f: vector_map = pickle.load(f) # Przykładowe wyszukiwanie def szukaj(query_text, history): top_n_results = find_similar(query_text, vector_map, model, top_n=2) context='' for text, similarity in top_n_results: context=context+text jaczat=client.chat.completions.create( model='gpt-4o-mini', temperature=0.0, max_tokens=1024, messages=[ {'role': 'system', '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}, {'role': 'user', 'content': query_text} ] ) return jaczat.choices[0].message.content demo=gr.ChatInterface( fn=szukaj, theme=gr.themes.Monochrome(), autofocus=True, title='Ally - asystentka koordynatorów dostępności', 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.', submit_btn='Zapytaj', clear_btn=None, retry_btn=None, undo_btn=None, show_progress='minimal', ).launch()