Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions mellea/stdlib/reqlib/is_appellate_case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import json
import os

from mellea.stdlib.requirement import Requirement


def get_court_from_case(case_name, folder_path):
files = os.listdir(folder_path)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Operate over strings, not files, in the stdlib.

for file_path in files:
with open(os.path.join(folder_path, file_path)) as file:
data = json.load(file)
for entry in data:
if case_name.lower() in entry["name"].lower():
return entry["court"]["name"]


def is_appellate_court(court_name):
lowered_name = court_name.lower()
exceptions = ["pennsylvania superior court", "pennsylvania commonwealth court"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please document this. Why are these exceptions and how are they handled?

keywords = ["supreme", "appeal", "appellate"]
return (
any(keyword in lowered_name for keyword in keywords)
or lowered_name in 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.",
validation_fn=lambda x: is_appellate_court(
get_court_from_case(x, folder_path)
),
)


class IsDistrictCase(Requirement):
def __init__(self, folder_path):
self.folder_path = folder_path
super().__init__(
description="The result should be a district court case.",
validation_fn=lambda x: not is_appellate_court(
get_court_from_case(x, folder_path)
),
)
36 changes: 36 additions & 0 deletions mellea/stdlib/reqlib/is_appellate_case_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import pytest
from is_appellate_case import get_court_from_case, is_appellate_court

from mellea import start_session
from mellea.stdlib.requirement import req, simple_validate
from mellea.stdlib.sampling import RejectionSamplingStrategy


def test_is_appellate_court_test():
assert is_appellate_court("Supreme Court of New Jersey") is True
assert is_appellate_court("Tax Court of New Jersey") is False
assert is_appellate_court("Pennsylvania Commonwealth Court") is True
assert is_appellate_court("U.S. Court of Appeals for the First Circuit") is True
assert is_appellate_court("Maryland Appellate Court") is True
assert is_appellate_court("District Court of Maryland") is False


def test_appellate_case_session():
case_name = "ARTHUR DeMOORS, PLAINTIFF-RESPONDENT, v. ATLANTIC CASUALTY INSURANCE COMPANY OF NEWARK, NEW JERSEY, A CORPORATION, DEFENDANT-APPELLANT"
folder_path = "nj_case_metadata"

m = start_session()
appellate_case = m.instruct(
f"Return the following string (only return the characters after the colon, no other words): {case_name}",
requirements=[
req(
"The result should be an appellate court case",
validation_fn=simple_validate(
lambda x: is_appellate_court(get_court_from_case(x, folder_path))
),
)
],
strategy=RejectionSamplingStrategy(loop_budget=5),
return_sampling_results=True,
)
assert "SUCCESS" in appellate_case
Loading