[docs]defget_summary(self,docs:Any)->List[str]:"""Get the summary of the input docs. Args: docs: The documents to generate summary for. Allowed input types: str, Document, List[str], List[Document] Returns: List of summary text, one for each input doc. """try:importoracledbexceptImportErrorase:raiseImportError("Unable to import oracledb, please install with ""`pip install -U oracledb`.")fromeifdocsisNone:return[]results:List[str]=[]try:oracledb.defaults.fetch_lobs=Falsecursor=self.conn.cursor()ifself.proxy:cursor.execute("begin utl_http.set_proxy(:proxy); end;",proxy=self.proxy)ifisinstance(docs,str):results=[]summary=cursor.var(oracledb.DB_TYPE_CLOB)cursor.execute(""" declare input clob; begin input := :data; :summ := dbms_vector_chain.utl_to_summary(input, json(:params)); end;""",data=docs,params=json.dumps(self.summary_params),summ=summary,)ifsummaryisNone:results.append("")else:results.append(str(summary.getvalue()))elifisinstance(docs,Document):results=[]summary=cursor.var(oracledb.DB_TYPE_CLOB)cursor.execute(""" declare input clob; begin input := :data; :summ := dbms_vector_chain.utl_to_summary(input, json(:params)); end;""",data=docs.page_content,params=json.dumps(self.summary_params),summ=summary,)ifsummaryisNone:results.append("")else:results.append(str(summary.getvalue()))elifisinstance(docs,List):results=[]fordocindocs:summary=cursor.var(oracledb.DB_TYPE_CLOB)ifisinstance(doc,str):cursor.execute(""" declare input clob; begin input := :data; :summ := dbms_vector_chain.utl_to_summary(input, json(:params)); end;""",data=doc,params=json.dumps(self.summary_params),summ=summary,)elifisinstance(doc,Document):cursor.execute(""" declare input clob; begin input := :data; :summ := dbms_vector_chain.utl_to_summary(input, json(:params)); end;""",data=doc.page_content,params=json.dumps(self.summary_params),summ=summary,)else:raiseException("Invalid input type")ifsummaryisNone:results.append("")else:results.append(str(summary.getvalue()))else:raiseException("Invalid input type")cursor.close()returnresultsexceptExceptionasex:logger.info(f"An exception occurred :: {ex}")traceback.print_exc()cursor.close()raise
# uncomment the following code block to run the test"""# A sample unit test.''' get the Oracle connection '''conn = oracledb.connect( user="", password="", dsn="")print("Oracle connection is established...")''' params '''summary_params = {"provider": "database","glevel": "S", "numParagraphs": 1,"language": "english"} proxy = ""''' instance '''summ = OracleSummary(conn=conn, params=summary_params, proxy=proxy)summary = summ.get_summary("In the heart of the forest, " + "a lone fox ventured out at dusk, seeking a lost treasure. " + "With each step, memories flooded back, guiding its path. " + "As the moon rose high, illuminating the night, the fox unearthed " + "not gold, but a forgotten friendship, worth more than any riches.")print(f"Summary generated by OracleSummary: {summary}")conn.close()print("Connection is closed.")"""