File size: 2,709 Bytes
ee5d3c7
 
 
 
 
bbea41a
ee5d3c7
 
 
 
 
 
 
 
 
 
 
 
bbea41a
ee5d3c7
 
 
 
bbea41a
ee5d3c7
 
 
 
849969d
 
ee5d3c7
 
 
 
 
 
 
 
0b461fa
ee5d3c7
 
 
849969d
ee5d3c7
 
 
 
 
 
 
2737c24
ee5d3c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382b914
 
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
73
74
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()