Updated failing tests

This commit is contained in:
Viswamedha Nalabotu 2026-03-18 23:17:28 +00:00
parent fc9ba3396a
commit 4789727693
3 changed files with 122 additions and 2 deletions

View file

@ -1,3 +1,5 @@
from unittest.mock import patch
from django.contrib.auth import get_user_model
from django.core.files.uploadedfile import SimpleUploadedFile
from django.db.models.signals import post_save
@ -102,7 +104,8 @@ class KnowledgeApiTests(TestCase):
)
self.assertIn(response.status_code, (HTTP_200_OK, HTTP_400_BAD_REQUEST))
def test_training_file_destroy_path(self):
@patch('apps.knowledge.viewsets.update_agent_prompts_from_file_task')
def test_training_file_destroy_path(self, mock_task):
self.client.force_authenticate(self.owner)
response = self.client.delete(f'/api/training-file/{self.training_file.uuid}/')
self.assertEqual(response.status_code, HTTP_204_NO_CONTENT)
@ -166,7 +169,8 @@ class KnowledgeApiTests(TestCase):
response = self.client.delete(f'/api/training-file/{self.training_file.uuid}/')
self.assertEqual(response.status_code, HTTP_403_FORBIDDEN)
def test_training_file_destroy_allowed_for_org_manager_member(self):
@patch('apps.knowledge.viewsets.update_agent_prompts_from_file_task')
def test_training_file_destroy_allowed_for_org_manager_member(self, mock_task):
manager_member = User.objects.create_user(
email_address='manager-member-k@example.com',
password='pass1234',

View file

@ -48,6 +48,7 @@ class OnboardingApiTests(TestCase):
self.session = OnboardingSession.objects.create(
user=self.member,
role=self.role,
flow=self.flow,
state={'progress': 10},
active_configs={},
)

View file

@ -159,6 +159,16 @@ class OnboardingFlowViewSet(RequestParamMixin, ModelViewSet):
session = OnboardingSession.objects.filter(user=request.user, role=flow.role, flow=flow).first()
if not session:
session = OnboardingSession.objects.filter(user=request.user, role=flow.role).first()
if session:
state = session.state or {}
state['flow_uuid'] = str(flow.uuid)
session.flow = flow
session.state = state
session.save(update_fields=['flow', 'state', 'updated_at'])
serializer = OnboardingSessionSerializer(session)
return Response(serializer.data, status=HTTP_200_OK)
session = OnboardingSession.objects.create(
user=request.user,
role=flow.role,
@ -751,6 +761,111 @@ class OnboardingSessionViewSet(RequestParamMixin, ModelViewSet):
return quiz_result, None
def _call_ka(self, session, page, message):
config = self._get_agent_config(session, 'knowledge')
system_prompt = self._build_system_prompt(config)
page_body = str(page.get('body') or '') if isinstance(page, dict) else ''
page_title = str(page.get('title') or '') if isinstance(page, dict) else ''
context = f"Page: {page_title}\n\n{page_body}" if page_body else page_title
prompt = f"Context:\n{context}\n\nQuestion: {message}"
try:
with httpx.Client(timeout=60.0) as client:
model_id = (config.llm_config or {}).get('model_id', 'meta-llama-3.1-8b') if config else 'meta-llama-3.1-8b'
response = client.post(
settings.INFERENCE_CHAT_COMPLETIONS_ENDPOINT,
json={
'model': model_id,
'messages': [
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': prompt},
],
'max_tokens': 512,
},
)
response.raise_for_status()
return response.json().get('choices', [{}])[0].get('message', {}).get('content', '') or 'No answer available.'
except Exception:
return 'Knowledge agent is temporarily unavailable. Please try again later.'
def _run_ka_page_revision(self, session, page, message):
config = self._get_agent_config(session, 'knowledge')
system_prompt = self._build_system_prompt(config)
page_body = str(page.get('body') or '') if isinstance(page, dict) else ''
page_title = str(page.get('title') or '') if isinstance(page, dict) else ''
prompt = (
f"You are revising onboarding page content to incorporate a learner's clarification request.\n\n"
f"Page Title: {page_title}\n"
f"Original Body:\n{page_body}\n\n"
f"Learner's request: {message}\n\n"
f"Rewrite the page body to address the learner's request while preserving the original content structure. "
f"Return only the revised page body."
)
try:
with httpx.Client(timeout=60.0) as client:
model_id = (config.llm_config or {}).get('model_id', 'meta-llama-3.1-8b') if config else 'meta-llama-3.1-8b'
response = client.post(
settings.INFERENCE_CHAT_COMPLETIONS_ENDPOINT,
json={
'model': model_id,
'messages': [
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': prompt},
],
'max_tokens': 1024,
},
)
response.raise_for_status()
return response.json().get('choices', [{}])[0].get('message', {}).get('content', '') or page_body
except Exception:
return page_body
@action(detail=True, methods=['post'], url_path='ask-ka')
def ask_ka(self, request, uuid=None):
session = self.get_object()
page_uuid = request.data.get('page_uuid')
message = request.data.get('message')
mode = request.data.get('mode', 'separate')
if not page_uuid or not message:
return Response({'error': 'page_uuid and message are required.'}, status=HTTP_400_BAD_REQUEST)
flow = self._get_flow_for_session(session)
page = None
if flow:
page, _ = self._get_page_from_flow(flow, page_uuid)
if mode == 'update_page':
revised_body = self._run_ka_page_revision(session, page, message)
state = session.state or {}
overrides = state.get('page_overrides', {})
if not isinstance(overrides, dict):
overrides = {}
overrides[str(page_uuid)] = revised_body
state['page_overrides'] = overrides
session.state = state
session.save(update_fields=['state', 'updated_at'])
return Response({
'status': 'ok',
'updated_page': True,
'revised_page_body': revised_body,
'session_state': session.state,
})
answer = self._call_ka(session, page, message)
state = session.state or {}
page_help = state.get('page_help', {})
if not isinstance(page_help, dict):
page_help = {}
page_help[str(page_uuid)] = answer
state['page_help'] = page_help
session.state = state
session.save(update_fields=['state', 'updated_at'])
return Response({
'status': 'ok',
'answer': answer,
'session_state': session.state,
})
@action(detail=True, methods=['post'], url_path='interact')
def interact(self, request, uuid=None):
session = self.get_object()