ืืืืืื ืืช ืงืืื ืงืื? ืืืื ื ืืชืื ืืื ืืื ืืืืื ืืื ืืื ืขืืื - ืืื ืืืื ืืจืื ืืืชืจ ืงื ืืื ืฉืืืืื ืชื. ืงืื ืืืืืื ืืืื ื ืืฆื ืืชืืงืืืช ืืืืืืืืช ืืงืืฉืืจ:
https://github.com/ynonp/pydanticai-demos/tree/main/07-minicoder
โ ืื ืื ืกืืื ืงืืืื
ืกืืื ืงืืืื ืืื ืชืืื ื ืฉืืฉืชืืฉืช ืืืืื ืฉืคื ืืื ืืืชืื ืงืื. ืื ืื ื ืืืจ ืืืืขืื ืืื ืืืชืื ืกืืื ืื ืืืื ืืชืช ืืื ืืืฉื ืืืืื - ืฉืื ืืืืื ืื ืื ืฉืื ืื ื ืฆืจืืืื ืืฉืืื ืืื ืืช ืกืืื ืงืืืื.
ืืกืืื ืฉื ืื ื ืืชืืื ืืชืืงืืืช ืขืืืื ืืืืื ืืคืจืืืคื ืืืืฉืชืืฉ. ืืืืืขื ืืชืืจืช ืืืฆืจ ืื ืคืืฆ'ืจ ืฉืืืฉืชืืฉ ืจืืฆื ืืื ืืช. ืืกืืื ืืชืืืื ืฆืจืื ืืขืืื ืืช ืืงืื ืฉืืชืืงืืื ืื ืืืฆืืจ ืงืืฆื ืงืื ืืืฉืื ืืื ืฉืืกืืฃ ื ืงืื ืืขืจืืช ืขืืืืช.
ืืืจื ืฉืืกืืื ืกืืื ืกืื ืื ืืื ืืืืจืื ืืคืจืืืคื ืืื ืืงืื ืืืืืฉืชืืฉ ืืช ืืืงืฉื ืืืื.
ืขื ืืืืจ ืืื ืงืืื ืงืื ืืืืื ืืืกืืคื ืืืื ืืืจืื: ื ืืืื Sessions, ืืคืฉืจืืช ืืืืืจ ืืฉืืืืช ืืฉื ืืช, ืกืืืื ืฉืืื ืืฉืืื ืืชืืจืืช, ืืืืจืช ืืืื, ืคืืืืื ืื, ืงืืฆื ืืืจืืืช ืืขืื ืืืื ืคืืฆ'ืจืื ืฉืืืคืืื ืืืชื ืืืืฆืจ ืืฆืืื. ืื ื ืื ืืืืืฅ ืฉืชืขืืื ืืช ืงืืื ืงืื ืืฉืืื ืกืืื ืฉืืชื ืืืชืืื. ืื ื ืื ืืืืื ืฉืืืชืื ืกืืื ืงืืืื ืืืคืก ืขืืืจ ืืฉืืื ืืืืื ืืืื ืืื ืงืืื ืงืื ืืืขืืื ืืืชื ืืฆืืจื ืืขืืื ืืืชืจ.
โ ืืื ืื ืขืืื
ืกืืื ืงืืืื ืืืจืื ืืืืืื ืืจืืืืช ืฉื ืงืจืืช ืืืืืช ืืกืืื. ืืืืืื ืืงืืืช ืคืจืืืคื ืืืืฉืชืืฉ ืืื ืืคืขืืื
run_sync (ืื ืจืืฆื ืืกืื ืืจืื ืืช ืื ืืชื ืจืืฆืื ืืจืืืช ืืช ืืคืื ืืืืจืื). ืืกืืื ืืงืื ืืช ืื ืืืกืืืจืืืช ืืฉืืื ื-4 ืืืื:1. ืืื ืงืจืืืช ืงืืืฅ.
2. ืืื ืืชืืืช ืงืืืฅ ืืืคืก.
3. ืืื ืฉืื ืื ืืงืกื ืืงืืืฅ.
4. ืืื ืืคืขืืช ืคืงืืื ืืฉืืจืช ืืคืงืืื (bash).
ืืจืืขืช ืืืืื ืืืื ืืกืคืืงืื ืืื ืฉืืกืืื ืืืื ืืืงืืจ ืืช ืืคืจืืืงื ืืืื ืืช ืื ืคืืฆ'ืจ ืฉืืชื ืฆืจืืืื.
โ ืืืืืช ืืกืืื
ืืืืืื ืืจืืฉืืช ืฉื ืืกืืื ืืื:
while True:
try:
user_input = input("you> ").strip()
except (EOFError, KeyboardInterrupt):
print()
break
if not user_input:
continue
if user_input in ("exit", "quit"):
break
try:
result = agent.run_sync(user_input, deps=deps, message_history=history)
history = result.all_messages()
print(f"\n{result.output}\n")
except Exception as exc: # keep the session alive on any single failure
print(f"\n[error: {exc}]\n")
ืืืื ืืกื ืืื ืงืืจืืช ืคืงืืื ืืืืฉืชืืฉ, ืืคืขืืื
run_sync, ืฉืืืจืช ืืช ืืชืืฆืื ืืืืฉืืื ืืืืืจืฆืื ืืืื. ืคืจืืืจ ืืชืืืืืช deps ืืืื ืืช ืชืืงืืืช ืืขืืืื ืื ืืืชืจ ืืกืืื ืืขืืื:work_dir = Path(sys.argv[1]).resolve()
work_dir.mkdir(parents=True, exist_ok=True)
deps = Deps(work_dir=work_dir)
ืืชืื ืืืืื ื ืืืื ืฉืื ืื ืฉืื ืื ื ืขืืฉืื ืืชืืฆืข ืืืืชื ืชืืงืืืช ืขืืืื.
โ ืืื ืงืจืืืช ืงืืืฅ
ืืื ืงืจืืืช ืืงืืืฅ ืืงืื ืืช ืฉื ืืงืืืฅ, ืืืืคื ืืชืืืืื ืืงืจืื ืืืื ืืืืข ืืงืกืืืื ืื ืื ื ืืืื ืื ืืงืจืื ืืืืืืจ ืืช ืืชืืื:
def read_file(
ctx: RunContext[Deps], file: str, offset: int = 0, limit: int = MAX_OUTPUT
) -> str:
"""Read a file and return its text from ``offset`` for ``limit`` chars."""
path = _resolve(ctx.deps.work_dir, file)
if not path.is_file():
return f"Error: no such file: {file}"
text = path.read_text(encoding="utf-8", errors="replace")
return text[offset : offset + limit]
ืืืืืช ืืืจื ืืคืื ืืฉืืื ืื ืืื ืืืคืฉืจืช ืืกืืื ืืฉืืื ืขื ืืืื ืืงืื ืืงืกื ืืืื ืขืช ืืืืื ืืืงื ืื.
โ ืืชืืืช ืงืืืฅ
ืืืื ืืฉื ื ืืืชืืืช ืงืืืฅ ื ืจืื ืื:
def write_file(ctx: RunContext[Deps], file: str, new_content: str) -> str:
"""Create ``file`` or replace its entire contents with ``new_content``."""
path = _resolve(ctx.deps.work_dir, file)
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(new_content, encoding="utf-8")
return f"Wrote {len(new_content)} chars to {file}"
ืืื ืืืงื ืฉื ืงืืืฅ ืืชืืื ืืืืชื ืืื ืืงืืืฅ. ื ืฉืื ืื ืฉืืชืืืช ืงืืืฅ ืฉืื ืืื ืืกื ืืช ืื ืชืืื ืืงืืืฅ ื Context ืืชืืจ ืคืจืืืจ ืฉื ืืื ืฉืืืฉืื ืืืืืช ืืืชื ื ืืืืกืืืจืืืช ืืืืืขืืช. ืืืขืจืืืช ืจืืืช ืืกื ื ืื ืืืืกืืืจืืืช ืืืืืขืืช ืืช ืืคืขืืืช ืืืืื ืืื ืื ืืืขืืืก ืขื ืืงืื ืืงืกื. ืื ืืกืืื ืืจืฆื ืืืขืช ืื ืืฉ ืืงืืืฅ ืฉืืฉืชืืฉ ืืืื read file.
โ ืขืจืืืช ืงืืืฅ
ืืืืืฉ ืคืฉืื ืืคืขืืืช ืืขืจืืื ืืงืื ืฉืชื ืืืจืืืืช - ืืงืกื ืืืืืคื ืืืืงืกื ืืืชืื ืืืงืืื. ืื ื ืฉืืข ืืขื ืืื ืื ืืกืคืืง. ืื ืืืงืกื ืืืืืคื ืืืคืืข ืืื ืคืขืืื ืืงืืืฅ ื ืืืืจ ืืกืืื ืฉืืืื ืื ืืงืฉ ืืงืื ืืงืกื ืืืืืคื ืืืชืจ ืืจืื ืืื ืืืืืื:
def edit_file(
