dav74 commited on
Commit
7872af4
1 Parent(s): 4829d75

Upload 9 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
2
+ # you will also find guides on how best to write your Dockerfile
3
+
4
+ FROM python:3.12
5
+
6
+ RUN useradd -m -u 1000 user
7
+ USER user
8
+ ENV PATH="/home/user/.local/bin:$PATH"
9
+
10
+ WORKDIR /app
11
+
12
+ COPY --chown=user ./requirements.txt requirements.txt
13
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
14
+
15
+ COPY --chown=user . /app
16
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
main.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ import os
3
+ from llama_index.core import VectorStoreIndex, StorageContext, SimpleDirectoryReader, load_index_from_storage
4
+ from llama_index.embeddings.huggingface import HuggingFaceEmbedding
5
+ from llama_index.llms.groq import Groq
6
+ from llama_index.core import Settings
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
14
+ content: str
15
+
16
+ class Request(BaseModel):
17
+ chat_message: list[History]
18
+ query : str
19
+
20
+ app = FastAPI()
21
+
22
+ app.add_middleware(
23
+ CORSMiddleware,
24
+ allow_origins=["*"],
25
+ allow_credentials=True,
26
+ allow_methods=["*"],
27
+ allow_headers=["*"],
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:
38
+ index_loaded = False
39
+
40
+ 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 es un assistant spécialisé dans l'enseignement de la spécialité Numérique et sciences informatiques en classe de première et de terminal"
49
+ 'Tu as un bon niveau en langage Python'
50
+ 'Ton interlocuteur est un élève qui suit la spécialité nsi en première et en terminale'
51
+ 'Tu dois uniquement répondre aux questions qui concernent la spécialité numérique et sciences informatiques'
52
+ "Tu ne dois pas faire d'erreur, répond à la question uniquement si tu es sûr de ta réponse"
53
+ "si tu ne trouves pas la réponse à une question, tu réponds que tu ne connais pas la réponse et que l'élève doit s'adresser à son professeur pour obtenir cette réponse"
54
+ "Tu dois uniquement aborder des notions qui sont aux programmes de la spécialité numérique et sciences informatiques (première et terminale), tu ne dois jamais aborder une notion qui n'est pas au programme"
55
+ "si l'élève n'arrive pas à trouver la réponse à un exercice, tu ne dois pas lui donner tout de suite la réponse, mais seulement lui donner des indications pour lui permettre de trouver la réponse par lui même"
56
+ "Tu peux lui donner la réponse à un exercice uniquement si l'élève te demande explicitement cette réponse"
57
+ 'Tu dois uniquement répondre en langue française'
58
+ 'Tu dois utiliser le format markdown pour tes réponses'
59
+ )
60
+
61
+ def get_chat_history(chat_messages):
62
+ chat_history = []
63
+ for message in chat_messages:
64
+ chat_history.append(ChatMessage(content=message.content, role=message.role))
65
+ return chat_history[-4:]
66
+
67
+ @app.post('/request')
68
+ def request(req: Request):
69
+ chat_engine = res_index.as_chat_engine(
70
+ chat_mode="context",
71
+ system_prompt = prompt,
72
+ )
73
+ chat_history = get_chat_history(req.chat_message)
74
+ response = chat_engine.chat(req.query, chat_history=chat_history)
75
+ return {"response":response.response}
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ llama-index
2
+ llama-index-embeddings-huggingface
3
+ llama-index-llms-groq
4
+ python-dotenv
5
+ fastapi[all]
storage/.DS_Store ADDED
Binary file (6.15 kB). View file
 
storage/default__vector_store.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:45f7903bf60f86c9c8dcf4da59ddbc6f83a0f645e158cbb83b9ca285ce7b6398
3
+ size 20178414
storage/docstore.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:87f0d5c125c2840ee1a973f62df96494dc5b4c51ec02296120fe29b9fbc5358b
3
+ size 2338305
storage/graph_store.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8e0a77744010862225c69da83c585f4f8a42fd551b044ce530dbb1eb6e16742c
3
+ size 18
storage/image__vector_store.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d17ed74c1649a438e518a8dc56a7772913dfe1ea7a7605bce069c63872431455
3
+ size 72
storage/index_store.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:defbf731237653d190c59c3701d7d5391be8ba37cfd6bf46f01dedaf4b3e92da
3
+ size 73075