Ally / app.py
jaczad's picture
Update app.py
ee5d3c7 verified
raw
history blame
No virus
2.66 kB
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()