diff --git a/README.md b/README.md
index 6c42fe7..e20479e 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,17 @@
-pip install llama-index
-pip install llama-index-llms-groq
-pip install llama-index-embeddings-huggingface
-pip install llama-parse
-pip install chromadb
-pip install llama-index-vector-stores-chroma
-pip install llama-index-embeddings-huggingface
-pip install python-fasthtml
-pip install grok
-pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
+El sistema funciona en un docker
+para generar:
+
+docker build -t supertutor-app .
+
+para ejecutar:
+
+docker run -it -p 7884:7884 --rm fastapi-app
+
+
+
+si tienes problemas con permisos:
+
+sudo chmod 666 /var/run/docker.sock
+
diff --git a/main.py b/main.py
index f433c60..42f42b7 100644
--- a/main.py
+++ b/main.py
@@ -12,7 +12,7 @@ from llama_index.core import Settings
#from llama_index.embeddings.huggingface_api import (
# HuggingFaceInferenceAPIEmbedding,
#)
-
+import shutil
import chromadb
import os
import threading
@@ -22,6 +22,9 @@ import json
#from llama_index.llms.ollama import Ollama
from llama_index.core.base.response.schema import Response
from groq import Groq
+from fastapi import File as FileFast
+from fastapi import UploadFile as UploadFileFast
+from fastapi import Form as FormFast
#import shutil
pwd = os.getcwd()
def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experiment_config.json"),dataOut="keyantrophics"):
@@ -78,9 +81,9 @@ def checkInfoSources(user:str):
subdir = [Option(file.name,value="static/"+user+"/"+file.name) for file in files if (file.is_dir() and file.name!="chroma_db") ]
userdata=user
- print("Cambio",userdata)
+
return Form(
- H3("Grupos de archivos",cls="col-xs-3"),
+ H3("Grupo de archivos",cls="col-xs-3"),
Select(
*subdir,name="data",cls="col-xs-3"),
Input(id="name-db", name="collection", placeholder="Enter a collection name",cls="col-xs-4"),
@@ -163,7 +166,7 @@ def loadCollection(data:str):
def queryPrompt(question:str):
#index=load_create_db(collection="my_collection")
- query_engine = index.as_query_engine(similarity_top_k=15,vector_store_query_mode="default",response_mode="tree_summarize")
+ query_engine = index.as_query_engine(similarity_top_k=5,vector_store_query_mode="default",response_mode="tree_summarize")
summary_prompt = (
"Por favor, genera un resumen completo y detallado del material dado. "
"Incluye los principales temas, argumentos y conclusiones. "
@@ -191,7 +194,7 @@ def queryPrompt(question:str):
response2 = query_engine.query(tematic_prompt)
response3 = query_engine.query(issues_prompt)
response4 = query_engine.query(Question_prompt)
- Output="
Summary
"+str(response)+"Tematic
"+str(response2)+"Issues
"+str(response3)+"Questions
"+str(response4)
+ Output="Resumen
"+str(response)+"Tematica
"+str(response2)+"Problemas
"+str(response3)+"Preguntas
"+str(response4)
return Output
@@ -238,10 +241,6 @@ Evaluate the coherence and accuracy of previous response to respond %s in this e
Verificate if previous context is related to the previous response, if not, say that you do not have information about that issue
The format of output is a json with keys 'coherencia', 'exactitud', 'relacion_con_el_contexto' and 'comentario' .
'coherencia', 'exactitud', 'relacion_con_el_contexto' are numeric variables with max value is 10"""%(response,ContextNodes,message)
-
-
-
- print(chat_engine.__dict__)
chat_completion = client.chat.completions.create(
#
@@ -302,7 +301,7 @@ def SummarySources():
return Form("Este es muy caro para documentos grandes y tarda mucho",
Select(
*subdir,name="data"),
- Input( name="query", placeholder="Enter a query"),
+ Input( name="query", placeholder="Dar una pregunta"),
Button("Submit",type="submit"), hx_post="/SummaryMake",hx_swap="innerHTML",hx_target="#summaryR" )
@app.post("/SummaryMake")
@@ -374,18 +373,18 @@ def home():
Div(Div(id="options",hx_target="this",hx_swap="outerHTML",hx_get="/listmodelactives",hx_trigger="click from:#buttonMenuuser delay:3s"),cls="col-xs-12"),
Div(Div(id="Infomodel"),cls="col-xs-12"),
#Div("Resumen",Div(id="summary",hx_target="this",hx_swap="outerHTML",hx_get="/SummarySources",hx_trigger="click from:#buttonMenuuser"),Div(id="summaryR")),
- Div(
+ Div(H3("Chat para preguntarle al material de estudios "),
Div(
Form(
- Input(id="question", name="message", placeholder="Enter a message"),
+ Input(id="question", name="message", placeholder="Dar una pregunta"),
Button("Submit",type="submit"), hx_post="/chatData",hx_swap="afterend",hx_target="#questionR" ),
Div(id="questionR")
,id="questions"),
cls="col-xs-6"),
- Div(
+ Div(H3("Este genera informacion general del material, pero es intensivo en unso del api. No USAR."),
Div(
Form(
- Input(id="query", name="question", placeholder="Enter a query"),
+ Input(id="query", name="question", placeholder="Dar una pregunta"),
Button("Submit",type="submit"), hx_post="/queryprompt",hx_swap="innerHTML",hx_target="#queryR" ),
Div(id="queryR"),
id="query"),
@@ -394,14 +393,71 @@ def home():
))
return page
-# @app.post("/upload")
-# def upload(data: UploadFile = File(...),user : str = Form(...), dir: str = Form(...)):
-# filename="static/"+user+dir+data.filename
+@app.get("/fileup")
+def fileup():
+ return Div(
+ P('Upload data Super tutor'),
+ Div(H2("Subir Archivos"),Form(
+ Input(type='file', name='file',cls="col-xs-3"),
+ Input( name='dir',placeholder="Enter a directory",cls="col-xs-2"),
+ Input( name='user',placeholder="Enter a user",cls="col-xs-2"),
+ Button('Upload', type='submit',cls="col-xs-4"),
+ hx_post="/upload",
+ hx_target="#info",
+ hx_swap="innerHTML",
+ enctype="multipart/form-data",
+ ),cls="col-xs-12"),
+ Div(H2("Crear Usuario"),Form(
+ Input( name='user',placeholder="Enter a user",cls="col-xs-7"),
+ Button('Upload', type='submit',cls="col-xs-5"),
+ hx_post="/createuser",
+ hx_target="#info",
+ hx_swap="innerHTML",
+ enctype="multipart/form-data",
+ ),cls="col-xs-12"),
+ Div(H2("Crear grupo de Archivos"),Form(
+ Input( name='dir',placeholder="Enter a directory",cls="col-xs-4"),
+ Input( name='user',placeholder="Enter a user",cls="col-xs-3"),
+ Button('Upload', type='submit',cls="col-xs-5"),
+ hx_post="/creategroup",
+ hx_target="#info",
+ hx_swap="innerHTML",
+ enctype="multipart/form-data",
+ ),cls="col-xs-12"),
+ Div(id="info")
-# with open(f"{filename}", "wb") as buffer:
-# shutil.copyfileobj(data.file, buffer)
-# app.mount("/static", StaticFiles(directory="static"), name="static")
+ )
+
+
+@app.post("/upload")
+def upload(file: UploadFile,dir : str = Form(...),user : str = Form(...)):
+ filenameB="static/"+user+"/"+dir+"/"+file.filename
+ pathB="static/"+user+"/"+dir
+ if not os.path.exists(pathB):
+ os.makedirs(pathB)
+ if not os.path.exists(filenameB):
+ with open(f"{filenameB}", "wb") as buffer:
+ shutil.copyfileobj(file.file, buffer)
+ return P("Se ha subido %s"%(filenameB))
+
+
+@app.post("/createuser")
+def createuser(user : str = Form(...)):
+ pathB="static/"+user
+ if not os.path.exists(pathB):
+ os.makedirs(pathB)
+ return P("Se ha creado %s"%(pathB))
+
+@app.post("/creategroup")
+def createuser(user : str = Form(...),dir : str = Form(...)):
+ pathB="static/"+user+"/"+dir
+ if not os.path.exists(pathB):
+ os.makedirs(pathB)
+ return P("Se ha creado %s"%(pathB))
+
+
+app.mount("/static", StaticFiles(directory="static"), name="static")
diff --git a/run.sh b/run.sh
new file mode 100644
index 0000000..99bb188
--- /dev/null
+++ b/run.sh
@@ -0,0 +1 @@
+docker run -it -p 7884:7884 --rm fastapi-app
\ No newline at end of file
diff --git a/static/Ricardo/PCL/dockerfile b/static/Ricardo/PCL/dockerfile
new file mode 100644
index 0000000..7731bf1
--- /dev/null
+++ b/static/Ricardo/PCL/dockerfile
@@ -0,0 +1,21 @@
+# Usar una imagen base de Python
+FROM python:3.11.10-bookworm
+# Establecer el directorio de trabajo en el contenedor
+WORKDIR /app
+
+# Copiar el archivo requirements.txt y otros archivos necesarios
+COPY requirements.txt ./
+
+# Instalar las dependencias de Python
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copiar todo el código de la aplicación al contenedor
+COPY . .
+
+# Expone el puerto que usará Uvicorn
+EXPOSE 7884
+
+# Especificar el comando
+
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7884", "--reload"]
+