File size: 7,292 Bytes
17442f0
84dd39a
 
 
 
17442f0
d72a9e4
678845f
21c9256
 
 
 
 
68203ca
21c9256
 
 
 
 
 
 
 
 
 
 
 
6034dfc
a3f5135
21c9256
 
 
0eca70f
21c9256
 
 
 
 
 
ca658e6
 
21c9256
 
 
 
 
 
 
 
 
 
 
 
 
 
b457527
578b4b4
c0b45ee
6addeaf
bfae45f
0eca70f
 
21c9256
 
 
 
718ae1b
 
 
84dd39a
 
 
 
 
 
 
ea88414
84dd39a
 
 
 
 
 
 
 
 
 
 
 
ea88414
718ae1b
21c9256
718ae1b
 
 
 
 
 
 
 
 
21c9256
 
 
 
 
 
 
 
 
 
 
 
 
1c03b55
21c9256
 
 
 
 
 
 
 
 
ec39ad5
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from llama_index.core import SimpleDirectoryReader, GPTListIndex, GPTVectorStoreIndex, PromptHelper
from llama_index.core import StorageContext, load_index_from_storage, get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SimilarityPostprocessor
#from llama_index import LLMPredictor, PromptHelper
#from langchain.chat_models import ChatOpenAI
from langchain_community.embeddings import OpenAIEmbeddings
import gradio as gr
import os
import openai
from gradio.themes.utils import colors, fonts, sizes

#os.environ['OPENAI_API_KEY'] = api_key

messages = [
    {"role": "system", "content": "follow the 4 instructions below for your outputs:"},
    {"role": "system", "content": "1. make sure all expressions are compatible with Polish"},
    {"role": "system", "content": "2. use Polish only for outputs"},
    {"role": "system", "content": "3. if you cannot answer, reply that you do not have enough information"},
    {"role": "system", "content": "4. do not make up any answer if you do know the answer"},
]

def construct_index(directory_path):
    max_input_size = 4096
    num_outputs = 512
    max_chunk_overlap = 0.05
    chunk_size_limit = 1000
    temperature = 0.1

    prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
#    llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=temperature, model_name="gpt-3.5-turbo-instruct", max_tokens=num_outputs))
    documents = SimpleDirectoryReader(directory_path).load_data()
    #index = GPTVectorStoreIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper)
    index = GPTVectorStoreIndex.from_documents(documents, urls=[
                                                                'https://trio.house/',
                                                                'https://trio.house/kontakt/',
                                                                'https://trio.house/o-nas/',
                                                                'https://trio.house/w-sprzedazy/',
                                                                'https://trio.house/dzialki/',
                                                                'https://trio.house/zainwestuj-z-nami/',
                                                                'https://trio.house/potrzebujesz-konsultacji-rynku-nieruchomosci/',
                                                                'https://trio.house/potrzebujesz-remontu/',
                                                                'https://trio.house/potrzebujesz-projektu-wnetrza/',
                                                                'https://trio.house/potrzebujesz-mebli-na-wymiar/',
                                                                'https://trio.house/potrzebujesz-kredytu-na-zakup-nieruchomosci/',
                                                                'https://trio.house/makroekonomia/',
                                                                'https://trio.house/rynek-nieruchomosci/',
                                                                'https://trio.house/2023/05/24/deweloperzy-buduja-coraz-mniej/',
                                                                'https://trio.house/2023/04/27/prognozy-na-2023-2025-co-nas-czeka/',
                                                                'https://trio.house/2023/04/18/wycinka-drzew-na-wlasnej-dzialce-w-2023/',
                                                                'https://trio.house/2023/04/03/lipiec-rozpoczynamy-juz-w-kwietniu/',
                                                                'https://trio.house/2023/04/03/zmiany-w-podatku-od-czynnosci-cywilnoprawnych/',
                                                                'https://trio.house/2023/03/23/czy-aby-napewno-najdrozsze-mieszkania-sa-w-stolicy/',
                                                                'https://trio.house/2023/06/15/rekomendacja-s-korzystniejsza-dla-bezpiecznego-kredytu-2/',
                                                                'https://trio.house/2023/07/20/warszawski-rynek-nieruchomosci-mieszkaniowych-na-6-biegu/',
                                                                'https://livesmarter.pl/najlepsze-lokaty-maj-2023/',
                                                                'https://www.money.pl/gospodarka/inflacja-maj-2023-r-finalny-odczyt-gus-6909186710817344a.html',
                                                                'https://ksiegowosc.infor.pl/wiadomosci/5754337,oprocentowanie-lokat-bankowych-i-kont-oszczednosciowych-2023-koniec-maja-poczatek-czerwca-tabela.html#:~:text=7%2C05%25%20%2D%20takie%20jest,proc.',        
#        ], llm_predictor=llm_predictor, prompt_helper=prompt_helper)
        ], prompt_helper=prompt_helper)
    index.storage_context.persist('index.json')

    return index

def chatbotCustom(input):
    storage_context = StorageContext.from_defaults(persist_dir="index.json")
    index = load_index_from_storage(storage_context)
#    query_engine = index.as_query_engine()
#    response = query_engine.query(input, similarity_top_k=5, response_mode="tree_summarize")
##    response = index.query(input, similarity_top_k=5, response_mode="tree_summarize")
# configure retriever
    retriever = VectorIndexRetriever(
        index=index,
        similarity_top_k=10,
        response_mode="tree_summarize",
    )

# configure response synthesizer
    response_synthesizer = get_response_synthesizer()

# assemble query engine
    query_engine = RetrieverQueryEngine(
        retriever=retriever,
        response_synthesizer=response_synthesizer,
        node_postprocessors=[SimilarityPostprocessor(similarity_cutoff=0.7)],
    )

    response = query_engine.query(input)        
    return response.response

#def chatbotGPT(input):
#    if input:
#        messages.append({"role": "user", "content": input})
#        chat = openai.ChatCompletion.create(
#            model="gpt-3.5-turbo-instruct", messages=messages
#        )
#        reply = chat.choices[0].message.content
#        messages.append({"role": "assistant", "content": reply})
#        return reply

def clear():
    return None, None

theme = gr.themes.Default(font=[gr.themes.GoogleFont("Roboto"), "sans-serif", "sans-serif"], primary_hue="neutral", secondary_hue="neutral", neutral_hue="neutral").set(
    button_primary_background_fill="#3FCCA5",
    button_primary_background_fill_dark="#3FCCA5",
    button_primary_text_color="#003F62",
    body_background_fill="FFFFFF",
    body_background_fill_dark="FFFFFF"
)

with gr.Blocks(theme=theme) as trioGPT:
	inputs = gr.Textbox(lines=4, elem_id="inputs", label="Zadaj mi pytanie")#, elem_classes="textbox")
	outputs = gr.Textbox(label="Odpowiedź", elem_id="outputs")#, elem_classes="textbox")
	with gr.Row():
		submit_btn = gr.Button("Wyślij", variant="primary")
		clear_btn = gr.Button("Wyczyść")

	submit_btn.click(chatbotCustom, inputs=inputs, outputs=outputs)
	clear_btn.click(fn=clear, inputs=None, outputs=[inputs, outputs])

index = construct_index("data")
trioGPT.launch()#(share=True)