graphiti/graphiti_core/llm_client/utils.py
Daniel Chalef 2d0705fc1b
Add get_nodes_by_query method to Graphiti class (#49)
* Add get_nodes_by_query method to Graphiti class

Add a method to the Graphiti class that wraps `get_relevant_nodes` and returns a list of nodes given a query.

* Add `get_nodes_by_query` method to the `Graphiti` class in `graphiti_core/graphiti.py`.
* Import `generate_embedding` from `graphiti_core/llm_client/utils.py`.
* Use `generate_embedding` to generate an embedding for the query.
* Call `get_relevant_nodes` with the generated embedding and return the relevant nodes.

Add an embedding function to `llm_client/utils.py`.

* Add `generate_embedding` function to `graphiti_core/llm_client/utils.py`.
* Accept an embedder and model_id as parameters.
* Generate an embedding for the given text and return it.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/getzep/graphiti?shareId=XXXX-XXXX-XXXX-XXXX).

* address comments left by @danielchalef on #49 (Add get_nodes_by_query method to Graphiti class);

* fix ellipsis name in cla config

* feat: Add get_nodes_by_query method to Graphiti class

* chore: Cleanup unused files, add hybrid node search, add tests

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: paulpaliychuk <pavlo.paliychuk.ca@gmail.com>
2024-08-26 20:00:28 -07:00

22 lines
555 B
Python

import logging
import typing
from time import time
from graphiti_core.llm_client.config import EMBEDDING_DIM
logger = logging.getLogger(__name__)
async def generate_embedding(
embedder: typing.Any, text: str, model: str = 'text-embedding-3-small'
):
start = time()
text = text.replace('\n', ' ')
embedding = (await embedder.create(input=[text], model=model)).data[0].embedding
embedding = embedding[:EMBEDDING_DIM]
end = time()
logger.debug(f'embedded text of length {len(text)} in {end-start} ms')
return embedding