Skip to content

Commit c3a4eb5

Browse files
authored
Add additional logs and stop using root logger (#641)
* Add additional logs and stop using root logger Required by #637 * Add test to increase coverage
1 parent a81251b commit c3a4eb5

File tree

15 files changed

+75
-21
lines changed

15 files changed

+75
-21
lines changed

code/backend/batch/AddURLEmbeddings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010

1111
bp_add_url_embeddings = func.Blueprint()
1212

13+
logger = logging.getLogger(__name__)
14+
1315

1416
@bp_add_url_embeddings.route(route="AddURLEmbeddings")
1517
def add_url_embeddings(req: func.HttpRequest) -> func.HttpResponse:
16-
logging.info("Python HTTP trigger function processed a request.")
18+
logger.info("Python HTTP trigger function processed a request.")
1719
# Get Url from request
1820
url = req.params.get("url")
1921
if not url:

code/backend/batch/BatchPushResults.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
bp_batch_push_results = func.Blueprint()
1414

15+
logger = logging.getLogger(__name__)
16+
1517

1618
def _get_file_name_from_message(msg: func.QueueMessage) -> str:
1719
message_body = json.loads(msg.get_body().decode("utf-8"))
@@ -27,7 +29,7 @@ def _get_file_name_from_message(msg: func.QueueMessage) -> str:
2729
arg_name="msg", queue_name="doc-processing", connection="AzureWebJobsStorage"
2830
)
2931
def batch_push_results(msg: func.QueueMessage) -> None:
30-
logging.info(
32+
logger.info(
3133
"Python queue trigger function processed a queue item: %s",
3234
msg.get_body().decode("utf-8"),
3335
)

code/backend/batch/BatchStartProcessing.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
bp_batch_start_processing = func.Blueprint()
1313
env_helper: EnvHelper = EnvHelper()
1414

15+
logger = logging.getLogger(__name__)
16+
1517

1618
@bp_batch_start_processing.route(route="BatchStartProcessing")
1719
def batch_start_processing(req: func.HttpRequest) -> func.HttpResponse:
18-
logging.info("Requested to start processing all documents received")
20+
logger.info("Requested to start processing all documents received")
1921
# Set up Blob Storage Client
2022
azure_blob_storage_client = AzureBlobStorageClient()
2123
# Get all files from Blob Storage

code/backend/batch/GetConversationResponse.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
bp_get_conversation_response = func.Blueprint()
1111
env_helper: EnvHelper = EnvHelper()
1212

13+
logger = logging.getLogger(__name__)
14+
1315

1416
@bp_get_conversation_response.route(route="GetConversationResponse")
1517
def get_conversation_response(req: func.HttpRequest) -> func.HttpResponse:
16-
logging.info("Python HTTP trigger function processed a request.")
18+
logger.info("Python HTTP trigger function processed a request.")
1719

1820
message_orchestrator = Orchestrator()
1921

@@ -55,5 +57,5 @@ def get_conversation_response(req: func.HttpRequest) -> func.HttpResponse:
5557
return func.HttpResponse(json.dumps(response_obj), status_code=200)
5658

5759
except Exception as e:
58-
logging.exception("Exception in /api/GetConversationResponse")
60+
logger.exception("Exception in /api/GetConversationResponse")
5961
return func.HttpResponse(json.dumps({"error": str(e)}), status_code=500)

code/backend/batch/utilities/helpers/DocumentProcessorHelper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ def process(self, source_url: str, processors: List[Processor]):
3737
]
3838
return vector_store.add_documents(documents=documents, keys=keys)
3939
except Exception as e:
40-
logging.error(f"Error adding embeddings for {source_url}: {e}")
40+
logger.error(f"Error adding embeddings for {source_url}: {e}")
4141
raise e

code/backend/batch/utilities/helpers/EnvHelper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def get_env_var_bool(self, var_name: str, default: str = "True") -> bool:
178178
def check_env():
179179
for attr, value in EnvHelper().__dict__.items():
180180
if value == "":
181-
logging.warning(f"{attr} is not set in the environment variables.")
181+
logger.warning(f"{attr} is not set in the environment variables.")
182182

183183

184184
class SecretHelper:

code/backend/batch/utilities/orchestrator/LangChainAgent.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from typing import List
23
from langchain.agents import Tool
34
from langchain.memory import ConversationBufferMemory
@@ -14,6 +15,8 @@
1415
from ..parser.OutputParserTool import OutputParserTool
1516
from ..common.Answer import Answer
1617

18+
logger = logging.getLogger(__name__)
19+
1720

1821
class LangChainAgent(OrchestratorBase):
1922
def __init__(self) -> None:
@@ -57,12 +60,14 @@ def orchestrate(
5760

5861
# Call Content Safety tool
5962
if self.config.prompts.enable_content_safety:
63+
logger.debug("Calling content safety with question")
6064
filtered_user_message = (
6165
self.content_safety_checker.validate_input_and_replace_if_harmful(
6266
user_message
6367
)
6468
)
6569
if user_message != filtered_user_message:
70+
logger.warning("Content safety detected harmful content in question")
6671
messages = output_formatter.parse(
6772
question=user_message,
6873
answer=filtered_user_message,
@@ -115,6 +120,7 @@ def orchestrate(
115120
answer = Answer(question=user_message, answer=answer)
116121

117122
if self.config.prompts.enable_post_answering_prompt:
123+
logger.debug("Running post answering prompt")
118124
post_prompt_tool = PostPromptTool()
119125
answer = post_prompt_tool.validate_answer(answer)
120126
self.log_tokens(
@@ -124,12 +130,14 @@ def orchestrate(
124130

125131
# Call Content Safety tool
126132
if self.config.prompts.enable_content_safety:
133+
logger.debug("Calling content safety with answer")
127134
filtered_answer = (
128135
self.content_safety_checker.validate_output_and_replace_if_harmful(
129136
answer.answer
130137
)
131138
)
132139
if answer.answer != filtered_answer:
140+
logger.warning("Content safety detected harmful content in answer")
133141
messages = output_formatter.parse(
134142
question=user_message, answer=filtered_answer, source_documents=[]
135143
)

code/backend/batch/utilities/orchestrator/OpenAIFunctions.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from typing import List
23
import json
34

@@ -10,6 +11,8 @@
1011
from ..parser.OutputParserTool import OutputParserTool
1112
from ..common.Answer import Answer
1213

14+
logger = logging.getLogger(__name__)
15+
1316

1417
class OpenAIFunctionsOrchestrator(OrchestratorBase):
1518
def __init__(self) -> None:
@@ -57,12 +60,14 @@ def orchestrate(
5760

5861
# Call Content Safety tool
5962
if self.config.prompts.enable_content_safety:
63+
logger.debug("Calling content safety with question")
6064
filtered_user_message = (
6165
self.content_safety_checker.validate_input_and_replace_if_harmful(
6266
user_message
6367
)
6468
)
6569
if user_message != filtered_user_message:
70+
logger.warning("Content safety detected harmful content in question")
6671
messages = output_formatter.parse(
6772
question=user_message,
6873
answer=filtered_user_message,
@@ -95,7 +100,9 @@ def orchestrate(
95100
# TODO: call content safety if needed
96101

97102
if result.choices[0].finish_reason == "function_call":
103+
logger.info("Function call detected")
98104
if result.choices[0].message.function_call.name == "search_documents":
105+
logger.info("search_documents function detected")
99106
question = json.loads(
100107
result.choices[0].message.function_call.arguments
101108
)["question"]
@@ -110,13 +117,15 @@ def orchestrate(
110117

111118
# Run post prompt if needed
112119
if self.config.prompts.enable_post_answering_prompt:
120+
logger.debug("Running post answering prompt")
113121
post_prompt_tool = PostPromptTool()
114122
answer = post_prompt_tool.validate_answer(answer)
115123
self.log_tokens(
116124
prompt_tokens=answer.prompt_tokens,
117125
completion_tokens=answer.completion_tokens,
118126
)
119127
elif result.choices[0].message.function_call.name == "text_processing":
128+
logger.info("text_processing function detected")
120129
text = json.loads(result.choices[0].message.function_call.arguments)[
121130
"text"
122131
]
@@ -132,17 +141,20 @@ def orchestrate(
132141
completion_tokens=answer.completion_tokens,
133142
)
134143
else:
144+
logger.info("No function call detected")
135145
text = result.choices[0].message.content
136146
answer = Answer(question=user_message, answer=text)
137147

138148
# Call Content Safety tool
139149
if self.config.prompts.enable_content_safety:
150+
logger.debug("Calling content safety with answer")
140151
filtered_answer = (
141152
self.content_safety_checker.validate_output_and_replace_if_harmful(
142153
answer.answer
143154
)
144155
)
145156
if answer.answer != filtered_answer:
157+
logger.warning("Content safety detected harmful content in answer")
146158
messages = output_formatter.parse(
147159
question=user_message, answer=filtered_answer, source_documents=[]
148160
)

code/backend/batch/utilities/parser/OutputParserTool.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from .ParserBase import ParserBase
66
from ..common.SourceDocument import SourceDocument
77

8+
logger = logging.getLogger(__name__)
9+
810

911
class OutputParserTool(ParserBase):
1012
def __init__(self) -> None:
@@ -55,7 +57,7 @@ def parse(
5557
idx = i - 1
5658

5759
if idx >= len(source_documents):
58-
logging.warning(f"Source document {i} not provided, skipping doc")
60+
logger.warning(f"Source document {i} not provided, skipping doc")
5961
continue
6062

6163
doc = source_documents[idx]

code/create_app.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
from backend.batch.utilities.helpers.EnvHelper import EnvHelper
1111

1212

13+
logger = logging.getLogger(__name__)
14+
15+
1316
def prepare_body_headers_with_data(request, env_helper: EnvHelper):
1417
request_messages = request.json["messages"]
1518

@@ -320,7 +323,7 @@ def conversation_azure_byod():
320323
return conversation_without_data(request, env_helper)
321324
except Exception as e:
322325
errorMessage = str(e)
323-
logging.exception(
326+
logger.exception(
324327
f"Exception in /api/conversation/azure_byod | {errorMessage}"
325328
)
326329
return (
@@ -365,7 +368,7 @@ def conversation_custom():
365368

366369
except Exception as e:
367370
errorMessage = str(e)
368-
logging.exception(f"Exception in /api/conversation/custom | {errorMessage}")
371+
logger.exception(f"Exception in /api/conversation/custom | {errorMessage}")
369372
return (
370373
jsonify(
371374
{

0 commit comments

Comments
 (0)