Spaces:
Sleeping
Sleeping
Update document_generator.py
Browse files- document_generator.py +21 -14
document_generator.py
CHANGED
|
@@ -248,6 +248,12 @@ class MarkdownDocumentRequest(BaseModel):
|
|
| 248 |
json_document: Dict
|
| 249 |
query: str
|
| 250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
async def generate_document_stream(document_generator: DocumentGenerator, document_outline: Dict, query: str):
|
| 252 |
document_generator.document_outline = document_outline
|
| 253 |
db_manager = DatabaseManager()
|
|
@@ -271,14 +277,14 @@ async def generate_document_stream(document_generator: DocumentGenerator, docume
|
|
| 271 |
logging.info(f"Generating content for section: {section_title}")
|
| 272 |
content = document_generator.generate_content(section_title, content_instruction, section_number)
|
| 273 |
section["Content"] = content
|
| 274 |
-
yield
|
| 275 |
"type": "document_section",
|
| 276 |
"content": {
|
| 277 |
"section_number": section_number,
|
| 278 |
"section_title": section_title,
|
| 279 |
"content": content
|
| 280 |
}
|
| 281 |
-
}
|
| 282 |
|
| 283 |
for subsection in section.get("Subsections", []):
|
| 284 |
subsection_title = subsection.get("Title", "")
|
|
@@ -287,27 +293,28 @@ async def generate_document_stream(document_generator: DocumentGenerator, docume
|
|
| 287 |
logging.info(f"Generating content for subsection: {subsection_title}")
|
| 288 |
content = document_generator.generate_content(subsection_title, subsection_content_instruction, subsection_number)
|
| 289 |
subsection["Content"] = content
|
| 290 |
-
yield
|
| 291 |
"type": "document_section",
|
| 292 |
"content": {
|
| 293 |
"section_number": subsection_number,
|
| 294 |
"section_title": subsection_title,
|
| 295 |
"content": content
|
| 296 |
}
|
| 297 |
-
}
|
| 298 |
|
| 299 |
markdown_document = MarkdownConverter.convert_to_markdown(document_generator.document_outline["Document"])
|
| 300 |
-
|
|
|
|
| 301 |
"type": "complete_document",
|
| 302 |
-
"content":
|
| 303 |
-
|
|
|
|
|
|
|
|
|
|
| 304 |
|
| 305 |
-
yield json.dumps({
|
| 306 |
-
"type": "complete_document",
|
| 307 |
-
"json": document_generator.document_outline
|
| 308 |
-
}, ensure_ascii=False) + "\n"
|
| 309 |
db_manager.update_database("elevatics", query, markdown_document)
|
| 310 |
|
|
|
|
| 311 |
@cache(expire=600*24*7)
|
| 312 |
@router.post("/generate-document/json", response_model=JsonDocumentResponse)
|
| 313 |
async def generate_document_outline_endpoint(request: DocumentRequest):
|
|
@@ -334,12 +341,12 @@ async def generate_markdown_document_stream_endpoint(request: MarkdownDocumentRe
|
|
| 334 |
async for chunk in generate_document_stream(document_generator, request.json_document, request.query):
|
| 335 |
yield chunk
|
| 336 |
except Exception as e:
|
| 337 |
-
yield
|
| 338 |
"type": "error",
|
| 339 |
"content": str(e)
|
| 340 |
-
})
|
| 341 |
|
| 342 |
-
return StreamingResponse(stream_generator(), media_type="
|
| 343 |
|
| 344 |
###########################################
|
| 345 |
class MarkdownDocumentResponse(BaseModel):
|
|
|
|
| 248 |
json_document: Dict
|
| 249 |
query: str
|
| 250 |
|
| 251 |
+
MESSAGE_DELIMITER = b"\n---DELIMITER---\n"
|
| 252 |
+
|
| 253 |
+
def yield_message(message):
|
| 254 |
+
message_json = json.dumps(message, ensure_ascii=False).encode('utf-8')
|
| 255 |
+
return message_json + MESSAGE_DELIMITER
|
| 256 |
+
|
| 257 |
async def generate_document_stream(document_generator: DocumentGenerator, document_outline: Dict, query: str):
|
| 258 |
document_generator.document_outline = document_outline
|
| 259 |
db_manager = DatabaseManager()
|
|
|
|
| 277 |
logging.info(f"Generating content for section: {section_title}")
|
| 278 |
content = document_generator.generate_content(section_title, content_instruction, section_number)
|
| 279 |
section["Content"] = content
|
| 280 |
+
yield yield_message({
|
| 281 |
"type": "document_section",
|
| 282 |
"content": {
|
| 283 |
"section_number": section_number,
|
| 284 |
"section_title": section_title,
|
| 285 |
"content": content
|
| 286 |
}
|
| 287 |
+
})
|
| 288 |
|
| 289 |
for subsection in section.get("Subsections", []):
|
| 290 |
subsection_title = subsection.get("Title", "")
|
|
|
|
| 293 |
logging.info(f"Generating content for subsection: {subsection_title}")
|
| 294 |
content = document_generator.generate_content(subsection_title, subsection_content_instruction, subsection_number)
|
| 295 |
subsection["Content"] = content
|
| 296 |
+
yield yield_message({
|
| 297 |
"type": "document_section",
|
| 298 |
"content": {
|
| 299 |
"section_number": subsection_number,
|
| 300 |
"section_title": subsection_title,
|
| 301 |
"content": content
|
| 302 |
}
|
| 303 |
+
})
|
| 304 |
|
| 305 |
markdown_document = MarkdownConverter.convert_to_markdown(document_generator.document_outline["Document"])
|
| 306 |
+
|
| 307 |
+
yield yield_message({
|
| 308 |
"type": "complete_document",
|
| 309 |
+
"content": {
|
| 310 |
+
"markdown": markdown_document,
|
| 311 |
+
"json": document_generator.document_outline
|
| 312 |
+
},
|
| 313 |
+
});
|
| 314 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 315 |
db_manager.update_database("elevatics", query, markdown_document)
|
| 316 |
|
| 317 |
+
|
| 318 |
@cache(expire=600*24*7)
|
| 319 |
@router.post("/generate-document/json", response_model=JsonDocumentResponse)
|
| 320 |
async def generate_document_outline_endpoint(request: DocumentRequest):
|
|
|
|
| 341 |
async for chunk in generate_document_stream(document_generator, request.json_document, request.query):
|
| 342 |
yield chunk
|
| 343 |
except Exception as e:
|
| 344 |
+
yield yield_message({
|
| 345 |
"type": "error",
|
| 346 |
"content": str(e)
|
| 347 |
+
})
|
| 348 |
|
| 349 |
+
return StreamingResponse(stream_generator(), media_type="application/octet-stream")
|
| 350 |
|
| 351 |
###########################################
|
| 352 |
class MarkdownDocumentResponse(BaseModel):
|