Coverage for src/qdrant_loader/core/embedding_service.py: 100%
26 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-04 05:50 +0000
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-04 05:50 +0000
1import logging
4class EmbeddingService:
5 def __init__(self, client, model_name):
6 self.client = client
7 self.model_name = model_name
8 self.logger = logging.getLogger(__name__)
10 async def get_embedding(self, text: str) -> list[float]:
11 """Get embedding for a single text.
13 Args:
14 text: The text to get embedding for
16 Returns:
17 List of floats representing the embedding vector
18 """
19 self.logger.debug(
20 "Getting embedding for text",
21 extra={"text_length": len(text), "model": self.model_name},
22 )
24 try:
25 # Get embedding from OpenAI
26 response = await self.client.embeddings.create(
27 model=self.model_name, input=text
28 )
30 embedding = response.data[0].embedding
31 self.logger.debug(
32 "Successfully generated embedding",
33 extra={"text_length": len(text), "embedding_size": len(embedding)},
34 )
35 return embedding
36 except Exception as e:
37 self.logger.error(
38 f"Error generating embedding: {str(e)}",
39 extra={
40 "text_length": len(text),
41 "error": str(e),
42 "error_type": type(e).__name__,
43 },
44 )
45 raise
47 async def get_embeddings(self, texts: list[str]) -> list[list[float]]:
48 """Get embeddings for multiple texts.
50 Args:
51 texts: List of texts to get embeddings for
53 Returns:
54 List of embedding vectors
55 """
56 self.logger.debug(
57 "Getting embeddings for texts",
58 extra={"text_count": len(texts), "model": self.model_name},
59 )
61 try:
62 # Get embeddings from OpenAI
63 response = await self.client.embeddings.create(
64 model=self.model_name, input=texts
65 )
67 embeddings = [data.embedding for data in response.data]
68 self.logger.debug(
69 "Successfully generated embeddings",
70 extra={
71 "text_count": len(texts),
72 "embedding_count": len(embeddings),
73 "embedding_size": len(embeddings[0]) if embeddings else 0,
74 },
75 )
76 return embeddings
77 except Exception as e:
78 self.logger.error(
79 f"Error generating embeddings: {str(e)}",
80 extra={
81 "text_count": len(texts),
82 "error": str(e),
83 "error_type": type(e).__name__,
84 },
85 )
86 raise