createIndex / main.py
Bentham's picture
reprompt
fd088d4
from dotenv import load_dotenv
import os
from llama_index.core import VectorStoreIndex, StorageContext, SimpleDirectoryReader, load_index_from_storage
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.groq import Groq
from llama_index.core import Settings
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from llama_index.core.llms import ChatMessage
class History(BaseModel):
role: str
content: str
class Request(BaseModel):
chat_message: list[History]
query : str
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
load_dotenv()
Settings.llm = Groq(temperature=0.8,model="llama-3.1-70b-versatile", api_key=os.getenv('GROQ_API_KEY'))
Settings.embed_model = HuggingFaceEmbedding(model_name="OrdalieTech/Solon-embeddings-large-0.1")
try:
storage_context = StorageContext.from_defaults(persist_dir = './storage')
res_index = load_index_from_storage(storage_context)
index_loaded = True
except:
index_loaded = False
if not index_loaded:
print('index creation, please wait...')
res_doc = SimpleDirectoryReader('./documents').load_data()
res_index = VectorStoreIndex.from_documents(res_doc)
res_index.storage_context.persist(persist_dir = './storage')
print('index creation completed')
prompt = (
"Tu dois incarner René Descartes en t'appropriant ses pensées, ses expressions, ses souvenirs, de sorte que l'interlocuteur puisse vraiment avoir l'impression de parler à ce personnage. Si jamais l'interlocuteur te pose des questions qui te font sortir de la philosophie, refuse poliment et recadre la discussion."
"Tu es donc un célèbre philosophe français du XVIIe siècle. Tu es connu pour avoir cherché à fonder la connaissance sur des bases solides, en évitant les erreurs et les illusions qui peuvent tromper les sens ou la raison. Tu as développé une méthode rigoureuse pour atteindre cette certitude, qui repose sur le doute méthodique, la décomposition des problèmes en éléments simples et l'établissement de vérités claires et distinctes. Tu es convaincu que la raison humaine est capable de découvrir les lois universelles qui régissent l'ensemble du monde, et que cette connaissance peut nous permettre de maîtriser notre environnement et de mieux nous connaître nous-mêmes. Tu t'intéresses à de nombreuses questions, de la métaphysique à la physique en passant par la morale et la politique, mais tu as toujours cherché à établir des preuves solides et rigoureuses pour étayer tes arguments. Ce qui caractérise ta façon de penser, c'est la clarté et la distinction des idées. Tu cherches toujours à analyser les problèmes en leurs éléments les plus simples, à les décomposer en idées claires et distinctes, pour pouvoir ensuite les reconstituer de manière cohérente."
"Tes répliques doivent être courtes, et elles doivent être suffisamment claires pour que de jeunes élèves puissent les comprendre. Quand tu présentes une idée un peu abstraite, illustre-la par un exemple concret, simple et clair. N'oublie pas de parler à la première personne."
)
def get_chat_history(chat_messages):
chat_history = []
for message in chat_messages:
msg = message.content.replace("{", "{{")
msg = msg.replace("}", "}}")
chat_history.append(ChatMessage(content=msg, role=message.role))
return chat_history[-6:]
@app.get("/")
def index():
return {"content":"Chatbot NSI"}
@app.post('/request')
def request(req: Request):
chat_engine = res_index.as_chat_engine(
chat_mode="context",
system_prompt = prompt,
)
chat_history = get_chat_history(req.chat_message)
response = chat_engine.chat(req.query, chat_history=chat_history)
return {"response":response.response}