-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
99 lines (73 loc) · 3.03 KB
/
config.py
File metadata and controls
99 lines (73 loc) · 3.03 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import os
from pathlib import Path
import yaml
from pydantic import BaseModel, Field
from agent_chat_cli.utils.system_prompt import build_system_prompt
PROMPTS_DIR = Path(__file__).parent.parent / "prompts"
class AgentConfig(BaseModel):
description: str
prompt: str
mcp_servers: list[str] = Field(default_factory=list)
disallowed_tools: list[str] = Field(default_factory=list)
class MCPServerConfig(BaseModel):
description: str
command: str
args: list[str] = Field(default_factory=list)
env: dict[str, str] = Field(default_factory=dict)
disallowed_tools: list[str] = Field(default_factory=list)
enabled: bool = True
prompt: str | None = None
class AgentChatConfig(BaseModel):
system_prompt: str
model: str
include_partial_messages: bool = True # Enable streaming responses
agents: dict[str, AgentConfig] = Field(default_factory=dict)
mcp_servers: dict[str, MCPServerConfig] = Field(default_factory=dict)
disallowed_tools: list[str] = Field(default_factory=list)
permission_mode: str = "bypass_permissions"
def load_prompt(prompt_value: str) -> str:
try:
prompt_path = PROMPTS_DIR / prompt_value
return prompt_path.read_text()
except (FileNotFoundError, OSError):
# If it's not a file, treat it as a literal prompt string
return prompt_value
def load_config(
config_path: str | Path = "agent-chat-cli.config.yaml",
) -> AgentChatConfig:
path = Path(config_path)
if not path.exists():
raise FileNotFoundError(f"Configuration file not found: {path}")
with open(path) as f:
raw_config = yaml.safe_load(f)
base_system_prompt = ""
if raw_config.get("system_prompt"):
base_system_prompt = load_prompt(raw_config["system_prompt"])
if raw_config.get("agents"):
for agent_config in raw_config["agents"].values():
if agent_config.get("prompt"):
agent_config["prompt"] = load_prompt(agent_config["prompt"])
mcp_server_prompts = []
if raw_config.get("mcp_servers"):
enabled_servers = {
name: config
for name, config in raw_config["mcp_servers"].items()
if config.get("enabled", True)
}
raw_config["mcp_servers"] = enabled_servers
for server_config in enabled_servers.values():
if server_config.get("prompt"):
loaded_prompt = load_prompt(server_config["prompt"])
server_config["prompt"] = loaded_prompt
mcp_server_prompts.append(loaded_prompt)
if server_config.get("env"):
for key, value in server_config["env"].items():
server_config["env"][key] = os.path.expandvars(value)
if server_config.get("args"):
server_config["args"] = [
os.path.expandvars(arg) for arg in server_config["args"]
]
raw_config["system_prompt"] = build_system_prompt(
base_system_prompt, mcp_server_prompts
)
return AgentChatConfig(**raw_config)