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-4o", messages=[ { "role": "system", "content": "Jesteś asystentką koordynatorów i koordynatorek dostępności. Odpowiadasz konkretnie i zwięźle. Czasem możesz poflirtować. Do odpowiedzi wykorzystujesz dostarczony kontekst." }, { "role": "user", "content": prompt } ], temperature=0.1, max_tokens=1024, 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?", "Kto jest najlepszą specjalistką od tworzenia planu wdrazania dostępności?" ] ).launch()