File size: 2,657 Bytes
ee5d3c7
 
 
 
 
bbea41a
ee5d3c7
 
 
 
 
 
 
 
 
 
 
 
bbea41a
ee5d3c7
 
 
 
bbea41a
ee5d3c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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()