graphiti-core 0.11.6rc5__tar.gz → 0.11.6rc7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of graphiti-core might be problematic. Click here for more details.

Files changed (66) hide show
  1. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/PKG-INFO +1 -1
  2. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/helpers.py +22 -5
  3. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search.py +3 -7
  4. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/node_operations.py +3 -3
  5. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/pyproject.toml +1 -1
  6. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/LICENSE +0 -0
  7. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/README.md +0 -0
  8. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/__init__.py +0 -0
  9. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/cross_encoder/__init__.py +0 -0
  10. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/cross_encoder/bge_reranker_client.py +0 -0
  11. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/cross_encoder/client.py +0 -0
  12. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/cross_encoder/openai_reranker_client.py +0 -0
  13. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/edges.py +0 -0
  14. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/embedder/__init__.py +0 -0
  15. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/embedder/client.py +0 -0
  16. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/embedder/gemini.py +0 -0
  17. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/embedder/openai.py +0 -0
  18. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/embedder/voyage.py +0 -0
  19. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/errors.py +0 -0
  20. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/graphiti.py +0 -0
  21. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/graphiti_types.py +0 -0
  22. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/__init__.py +0 -0
  23. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/anthropic_client.py +0 -0
  24. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/client.py +0 -0
  25. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/config.py +0 -0
  26. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/errors.py +0 -0
  27. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/gemini_client.py +0 -0
  28. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/groq_client.py +0 -0
  29. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/openai_client.py +0 -0
  30. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/openai_generic_client.py +0 -0
  31. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/llm_client/utils.py +0 -0
  32. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/models/__init__.py +0 -0
  33. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/models/edges/__init__.py +0 -0
  34. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/models/edges/edge_db_queries.py +0 -0
  35. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/models/nodes/__init__.py +0 -0
  36. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/models/nodes/node_db_queries.py +0 -0
  37. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/nodes.py +0 -0
  38. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/__init__.py +0 -0
  39. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/dedupe_edges.py +0 -0
  40. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/dedupe_nodes.py +0 -0
  41. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/eval.py +0 -0
  42. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/extract_edge_dates.py +0 -0
  43. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/extract_edges.py +0 -0
  44. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/extract_nodes.py +0 -0
  45. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/invalidate_edges.py +0 -0
  46. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/lib.py +0 -0
  47. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/models.py +0 -0
  48. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/prompt_helpers.py +0 -0
  49. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/prompts/summarize_nodes.py +0 -0
  50. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/py.typed +0 -0
  51. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/__init__.py +0 -0
  52. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search_config.py +0 -0
  53. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search_config_recipes.py +0 -0
  54. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search_filters.py +0 -0
  55. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search_helpers.py +0 -0
  56. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/search/search_utils.py +0 -0
  57. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/__init__.py +0 -0
  58. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/bulk_utils.py +0 -0
  59. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/datetime_utils.py +0 -0
  60. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/__init__.py +0 -0
  61. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/community_operations.py +0 -0
  62. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/edge_operations.py +0 -0
  63. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/graph_data_operations.py +0 -0
  64. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/temporal_operations.py +0 -0
  65. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/maintenance/utils.py +0 -0
  66. {graphiti_core-0.11.6rc5 → graphiti_core-0.11.6rc7}/graphiti_core/utils/ontology_utils/entity_types_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: graphiti-core
3
- Version: 0.11.6rc5
3
+ Version: 0.11.6rc7
4
4
  Summary: A temporal graph building library
5
5
  License: Apache-2.0
6
6
  Author: Paul Paliychuk
@@ -18,6 +18,7 @@ import asyncio
18
18
  import os
19
19
  from collections.abc import Coroutine
20
20
  from datetime import datetime
21
+ from typing import Any
21
22
 
22
23
  import numpy as np
23
24
  from dotenv import load_dotenv
@@ -91,11 +92,27 @@ def normalize_l2(embedding: list[float]):
91
92
 
92
93
 
93
94
  # Use this instead of asyncio.gather() to bound coroutines
94
- async def semaphore_gather(*coroutines: Coroutine, max_coroutines: int = SEMAPHORE_LIMIT):
95
+ async def semaphore_gather(
96
+ *coroutines: Coroutine,
97
+ max_coroutines: int = SEMAPHORE_LIMIT,
98
+ ):
95
99
  semaphore = asyncio.Semaphore(max_coroutines)
96
100
 
97
- async def _wrap_coroutine(coroutine):
101
+ async def _wrap(coro: Coroutine) -> Any:
98
102
  async with semaphore:
99
- return await coroutine
100
-
101
- return await asyncio.gather(*(_wrap_coroutine(coroutine) for coroutine in coroutines))
103
+ return await coro
104
+
105
+ results = []
106
+ batch = []
107
+ for coroutine in coroutines:
108
+ batch.append(_wrap(coroutine))
109
+ # once we hit max_coroutines, gather and clear the batch
110
+ if len(batch) >= max_coroutines:
111
+ results.extend(await asyncio.gather(*batch))
112
+ batch.clear()
113
+
114
+ # gather any remaining coroutines in the final batch
115
+ if batch:
116
+ results.extend(await asyncio.gather(*batch))
117
+
118
+ return results
@@ -458,14 +458,10 @@ async def community_search(
458
458
  config.mmr_lambda,
459
459
  )
460
460
  elif config.reranker == CommunityReranker.cross_encoder:
461
- summary_to_uuid_map = {
462
- node.summary: node.uuid for result in search_results for node in result
463
- }
464
- reranked_summaries = await cross_encoder.rank(query, list(summary_to_uuid_map.keys()))
461
+ name_to_uuid_map = {node.name: node.uuid for result in search_results for node in result}
462
+ reranked_nodes = await cross_encoder.rank(query, list(name_to_uuid_map.keys()))
465
463
  reranked_uuids = [
466
- summary_to_uuid_map[fact]
467
- for fact, score in reranked_summaries
468
- if score >= reranker_min_score
464
+ name_to_uuid_map[name] for name, score in reranked_nodes if score >= reranker_min_score
469
465
  ]
470
466
 
471
467
  reranked_communities = [community_uuid_map[uuid] for uuid in reranked_uuids]
@@ -18,6 +18,7 @@ import logging
18
18
  from contextlib import suppress
19
19
  from time import time
20
20
  from typing import Any
21
+ from uuid import uuid4
21
22
 
22
23
  import pydantic
23
24
  from pydantic import BaseModel, Field
@@ -395,7 +396,8 @@ async def extract_attributes_from_node(
395
396
  Field(description=field_info.description),
396
397
  )
397
398
 
398
- entity_attributes_model = pydantic.create_model('EntityAttributes', **attributes_definitions)
399
+ unique_model_name = f'EntityAttributes_{uuid4().hex}'
400
+ entity_attributes_model = pydantic.create_model(unique_model_name, **attributes_definitions)
399
401
 
400
402
  summary_context: dict[str, Any] = {
401
403
  'node': node_context,
@@ -411,12 +413,10 @@ async def extract_attributes_from_node(
411
413
  )
412
414
 
413
415
  node.summary = llm_response.get('summary', node.summary)
414
- node.name = llm_response.get('name', node.name)
415
416
  node_attributes = {key: value for key, value in llm_response.items()}
416
417
 
417
418
  with suppress(KeyError):
418
419
  del node_attributes['summary']
419
- del node_attributes['name']
420
420
 
421
421
  node.attributes.update(node_attributes)
422
422
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "graphiti-core"
3
3
  description = "A temporal graph building library"
4
- version = "0.11.6pre5"
4
+ version = "0.11.6pre7"
5
5
  authors = [
6
6
  { "name" = "Paul Paliychuk", "email" = "paul@getzep.com" },
7
7
  { "name" = "Preston Rasmussen", "email" = "preston@getzep.com" },