Peterase commited on
Commit
e47c7f4
·
1 Parent(s): c886471

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 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