Skip to content

Commit a0b02aa

Browse files
authored
fail proxy loudly (#293)
* fail proxy loudly * lock * fix * fix test * one fix at a time * test * revert * test * remove
1 parent c1ef460 commit a0b02aa

File tree

6 files changed

+74
-6
lines changed

6 files changed

+74
-6
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ jobs:
109109
--ignore=tests/test_tau_bench_airline_smoke.py \
110110
--ignore=tests/pytest/test_svgbench.py \
111111
--ignore=tests/pytest/test_livesvgbench.py \
112+
--ignore=tests/remote_server/test_remote_fireworks.py \
112113
--ignore=tests/remote_server/test_remote_fireworks_propagate_status.py \
113114
--ignore=tests/logging/test_elasticsearch_direct_http_handler.py \
114115
--ignore=eval_protocol/benchmarks/ \

eval_protocol/__init__.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,28 @@
7979
WeaveAdapter = None
8080

8181
try:
82-
from .proxy import create_app, AuthProvider, AccountInfo
82+
from .proxy import create_app, AuthProvider, AccountInfo # pyright: ignore[reportAssignmentType]
8383
except ImportError:
84-
create_app = None
85-
AuthProvider = None
86-
AccountInfo = None
84+
85+
def create_app(*args, **kwargs):
86+
raise ImportError(
87+
"Proxy functionality requires additional dependencies. "
88+
"Please install with: pip install eval-protocol[proxy]"
89+
)
90+
91+
class AuthProvider:
92+
def __init__(self, *args, **kwargs):
93+
raise ImportError(
94+
"Proxy functionality requires additional dependencies. "
95+
"Please install with: pip install eval-protocol[proxy]"
96+
)
97+
98+
class AccountInfo:
99+
def __init__(self, *args, **kwargs):
100+
raise ImportError(
101+
"Proxy functionality requires additional dependencies. "
102+
"Please install with: pip install eval-protocol[proxy]"
103+
)
87104

88105

89106
warnings.filterwarnings("default", category=DeprecationWarning, module="eval_protocol")

pyproject.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ langgraph_tools = [
142142
"langchain-fireworks>=0.3.0",
143143
]
144144

145+
proxy = [
146+
"redis>=5.0.0",
147+
"langfuse>=2.0.0",
148+
"uuid6>=2025.0.0",
149+
]
150+
145151
[project.scripts]
146152
fireworks-reward = "eval_protocol.cli:main"
147153
eval-protocol = "eval_protocol.cli:main"

tests/remote_server/test_remote_fireworks.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ def rows() -> List[EvaluationRow]:
9898
return [row, row, row]
9999

100100

101-
@pytest.mark.skipif(os.environ.get("CI") == "true", reason="Only run this test locally (skipped in CI)")
102101
@pytest.mark.parametrize(
103102
"completion_params",
104103
[{"model": "fireworks_ai/accounts/fireworks/models/gpt-oss-120b", "temperature": 0.5}],

tests/remote_server/test_remote_fireworks_propagate_status.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
from eval_protocol.models import EvaluationRow, Message, Status
2424
from eval_protocol.pytest import evaluation_test
2525
from eval_protocol.pytest.remote_rollout_processor import RemoteRolloutProcessor
26+
from eval_protocol.adapters.fireworks_tracing import FireworksTracingAdapter
27+
from eval_protocol.utils.evaluation_row_utils import filter_longest_conversation
28+
from eval_protocol.types.remote_rollout_processor import DataLoaderConfig
2629

2730

2831
def find_available_port() -> int:
@@ -75,6 +78,18 @@ def setup_remote_server():
7578
process.wait()
7679

7780

81+
def fetch_fireworks_traces(config: DataLoaderConfig) -> List[EvaluationRow]:
82+
base_url = config.model_base_url or "https://tracing.fireworks.ai"
83+
adapter = FireworksTracingAdapter(base_url=base_url)
84+
return adapter.get_evaluation_rows(tags=[f"rollout_id:{config.rollout_id}"], max_retries=7)
85+
86+
87+
def fireworks_output_data_loader(config: DataLoaderConfig) -> DynamicDataLoader:
88+
return DynamicDataLoader(
89+
generators=[lambda: fetch_fireworks_traces(config)], preprocess_fn=filter_longest_conversation
90+
)
91+
92+
7893
def rows() -> List[EvaluationRow]:
7994
row = EvaluationRow(messages=[Message(role="user", content="What is the capital of France?")])
8095
return [row]
@@ -88,6 +103,7 @@ def rows() -> List[EvaluationRow]:
88103
rollout_processor=RemoteRolloutProcessor(
89104
remote_base_url=f"http://127.0.0.1:{SERVER_PORT}",
90105
timeout_seconds=120,
106+
output_data_loader=fireworks_output_data_loader,
91107
),
92108
)
93109
async def test_remote_rollout_and_fetch_fireworks_propagate_status(row: EvaluationRow) -> EvaluationRow:

uv.lock

Lines changed: 30 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)