Bentham commited on
Commit
cf0b9ed
·
1 Parent(s): fd088d4

premier up

Browse files
Files changed (3) hide show
  1. .gitattributes +6 -0
  2. main.py +40 -21
  3. requirements.txt +1 -0
.gitattributes CHANGED
@@ -34,3 +34,9 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *.json filter=lfs diff=lfs merge=lfs -text
36
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *.json filter=lfs diff=lfs merge=lfs -text
36
  *tfevents* filter=lfs diff=lfs merge=lfs -text
37
+ storage/* filter=lfs diff=lfs merge=lfs -text
38
+ storage/default__vector_store.json filter=lfs diff=lfs merge=lfs -text
39
+ storage/docstore.json filter=lfs diff=lfs merge=lfs -text
40
+ storage/graph_store.json filter=lfs diff=lfs merge=lfs -text
41
+ storage/image__vector_store.json filter=lfs diff=lfs merge=lfs -text
42
+ storage/index_store.json filter=lfs diff=lfs merge=lfs -text
main.py CHANGED
@@ -8,6 +8,7 @@ from fastapi import FastAPI
8
  from fastapi.middleware.cors import CORSMiddleware
9
  from pydantic import BaseModel
10
  from llama_index.core.llms import ChatMessage
 
11
 
12
  class History(BaseModel):
13
  role: str
@@ -15,7 +16,7 @@ class History(BaseModel):
15
 
16
  class Request(BaseModel):
17
  chat_message: list[History]
18
- query : str
19
 
20
  app = FastAPI()
21
 
@@ -28,10 +29,11 @@ app.add_middleware(
28
  )
29
 
30
  load_dotenv()
31
- Settings.llm = Groq(temperature=0.8,model="llama-3.1-70b-versatile", api_key=os.getenv('GROQ_API_KEY'))
32
  Settings.embed_model = HuggingFaceEmbedding(model_name="OrdalieTech/Solon-embeddings-large-0.1")
 
33
  try:
34
- storage_context = StorageContext.from_defaults(persist_dir = './storage')
35
  res_index = load_index_from_storage(storage_context)
36
  index_loaded = True
37
  except:
@@ -41,33 +43,50 @@ if not index_loaded:
41
  print('index creation, please wait...')
42
  res_doc = SimpleDirectoryReader('./documents').load_data()
43
  res_index = VectorStoreIndex.from_documents(res_doc)
44
- res_index.storage_context.persist(persist_dir = './storage')
45
  print('index creation completed')
46
 
47
- prompt = (
48
- "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."
49
- "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."
50
- "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."
51
- )
52
 
53
- def get_chat_history(chat_messages):
54
- chat_history = []
55
  for message in chat_messages:
56
- msg = message.content.replace("{", "{{")
57
- msg = msg.replace("}", "}}")
58
- chat_history.append(ChatMessage(content=msg, role=message.role))
59
- return chat_history[-6:]
60
 
61
  @app.get("/")
62
  def index():
63
- return {"content":"Chatbot NSI"}
64
 
65
  @app.post('/request')
66
- def request(req: Request):
 
 
 
67
  chat_engine = res_index.as_chat_engine(
68
  chat_mode="context",
69
- system_prompt = prompt,
70
  )
71
- chat_history = get_chat_history(req.chat_message)
72
- response = chat_engine.chat(req.query, chat_history=chat_history)
73
- return {"response":response.response}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  from fastapi.middleware.cors import CORSMiddleware
9
  from pydantic import BaseModel
10
  from llama_index.core.llms import ChatMessage
11
+ from sse_starlette import EventSourceResponse
12
 
13
  class History(BaseModel):
14
  role: str
 
16
 
17
  class Request(BaseModel):
18
  chat_message: list[History]
19
+ query: str
20
 
21
  app = FastAPI()
22
 
 
29
  )
30
 
31
  load_dotenv()
32
+ Settings.llm = Groq(temperature=0.8, model="llama-3.1-70b-versatile", api_key=os.getenv('GROQ_API_KEY'))
33
  Settings.embed_model = HuggingFaceEmbedding(model_name="OrdalieTech/Solon-embeddings-large-0.1")
34
+
35
  try:
36
+ storage_context = StorageContext.from_defaults(persist_dir='./storage')
37
  res_index = load_index_from_storage(storage_context)
38
  index_loaded = True
39
  except:
 
43
  print('index creation, please wait...')
44
  res_doc = SimpleDirectoryReader('./documents').load_data()
45
  res_index = VectorStoreIndex.from_documents(res_doc)
46
+ res_index.storage_context.persist(persist_dir='./storage')
47
  print('index creation completed')
48
 
49
+ prompt = (
50
+ "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. En début d'intervention, évite les exclamations ; en fin d'intervention, ne résume pas ce que tu viens de dire."
51
+ "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."
52
+ "Tes répliques doivent être courtes, et elles doivent être suffisamment claires pour que de jeunes élèves puissent les comprendre. Tes interventions sont cohérentes, bien construites et solidement argumentées. 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."
53
+ )
54
 
55
+ def get_chat_history(chat_messages):
56
+ chat_history = []
57
  for message in chat_messages:
58
+ msg = message.content.replace("{", "{{").replace("}", "}}")
59
+ chat_history.append(ChatMessage(content=msg, role=message.role))
60
+ return chat_history[-6:] # Limiter l'historique si nécessaire
 
61
 
62
  @app.get("/")
63
  def index():
64
+ return {"content": "Chatbot NSI"}
65
 
66
  @app.post('/request')
67
+ async def request_chat(req: Request):
68
+ chat_history = get_chat_history(req.chat_message)
69
+ query = req.query.replace("{", "{{").replace("}", "}}") # Échapper les accolades si nécessaire
70
+
71
  chat_engine = res_index.as_chat_engine(
72
  chat_mode="context",
73
+ system_prompt=prompt,
74
  )
75
+
76
+ # Réinitialiser et définir l'historique du chat
77
+ chat_engine.reset()
78
+ for msg in chat_history:
79
+ chat_engine.chat_history.append(msg)
80
+
81
+ # Lancer le chat avec la nouvelle requête
82
+ response = chat_engine.stream_chat(query)
83
+
84
+ async def event_generator():
85
+ try:
86
+ for msg in response.response_gen:
87
+ yield {'event': 'message', 'data': msg}
88
+ yield {'event': 'end', 'data': ''}
89
+ except Exception as e:
90
+ yield {'event': 'error', 'data': str(e)}
91
+
92
+ return EventSourceResponse(event_generator())
requirements.txt CHANGED
@@ -3,3 +3,4 @@ llama-index-embeddings-huggingface
3
  llama-index-llms-groq
4
  python-dotenv
5
  fastapi[all]
 
 
3
  llama-index-llms-groq
4
  python-dotenv
5
  fastapi[all]
6
+ sse_starlette