123 lines
5.3 KiB
Python
123 lines
5.3 KiB
Python
from pptx import Presentation
|
|
from pptx.util import Inches
|
|
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE, MSO_CONNECTOR
|
|
|
|
# Vytvorenie novej prezentácie
|
|
prs = Presentation()
|
|
slide_layout = prs.slide_layouts[5] # Prázdny slide
|
|
slide = prs.slides.add_slide(slide_layout)
|
|
|
|
# Definícia základných rozmerov a pozícií
|
|
left_margin = Inches(0.5)
|
|
top_margin = Inches(0.5)
|
|
block_width = Inches(3)
|
|
block_height = Inches(0.7)
|
|
vertical_gap = Inches(0.3)
|
|
horizontal_gap = Inches(0.5)
|
|
|
|
# Blok 1: Používateľský dotaz & Chat history
|
|
box1 = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_margin, top_margin, block_width, block_height)
|
|
box1.text = "Používateľský dotaz\n& Chat history"
|
|
|
|
# Blok 2: ConversationalAgent (pod box1)
|
|
box2_top = top_margin + block_height + vertical_gap
|
|
box2 = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_margin, box2_top, block_width, block_height)
|
|
box2.text = "ConversationalAgent"
|
|
|
|
# Blok 3: Klasifikácia dotazu (pod box2)
|
|
box3_top = box2_top + block_height + vertical_gap
|
|
box3 = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_margin, box3_top, block_width, block_height)
|
|
box3.text = "Klasifikácia dotazu"
|
|
|
|
# Vetvenie: Pozície pre dve vetvy
|
|
branch_top = box3_top + block_height + vertical_gap
|
|
|
|
# Ľavá vetva ("Vyhladavanie")
|
|
left_branch_left = left_margin - Inches(0.2)
|
|
box4A = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_branch_left, branch_top, block_width, block_height)
|
|
box4A.text = "ElasticsearchStore\nvyhľadávanie"
|
|
|
|
box5A_top = branch_top + block_height + vertical_gap
|
|
box5A = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_branch_left, box5A_top, block_width, block_height)
|
|
box5A.text = "Generovanie\ndynamického promptu"
|
|
|
|
box6A_top = box5A_top + block_height + vertical_gap
|
|
box6A = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_branch_left, box6A_top, block_width, block_height)
|
|
box6A.text = "Generovanie\nodpovede"
|
|
|
|
box7A_top = box6A_top + block_height + vertical_gap
|
|
box7A = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_branch_left, box7A_top, block_width, block_height)
|
|
box7A.text = "Finalizácia\nodpovede"
|
|
|
|
# Pravá vetva ("Upresnenie")
|
|
right_branch_left = left_margin + block_width + horizontal_gap
|
|
box4B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, branch_top, block_width, block_height)
|
|
box4B.text = "Kombinovanie\ndotazov"
|
|
|
|
box5B_top = branch_top + block_height + vertical_gap
|
|
box5B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, box5B_top, block_width, block_height)
|
|
box5B.text = "ElasticsearchStore\nvyhľadávanie"
|
|
|
|
box6B_top = box5B_top + block_height + vertical_gap
|
|
box6B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, box6B_top, block_width, block_height)
|
|
box6B.text = "Generovanie\ndynamického promptu"
|
|
|
|
box7B_top = box6B_top + block_height + vertical_gap
|
|
box7B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, box7B_top, block_width, block_height)
|
|
box7B.text = "Generovanie\nodpovedí (2 modely)"
|
|
|
|
box8B_top = box7B_top + block_height + vertical_gap
|
|
box8B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, box8B_top, block_width, block_height)
|
|
box8B.text = "Validácia a\nhodnotenie odpovedí"
|
|
|
|
box9B_top = box8B_top + block_height + vertical_gap
|
|
box9B = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, right_branch_left, box9B_top, block_width, block_height)
|
|
box9B.text = "Finalizácia\nodpovede"
|
|
|
|
# Finálny blok: Výstup (zlúčenie vetiev)
|
|
final_box_top = max(box7A_top, box9B_top) + block_height + vertical_gap
|
|
final_box = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RECTANGLE, left_margin, final_box_top, block_width, block_height)
|
|
final_box.text = "Výstup"
|
|
|
|
# Funkcia na pridanie šípok medzi blokmi
|
|
def add_connector(slide, start_shape, end_shape):
|
|
start_x = start_shape.left + start_shape.width / 2
|
|
start_y = start_shape.top + start_shape.height
|
|
end_x = end_shape.left + end_shape.width / 2
|
|
end_y = end_shape.top
|
|
connector = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, start_x, start_y, end_x, end_y)
|
|
# Aktuálna verzia python-pptx nepodporuje nastavenie šípky, preto tento riadok odstraňte alebo zakomentujte:
|
|
# connector.line.end_arrowhead.style = 1
|
|
return connector
|
|
|
|
# Prepojenie blokov
|
|
add_connector(slide, box1, box2)
|
|
add_connector(slide, box2, box3)
|
|
|
|
# Vetvenie z Box3 do oboch vetiev
|
|
mid_point = box3.left + box3.width / 2
|
|
branch_mid_y = box3.top + box3.height + vertical_gap/2
|
|
# Do ľavej vetvy:
|
|
connector_left = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, mid_point, box3.top + box3.height, left_branch_left + block_width/2, branch_mid_y)
|
|
# Do pravej vetvy:
|
|
connector_right = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, mid_point, box3.top + box3.height, right_branch_left + block_width/2, branch_mid_y)
|
|
|
|
# Prepojenie blokov v ľavej vetve
|
|
add_connector(slide, box4A, box5A)
|
|
add_connector(slide, box5A, box6A)
|
|
add_connector(slide, box6A, box7A)
|
|
|
|
# Prepojenie blokov v pravej vetve
|
|
add_connector(slide, box4B, box5B)
|
|
add_connector(slide, box5B, box6B)
|
|
add_connector(slide, box6B, box7B)
|
|
add_connector(slide, box7B, box8B)
|
|
add_connector(slide, box8B, box9B)
|
|
|
|
# Spojenie oboch vetiev s finálnym blokom "Výstup"
|
|
add_connector(slide, box7A, final_box)
|
|
add_connector(slide, box9B, final_box)
|
|
|
|
# Uloženie prezentácie
|
|
prs.save("architecture_diagram.pptx")
|