Replies: 1 comment 4 replies
-
The error "string indices must be integers, not 'str'" in your Here's the relevant part of the documents_to_insert = [
{
id: {
self._text_key: text,
self._embedding_key: vector,
self._metadata_key: metadata,
}
for id, text, vector, metadata in zip(
ids, texts, embedded_texts, metadatas
)
}
] This creates a list with a single dictionary, where the dictionary keys are the document IDs. When you later try to access elements of To fix this, you should ensure that documents_to_insert = [
{
self._text_key: text,
self._embedding_key: vector,
self._metadata_key: metadata,
}
for text, vector, metadata in zip(texts, embedded_texts, metadatas)
]
# Insert in batches
for i in range(0, len(documents_to_insert), batch_size):
batch = documents_to_insert[i : i + batch_size]
try:
result = self._collection.upsert_multi({id: doc for id, doc in zip(ids[i : i + batch_size], batch)})
if result.all_ok:
doc_ids.extend(ids[i : i + batch_size])
except DocumentExistsException as e:
raise ValueError(f"Document already exists: {e}") This way, Additionally, ensure that your def similarity_search_with_score_by_vector(
self,
query_vector: List[float],
k: int = 4,
distance_func: Literal[
"sqrt_euclid", "neg_dot_prod", "ned_cos"
] = "sqrt_euclid",
filter: Union[None, Dict[str, Any], Any] = None,
**kwargs: Any,
) -> List[Tuple[Document, float]]:
"""Return docs most similar to query vector, with its score."""
from pgvecto_rs.sdk.filters import meta_contains
distance_func_map = {
"sqrt_euclid": "<->",
"neg_dot_prod": "<#>",
"ned_cos": "<=>",
}
if filter is None:
real_filter = None
elif isinstance(filter, dict):
real_filter = meta_contains(filter)
else:
real_filter = filter
results = self._store.search( # type: ignore[union-attr]
query_vector,
distance_func_map[distance_func],
k,
filter=real_filter,
)
return [
(
Document(
page_content=res[0].text,
metadata=res[0].meta,
),
res[1],
)
for res in results
] Ensure that your def similarity_search_with_score(
self,
query: str,
k: int = 4,
filter: Optional[RedisFilterExpression] = None,
return_metadata: bool = True,
**kwargs: Any,
) -> List[Tuple[Document, float]]:
"""Run similarity search with **vector distance**.
The "scores" returned from this function are the raw vector
distances from the query vector. For similarity scores, use
``similarity_search_with_relevance_scores``.
"""
query_embedding = self._embeddings.embed_query(query)
redis_query, params_dict = self._prepare_query(
query_embedding,
k=k,
filter=filter,
with_metadata=return_metadata,
with_distance=True,
**kwargs,
)
# Perform vector search
try:
results = self.client.ft(self.index_name).search(redis_query, params_dict) # type: ignore
except redis.exceptions.ResponseError as e:
if str(e).split(" ")[0] == "Syntax":
raise ValueError(
"Query failed with syntax error. "
+ "This is likely due to malformation of "
+ "filter, vector, or query argument"
) from e
raise e
# Prepare document results
docs = []
for result in results.docs:
metadata = {}
if return_metadata:
metadata = {"id": result.id}
metadata.update(self._collect_metadata(result))
content_key = self._schema.content_key
docs.append(
Document(page_content=getattr(result, content_key), metadata=metadata)
)
return docs Ensure that your |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Checked other resources
Commit to Help
Example Code
Description
Hi everyone,
I'm experiencing an issue with my custom class DialoqbaseVectorStore that extends VectorStore. I implemented an asynchronous method asimilarity_search to perform similarity searches. The method successfully returns the results, but after that, I encounter an error saying, "string indices must be integers, not 'str'".
The results from asimilarity_search look something like this:
[Document(metadata={'loc': {'lines': {'to': 1, 'from': 1}}, 'source': 'text'}, page_content='hai \n\n---\n\nhalo')]
The search seems to work correctly, and I can see the correct output in the logs. However, the error "string indices must be integers, not 'str'" appears right afterward.
I appreciate any guidance or suggestions you might have. Thank you!
System Info
langchain==0.2.14
langchain-anthropic==0.1.23
langchain-cohere==0.2.3
langchain-community==0.2.12
langchain-core==0.2.35
langchain-experimental==0.0.64
langchain-google-genai==1.0.10
langchain-ollama==0.1.1
langchain-openai==0.1.19
langchain-text-splitters==0.2.2
langchainhub==0.1.21
langfuse==2.44.1
langgraph==0.1.8
langsmith==0.1.106
Beta Was this translation helpful? Give feedback.
All reactions