chore: import upstream snapshot with attribution
Validate YAML Workflows / Validate YAML Configuration Files (push) Has been cancelled
Validate YAML Workflows / Validate YAML Configuration Files (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
"""CLI entry point for executing ChatDev_new workflows."""
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import List, Union
|
||||
|
||||
from runtime.bootstrap.schema import ensure_schema_registry_populated
|
||||
from check.check import load_config
|
||||
from entity.graph_config import GraphConfig
|
||||
from entity.messages import Message
|
||||
from utils.attachments import AttachmentStore
|
||||
from utils.schema_exporter import build_schema_response, SchemaResolutionError
|
||||
from utils.task_input import TaskInputBuilder
|
||||
from workflow.graph_context import GraphContext
|
||||
from workflow.graph import GraphExecutor
|
||||
|
||||
OUTPUT_ROOT = Path("WareHouse")
|
||||
|
||||
|
||||
ensure_schema_registry_populated()
|
||||
|
||||
def build_task_input_payload(
|
||||
graph_context: GraphContext,
|
||||
prompt: str,
|
||||
attachment_paths: List[str]
|
||||
) -> Union[str, List[Message]]:
|
||||
"""Construct the initial task input, embedding attachments when available."""
|
||||
if not attachment_paths:
|
||||
return prompt
|
||||
|
||||
code_workspace = graph_context.directory / "code_workspace"
|
||||
attachments_dir = code_workspace / "attachments"
|
||||
attachments_dir.mkdir(parents=True, exist_ok=True)
|
||||
store = AttachmentStore(attachments_dir)
|
||||
builder = TaskInputBuilder(store)
|
||||
return builder.build_from_file_paths(prompt, attachment_paths)
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser(description="Run ChatDev_new workflow")
|
||||
parser.add_argument(
|
||||
"--path",
|
||||
type=Path,
|
||||
default=Path("yaml_instance/net_loop_test_included.yaml"),
|
||||
help="Path to the design_0.4.0 workflow file",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--name",
|
||||
type=str,
|
||||
default="test_project",
|
||||
help="Name of the project",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--fn-module",
|
||||
dest="fn_module",
|
||||
default=None,
|
||||
help="Optional module providing edge helper functions referenced by the design",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--inspect-schema",
|
||||
action="store_true",
|
||||
help="Output configuration schema (optionally scoped by breadcrumbs) and exit",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--schema-breadcrumbs",
|
||||
type=str,
|
||||
default=None,
|
||||
help="JSON array describing schema breadcrumbs (e.g. '[{\"node\":\"DesignConfig\",\"field\":\"graph\"}]')",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--attachment",
|
||||
action="append",
|
||||
default=[],
|
||||
help="Path to a file to attach to the initial user message (repeatable)",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
def main() -> None:
|
||||
args = parse_arguments()
|
||||
|
||||
if args.inspect_schema:
|
||||
breadcrumbs = None
|
||||
if args.schema_breadcrumbs:
|
||||
try:
|
||||
breadcrumbs = json.loads(args.schema_breadcrumbs)
|
||||
except json.JSONDecodeError as exc:
|
||||
raise SystemExit(f"Invalid --schema-breadcrumbs JSON: {exc}")
|
||||
try:
|
||||
schema = build_schema_response(breadcrumbs)
|
||||
except SchemaResolutionError as exc:
|
||||
raise SystemExit(f"Failed to resolve schema: {exc}")
|
||||
print(json.dumps(schema, indent=2, ensure_ascii=False))
|
||||
return
|
||||
|
||||
design = load_config(
|
||||
args.path,
|
||||
fn_module=args.fn_module,
|
||||
)
|
||||
|
||||
task_prompt = input("Please enter the task prompt: ")
|
||||
|
||||
# Create GraphConfig and GraphContext
|
||||
graph_config = GraphConfig.from_definition(
|
||||
design.graph,
|
||||
name=args.name,
|
||||
output_root=OUTPUT_ROOT,
|
||||
source_path=str(args.path),
|
||||
vars=design.vars,
|
||||
)
|
||||
graph_context = GraphContext(config=graph_config)
|
||||
|
||||
task_input = build_task_input_payload(
|
||||
graph_context,
|
||||
task_prompt,
|
||||
args.attachment or [],
|
||||
)
|
||||
|
||||
GraphExecutor.execute_graph(graph_context, task_input)
|
||||
|
||||
print(graph_context.final_message())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user