File size: 4,764 Bytes
c1b7b41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
125
126
127
"""
Data Scientist.: Dr.Eddy Giusepe Chirinos Isidro

Este script tem que ser otimizado !!!


https://www.datacamp.com/tutorial/chromadb-tutorial-step-by-step-guide

https://abhishektatachar.medium.com/run-chroma-db-on-a-local-machine-and-as-a-docker-container-a9d4b91d2a97

https://docs.trychroma.com/usage-guide
"""
import chromadb
from chromadb.utils import embedding_functions
import openai

client = chromadb.Client()
#client.reset() # Esvazia e redefine completamente o banco de dados. Isso é destrutivo e irreversível.
#client.delete_collection(name="my_collection")
print(client.list_collections())
#collection = client.create_collection("my_collection")
#client.heartbeat()

# Substitua sua chave de API OpenAI:
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key  = os.environ['OPENAI_API_KEY']

# # Isto é quando usas o arquivo .env:
# from dotenv import load_dotenv
# import os
# print('Carregando a minha chave Key: ', load_dotenv())
# Eddy_API_KEY_OpenAI = os.environ['OPENAI_API_KEY'] 

student_info = """
Alexandra Thompson, uma estudante do segundo ano de ciências físicas de 19 anos com um GPA de 3.7, é membro \
dos clubes de programação e xadrez e gosta de pizza, nadar e fazer caminhadas em seu tempo livre na esperança \
de trabalhar em uma empresa de tecnologia depois de se formar no Universidade de Washington.
"""

club_info = """
O clube de xadrez universitário oferece uma oportunidade para os alunos se reunirem e se divertirem jogando o clássico \
jogo de estratégia de xadrez. Membros de todos os níveis são bem-vindos, desde iniciantes aprendendo as regras até \
jogadores experientes de torneios. O clube normalmente se reúne algumas vezes por semana para jogar jogos casuais, \
participar de torneios, analisar partidas de xadrez famosas e melhorar as habilidades dos membros.
"""

university_info = """
A Universidade de Washington, fundada em 1861 em Seattle, é uma universidade pública de pesquisa com mais de 45000 alunos \
em três campi em Seattle, Tacoma e Bothell. Como instituição emblemática das seis universidades públicas do estado de Washington, \
a UW abrange mais de 500 edifícios e 20 milhões de pés quadrados de espaço, incluindo um dos maiores sistemas de bibliotecas do mundo.
"""




class Retriver:
    def __init__(self):
        pass
    
    def get_retrieval_results(self, input, k=1):
    
        openai_ef = embedding_functions.OpenAIEmbeddingFunction(model_name="text-embedding-ada-002")
        students_embeddings = openai_ef([student_info, club_info, university_info])
        collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef)
        
        collection.add(
        embeddings = students_embeddings,
        documents = [student_info, club_info, university_info],
        metadatas = [{"source": "student info"},{"source": "club info"},{'source':'university info'}],
        ids = ["id1", "id2", "id3"]
        )
        
        retrieval_results = collection.query(
            query_embeddings=openai_ef(input),
            #query_texts=[input],
            n_results=k,
        )
        
        return retrieval_results["documents"][0]
    

# Você é um assistente prestativo que responde às queries do usuário em base as informações recebidas.
class Generator:
    def __init__(self, openai_model="gpt-3.5-turbo-1106"): # gpt-4
        self.openai_model = openai_model
        self.prompt_template = """Sumarize a resposta recuperada: ```{text}```. Ademais a sua resposta deve conter como máximo 20 palavras."""

    def generate_response(self, text):
        # prompts = []
        # for result in retrieval_results:
        #     prompt = self.prompt_template.format(answer_rec=result)
        #     prompts.append(prompt)
        # prompts.reverse()
        prompt = self.prompt_template.format(text=text)
        

        response = openai.ChatCompletion.create(
            model=self.openai_model,
            messages=[{"role": "assistant", "content": prompt}],
            temperature=0,
        )
        sumarizando = response["choices"][0]["message"]["content"]
        return sumarizando
    

class Chatbot:
    def __init__(self):
        self.retriver = Retriver()
        self.generator = Generator()
    
    def answer(self, input):
        retrieval_results = self.retriver.get_retrieval_results(input)
        return self.generator.generate_response(retrieval_results)
        
    

# Creating an instance of the Chatbot class
chatbot = Chatbot()

while True:
    user_input = input("You: ")  # Taking user input from the CLI
    response = chatbot.answer(user_input)
    print(f"Chatbot: {response}")