hyperforge 1.0.0.post68__tar.gz → 1.0.0.post76__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.
Files changed (105) hide show
  1. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/PKG-INFO +1 -1
  2. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/pyproject.toml +1 -1
  3. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/broker/redis.py +14 -3
  4. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/memory/memory.py +12 -0
  5. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/README.md +0 -0
  6. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/VERSION +0 -0
  7. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/__init__.py +0 -0
  8. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/agent.py +0 -0
  9. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/README +0 -0
  10. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/env.py +0 -0
  11. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/script.py.mako +0 -0
  12. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/049a4aed19e1_create_generation_table.py +0 -0
  13. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/1416cb41bd49_add_downloads_table.py +0 -0
  14. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/2847934e2d59_unique_driver.py +0 -0
  15. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/4d89a36c8bda_memory.py +0 -0
  16. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/72b997edb05d_identifier_for_drivers.py +0 -0
  17. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/9c6f6a1b4e7f_workflows_default_fk.py +0 -0
  18. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/b8edb72295e0_.py +0 -0
  19. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic/versions/f3d2c1b0a9e8_soft_delete_workflows.py +0 -0
  20. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/alembic.ini +0 -0
  21. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/__init__.py +0 -0
  22. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/app.py +0 -0
  23. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/authentication.py +0 -0
  24. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/commands.py +0 -0
  25. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/internal/__init__.py +0 -0
  26. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/internal/inspect.py +0 -0
  27. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/internal/router.py +0 -0
  28. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/logging.py +0 -0
  29. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/models.py +0 -0
  30. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/session.py +0 -0
  31. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/settings.py +0 -0
  32. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/utils.py +0 -0
  33. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/__init__.py +0 -0
  34. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/agents.py +0 -0
  35. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/interaction.py +0 -0
  36. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/mcp_content.py +0 -0
  37. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/mcp_interaction.py +0 -0
  38. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/oauth.py +0 -0
  39. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/prompt.py +0 -0
  40. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/router.py +0 -0
  41. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/schema.py +0 -0
  42. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/session.py +0 -0
  43. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/utils.py +0 -0
  44. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/api/v1/workflows.py +0 -0
  45. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/arag.py +0 -0
  46. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/broker/__init__.py +0 -0
  47. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/broker/local.py +0 -0
  48. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/configure.py +0 -0
  49. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/context/__init__.py +0 -0
  50. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/context/agent.py +0 -0
  51. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/context/config.py +0 -0
  52. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/database.py +0 -0
  53. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/__init__.py +0 -0
  54. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/agents.py +0 -0
  55. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/encryption.py +0 -0
  56. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/exceptions.py +0 -0
  57. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/settings.py +0 -0
  58. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/db/workflow_cleanup.py +0 -0
  59. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/definition.py +0 -0
  60. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/driver.py +0 -0
  61. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/dummy.py +0 -0
  62. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/engine.py +0 -0
  63. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/exceptions.py +0 -0
  64. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/feature_flag.py +0 -0
  65. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/fixtures.py +0 -0
  66. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/interaction.py +0 -0
  67. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/llm.py +0 -0
  68. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/manager.py +0 -0
  69. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/memory/__init__.py +0 -0
  70. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/minimal_fixtures.py +0 -0
  71. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/models.py +0 -0
  72. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/nua.py +0 -0
  73. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/openapi.py +0 -0
  74. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/prompts.py +0 -0
  75. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/pubsub.py +0 -0
  76. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/py.typed +0 -0
  77. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/redis_utils.py +0 -0
  78. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/retrieval/__init__.py +0 -0
  79. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/retrieval/agent.py +0 -0
  80. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/retrieval/config.py +0 -0
  81. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/__init__.py +0 -0
  82. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/cache.py +0 -0
  83. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/run.py +0 -0
  84. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/sandbox.py +0 -0
  85. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/session.py +0 -0
  86. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/settings.py +0 -0
  87. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/utils.py +0 -0
  88. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/server/web.py +0 -0
  89. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/settings.py +0 -0
  90. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/__init__.py +0 -0
  91. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/agent.py +0 -0
  92. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/app.py +0 -0
  93. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/config.py +0 -0
  94. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/const.py +0 -0
  95. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/run.py +0 -0
  96. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/settings.py +0 -0
  97. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/standalone/ui_router.py +0 -0
  98. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/static/assets/index-DLejS5jC.js +0 -0
  99. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/static/assets/index-MoxkZ1_3.css +0 -0
  100. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/static/favicon.svg +0 -0
  101. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/static/index.html +0 -0
  102. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/trace.py +0 -0
  103. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/utils/__init__.py +0 -0
  104. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/utils/http.py +0 -0
  105. {hyperforge-1.0.0.post68 → hyperforge-1.0.0.post76}/src/hyperforge/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperforge
3
- Version: 1.0.0.post68
3
+ Version: 1.0.0.post76
4
4
  Summary: Agentic Framework for Orchestrated Runtime, Governance, and Execution
5
5
  Author: AI Data Team
6
6
  Author-email: AI Data Team <learning@nuclia.com>
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "hyperforge"
7
- version = "1.0.0.post68"
7
+ version = "1.0.0.post76"
8
8
  authors = [{ name = "AI Data Team", email = "learning@nuclia.com" }]
9
9
  description = "Agentic Framework for Orchestrated Runtime, Governance, and Execution"
10
10
  readme = "README.md"
@@ -56,9 +56,8 @@ class RedisBroker(Broker):
56
56
  maxlen=100,
57
57
  )
58
58
 
59
- async def subscribe_activations(
60
- self,
61
- ) -> AsyncIterator[tuple[StartInteraction, dict[str, str]]]:
59
+ async def _ensure_consumer_group(self) -> None:
60
+ """Create the stream and consumer group if they don't exist."""
62
61
  try:
63
62
  await self._client.xgroup_create(
64
63
  name=self._activate_subject,
@@ -69,6 +68,11 @@ class RedisBroker(Broker):
69
68
  if "BUSYGROUP" not in str(e):
70
69
  raise
71
70
 
71
+ async def subscribe_activations(
72
+ self,
73
+ ) -> AsyncIterator[tuple[StartInteraction, dict[str, str]]]:
74
+ await self._ensure_consumer_group()
75
+
72
76
  while True:
73
77
  try:
74
78
  response = await self._client.xreadgroup(
@@ -90,6 +94,13 @@ class RedisBroker(Broker):
90
94
  except (asyncio.CancelledError, KeyboardInterrupt):
91
95
  logger.info("Activation subscription cancelled, exiting...")
92
96
  break
97
+ except ResponseError as e:
98
+ if "NOGROUP" in str(e):
99
+ logger.warning("Consumer group lost, re-creating...")
100
+ await self._ensure_consumer_group()
101
+ else:
102
+ logger.exception("Error while subscribing to activations, retrying...")
103
+ await asyncio.sleep(1)
93
104
  except Exception:
94
105
  logger.exception("Error while subscribing to activations, retrying...")
95
106
  await asyncio.sleep(1)
@@ -206,6 +206,18 @@ class NoMemorySessionMemory(BaseSessionMemory):
206
206
  async def qa_history(self) -> list[HistoryQuestionAnswer]:
207
207
  return []
208
208
 
209
+ async def set_source(self, source: Source):
210
+ entry = CachedNucliaDBSource(
211
+ cache=self.cache, agent_id=self.agent_id, source=source.id
212
+ )
213
+ await entry.set(source)
214
+
215
+ async def get_source(self, source_id: str) -> Source | None:
216
+ entry = CachedNucliaDBSource(
217
+ cache=self.cache, agent_id=self.agent_id, source=source_id
218
+ )
219
+ return await entry.get()
220
+
209
221
 
210
222
  class EphemeralSessionMemory(BaseSessionMemory):
211
223
  @classmethod