ValueError
semantic_kernel.exceptions.ValueError
Stack trace
ValueError: Embedding service is missing. Please configure an embedding service before calling embedding methods.
File "/app/main.py", line 42, in generate_embedding
embedding = kernel.embeddings.get_embedding("text")
File "/usr/local/lib/python3.10/site-packages/semantic_kernel/kernel.py", line 210, in get_embedding
raise ValueError("Embedding service is missing. Please configure an embedding service before calling embedding methods.") Why it happens
Semantic Kernel requires an embedding service to be explicitly configured before embedding methods can be used. If the embedding service is not set or the kernel is initialized without specifying it, the kernel cannot generate embeddings and raises this error.
Detection
Check if the kernel instance has an embedding service configured before calling embedding methods, or catch ValueError and log the missing configuration details.
Causes & fixes
Kernel instance was created without setting an embedding service.
Initialize the kernel with a valid embedding service, such as OpenAI embeddings, before calling embedding methods.
Embedding service configuration failed or API key environment variable is missing.
Ensure the embedding service API key is set in environment variables and the embedding client is properly instantiated.
Using an outdated or incompatible Semantic Kernel version missing embedding service support.
Upgrade Semantic Kernel to a version that supports embedding services and follow the updated initialization pattern.
Code: broken vs fixed
from semantic_kernel import Kernel
kernel = Kernel()
# This line triggers the error because no embedding service is set
embedding = kernel.embeddings.get_embedding("Hello world") import os
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIEmbedding
os.environ["OPENAI_API_KEY"] = os.environ.get("OPENAI_API_KEY", "your_api_key_here") # Set your API key in environment
kernel = Kernel()
embedding_service = OpenAIEmbedding()
kernel.embeddings.set_embedding_service(embedding_service)
embedding = kernel.embeddings.get_embedding("Hello world")
print(embedding) # Now works because embedding service is configured Workaround
Catch the ValueError when calling embedding methods and fallback to a manual embedding client call outside Semantic Kernel until the embedding service is configured.
Prevention
Always configure and verify the embedding service during kernel initialization and validate environment variables for API keys before deployment.