|
8 | 8 | import json |
9 | 9 | import os |
10 | 10 | import logging |
| 11 | +import sys |
11 | 12 | from http.server import BaseHTTPRequestHandler |
12 | 13 | from openai import OpenAI |
13 | 14 | from dotenv import load_dotenv |
|
16 | 17 |
|
17 | 18 | load_dotenv() |
18 | 19 |
|
19 | | -# Attach Fireworks tracing handler to root logger |
20 | | -fireworks_handler = FireworksTracingHttpHandler() |
21 | | -logging.getLogger().addHandler(fireworks_handler) |
| 20 | +# Configure logging so INFO and below go to stdout, WARNING+ to stderr. |
| 21 | +# This avoids Vercel marking INFO logs as [error] (stderr). |
| 22 | +root_logger = logging.getLogger() |
| 23 | +root_logger.handlers.clear() |
| 24 | +root_logger.setLevel(logging.INFO) |
| 25 | + |
| 26 | + |
| 27 | +class _InfoOnly(logging.Filter): |
| 28 | + def filter(self, record: logging.LogRecord) -> bool: |
| 29 | + return record.levelno <= logging.INFO |
| 30 | + |
| 31 | + |
| 32 | +formatter = logging.Formatter("%(levelname)s:%(name)s:%(message)s") |
| 33 | + |
| 34 | +stdout_handler = logging.StreamHandler(sys.stdout) |
| 35 | +stdout_handler.addFilter(_InfoOnly()) |
| 36 | +stdout_handler.setFormatter(formatter) |
| 37 | +root_logger.addHandler(stdout_handler) |
| 38 | + |
| 39 | +stderr_handler = logging.StreamHandler(sys.stderr) |
| 40 | +stderr_handler.setLevel(logging.WARNING) |
| 41 | +stderr_handler.setFormatter(formatter) |
| 42 | +root_logger.addHandler(stderr_handler) |
| 43 | + |
| 44 | +# Attach Fireworks tracing handler to root logger (non-stream HTTP sink) |
| 45 | +root_logger.addHandler(FireworksTracingHttpHandler()) |
22 | 46 |
|
23 | 47 |
|
24 | 48 | class handler(BaseHTTPRequestHandler): |
@@ -46,19 +70,15 @@ def do_POST(self): |
46 | 70 | # Prepare completion arguments |
47 | 71 | completion_kwargs = { |
48 | 72 | "messages": req.messages, |
49 | | - **req.completion_params, |
| 73 | + "model": req.completion_params.get("model"), |
| 74 | + "temperature": req.completion_params.get("temperature"), |
| 75 | + "max_tokens": req.completion_params.get("max_tokens"), |
50 | 76 | } |
51 | 77 |
|
52 | 78 | # Add tools if present |
53 | 79 | if req.tools: |
54 | 80 | completion_kwargs["tools"] = req.tools |
55 | 81 |
|
56 | | - # Add completion parameters if they exist |
57 | | - # if hasattr(req, 'completion_params') and req.completion_params: |
58 | | - # # Filter out any model override |
59 | | - # params = {k: v for k, v in req.completion_params.items() if k != 'model'} |
60 | | - # completion_kwargs.update(params) |
61 | | - |
62 | 82 | # Get API key (prefer request api_key, fallback to environment) |
63 | 83 | api_key = req.api_key or os.environ.get("FIREWORKS_API_KEY") |
64 | 84 | if not api_key: |
|
0 commit comments