Files
petya 1fd7486a85 Add 122 Python example scripts + .env.example
Each of the 122 code slides now has a standalone .py script in
examples/slide-NNN/script.py with the LLM provider pattern from
bro-js/agents/teacher/assistant/src/angry_teacher/llm.py:
  - load_dotenv() + ChatOpenAI with base_url=https://llm.brojs.ru/v1
  - OPENAI_API_KEY from .env (with safe (or '' or None) pattern)
  - Same comment block with alternative model/base_url choices

Layout:
  - sec1/sec5: code extracted from slide-NN.js (addCodeBlock)
  - sec2/sec3/sec4: code extracted from sectionN.pptx via python-pptx
    (JetBrains Mono font shapes)

100 scripts contain runnable code, 22 are visual-only (dividers,
intro, recap) and just print the slide title.

Setup:
  cp .env.example .env       # fill OPENAI_API_KEY (or symlink to your
                              # teacher/assistant/.env)
  pip install -r requirements.txt
  python examples/slide-005/script.py
2026-06-22 12:02:47 +03:00

51 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Slide 43: Slide 16
Section 2: LangGraph 1.0
Source: slides/section2-langgraph/section2.pptx
Сгенерировано автоматически из slide-NN.js / sectionN.pptx.
Паттерн провайдера скопирован из
bro-js/agents/teacher/assistant/src/angry_teacher/llm.py.
Запуск:
cd langchain-evolution-deck
cp .env.example .env # заполни OPENAI_API_KEY
python examples/slide-043/script.py
"""
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(
# model="openrouter/free",
# model="qwen/qwen3.5-35b-a3b",
model="openai/gpt-oss-20b",
# model="nvidia/nemotron-3-nano",
# model="qwen/qwen3.5-9b",
base_url="https://llm.brojs.ru/v1",
# base_url="https://api.minimax.io/v1",
# base_url="http://0.0.0.0:8090/v1",
# base_url="https://openrouter.ai/api/v1",
# api_key=os.getenv("MINIMAX_API_KEY"),
api_key=(os.getenv("OPENAI_API_KEY") or "").strip() or None,
temperature=0.7,
stream_usage=True,
)
# === Code from slide 43 ===
# После invoke можно достать текущий snapshot:
> snapshot = app.get_state(cfg)
# snapshot -- это StateSnapshot с полями:
> # .config -- thread_id + checkpoint_id
> # .metadata -- step, source, writes
> # .values -- текущие значения всех каналов state
> # .next -- tuple узлов, которые будут выполняться следующими
> # .tasks -- PregelTask с pending/result/error
print(snapshot.next) # () -- граф завершён
print(snapshot.values["messages"][-1].content)