// Slide 24: 1.0 vs 0.3 -- breaking changes and what is new // Content slide: side-by-side comparison of what changed in v1.0. const ds = require('./design-system'); function createSlide(pres, theme) { const slide = pres.addSlide(); ds.helpers.slideBase(slide, pres, theme); ds.helpers.addHeader(slide, pres, theme, { eyebrow: 'STAGE 1: CHAINS', section: 'Версии', title: 'Что нового в 1.0 vs 0.3', sectionNumber: 1, }); // Two columns: OLD (0.x) vs NEW (1.0) const colW = 4.35; const colH = 3.3; const colY = 1.5; const leftX = 0.5; const rightX = 5.15; // OLD column slide.addShape(pres.ShapeType.roundRect, { x: leftX, y: colY, w: colW, h: colH, fill: { color: theme.palette.state.dangerBg }, line: { color: theme.palette.state.danger, width: 1 }, rectRadius: 0.1, }); slide.addText('0.x (legacy)', { x: leftX + 0.2, y: colY + 0.15, w: colW - 0.3, h: 0.4, fontFace: ds.helpers.withFallback(theme.fonts.ui), fontSize: 18, bold: true, color: theme.palette.state.danger, valign: 'middle', margin: 0, }); const oldItems = [ 'create_react_agent / create_openai_functions_agent / create_structured_chat_agent', 'LLMChain, RetrievalQA, ConversationalRetrievalQA', 'ChatOpenAI / ChatAnthropic / ChatGoogleGenerativeAI отдельно', 'Кастомные callbacks для HITL и PII', 'Verbose LLMChain с ручным manage_prompts', ].map((t) => ({ text: '- ' + t + '\n', options: { fontFace: ds.helpers.withFallback(theme.fonts.ui), fontSize: 12, color: theme.palette.text.primary } })); slide.addText(oldItems, { x: leftX + 0.2, y: colY + 0.6, w: colW - 0.3, h: colH - 0.7, valign: 'top', paraSpaceAfter: 6, margin: 0, }); // NEW column slide.addShape(pres.ShapeType.roundRect, { x: rightX, y: colY, w: colW, h: colH, fill: { color: theme.palette.state.successBg }, line: { color: theme.palette.state.success, width: 1 }, rectRadius: 0.1, }); slide.addText('1.0 (current)', { x: rightX + 0.2, y: colY + 0.15, w: colW - 0.3, h: 0.4, fontFace: ds.helpers.withFallback(theme.fonts.ui), fontSize: 18, bold: true, color: theme.palette.state.success, valign: 'middle', margin: 0, }); const newItems = [ 'create_agent -- единая точка входа (построен на LangGraph)', 'Middleware-система: HITL, PII, Summarization как first-class', 'init_chat_model(":") -- один инициализатор', 'with_structured_output -- tool calling / provider-native JSON', 'Семантическое версионирование: до 2.0 breaking changes не будет', 'langchain-classic -- пакет для обратной совместимости legacy chains', ].map((t) => ({ text: '+ ' + t + '\n', options: { fontFace: ds.helpers.withFallback(theme.fonts.ui), fontSize: 12, color: theme.palette.text.primary } })); slide.addText(newItems, { x: rightX + 0.2, y: colY + 0.6, w: colW - 0.3, h: colH - 0.7, valign: 'top', paraSpaceAfter: 6, margin: 0, }); // Bottom callout: migration tip ds.helpers.addCallout(slide, pres, theme, { x: 0.5, y: 4.95, w: 9.0, h: 0.4, kind: 'info', text: 'Миграция: pip install langchain-classic -- legacy LLMChain/AgentExecutor работают, но новый код пишите на create_agent.', }); ds.helpers.addSourceLine(slide, pres, theme, { source: 'docs.langchain.com/oss/python/releases/langchain-v1', }); ds.helpers.addPageNumber(slide, pres, theme, 24); } module.exports = { createSlide };