Skip to content

Commit 35d3d32

Browse files
committed
refactor model
1 parent f6bd4ca commit 35d3d32

19 files changed

Lines changed: 983 additions & 1085 deletions

src/omen/cli/actor.py

Lines changed: 10 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@
88

99
from omen.analysis.actor.insight import generate_persona_insight
1010
from omen.analysis.actor.query import build_events_snapshot
11-
from omen.ingest.synthesizer.services.actor import generate_actor_and_events_from_document
12-
from omen.ingest.synthesizer.services.strategy import generate_strategy_ontology_from_document
11+
from omen.ingest.synthesizer.services.actor_pipeline import ensure_actor_artifacts
1312
from omen.ingest.synthesizer.prompts.registry import ensure_analyze_prompt_available
14-
from omen.ingest.synthesizer.assembler import attach_actor_ref, attach_timeline_events
15-
from omen.scenario.case_replay_loader import save_strategy_ontology
1613
from omen.scenario.ontology_validator import (
1714
validate_actor_ontology_payload,
1815
validate_actor_strategy_link_payload,
@@ -24,10 +21,6 @@
2421
ensure_actor_output_dir,
2522
)
2623
from omen.ui.case_catalog import case_display_title, normalize_case_id, suggest_known_outcome
27-
from omen.cli.situation import (
28-
handle_situation_analyze_command,
29-
register_situation_analyze_commands,
30-
)
3124

3225

3326
ACTOR_DEFAULT_OUTPUT_ROOT = "output/actors"
@@ -57,12 +50,10 @@ def _add_actor_common_args(parser: Any) -> None:
5750
)
5851

5952

60-
def register_analyze_commands(subparsers: Any) -> None:
53+
def register_analyze_commands(subparsers: Any) -> Any:
6154
analyze = subparsers.add_parser("analyze", help="top-level analysis commands")
6255
analyze_sub = analyze.add_subparsers(dest="analyze_object", required=True)
6356

64-
register_situation_analyze_commands(analyze_sub)
65-
6657
actor = analyze_sub.add_parser("actor", help="strategic actor analysis flow")
6758
_add_actor_common_args(actor)
6859

@@ -84,6 +75,7 @@ def register_analyze_commands(subparsers: Any) -> None:
8475
founder.add_argument("--date", required=False)
8576
founder.add_argument("--config", required=False, default="config/llm.toml")
8677
founder.add_argument("--output-dir", required=False, default="output/founder")
78+
return analyze_sub
8779

8880

8981
def register_validate_commands(subparsers: Any) -> None:
@@ -100,21 +92,6 @@ def register_validate_commands(subparsers: Any) -> None:
10092
actor.add_argument("--output-dir", required=False, default=ACTOR_DEFAULT_OUTPUT_ROOT)
10193

10294

103-
def _resolve_doc_path(doc: str) -> Path:
104-
raw = str(doc).strip()
105-
if "/" in raw:
106-
candidate = Path(raw)
107-
if not candidate.suffix:
108-
candidate = candidate.with_suffix(".md")
109-
return candidate
110-
111-
stem = raw[:-3] if raw.endswith(".md") else raw
112-
actor_candidate = Path("cases/actors") / f"{stem}.md"
113-
if actor_candidate.exists():
114-
return actor_candidate
115-
return Path("cases") / f"{stem}.md"
116-
117-
11895
def _load_analysis_artifacts(case_id: str, output_dir: str) -> tuple[Path, dict[str, Any] | None, dict[str, Any]]:
11996
case_dir = ensure_actor_output_dir(case_id, output_root=output_dir)
12097
strategy_path = case_dir / STRATEGY_ONTOLOGY_FILENAME
@@ -130,65 +107,6 @@ def _load_analysis_artifacts(case_id: str, output_dir: str) -> tuple[Path, dict[
130107
return case_dir, strategy_payload, actor_payload
131108

132109

133-
def _ensure_actor_artifacts(args: Any) -> tuple[str, Path]:
134-
case_id = normalize_case_id(args.doc)
135-
doc_path = _resolve_doc_path(args.doc)
136-
if not doc_path.exists():
137-
raise FileNotFoundError(f"document not found: {doc_path}")
138-
139-
case_dir = ensure_actor_output_dir(case_id, output_root=args.output_dir)
140-
strategy_path = case_dir / STRATEGY_ONTOLOGY_FILENAME
141-
actor_path = case_dir / ACTOR_ONTOLOGY_FILENAME
142-
143-
if strategy_path.exists() and actor_path.exists():
144-
return case_id, case_dir
145-
146-
title = args.title or case_display_title(case_id)
147-
known_outcome = args.known_outcome or suggest_known_outcome(case_id)
148-
149-
generation = generate_strategy_ontology_from_document(
150-
document_path=str(doc_path),
151-
case_id=case_id,
152-
title=title,
153-
strategy=None,
154-
known_outcome=known_outcome,
155-
config_path=args.config,
156-
)
157-
known_outcome_effective = generation.inferred_known_outcome or known_outcome
158-
159-
actor_payload, timeline_events = generate_actor_and_events_from_document(
160-
document_path=str(doc_path),
161-
case_id=case_id,
162-
title=title,
163-
known_outcome=known_outcome_effective,
164-
config_path=args.config,
165-
)
166-
167-
strategy_payload = attach_timeline_events(generation.strategy_ontology, timeline_events)
168-
strategy_payload = attach_actor_ref(
169-
strategy_payload,
170-
actor_payload,
171-
actor_filename=actor_path.name,
172-
)
173-
174-
save_strategy_ontology(strategy_payload, strategy_path)
175-
actor_path.write_text(json.dumps(actor_payload, ensure_ascii=False, indent=2), encoding="utf-8")
176-
177-
report = {
178-
"case_id": case_id,
179-
"strategy_ontology_path": str(strategy_path),
180-
"actor_ontology_path": str(actor_path),
181-
"validation_passed": generation.validation_passed,
182-
"validation_issues": generation.validation_issues,
183-
"reused_existing": False,
184-
}
185-
(case_dir / "generation.json").write_text(
186-
json.dumps(report, ensure_ascii=False, indent=2),
187-
encoding="utf-8",
188-
)
189-
return case_id, case_dir
190-
191-
192110
def _run_status(
193111
case_dir: Path,
194112
strategy_payload: dict[str, Any] | None,
@@ -231,9 +149,6 @@ def _run_persona(
231149

232150

233151
def handle_analyze_command(args: Any) -> int:
234-
if args.analyze_object == "situation":
235-
return handle_situation_analyze_command(args)
236-
237152
if args.analyze_object != "actor":
238153
print(f"Analyze object `{args.analyze_object}` is not supported")
239154
return 3
@@ -245,7 +160,13 @@ def handle_analyze_command(args: Any) -> int:
245160
return 2
246161

247162
try:
248-
case_id, _ = _ensure_actor_artifacts(args)
163+
case_id, _ = ensure_actor_artifacts(
164+
doc=str(args.doc),
165+
title=str(args.title) if args.title else None,
166+
known_outcome=str(args.known_outcome) if args.known_outcome else None,
167+
config_path=str(args.config),
168+
output_dir=str(args.output_dir),
169+
)
249170
case_dir, strategy_payload, actor_payload = _load_analysis_artifacts(case_id, args.output_dir)
250171
except Exception as exc:
251172
print(f"Analyze actor setup failed: {exc}")

src/omen/cli/main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from omen.cli.situation import (
2323
handle_scenario_command,
2424
handle_situation_analyze_command,
25+
register_situation_analyze_commands,
2526
register_scenario_command,
2627
)
2728
from omen.explain.precision_report import build_precision_report
@@ -385,7 +386,8 @@ def main() -> None:
385386
help="Add timestamp suffix to output filename to avoid overwrite",
386387
)
387388

388-
register_analyze_commands(sub)
389+
analyze_sub = register_analyze_commands(sub)
390+
register_situation_analyze_commands(analyze_sub)
389391
register_validate_commands(sub)
390392
register_case_commands(sub)
391393
register_scenario_command(sub)

src/omen/cli/situation.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import json
66
from datetime import datetime
77
from pathlib import Path
8-
from types import SimpleNamespace
98
from typing import Any
109

10+
from omen.ingest.synthesizer.services.actor_pipeline import ensure_actor_artifacts
1111
from omen.ingest.processor import fetch_url_text, save_url_source_text
1212
from omen.ingest.synthesizer.builders.situation import (
1313
validate_situation_source_or_raise,
@@ -68,18 +68,15 @@ def _resolve_default_output_path(_input_path: Path, pack_id: str) -> Path:
6868

6969

7070
def _generate_actor_ref_from_situation_doc(*, situation_doc_path: Path, config_path: str) -> str:
71-
# Reuse existing actor pipeline entry to keep artifact structure consistent.
72-
from omen.cli.actor import _ensure_actor_artifacts
7371
from omen.ui.artifacts import ACTOR_ONTOLOGY_FILENAME
7472

75-
actor_args = SimpleNamespace(
73+
_, case_dir = ensure_actor_artifacts(
7674
doc=str(situation_doc_path),
7775
title=None,
7876
known_outcome=None,
79-
config=config_path,
77+
config_path=config_path,
8078
output_dir="output/actors",
8179
)
82-
_, case_dir = _ensure_actor_artifacts(actor_args)
8380
actor_path = case_dir / ACTOR_ONTOLOGY_FILENAME
8481
return str(actor_path)
8582

src/omen/ingest/models.py

Lines changed: 0 additions & 109 deletions
This file was deleted.

0 commit comments

Comments
 (0)