File size: 2,441 Bytes
f646e0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""๋ฃจํŠธ ์—์ด์ „ํŠธ โ€” ๊ฐœ์ž… ํฌ์ผ“ ํ„ด ํŒŒ์ดํ”„๋ผ์ธ ์กฐ๋ฆฝ (ํŒฉํ† ๋ฆฌ๋Š” ์กฐ๋ฆฝ๋งŒ ๋‹ด๋‹น).

    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()