From 566e338a9d24231b76fb81b01ac543800fbf288f Mon Sep 17 00:00:00 2001 From: spandan_mondal Date: Mon, 3 Mar 2025 14:04:52 +0530 Subject: [PATCH 1/3] added support for custom body text for whatsapp converter button button --- kairon/chat/converters/channels/whatsapp.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kairon/chat/converters/channels/whatsapp.py b/kairon/chat/converters/channels/whatsapp.py index 1cd9135b8..1abbe35f2 100644 --- a/kairon/chat/converters/channels/whatsapp.py +++ b/kairon/chat/converters/channels/whatsapp.py @@ -71,6 +71,8 @@ def button_transformer(self, message): body_default = ElementTransformerOps.getChannelConfig(self.channel, "body_message") body_msg = {"text": body_default} for item in jsoniterator: + if item.get("type") == 'label': + body_msg = {"text": item.get("text")} if item.get("type") == ElementTypes.BUTTON.value: title = ElementTransformerOps.json_generator(item.get("children")) for titletext in title: From da5547f7d21699e82abf9fe4d43f8b91e09b7e87 Mon Sep 17 00:00:00 2001 From: spandan_mondal Date: Mon, 3 Mar 2025 15:09:01 +0530 Subject: [PATCH 2/3] context for the prompt action log --- kairon/shared/llm/processor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kairon/shared/llm/processor.py b/kairon/shared/llm/processor.py index 5961cef95..26cc541d0 100644 --- a/kairon/shared/llm/processor.py +++ b/kairon/shared/llm/processor.py @@ -130,7 +130,7 @@ async def predict(self, query: Text, user, *args, **kwargs) -> Tuple: context = await self.__attach_similarity_prompt_if_enabled(query_embedding, context_prompt, **kwargs) answer = await self.__get_answer(query, system_prompt, context, user, invocation=invocation,llm_type = llm_type, **kwargs) - response = {"content": answer} + response = {"content": answer, "context": context} except Exception as e: logging.exception(e) if embeddings_created: From 2a628dd5c5bf310b351957e54eae61db781a1ff2 Mon Sep 17 00:00:00 2001 From: spandan_mondal Date: Mon, 3 Mar 2025 15:53:26 +0530 Subject: [PATCH 3/3] fixed corresponding tests --- tests/integration_test/action_service_test.py | 7 +++++++ tests/unit_test/llm_test.py | 5 ----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/integration_test/action_service_test.py b/tests/integration_test/action_service_test.py index e5d0b42e8..cd36234b4 100644 --- a/tests/integration_test/action_service_test.py +++ b/tests/integration_test/action_service_test.py @@ -13623,6 +13623,8 @@ def test_prompt_action_dispatch_response_disabled(mock_get_embedding, aiorespons for event in events: if event.get('time_elapsed') is not None: del event['time_elapsed'] + if event.get('llm_response_log'): + event['llm_response_log'].pop('context') assert events == [ {'type': 'llm_response', 'response': 'Python is dynamically typed, garbage-collected, high level, general purpose programming.', @@ -13754,6 +13756,8 @@ def test_prompt_action_set_slots(mock_slot_set, mock_get_embedding, aioresponses for event in events: if event.get('time_elapsed') is not None: del event['time_elapsed'] + if event.get('llm_response_log'): + event['llm_response_log'].pop('context') assert events == [ {'type': 'llm_response', 'response': '{"api_type": "filter", {"filter": {"must": [{"key": "Date Added", "match": {"value": 1673721000.0}}]}}}', @@ -13902,9 +13906,12 @@ def test_prompt_action_response_action_slot_prompt(mock_get_embedding, aiorespon assert log["time_elapsed"] log.pop('time_elapsed') events = log.pop('events') + assert len(events[0]['llm_response_log']['context']) > 0 for event in events: if event.get('time_elapsed') is not None: del event['time_elapsed'] + if event.get('llm_response_log'): + event['llm_response_log'].pop('context') assert events == [ {'type': 'llm_response', 'response': 'Python is dynamically typed, garbage-collected, high level, general purpose programming.', diff --git a/tests/unit_test/llm_test.py b/tests/unit_test/llm_test.py index 288d94565..7909c551b 100644 --- a/tests/unit_test/llm_test.py +++ b/tests/unit_test/llm_test.py @@ -6,10 +6,7 @@ import numpy as np import pytest -import ujson as json -from absl.logging import exception from aiohttp import ClientConnectionError -from fastapi.dependencies.utils import request_body_to_args from mongoengine import connect from kairon.shared.rest_client import AioRestClient @@ -17,12 +14,10 @@ from kairon.exceptions import AppException -from kairon.shared.admin.constants import BotSecretType from kairon.shared.admin.data_objects import BotSecrets, LLMSecret from kairon.shared.cognition.data_objects import CognitionData, CognitionSchema from kairon.shared.data.constant import DEFAULT_SYSTEM_PROMPT, DEFAULT_LLM from kairon.shared.llm.processor import LLMProcessor -import litellm from deepdiff import DeepDiff