mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 09:13:14 +00:00
54 lines
2 KiB
Python
54 lines
2 KiB
Python
|
|
"""Tool: persist synthesized per-repo review style prompt."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import asyncio
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
from langgraph.config import get_config
|
||
|
|
|
||
|
|
from ..dashboard.review_styles import mark_analysis_completed, mark_analysis_failed
|
||
|
|
|
||
|
|
|
||
|
|
def save_review_style_prompt(
|
||
|
|
custom_prompt: str,
|
||
|
|
analysis_summary: str = "",
|
||
|
|
top_reviewers: str = "",
|
||
|
|
prs_sampled: int = 0,
|
||
|
|
reviews_sampled: int = 0,
|
||
|
|
) -> dict[str, Any]:
|
||
|
|
"""Save the synthesized repository-specific review style prompt.
|
||
|
|
|
||
|
|
Call this once at the end of style analysis with the final prompt text
|
||
|
|
that should be injected into the reviewer agent for this repository.
|
||
|
|
"""
|
||
|
|
config = get_config()
|
||
|
|
configurable = config.get("configurable") or {}
|
||
|
|
full_name = configurable.get("review_style_full_name")
|
||
|
|
if not isinstance(full_name, str) or "/" not in full_name:
|
||
|
|
return {"ok": False, "error": "review_style_full_name missing from config"}
|
||
|
|
|
||
|
|
reviewers_from_args = [r.strip() for r in top_reviewers.split(",") if r.strip()]
|
||
|
|
reviewers_from_config = configurable.get("review_style_top_reviewers") or []
|
||
|
|
merged_reviewers = reviewers_from_args or (
|
||
|
|
list(reviewers_from_config) if isinstance(reviewers_from_config, list) else []
|
||
|
|
)
|
||
|
|
prs_count = prs_sampled or int(configurable.get("review_style_prs_sampled") or 0)
|
||
|
|
reviews_count = reviews_sampled or int(configurable.get("review_style_reviews_sampled") or 0)
|
||
|
|
|
||
|
|
if not custom_prompt.strip():
|
||
|
|
asyncio.run(mark_analysis_failed(full_name, "custom_prompt was empty"))
|
||
|
|
return {"ok": False, "error": "custom_prompt cannot be empty"}
|
||
|
|
|
||
|
|
record = asyncio.run(
|
||
|
|
mark_analysis_completed(
|
||
|
|
full_name,
|
||
|
|
custom_prompt=custom_prompt.strip(),
|
||
|
|
analysis_summary=analysis_summary.strip(),
|
||
|
|
top_reviewers=merged_reviewers,
|
||
|
|
prs_sampled=prs_count,
|
||
|
|
reviews_sampled=reviews_count,
|
||
|
|
)
|
||
|
|
)
|
||
|
|
return {"ok": True, "full_name": full_name, "status": record.get("status")}
|