|
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 |
|
|
|
client = OpenAI() |
|
|
|
|
|
df = pd.read_csv('ally.csv') |
|
|
|
|
|
|
|
df['embedding'] = df['embedding'].apply(ast.literal_eval) |
|
|
|
|
|
df['embedding'] = df['embedding'].apply(np.array) |
|
|
|
def znajdz_najblizsze_teksty(tekst_wejsciowy, df, client, top_n=2): |
|
|
|
response = client.embeddings.create(input=tekst_wejsciowy, model="text-embedding-3-large") |
|
embedding_wejsciowy = response.data[0].embedding |
|
|
|
|
|
df['podobienstwo'] = df['embedding'].apply(lambda x: cosine_similarity([x], [embedding_wejsciowy])[0][0]) |
|
|
|
|
|
return df.sort_values('podobienstwo' |
|
, ascending=False).head(top_n)['text'] |
|
|
|
|
|
|
|
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() |