opsguard / models.py
sai1906's picture
Upload folder using huggingface_hub
3476d6b verified
Raw
History Blame Contribute Delete
3.11 kB
from enum import Enum
from typing import Any
from openenv.core.env_server.types import Action, Observation
from pydantic import Field
class ActionType(str, Enum):
LABEL = "label"
CLOSE_SPAM = "close_spam"
REQUEST_INFO = "request_info"
LINK_DUPLICATE = "link_duplicate"
ASSIGN = "assign"
COMMENT = "comment"
MERGE_PR = "merge_pr"
REJECT_PR = "reject_pr"
REVIEW_PR_DIFF = "review_pr_diff"
CHECK_DEPENDENCY = "check_dependency"
FLAG_SECURITY = "flag_security"
REVOKE_TRUST = "revoke_trust"
QUERY_HISTORY = "query_history"
REFLECT = "reflect"
UPDATE_EPISODE = "update_episode"
DELETE_EPISODE = "delete_episode"
MERGE_EPISODES = "merge_episodes"
WAIT = "wait"
class SecurityVerdict(str, Enum):
SAFE = "safe"
SUSPICIOUS = "suspicious"
MALICIOUS = "malicious"
class OpsguardAction(Action):
action_type: ActionType = Field(default=ActionType.WAIT)
target_issue_id: int | None = Field(default=None, description="Issue/PR id from current observation")
label: str | None = Field(default=None, description="Label name for LABEL action")
duplicate_of_id: int | None = Field(default=None, description="Existing issue id this duplicates")
assignee_login: str | None = Field(default=None, description="Maintainer login for ASSIGN")
comment_body: str | None = Field(default=None, description="Body for COMMENT, REQUEST_INFO, REJECT_PR, FLAG_SECURITY")
query: str | None = Field(default=None, description="Free-text query for QUERY_HISTORY")
reasoning: str | None = Field(default=None, description="Optional rationale used by grader")
security_verdict: SecurityVerdict | None = Field(default=None, description="Verdict for REVIEW_PR_DIFF / CHECK_DEPENDENCY")
revoke_target_login: str | None = Field(default=None, description="Contributor to revoke trust from")
class IssueView(Observation):
issue_id: int = 0
number: int = 0
title: str = ""
body: str = ""
is_pr: bool = False
pr_diff_preview: str = ""
pr_changed_files: list[str] = Field(default_factory=list)
pr_dependency_changes: list[dict[str, str]] = Field(default_factory=list)
author_login: str = ""
author_pr_count: int = 0
author_account_age_days: int = 0
author_first_contribution_days_ago: int = 0
available_labels: list[str] = Field(default_factory=list)
comments_preview: list[dict[str, str]] = Field(default_factory=list)
author_profile: dict[str, Any] = Field(default_factory=dict)
behavior_tokens: list[str] = Field(default_factory=list)
behavior_risk_score: float = 0.0
behavior_hints: list[str] = Field(default_factory=list)
class OpsguardObservation(Observation):
scenario_id: str = ""
step: int = 0
step_budget: int = 0
queue_position: int = 0
queue_total: int = 0
current_issue: IssueView | None = None
memory_hits: list[dict[str, Any]] = Field(default_factory=list)
recent_actions: list[dict[str, Any]] = Field(default_factory=list)
repo_health: float = 1.0
n_attacks_landed: int = 0
feedback: str = ""