-
Notifications
You must be signed in to change notification settings - Fork 6
Implemented is_appellate_case verifier for legal applications, along … #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| import json | ||
| import os | ||
|
|
||
| from mellea.stdlib.base import Context | ||
| from mellea.stdlib.requirement import Requirement, ValidationResult | ||
|
|
||
|
|
||
| def load_jsons_from_folder(folder_path: str) -> list[dict]: | ||
| """Load all JSON files in the folder into a list of dicts.""" | ||
| all_entries = [] | ||
| for file_name in os.listdir(folder_path): | ||
| with open(os.path.join(folder_path, file_name)) as file: | ||
| data = json.load(file) | ||
| all_entries.extend(data) | ||
| return all_entries | ||
|
|
||
|
|
||
| def get_court_from_case(ctx: Context, case_metadata: list[dict]) -> str: | ||
| """Given a case name and case metadata, return the court name.""" | ||
| if ctx is None: | ||
| raise ValueError("Context cannot be None") | ||
|
|
||
| last_output = ctx.last_output() | ||
| if last_output is None: | ||
| raise ValueError("No last output found in context") | ||
|
|
||
| case_name = last_output.value | ||
|
|
||
| if not case_name or not isinstance(case_name, str): | ||
| raise ValueError("Case name must be a non-empty string") | ||
|
|
||
| for entry in case_metadata: | ||
| if case_name.lower() in entry["name"].lower(): | ||
| return entry["court"]["name"] | ||
|
|
||
| raise ValueError("Court not found for the given case name") | ||
|
|
||
|
|
||
| def is_appellate_court(court_name: str) -> ValidationResult: | ||
| """Determine if a court is an appellate court based on its name.""" | ||
| # rule exceptions: the 2 appellate courts whose names do not include the below keywords | ||
| rule_exceptions = ["pennsylvania superior court", "pennsylvania commonwealth court"] | ||
| keywords = ["supreme", "appeal", "appellate"] | ||
|
|
||
| lowered_name = court_name.lower() | ||
| return ValidationResult( | ||
| any(keyword in lowered_name for keyword in keywords) | ||
| or lowered_name in rule_exceptions | ||
| ) | ||
|
|
||
|
|
||
| class IsAppellateCase(Requirement): | ||
| def __init__(self, folder_path): | ||
| self.folder_path = folder_path | ||
| super().__init__( | ||
| description="The result should be an appellate court case.", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A citation of?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Supriya and I agreed that I could implement this assuming the input would just be the name of a case, not the citation—should that be changed though? |
||
| validation_fn=lambda ctx: is_appellate_court( | ||
| get_court_from_case(ctx, folder_path) | ||
| ), | ||
| ) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.