Commit a4ca9bd3 authored by salma's avatar salma

refactor agent service for easier scaling

parent 35fbd024
...@@ -11,7 +11,8 @@ class DIContainer: ...@@ -11,7 +11,8 @@ class DIContainer:
from services import ( from services import (
AudioService, ChatService, HealthService, ResponseService, AudioService, ChatService, HealthService, ResponseService,
ResponseManager, OpenAIService, AgentService, ConnectionPool, ResponseManager, OpenAIService, AgentService, ConnectionPool,
LanguageSegmentationService, DataIngestionService LanguageSegmentationService, DataIngestionService, MCQService,
PGVectorService, ChatDatabaseService
) )
self.config = AppConfig.from_env() self.config = AppConfig.from_env()
...@@ -29,7 +30,14 @@ class DIContainer: ...@@ -29,7 +30,14 @@ class DIContainer:
port=int(os.getenv("DB_PORT")) port=int(os.getenv("DB_PORT"))
) )
print(os.getenv("DB_HOST"), os.getenv("POSTGRES_DB"), os.getenv("POSTGRES_USER")) 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) self.data_ingestion_service = DataIngestionService(pool_handler=self.pool_handler)
......
...@@ -31,7 +31,7 @@ async def create_quiz_room( ...@@ -31,7 +31,7 @@ async def create_quiz_room(
container = request.app.state.container container = request.app.state.container
try: try:
quiz_questions = container.agent_service.get_dynamic_quiz( quiz_questions = container.mcq_service.get_dynamic_quiz(
curriculum=curriculum, grade=grade, subject=subject, curriculum=curriculum, grade=grade, subject=subject,
unit=unit, concept=concept, is_arabic=is_arabic, count=count 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 ...@@ -104,7 +104,7 @@ async def websocket_endpoint(websocket: WebSocket, room_id: str, student_id: str
try: try:
# 3. Update Participants in DB # 3. Update Participants in DB
logger.info(f"Fetching student info for {student_id}") 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" student_name = student_info['student_name'] if student_info else "Unknown Student"
room_data = redis_client.hgetall(room_key) room_data = redis_client.hgetall(room_key)
......
...@@ -34,7 +34,7 @@ async def generate_mcqs_handler( ...@@ -34,7 +34,7 @@ async def generate_mcqs_handler(
""" """
container = request.app.state.container container = request.app.state.container
try: try:
generated_questions = container.agent_service.generate_and_store_mcqs( generated_questions = container.mcq_service.generate_and_store_mcqs(
curriculum=curriculum, curriculum=curriculum,
grade=grade, grade=grade,
subject=subject, subject=subject,
...@@ -72,7 +72,7 @@ async def get_mcqs_handler( ...@@ -72,7 +72,7 @@ async def get_mcqs_handler(
container = request.app.state.container container = request.app.state.container
try: try:
# The service layer still returns the full objects from the DB # 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, curriculum=curriculum,
grade=grade, grade=grade,
subject=subject, subject=subject,
...@@ -109,7 +109,7 @@ async def get_dynamic_quiz_handler( ...@@ -109,7 +109,7 @@ async def get_dynamic_quiz_handler(
container = request.app.state.container container = request.app.state.container
try: try:
# The service layer still returns the full objects # 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, curriculum=curriculum,
grade=grade, grade=grade,
subject=subject, subject=subject,
...@@ -171,29 +171,29 @@ async def grade_quiz_handler(submission: QuizSubmission): ...@@ -171,29 +171,29 @@ async def grade_quiz_handler(submission: QuizSubmission):
@router.get("/quiz/options/curricula") @router.get("/quiz/options/curricula")
async def get_curricula_options(request: Request): async def get_curricula_options(request: Request):
container = request.app.state.container 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} return {"options": options}
@router.get("/quiz/options/grades") @router.get("/quiz/options/grades")
async def get_grades_options(request: Request, curriculum: str): async def get_grades_options(request: Request, curriculum: str):
container = request.app.state.container 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} return {"options": options}
@router.get("/quiz/options/subjects") @router.get("/quiz/options/subjects")
async def get_subjects_options(request: Request, curriculum: str, grade: str): async def get_subjects_options(request: Request, curriculum: str, grade: str):
container = request.app.state.container 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} return {"options": options}
@router.get("/quiz/options/units") @router.get("/quiz/options/units")
async def get_units_options(request: Request, curriculum: str, grade: str, subject: str): async def get_units_options(request: Request, curriculum: str, grade: str, subject: str):
container = request.app.state.container 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} return {"options": options}
@router.get("/quiz/options/concepts") @router.get("/quiz/options/concepts")
async def get_concepts_options(request: Request, curriculum: str, grade: str, subject: str, unit: str): async def get_concepts_options(request: Request, curriculum: str, grade: str, subject: str, unit: str):
container = request.app.state.container 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} return {"options": options}
\ No newline at end of file
...@@ -13,3 +13,4 @@ from .segmentation_service import LanguageSegmentationService ...@@ -13,3 +13,4 @@ from .segmentation_service import LanguageSegmentationService
from .data_ingestion_service import DataIngestionService from .data_ingestion_service import DataIngestionService
from .websocket_service import WebSocketManager from .websocket_service import WebSocketManager
from .redis_client import redis_client, redis_listener, get_room_key, get_room_channel 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