Skip to content

Commit 70af5c8

Browse files
committed
fix (chat): deepgram sdk issues
fix (search): interactive search indexing
1 parent f454f5f commit 70af5c8

5 files changed

Lines changed: 28 additions & 8 deletions

File tree

src/server/main/search/routes.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from fastapi import APIRouter, Depends, HTTPException, Query
22
from fastapi.responses import JSONResponse, StreamingResponse
33
import asyncio
4+
from bson import ObjectId
5+
import datetime
46

57
from main.auth.utils import PermissionChecker
68
from main.search.models import UnifiedSearchRequest
@@ -16,6 +18,15 @@
1618
tags=["Search"]
1719
)
1820

21+
def sanitize_dict(d: dict) -> dict:
22+
"""Converts non-serializable types like ObjectId and datetime to strings."""
23+
for key, value in d.items():
24+
if isinstance(value, ObjectId):
25+
d[key] = str(value)
26+
elif isinstance(value, datetime.datetime):
27+
d[key] = value.isoformat()
28+
return d
29+
1930
@router.post("/unified", summary="Perform a unified search across all data sources")
2031
async def unified_search_endpoint(
2132
request: UnifiedSearchRequest,
@@ -73,10 +84,10 @@ async def search_memories_coro():
7384
tasks_coro, chats_coro, search_memories_coro()
7485
)
7586

76-
# Format results
77-
formatted_tasks = [{"type": "task", **t} for t in tasks_res]
78-
formatted_chats = [{"type": "chat", **c} for c in chats_res]
79-
formatted_memories = [{"type": "memory", **m} for m in memories_res]
87+
# Format and sanitize results
88+
formatted_tasks = [{"type": "task", **sanitize_dict(t)} for t in tasks_res]
89+
formatted_chats = [{"type": "chat", **sanitize_dict(c)} for c in chats_res]
90+
formatted_memories = [{"type": "memory", **sanitize_dict(m)} for m in memories_res]
8091

8192
all_results = formatted_tasks + formatted_chats + formatted_memories
8293

@@ -89,4 +100,4 @@ async def search_memories_coro():
89100
# Log the full error for debugging
90101
import traceback
91102
traceback.print_exc()
92-
raise HTTPException(status_code=500, detail=f"An error occurred during search: {str(e)}")
103+
raise HTTPException(status_code=500, detail=f"An error occurred during search: {str(e)}")

src/server/main/voice/routes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ async def process_audio_chunk(self, audio: tuple[int, np.ndarray]):
114114

115115
await self.send_message(json.dumps({"type": "status", "message": "transcribing"}))
116116
sample_rate, audio_array = audio
117+
118+
if audio_array.dtype != np.int16:
119+
audio_array = (audio_array * 32767).astype(np.int16)
120+
117121
transcription = await stt_model_instance.transcribe(audio_array.tobytes(), sample_rate=sample_rate)
118122

119123
if not transcription or not transcription.strip():

src/server/main/voice/stt/deepgram.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,19 @@ async def transcribe(self, audio_bytes: bytes, sample_rate: int) -> str:
4444
# The audio is raw PCM, 16-bit signed little-endian, mono.
4545
# We must provide the mimetype to Deepgram.
4646
source: BufferSource = {
47-
"buffer": audio_bytes,
48-
"mimetype": f"audio/raw;pcm=s16le;sample_rate={sample_rate};channels=1"
47+
"buffer": audio_bytes
4948
}
5049

5150
# Configure Deepgram options for the request for best results
51+
# Crucially, we must specify the encoding, sample_rate, and channels for raw audio.
5252
options = PrerecordedOptions(
5353
model="nova-3",
5454
smart_format=True,
5555
punctuate=True,
56-
utterances=True
56+
utterances=True,
57+
encoding="linear16",
58+
sample_rate=sample_rate,
59+
channels=1
5760
)
5861

5962
# Make the API call to transcribe the audio buffer

src/server/requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pgvector
2424
qwen-agent
2525
google-genai
2626
elevenlabs
27+
deepgram-sdk
2728
librosa
2829
llama-cpp-python
2930
faster-whisper

src/server/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pgvector
2424
qwen-agent
2525
google-genai
2626
elevenlabs
27+
deepgram-sdk
2728
librosa
2829
torch
2930
fastrtc[vad, stt, tts]

0 commit comments

Comments
 (0)