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()