Spaces:
Sleeping
Sleeping
Upload 9 files
Browse files- Dockerfile +16 -0
- main.py +75 -0
- requirements.txt +5 -0
- storage/.DS_Store +0 -0
- storage/default__vector_store.json +3 -0
- storage/docstore.json +3 -0
- storage/graph_store.json +3 -0
- storage/image__vector_store.json +3 -0
- storage/index_store.json +3 -0
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
|