cp .env.example .env
Modificar las variables de ambiente en el archivo .env
segun corresponda.
Ver el archivo requirments.txt
.
- Para instalar los requerimientos ejecutar:
pip install -r requirements.txt
- Para actualizar el archivo de
requirments.txt
hacer:
pip freeze > requirements.txt
En este modulo se gestiona los datos de las materias (subjects
) y sus clases (lessons
) que son almacenados en una base de datos no relacional de Mongo DB.
Para ejecutar Mongo DB localmente, simplemente se debe:
- Instalar Mongo DB (Manual).
- (Opcional) Instalar la interfaz de usuario MongoDB Compass.
- Setear la variable de ambiente
MONGODB_URI
con el link de conexión correspondiente. Por defecto esmongodb://localhost:27017/
.
Para ejecutar Mongo DB en el servidor, se debe:
- Ir a Atlas MongoDB.
- Ingresar con su cuenta.
- Ingresar al proyecto Webir (se envio una invitación al proyecto). En este proyecto ya se creo un cluster que corre en AWS que se llama WebirDatabase.
- Conectar al cluster WebirDatabase usando Python Drivers, lo cual ya esta configurado. Simplemente se tiene que modificar la variable de ambiente
MONGODB_URI
con el connection string correspondiente. - Agregar la IP local actual para que permita la conexión satisfactoriamente.
Ver Network Access para otros tipos de conexiones (Por ejemplo para conectarse desde el colab).
Dentro del modulo data hay un submodulo models en los cuales se tiene dos modelos: SubjectModel
y LessonModel
.
Estos modelos cuentan con metodos para crear, actualizar, obtener por el id, obtener un item por el valor de algun atributo y obtener todos los items de la colección correspondiente.
Ejemplo:
from store.data.models.subjects import SubjectModel
from store.data.models.lessons import LessonModel
model = SubjectModel()
id = model.create("AGPI", "fklgdflgnlkdngkdfnglkdfngkdlfnxg")
print(f"ID {id}\n")
s = model.get(id)
print(f"Retrieved subject: {s}\n")
all = model.get_all()
print(f"All subjects: {all}\n")
lessons = LessonModel()
id1 = lessons.create(id, "Clase 1","url1", "videourl1")
id2 = lessons.create(id, "Clase 2","url2", "videourl2")
allS = lessons.get_all()
print(f"All lessons: {allS}\n")
s1 = lessons.get(id1)
print(f"Retrieved Lesson: {s1}\n")
lessons.update(id1, {"transcribed": True})
sTranscribed = lessons.get_by({"transcribed": False})
print(f"Retrieved Lesson Not Transcribed: {sTranscribed}\n")
swith_lessons = model.get(id, True)
print(f"Retrieved subject with lessons: {swith_lessons}\n")
Este modulo se encarga de transcribir las clases de las materias almacenadas en la base de datos de MongoDB. Actualmente se transcriben solo las clases de las materias definidas dentro del arreglo subjects en el archivo transcriptor/transcriptor.py
. Para ejecutar el transcriptor, se debe correr el siguiente comando:
python main.py transcriptor
Verificar MONGODB_URI para saber de donde está obteniendo la info (localhost o en el servidor de atlas).
Para ejecurar el scrapper se debe correr el siguiente comando:
python main.py scrapping
Verificar MONGODB_URI
para saber donde se esta guardando la info (localhost o en el servidor de atlas).
Se puede ejecutar el loader, desde la raiz del proyecto de las siguientes maneras:
- Llamando al script loader usando main.py
python main.py loader (--seed [path to folder with seeding data] | --drop)
- Ejecutando el script loader.py directamente como un modulo de python
python -m loader.loader (--seed [path to folder with seeding data] | --drop)
Note: se asume que el path_to_folder es relativo a donde se esta ejecutando el script.
Note: acordarse de agregar tu ip publica a la whitelist de ips en el cluster de mongo atlas (Ver Ejecutando MongoDB) al usar la funcionalidad seed dado que se conecta al mismo para recuperar los id de las clases transcritas.
Para ejecutar el backend, se debe correr el siguiente comando:
fastapi (run | dev) backend/api.py
Note: See FastAPI CLI docs
- Run the docker compose file to instantiate the mongo db
- Run the scrapper to load the mongo db
- Transcribe some lessons
- Merge the existing db with one with the new transcriptions
- Make the scrapper async.
- Make the backend async or multithreaded.
- Standarize logging usage.
- Standarize argparse usage.
- Define a config file for the project. toml or but in a way that the ide can autocomplete.
- Use a free LLM model
- Fine tune the model to enforce the answer style. Say theres no fonud info if it got no chunks
- (Interesante para jugar) "perform maximum inner product search instead of minimum Euclidean search. There is also limited support for other distances (L1, Linf, etc.)." faiss docs. osea que podriamos hacer algo divertido como responder lo mas opuesto a lo que se pregunta.
- Agregar el reranker. bge-m3 ver el bge-reranker en el link.
- Leer https://cookbook.openai.com/examples/whisper_processing_guide e implementar algun audio pre processing
- mypy
- ruff
- pylint
- pyupgrade
mongosh "mongodb://${MONGO_ROOT_USER}:${MONGO_ROOT_PASSWORD}@localhost:27017"
Current Mongosh Log ID: xxx
Connecting to: mongodb://<credentials>@localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.6
Using MongoDB: 7.0.11
Using Mongosh: 2.2.6
test> use admin
switched to db admin
admin> db.grantRolesToUser("admin", [{ role: "readWrite", db: "openfing" }])
{ ok: 1 }
admin>
admin> use openfing
switched to db openfing
openfing> show collections
lessons
subjects