Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ env.bak/
venv.bak/
*.backup

# Secrets
secrets.yaml

# Spyder project settings
.spyderproject
.spyproject
Expand Down
12 changes: 12 additions & 0 deletions eval_protocol/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@
except ImportError:
WeaveAdapter = None

try:
from .proxy import create_app, AuthProvider, AccountInfo
except ImportError:
create_app = None
AuthProvider = None
AccountInfo = None


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

__all__ = [
Expand Down Expand Up @@ -130,6 +138,10 @@
"RolloutMetadata",
"StatusResponse",
"create_langfuse_config_tags",
# Proxy
"create_app",
"AuthProvider",
"AccountInfo",
]

from . import _version
Expand Down
14 changes: 8 additions & 6 deletions eval_protocol/adapters/fireworks_tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
from __future__ import annotations
import logging
import requests
import time
from datetime import datetime
from typing import Any, Dict, List, Optional, Protocol
import os

from eval_protocol.models import EvaluationRow, InputMetadata, ExecutionMetadata, Message
from .base import BaseAdapter
Expand Down Expand Up @@ -343,15 +343,17 @@ def get_evaluation_rows(
# Remove None values
params = {k: v for k, v in params.items() if v is not None}

# Make request to proxy
# Make request to proxy (using pointwise for efficiency)
if self.project_id:
url = f"{self.base_url}/v1/project_id/{self.project_id}/traces"
url = f"{self.base_url}/v1/project_id/{self.project_id}/traces/pointwise"
else:
url = f"{self.base_url}/v1/traces"
url = f"{self.base_url}/v1/traces/pointwise"

headers = {"Authorization": f"Bearer {os.environ.get('FIREWORKS_API_KEY')}"}

result = None
try:
response = requests.get(url, params=params, timeout=self.timeout)
response = requests.get(url, params=params, timeout=self.timeout, headers=headers)
response.raise_for_status()
result = response.json()
except requests.exceptions.HTTPError as e:
Expand All @@ -365,7 +367,7 @@ def get_evaluation_rows(
except Exception: # In case e.response.json() fails
error_msg = f"Proxy error: {e.response.text}"

logger.error("Failed to fetch traces from proxy: %s", error_msg)
logger.error("Failed to fetch traces from proxy (HTTP %s): %s", e.response.status_code, error_msg)
return eval_rows
except requests.exceptions.RequestException as e:
# Non-HTTP errors (network issues, timeouts, etc.)
Expand Down
2 changes: 2 additions & 0 deletions eval_protocol/proxy/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# In order to set other model providers keys for proxy, make a copy, rename to .env, and fill here
OPENAI_API_KEY=sk-proj-xxx
23 changes: 23 additions & 0 deletions eval_protocol/proxy/Dockerfile.gateway
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Metadata Extraction Gateway - Sits in front of LiteLLM
FROM python:3.11-slim

WORKDIR /app

# Prevent Python from buffering stdout/stderr
ENV PYTHONUNBUFFERED=1

# Copy requirements file
COPY ./requirements.txt /app/requirements.txt

# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy the proxy package
COPY ./proxy_core /app/proxy_core

# Expose port
EXPOSE 4000

# Run the gateway as a module
# LITELLM_URL will be set by environment (docker-compose or Cloud Run)
CMD ["python", "-m", "proxy_core.main"]
Loading
Loading