Commit a4ca9bd3 authored by salma's avatar salma

refactor agent service for easier scaling

parent 35fbd024
......@@ -11,7 +11,8 @@ class DIContainer:
from services import (
AudioService, ChatService, HealthService, ResponseService,
ResponseManager, OpenAIService, AgentService, ConnectionPool,
LanguageSegmentationService, DataIngestionService
LanguageSegmentationService, DataIngestionService, MCQService,
PGVectorService, ChatDatabaseService
)
self.config = AppConfig.from_env()
......@@ -29,7 +30,14 @@ class DIContainer:
port=int(os.getenv("DB_PORT"))
)
print(os.getenv("DB_HOST"), os.getenv("POSTGRES_DB"), os.getenv("POSTGRES_USER"))
self.agent_service = AgentService(pool_handler=self.pool_handler)
self.chat_db_service = ChatDatabaseService(self.pool_handler)
self.pgvector_service = PGVectorService(self.pool_handler)
self.agent_service = AgentService(
use_pgvector=True,
pgvector=self.pgvector_service,
db_service=self.chat_db_service
)
self.mcq_service = MCQService(self.pgvector_service, self.chat_db_service)
self.data_ingestion_service = DataIngestionService(pool_handler=self.pool_handler)
......
......@@ -31,7 +31,7 @@ async def create_quiz_room(
container = request.app.state.container
try:
quiz_questions = container.agent_service.get_dynamic_quiz(
quiz_questions = container.mcq_service.get_dynamic_quiz(
curriculum=curriculum, grade=grade, subject=subject,
unit=unit, concept=concept, is_arabic=is_arabic, count=count
)
......@@ -104,7 +104,7 @@ async def websocket_endpoint(websocket: WebSocket, room_id: str, student_id: str
try:
# 3. Update Participants in DB
logger.info(f"Fetching student info for {student_id}")
student_info = container.agent_service.db_service.get_student_info(student_id)
student_info = container.mcq_service.db_service.get_student_info(student_id)
student_name = student_info['student_name'] if student_info else "Unknown Student"
room_data = redis_client.hgetall(room_key)
......
......@@ -34,7 +34,7 @@ async def generate_mcqs_handler(
"""
container = request.app.state.container
try:
generated_questions = container.agent_service.generate_and_store_mcqs(
generated_questions = container.mcq_service.generate_and_store_mcqs(
curriculum=curriculum,
grade=grade,
subject=subject,
......@@ -72,7 +72,7 @@ async def get_mcqs_handler(
container = request.app.state.container
try:
# The service layer still returns the full objects from the DB
questions_from_db = container.agent_service.pgvector.get_mcqs(
questions_from_db = container.mcq_service.pgvector.get_mcqs(
curriculum=curriculum,
grade=grade,
subject=subject,
......@@ -109,7 +109,7 @@ async def get_dynamic_quiz_handler(
container = request.app.state.container
try:
# The service layer still returns the full objects
quiz_questions_full = container.agent_service.get_dynamic_quiz(
quiz_questions_full = container.mcq_service.get_dynamic_quiz(
curriculum=curriculum,
grade=grade,
subject=subject,
......@@ -171,29 +171,29 @@ async def grade_quiz_handler(submission: QuizSubmission):
@router.get("/quiz/options/curricula")
async def get_curricula_options(request: Request):
container = request.app.state.container
options = container.agent_service.pgvector.get_distinct_curricula_from_structure()
options = container.mcq_service.pgvector.get_distinct_curricula_from_structure()
return {"options": options}
@router.get("/quiz/options/grades")
async def get_grades_options(request: Request, curriculum: str):
container = request.app.state.container
options = container.agent_service.pgvector.get_distinct_grades_from_structure(curriculum)
options = container.mcq_service.pgvector.get_distinct_grades_from_structure(curriculum)
return {"options": options}
@router.get("/quiz/options/subjects")
async def get_subjects_options(request: Request, curriculum: str, grade: str):
container = request.app.state.container
options = container.agent_service.pgvector.get_distinct_subjects_from_structure(curriculum, grade)
options = container.mcq_service.pgvector.get_distinct_subjects_from_structure(curriculum, grade)
return {"options": options}
@router.get("/quiz/options/units")
async def get_units_options(request: Request, curriculum: str, grade: str, subject: str):
container = request.app.state.container
options = container.agent_service.pgvector.get_distinct_units_from_structure(curriculum, grade, subject)
options = container.mcq_service.pgvector.get_distinct_units_from_structure(curriculum, grade, subject)
return {"options": options}
@router.get("/quiz/options/concepts")
async def get_concepts_options(request: Request, curriculum: str, grade: str, subject: str, unit: str):
container = request.app.state.container
options = container.agent_service.pgvector.get_distinct_concepts_from_structure(curriculum, grade, subject, unit)
options = container.mcq_service.pgvector.get_distinct_concepts_from_structure(curriculum, grade, subject, unit)
return {"options": options}
\ No newline at end of file
......@@ -12,4 +12,5 @@ from .pedagogy_service import PedagogyService
from .segmentation_service import LanguageSegmentationService
from .data_ingestion_service import DataIngestionService
from .websocket_service import WebSocketManager
from .redis_client import redis_client, redis_listener, get_room_key, get_room_channel
\ No newline at end of file
from .redis_client import redis_client, redis_listener, get_room_key, get_room_channel
from .mcq_service import MCQService
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment