From 71e6089ea9d5863f77c9ff7ae40bdb08f9203aa1 Mon Sep 17 00:00:00 2001 From: Ritik Khatri Date: Fri, 24 Oct 2025 12:32:29 +0530 Subject: [PATCH 1/3] feat: add get_embedding_dims util to get the embedder model dimensions --- .../src/advanced_omi_backend/llm_client.py | 2 +- .../src/advanced_omi_backend/memory/config.py | 52 ++++++++++++++----- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/backends/advanced/src/advanced_omi_backend/llm_client.py b/backends/advanced/src/advanced_omi_backend/llm_client.py index f3b0bb18..88309d6f 100644 --- a/backends/advanced/src/advanced_omi_backend/llm_client.py +++ b/backends/advanced/src/advanced_omi_backend/llm_client.py @@ -77,7 +77,7 @@ def generate( ) -> str: """Generate text completion using OpenAI-compatible API.""" try: - model_name = model or self.model + model_name = self.model or model temp = temperature or self.temperature # Build completion parameters diff --git a/backends/advanced/src/advanced_omi_backend/memory/config.py b/backends/advanced/src/advanced_omi_backend/memory/config.py index 2c55a7b3..3edca3f1 100644 --- a/backends/advanced/src/advanced_omi_backend/memory/config.py +++ b/backends/advanced/src/advanced_omi_backend/memory/config.py @@ -178,17 +178,8 @@ def build_memory_config_from_env() -> MemoryConfig: max_tokens=memory_config.get("llm_settings", {}).get("max_tokens", 2000) ) llm_provider_enum = LLMProvider.OPENAI - - # Determine embedding dimensions based on model - if embedding_model == "text-embedding-3-small": - embedding_dims = 1536 - elif embedding_model == "text-embedding-3-large": - embedding_dims = 3072 - elif embedding_model == "text-embedding-ada-002": - embedding_dims = 1536 - else: - # Default for OpenAI embedding models - embedding_dims = 1536 + embedding_dims = get_embedding_dims(llm_config) + memory_logger.info(f"🔧 Setting Embedder dims {embedding_dims}") elif llm_provider == "ollama": base_url = os.getenv("OLLAMA_BASE_URL") @@ -209,7 +200,8 @@ def build_memory_config_from_env() -> MemoryConfig: embedding_model=embedding_model, ) llm_provider_enum = LLMProvider.OLLAMA - embedding_dims = 768 # For nomic-embed-text + embedding_dims = get_embedding_dims(llm_config) + memory_logger.info(f"🔧 Setting Embedder dims {embedding_dims}") # Build vector store configuration vector_store_provider = os.getenv("VECTOR_STORE_PROVIDER", "qdrant").lower() @@ -248,3 +240,39 @@ def build_memory_config_from_env() -> MemoryConfig: except ImportError: memory_logger.warning("Config loader not available, using environment variables only") raise + + +def get_embedding_dims(llm_config: Dict[str, Any]) -> int: + """ + Query the embedding endpoint and return the embedding vector length. + Works for OpenAI and OpenAI-compatible endpoints (e.g., Ollama). + """ + embedding_model=llm_config['embedding_model'] + try: + import langfuse.openai as openai + client = openai.OpenAI(api_key=llm_config.get('api_key'), base_url=llm_config['base_url']) + response = client.embeddings.create( + model=embedding_model, + input="hello world" + ) + embedding = response.data[0].embedding + if not embedding or not isinstance(embedding, list): + return 1536 + return len(embedding) + + except Exception as e: + embedding_dims = 1536 # default + memory_logger.error(f"Failed to get embedding dimensions: {e}") + if embedding_model == "text-embedding-3-small": + embedding_dims = 1536 + elif embedding_model == "text-embedding-3-large": + embedding_dims = 3072 + elif embedding_model == "text-embedding-ada-002": + embedding_dims = 1536 + elif embedding_model == "nomic-embed-text:latest": + embedding_dims = 768 + else: + # Default for OpenAI embedding models + memory_logger.info(f"Embedding model is unrecognized setting default value {e}") + embedding_dims = 1536 + return embedding_dims \ No newline at end of file From 92cdfa0c4f7facf1c8971e1023fa8d74fd85fd71 Mon Sep 17 00:00:00 2001 From: Ritik Khatri Date: Fri, 24 Oct 2025 20:15:09 +0530 Subject: [PATCH 2/3] fix: remove model when generating client response; it is configured at the time of client creation --- backends/advanced/src/advanced_omi_backend/chat_service.py | 2 -- backends/advanced/src/advanced_omi_backend/llm_client.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/backends/advanced/src/advanced_omi_backend/chat_service.py b/backends/advanced/src/advanced_omi_backend/chat_service.py index 9b158679..812f8af0 100644 --- a/backends/advanced/src/advanced_omi_backend/chat_service.py +++ b/backends/advanced/src/advanced_omi_backend/chat_service.py @@ -28,7 +28,6 @@ logger = logging.getLogger(__name__) # Configuration from environment variables -CHAT_LLM_MODEL = os.getenv("CHAT_LLM_MODEL") or os.getenv("OPENAI_MODEL", "gpt-4o-mini") CHAT_TEMPERATURE = float(os.getenv("CHAT_TEMPERATURE", "0.7")) MAX_MEMORY_CONTEXT = 5 # Maximum number of memories to include in context MAX_CONVERSATION_HISTORY = 10 # Maximum conversation turns to keep in context @@ -383,7 +382,6 @@ async def generate_response_stream( # In the future, this should be replaced with actual streaming response_content = self.llm_client.generate( prompt=full_prompt, - model=CHAT_LLM_MODEL, temperature=CHAT_TEMPERATURE ) diff --git a/backends/advanced/src/advanced_omi_backend/llm_client.py b/backends/advanced/src/advanced_omi_backend/llm_client.py index 88309d6f..f3b0bb18 100644 --- a/backends/advanced/src/advanced_omi_backend/llm_client.py +++ b/backends/advanced/src/advanced_omi_backend/llm_client.py @@ -77,7 +77,7 @@ def generate( ) -> str: """Generate text completion using OpenAI-compatible API.""" try: - model_name = self.model or model + model_name = model or self.model temp = temperature or self.temperature # Build completion parameters From 390db086ae621e6926b90d9fbf6bdcdc45afe0bf Mon Sep 17 00:00:00 2001 From: Ritik Khatri Date: Fri, 24 Oct 2025 20:24:46 +0530 Subject: [PATCH 3/3] chore: proper exception handling and formatting in get_embedding_dims --- .../src/advanced_omi_backend/memory/config.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backends/advanced/src/advanced_omi_backend/memory/config.py b/backends/advanced/src/advanced_omi_backend/memory/config.py index 3edca3f1..35d478b5 100644 --- a/backends/advanced/src/advanced_omi_backend/memory/config.py +++ b/backends/advanced/src/advanced_omi_backend/memory/config.py @@ -247,10 +247,13 @@ def get_embedding_dims(llm_config: Dict[str, Any]) -> int: Query the embedding endpoint and return the embedding vector length. Works for OpenAI and OpenAI-compatible endpoints (e.g., Ollama). """ - embedding_model=llm_config['embedding_model'] + embedding_model = llm_config.get('embedding_model') try: import langfuse.openai as openai - client = openai.OpenAI(api_key=llm_config.get('api_key'), base_url=llm_config['base_url']) + client = openai.OpenAI( + api_key=llm_config.get('api_key'), + base_url=llm_config.get('base_url') + ) response = client.embeddings.create( model=embedding_model, input="hello world" @@ -260,9 +263,9 @@ def get_embedding_dims(llm_config: Dict[str, Any]) -> int: return 1536 return len(embedding) - except Exception as e: + except (ImportError, KeyError, AttributeError, IndexError, TypeError, ValueError) as e: embedding_dims = 1536 # default - memory_logger.error(f"Failed to get embedding dimensions: {e}") + memory_logger.exception(f"Failed to get embedding dimensions for model '{embedding_model}'") if embedding_model == "text-embedding-3-small": embedding_dims = 1536 elif embedding_model == "text-embedding-3-large": @@ -273,6 +276,5 @@ def get_embedding_dims(llm_config: Dict[str, Any]) -> int: embedding_dims = 768 else: # Default for OpenAI embedding models - memory_logger.info(f"Embedding model is unrecognized setting default value {e}") - embedding_dims = 1536 + memory_logger.info(f"Unrecognized embedding model '{embedding_model}', using default dimension {embedding_dims}") return embedding_dims \ No newline at end of file