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

88 lines
2.0 KiB
Python

"""
Slide 94: Slide 8
Section 4: Open SWE
Source: slides/section4-openswe/section4.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-094/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 94 ===
// open_swe/sandbox/__init__.py:1-12
from open_swe.sandbox import (
ModalBackend,
DaytonaBackend,
RunloopBackend,
LangSmithBackend,
)
# Modal (Python-first, GPU)
backend = ModalBackend(
token_id="..."
token_secret="..."
)
// examples/my_internal_backend.py:1-11
# свой backend: devbox-пул
from open_swe.sandbox import (
SandboxBackend,
)
>
class MyInternalBackend(SandboxBackend):
def execute(self, cmd):
> return self._run(cmd)
>
def read_file(self, p):
> return self._fetch(p)
// examples/my_internal_backend.py:1-16
# свой backend: devbox-пул
from open_swe.sandbox import (
SandboxBackend,
)
class MyInternalBackend(
SandboxBackend
):
def __init__(self, conn):
self.conn = conn
>
> def execute(self, cmd):
> return self._run(cmd)
>
> def read_file(self, p):
> return self._fetch(p)
// note: snippet has 16 lines, card fits ~15