Junhoee's picture
Upload 98 files
f646e0b verified
Raw
History Blame Contribute Delete
2.44 kB
"""๋ฃจํŠธ ์—์ด์ „ํŠธ โ€” ๊ฐœ์ž… ํฌ์ผ“ ํ„ด ํŒŒ์ดํ”„๋ผ์ธ ์กฐ๋ฆฝ (ํŒฉํ† ๋ฆฌ๋Š” ์กฐ๋ฆฝ๋งŒ ๋‹ด๋‹น).
pocket_session (SequentialAgent) โ€” ์œ ์ € ๋ฉ”์‹œ์ง€ 1๊ฑด = 1ํšŒ ์‹คํ–‰
โ”œโ”€โ”€ pocket_context_loader โ† BaseAgent: ์นด๋“œ ๋ธŒ๋ฆฌํ”„/๊ฒฐ ์ ์žฌ (์Šคํฌ์ผ๋Ÿฌ ํ•„ํ„ฐ)
โ”œโ”€โ”€ input_guard โ† BaseAgent: ์ •์ฒด์ง๊ฒฉ/์•ฝ์ /๋ฉ”ํƒ€ ๊ฐ์ง€ โ†’ ์ง€์‹œ ์ƒ์„ฑ
โ”œโ”€โ”€ carmilla โ† LlmAgent: ์บ๋ฆญํ„ฐ ์‘๋‹ต
โ””โ”€โ”€ director โ† LlmAgent: ์ถ•/๋น„ํŠธ/์ˆ˜๋ ด ํŒ์ • (๋„๊ตฌ๋กœ state ๊ธฐ๋ก)
์ฃผ: CLAUDE.md์˜ turn_loop(LoopAgent) ๊ธฐ์ค€ ๊ตฌ์กฐ๋Š” ์”ฌ ์ „์ฒด๋ฅผ 1ํšŒ ํ˜ธ์ถœ๋กœ ๋„๋Š”
์ž์œจ ๋ฃจํ”„์šฉ์ด๋‹ค. ์‚ฌ๋žŒ์ด ํ„ด๋งˆ๋‹ค ์ž…๋ ฅํ•˜๋Š” ์ฑ„ํŒ…์€ Runner์˜ ํ‘œ์ค€ ํŒจํ„ด๋Œ€๋กœ
"์œ ์ € ๋ฉ”์‹œ์ง€๋งˆ๋‹ค ํŒŒ์ดํ”„๋ผ์ธ 1ํšŒ ์‹คํ–‰"์ด ADK ๊ณต์‹ ํ๋ฆ„์ด๋ฉฐ, ํ„ด ์ƒํ•œยท์ˆ˜๋ ด
์žฌ๊ฒ€์ฆ์€ services/pocket.py์˜ ๊ฒฐ์ •์  ์ฝ”๋“œ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.
director๊ฐ€ ๋งˆ์ง€๋ง‰์ด๋ฏ€๋กœ finish_pocket์˜ escalate๊ฐ€ ์‚ผํ‚ฌ ํ›„์† ์—์ด์ „ํŠธ๋Š” ์—†๋‹ค.
`adk web /path/to/sorac` ์‹คํ–‰ ์‹œ ์ด ๋ชจ๋“ˆ์˜ root_agent๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค (์•ฑ ์ด๋ฆ„: engine).
"""
from __future__ import annotations
from pathlib import Path
from google.adk.agents import SequentialAgent
from engine.agents.input_guard import create_input_guard
from engine.agents.pocket_context_loader import create_pocket_context_loader
from engine.repositories.content import ContentRepository
from engine.sub_agents.character.agent import create_character
from engine.sub_agents.director.agent import create_director
_CONTENT_DIR = Path(__file__).resolve().parent.parent / "content"
def create_pocket_pipeline(repo: ContentRepository | None = None,
character_model=None, director_model=None) -> SequentialAgent:
# ADK 2.3์ด SequentialAgent์— deprecation(โ†’ google.adk.workflow)์„ ๋„์šฐ์ง€๋งŒ,
# Workflow๋Š” ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์‹  API๋ผ CLAUDE.md์˜ ์—์ด์ „ํŠธ ๊ทœ์น™๊ณผ ํ•จ๊ป˜ ๋ณ„๋„ ๊ฒ€ํ†  ํ›„
# ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ๋‹ค (follow-up). ํ˜„ํ–‰ ๊ณต์‹ ๋ฆด๋ฆฌ์Šค์—์„œ SequentialAgent๋Š” ์ •์ƒ ๋™์ž‘.
repo = repo or ContentRepository(_CONTENT_DIR)
return SequentialAgent(
name="pocket_session",
sub_agents=[
create_pocket_context_loader(repo),
create_input_guard(repo),
create_character(character_model),
create_director(director_model),
],
)
root_agent = create_pocket_pipeline()