44from werkzeug .wrappers import Request , Response
55from dify_plugin import Endpoint
66from typing import Mapping
7+ import logging
8+ from dify_plugin .config .logger_format import plugin_logger_handler
9+
10+ logger = logging .getLogger (__name__ )
11+ logger .setLevel (logging .INFO )
12+ logger .addHandler (plugin_logger_handler )
13+
14+
15+ def log (msg ):
16+ logger .info (msg )
717
818
919class Knowledgebaseretrieval (Endpoint ):
1020 def _invoke (self , r : Request , values : Mapping , settings : Mapping ) -> Response :
11- body = r .get_json ()
21+ log ("Knowledge base retrieval invoked.22" )
22+
23+ try :
24+ body = r .get_json ()
25+ except Exception as e :
26+ log (f"Failed to parse JSON: { e } " )
27+ return Response (
28+ response = json .dumps ({"records" : []}),
29+ status = 200 ,
30+ content_type = "application/json"
31+ )
32+
33+ log (f"Request: method={ r .method } , url={ r .url } , headers={ dict (r .headers )} , data={ body } " )
1234
1335 retrieval_setting = body .get ('retrieval_setting' )
1436 query = body .get ('query' )
1537 knowledge_id = body .get ('knowledge_id' )
1638
39+ log (f"Received request - knowledge_id: { knowledge_id } , query: { query } , retrieval_setting: { retrieval_setting } " )
40+
41+ if not knowledge_id :
42+ log ("knowledge_id is empty, returning empty records" )
43+ return Response (
44+ response = json .dumps ({"records" : []}),
45+ status = 200 ,
46+ content_type = "application/json"
47+ )
48+
1749 client = boto3 .client (
1850 "bedrock-agent-runtime" ,
1951 aws_secret_access_key = settings .get ("aws_secret_access_key" ),
@@ -22,6 +54,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
2254 )
2355
2456 try :
57+ log (f"Calling bedrock-agent-runtime retrieve API with knowledgeBaseId: { knowledge_id } " )
2558 response = client .retrieve (
2659 knowledgeBaseId = knowledge_id ,
2760 retrievalConfiguration = {
@@ -31,10 +64,13 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
3164 retrievalQuery = {"text" : query },
3265 )
3366
67+ log (f"API response status: { response .get ('ResponseMetadata' , {}).get ('HTTPStatusCode' )} " )
68+
3469 results = []
3570 if response .get ("ResponseMetadata" ) and response .get ("ResponseMetadata" ).get ("HTTPStatusCode" ) == 200 :
3671 if response .get ("retrievalResults" ):
3772 retrieval_results = response .get ("retrievalResults" )
73+ log (f"Retrieved { len (retrieval_results )} results from knowledge base" )
3874 for retrieval_result in retrieval_results :
3975 # filter out results with score less than threshold
4076 if retrieval_result .get ("score" ) < retrieval_setting .get ("score_threshold" , .0 ):
@@ -47,6 +83,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
4783 }
4884 results .append (result )
4985
86+ log (f"Returning { len (results )} results after filtering" )
5087 return Response (
5188 response = json .dumps ({"records" : results }),
5289 status = 200 ,
@@ -55,6 +92,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
5592
5693 except botocore .exceptions .ClientError as error :
5794 error_code = error .response ['Error' ]['Code' ]
95+ log (f"AWS ClientError: { error_code } - { error .response ['Error' ].get ('Message' )} " )
5896 if error_code == "InvalidSignatureException" :
5997 return Response (
6098 response = json .dumps ({"error_code" : 1002 , "error_msg" : "Wrong AWS secret access key" }),
0 commit comments