@@ -821,19 +821,29 @@ async def ensure_cosmos():
821821async def generate_section_content ():
822822 request_json = await request .get_json ()
823823 try :
824- # verify that section title and section description are provided
825- if "sectionTitle" not in request_json :
826- return jsonify ({"error" : "sectionTitle is required" }), 400
827-
828- if "sectionDescription" not in request_json :
829- return jsonify ({"error" : "sectionDescription is required" }), 400
830-
824+ if not request_json or not isinstance (request_json , list ):
825+ return jsonify ({"error" : "Request must be a non-empty list." }), 400
826+
827+ if (
828+ "sectionTitle" not in request_json [0 ]
829+ or "sectionDescription" not in request_json [0 ]
830+ ):
831+ return (
832+ jsonify (
833+ {
834+ "error" : "Each item in request must contain 'sectionTitle' and 'sectionDescription'."
835+ }
836+ ),
837+ 400 ,
838+ )
839+
831840 content = await generate_section_content (request_json , request .headers )
832841 return jsonify ({"section_content" : content }), 200
833842 except Exception as e :
834843 logging .exception ("Exception in /section/generate" )
835844 return jsonify ({"error" : str (e )}), 500
836845
846+
837847@bp .route ("/document/<filepath>" )
838848async def get_document (filepath ):
839849 try :
@@ -843,6 +853,7 @@ async def get_document(filepath):
843853 logging .exception ("Exception in /document/<filepath>" )
844854 return jsonify ({"error" : str (e )}), 500
845855
856+
846857async def generate_title (conversation_messages ):
847858 ## make sure the messages are sorted by _ts descending
848859 title_prompt = app_settings .azure_openai .title_prompt
@@ -864,35 +875,45 @@ async def generate_title(conversation_messages):
864875 except Exception as e :
865876 return messages [- 2 ]["content" ]
866877
867- async def generate_section_content (request_body , request_headers ):
868- prompt = f"""{ app_settings .azure_openai .generate_section_content_prompt }
869-
870- Section Title: { request_body ['sectionTitle' ]}
871- Section Description: { request_body ['sectionDescription' ]}
872- """
873878
874- messages = [
875- {
876- "role" : "system" ,
877- "content" : app_settings .azure_openai .system_message
878- }
879- ]
880- messages .append ({"role" : "user" , "content" : prompt })
881-
882- request_body ['messages' ] = messages
883- model_args = prepare_model_args (request_body , request_headers )
879+ async def generate_section_content (request_body , request_headers ):
880+ user_prompt = f"{ app_settings .azure_openai .generate_section_content_prompt } \n \n "
881+ for section in request_body :
882+ user_prompt += f"Section Title: { section ['sectionTitle' ]} \n Section Description: { section ['sectionDescription' ]} \n \n "
884883
884+ messages = [{"role" : "system" , "content" : app_settings .azure_openai .system_message }]
885+ messages .append ({"role" : "user" , "content" : user_prompt })
886+ model_args = prepare_model_args ({"messages" : messages }, request_headers )
885887 try :
886888 azure_openai_client = init_openai_client ()
887- raw_response = await azure_openai_client .chat .completions .with_raw_response .create (** model_args )
889+ raw_response = (
890+ await azure_openai_client .chat .completions .with_raw_response .create (
891+ ** model_args
892+ )
893+ )
888894 response = raw_response .parse ()
889895
896+ response_content = response .choices [0 ].message .content
897+ if "The requested information is not available" in response_content :
898+ return response_content
899+
900+ # Split the response content into individual sections
901+ response_content = response_content .strip ().split ("\n \n " )
902+ results = []
903+ for i , section in enumerate (request_body ):
904+ results .append (
905+ {
906+ "sectionTitle" : section ["sectionTitle" ],
907+ "content" : response_content [i ],
908+ }
909+ )
910+ return results
911+
890912 except Exception as e :
891913 logging .exception ("Exception in send_chat_request" )
892914 raise e
893915
894- return response .choices [0 ].message .content
895-
916+
896917def retrieve_document (filepath ):
897918 try :
898919 search_client = init_ai_search_client ()
@@ -907,4 +928,5 @@ def retrieve_document(filepath):
907928 logging .exception ("Exception in retrieve_document" )
908929 raise e
909930
931+
910932app = create_app ()
0 commit comments