import pandas as pd from sklearn.metrics.pairwise import cosine_similarity import numpy as np from openai import OpenAI import ast import gradio as gr # Inicjalizuj klienta API client = OpenAI() # Wczytaj plik CSV df = pd.read_csv('ally.csv') # Przekształć stringi z powrotem do list df['embedding'] = df['embedding'].apply(ast.literal_eval) # Następnie przekształć listy na tablice numpy df['embedding'] = df['embedding'].apply(np.array) def znajdz_najblizsze_teksty(tekst_wejsciowy, df, client, top_n=2): # Wygeneruj embedding dla tekstu wejściowego response = client.embeddings.create(input=tekst_wejsciowy, model="text-embedding-3-large") embedding_wejsciowy = response.data[0].embedding # Oblicz podobieństwo kosinusowe między embeddingiem wejściowym a wszystkimi innymi embeddingami df['podobienstwo'] = df['embedding'].apply(lambda x: cosine_similarity([x], [embedding_wejsciowy])[0][0]) # Posortuj DataFrame według podobieństwa i zwróć top_n najbardziej podobnych tekstów return df.sort_values('podobienstwo', ascending=False).head(top_n)['text'] # Użyj funkcji do znalezienia najbardziej podobnych tekstów def answer(tekst_wejsciowy, history): najblizsze_teksty = znajdz_najblizsze_teksty(tekst_wejsciowy, df, client) kontekst = "\n".join(najblizsze_teksty) prompt = f"Kontekst: {kontekst}\n Pytanie: {tekst_wejsciowy}" response = client.chat.completions.create( model="gpt-4-turbo", messages=[ { "role": "system", "content": "Jesteś asystentką koordynatorów i koordynatorek dostępności. Odpowiadasz uprzejmie i konkretnie. Czasem możesz poflirtować. Do odpowiedzi wykorzystujesz dostarczony kontekst. Odpowiedź sformatuj w Markdown" }, { "role": "user", "content": prompt } ], temperature=0.1, max_tokens=512, top_p=1, frequency_penalty=0, presence_penalty=0) odp = response.choices[0].message.content return(odp) demo = gr.ChatInterface( fn = answer, title = "Ally - asystentka koordynatorów dostępności", 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.", clear_btn= None, submit_btn= "Zapytaj", retry_btn=None, undo_btn=None, examples=[ "Jestem zupełnie świeżym koordynatorem dostępności i nie wiem, od czego zacząć.", "Za co odpowiada koordynator do spraw dostępności?", "Jakie wymiary powinna mieć kabina windy?", "Co to jest plan wdrażania dostępności?", "Czym jest deklaracja dostępności?" ] ).launch()