Spaces:
Running
Running
fix(rag-api): add msgpack and confluent-kafka to requirements, safe import
Browse files- ModuleNotFoundError: No module named 'msgpack' was crashing startup
- Added msgpack>=1.0.5 and confluent-kafka>=2.3.0 to requirements.txt
- Made msgpack import safe with try/except + HAS_MSGPACK flag
- Falls back to JSON parsing if msgpack unavailable
- requirements.txt +2 -0
- src/api/routes/top_stories.py +9 -2
requirements.txt
CHANGED
|
@@ -24,3 +24,5 @@ httpx>=0.27.0
|
|
| 24 |
aiohttp>=3.9.0
|
| 25 |
ddgs>=1.0.0 # Live search for hybrid RAG (renamed from duckduckgo-search)
|
| 26 |
python-dateutil>=2.8.2 # Date parsing for live results
|
|
|
|
|
|
|
|
|
| 24 |
aiohttp>=3.9.0
|
| 25 |
ddgs>=1.0.0 # Live search for hybrid RAG (renamed from duckduckgo-search)
|
| 26 |
python-dateutil>=2.8.2 # Date parsing for live results
|
| 27 |
+
msgpack>=1.0.5 # Kafka message deserialization (news.processed topic)
|
| 28 |
+
confluent-kafka>=2.3.0 # Kafka consumer for top stories
|
src/api/routes/top_stories.py
CHANGED
|
@@ -9,12 +9,17 @@ Fast, cached, and optimized for frontend display.
|
|
| 9 |
import logging
|
| 10 |
import asyncio
|
| 11 |
import json
|
| 12 |
-
import msgpack
|
| 13 |
from typing import List, Optional
|
| 14 |
from fastapi import APIRouter, Query
|
| 15 |
from pydantic import BaseModel
|
| 16 |
from datetime import datetime
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
logger = logging.getLogger(__name__)
|
| 19 |
|
| 20 |
router = APIRouter()
|
|
@@ -158,7 +163,9 @@ def _fetch_kafka_stories_sync(n: int = 3) -> List[TopStory]:
|
|
| 158 |
try:
|
| 159 |
value = msg.value()
|
| 160 |
try:
|
| 161 |
-
event = msgpack.unpackb(value, raw=False)
|
|
|
|
|
|
|
| 162 |
except Exception:
|
| 163 |
event = json.loads(value.decode("utf-8", errors="ignore"))
|
| 164 |
|
|
|
|
| 9 |
import logging
|
| 10 |
import asyncio
|
| 11 |
import json
|
|
|
|
| 12 |
from typing import List, Optional
|
| 13 |
from fastapi import APIRouter, Query
|
| 14 |
from pydantic import BaseModel
|
| 15 |
from datetime import datetime
|
| 16 |
|
| 17 |
+
try:
|
| 18 |
+
import msgpack
|
| 19 |
+
HAS_MSGPACK = True
|
| 20 |
+
except ImportError:
|
| 21 |
+
HAS_MSGPACK = False
|
| 22 |
+
|
| 23 |
logger = logging.getLogger(__name__)
|
| 24 |
|
| 25 |
router = APIRouter()
|
|
|
|
| 163 |
try:
|
| 164 |
value = msg.value()
|
| 165 |
try:
|
| 166 |
+
event = msgpack.unpackb(value, raw=False) if HAS_MSGPACK else None
|
| 167 |
+
if event is None:
|
| 168 |
+
raise ValueError("msgpack not available")
|
| 169 |
except Exception:
|
| 170 |
event = json.loads(value.decode("utf-8", errors="ignore"))
|
| 171 |
|