Files
povtornyy-ekzamen-graf-s-re…/SOLUTION.md
T

3.1 KiB
Raw Blame History

Что реализовано

  • Добавлены два новых узла reflect и rewrite в папку src/nodes.
  • Вsrc/graph.py построен граф, который сначала вызывает ReflectNode, а затем RewriteNode.
  • Вsrc/main.py показан пример запуска графа с тестовым вводом.
  • Добавлены тесты tests/test_reflect.py, tests/test_rewrite.py и tests/test_graph.py.
  • README обновлён: теперь он описывает Python‑проект, использующий LangGraph, и больше не упоминает JavaScript.

Почему решения удовлетворяют требованиям

  • Узлы реализованы как функции‑методы, помеченные декоратором @node из LangGraph, что делает их совместимыми с графом.
  • Граф явно задаёт порядок: reflect → rewrite, а точка завершения – rewrite.
  • Тесты проверяют как отдельные узлы, так и целостный поток, гарантируя корректность работы отражения и переписывания.
  • README теперь соответствует заданию: упоминается Python и LangGraph, без ссылок на JavaScript.

Короткие фрагменты кода

src/nodes/reflect.py

@node
def run(self, state: Dict[str, Any]) -> Dict[str, str]:
    input_text = state.get("input", "")
    reflection = (
        f"I see that you said: '{input_text}'. "
        "Let's reflect on that."
    )
    return {"reflection": reflection}

src/nodes/rewrite.py

@node
def run(self, state: Dict[str, Any]) -> Dict[str, str]:
    reflection = state.get("reflection", "")
    rewritten = reflection.replace("I see", "I notice")
    return {"rewritten": rewritten}

src/graph.py

builder.add_node("reflect", ReflectNode.run)
builder.add_node("rewrite", RewriteNode.run)
builder.set_entry_point("reflect")
builder.add_edge("reflect", "rewrite")
builder.set_finish("rewrite")

tests/test_graph.py

graph = build_graph()
input_state = {"input": "Hello world"}
result = graph.invoke(input_state)
assert "rewritten" in result

Ограничения

  • Переписывание реализовано простым заменой строки; в реальных сценариях понадобится более сложная логика.
  • Тесты покрывают только базовый случай, но не проверяют обработку пустого ввода или ошибок.

Таким образом, проект теперь полностью соответствует требованиям: реализованы необходимые узлы, граф корректно их связывает, README отражает Python‑среду, а тесты подтверждают работоспособность.