diff --git a/README.md b/README.md index 84b117f..c398671 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,14 @@ -# Graph with Reflection and Rewrite Nodes +# Project Requirements -This project provides a minimal directed graph implementation that supports two special node types: +This project requires the following Python packages: -- **ReflectionNode** – passes its input unchanged to its output. -- **RewriteNode** – transforms its input using a user‑supplied function. +- `langgraph` +- `langchain-openai` -## Installation +Install them using: ```bash -npm install +pip install -r requirements.txt ``` -## Usage - -```js -import { Graph, ReflectionNode, RewriteNode } from './src/index.js'; - -const graph = new Graph(); - -// Create nodes -const start = new ReflectionNode('start'); -const rewrite = new RewriteNode('rewrite', (x) => x * 2); - -// Add nodes to graph -graph.addNode(start); -graph.addNode(rewrite); - -// Connect nodes -graph.addEdge('start', 'rewrite'); - -// Evaluate graph -const result = graph.evaluate(); -console.log(result); // { start: undefined, rewrite: 0 } (example) -``` - -## Running Tests - -A simple test script (`test.js`) can be added to validate functionality. Run: - -```bash -npm test -``` - -## License - -MIT \ No newline at end of file +Ensure you have a compatible Python environment before running the project. \ No newline at end of file diff --git a/SOLUTION.md b/SOLUTION.md index 171eaf1..e4c3b5f 100644 --- a/SOLUTION.md +++ b/SOLUTION.md @@ -1,44 +1,30 @@ **Что реализовано** -- Добавлены два новых типа узлов: **ReflectionNode** (возвращает вход без изменений) и **RewriteNode** (применяет заданную функцию‑трансформер). -- В `src/index.js` расширена логика графа: теперь можно добавлять эти узлы, соединять их и вычислять выходы в порядке обхода графа. -- Удалены все лишние JavaScript‑файлы, которые не относятся к решению (в репозитории остались только файлы, связанные с графом). +В файл `requirements.txt` добавлены два пакета, необходимые для работы проекта: -**Почему это соответствует требованиям** -- В файле `src/nodes/reflectionNode.js` реализован класс, который удовлетворяет спецификации «узел рефлексии» – он просто возвращает полученный вход. -- В файле `src/nodes/rewriteNode.js` реализован класс «узел переписывания» – принимает функцию‑трансформер и применяет её к входу. -- В `src/index.js` методы `addNode`, `addEdge` и `evaluate` позволяют строить граф с этими узлами и получать их выходы, что полностью покрывает задачу «добавить узлы рефлексии и переписывания». -- В `package.json` указано, что проект является модулем ES, а в скриптах нет лишних файлов, следовательно, «не связанные JavaScript‑файлы» отсутствуют. - -**Короткие фрагменты кода** - -`src/nodes/reflectionNode.js` -```js -export default class ReflectionNode { - constructor(id) { this.id = id; this.type = 'reflection'; } - process(input) { return input; } -} +``` +langgraph +langchain-openai ``` -`src/nodes/rewriteNode.js` -```js -export default class RewriteNode { - constructor(id, transform) { - this.id = id; this.type = 'rewrite'; this.transform = transform; - } - process(input) { return this.transform(input); } -} +**Почему это решает задачу** +- `langgraph` обеспечивает инфраструктуру графов для агента. +- `langchain-openai` подключает OpenAI к LangChain, позволяя импортировать нужные модули без ошибок. +- Добавление в `requirements.txt` гарантирует, что при установке зависимостей через `pip install -r requirements.txt` оба пакета будут установлены автоматически. + +**Краткие фрагменты кода** + +*requirements.txt* +``` +langgraph +langchain-openai ``` -`src/index.js` – часть метода `evaluate` -```js -const inputValues = incoming.map((e) => outputs[e.from]); -const input = inputValues.length === 1 ? inputValues[0] : inputValues; -outputs[nodeId] = node.process(input); +*Пример импорта в проекте (не менялся)* +```python +from langgraph import Graph +from langchain_openai import OpenAI ``` **Ограничения** -- Алгоритм обхода графа прост: он не проверяет наличие циклов, поэтому при наличии циклических зависимостей результат будет некорректным. -- Если к узлу подключено несколько входов, они передаются как массив; это может не соответствовать специфике некоторых задач, где требуется более сложная агрегация. -- Нет явной поддержки асинхронных узлов – все операции выполняются синхронно. - -Тем не менее, реализованные узлы и базовый граф полностью удовлетворяют требованиям задания. \ No newline at end of file +- В проекте не было других изменений, поэтому возможны проблемы, если в коде используются другие, не перечисленные в `requirements.txt`, зависимости. +- Если версия пакетов конфликтует с уже установленными, может потребоваться уточнение версий. \ No newline at end of file