helix-framework 0.3.2__tar.gz → 0.3.4__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 (96) hide show
  1. {helix_framework-0.3.2/src/helix_framework.egg-info → helix_framework-0.3.4}/PKG-INFO +6 -6
  2. {helix_framework-0.3.2 → helix_framework-0.3.4}/pyproject.toml +6 -6
  3. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/__init__.py +99 -4
  4. helix_framework-0.3.4/src/helix/cli/__main__.py +823 -0
  5. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/config.py +1 -1
  6. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/agent.py +195 -3
  7. helix_framework-0.3.4/src/helix/core/agent_decorator.py +150 -0
  8. helix_framework-0.3.4/src/helix/core/graph.py +600 -0
  9. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/group_chat.py +2 -0
  10. helix_framework-0.3.4/src/helix/core/hooks.py +95 -0
  11. helix_framework-0.3.4/src/helix/core/pipeline.py +102 -0
  12. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/task.py +11 -7
  13. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/tool.py +40 -0
  14. helix_framework-0.3.4/src/helix/core/workflow.py +524 -0
  15. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/yaml_config.py +1 -2
  16. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/suite.py +16 -7
  17. helix_framework-0.3.4/src/helix/models/providers/gemini.py +220 -0
  18. helix_framework-0.3.4/src/helix/presets.py +412 -0
  19. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/runtime/health.py +5 -5
  20. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/tools/builtin.py +83 -4
  21. {helix_framework-0.3.2 → helix_framework-0.3.4/src/helix_framework.egg-info}/PKG-INFO +6 -6
  22. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix_framework.egg-info/SOURCES.txt +7 -1
  23. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix_framework.egg-info/requires.txt +5 -5
  24. {helix_framework-0.3.2 → helix_framework-0.3.4}/tests/test_basic.py +20 -4
  25. helix_framework-0.3.4/tests/test_new_features.py +945 -0
  26. helix_framework-0.3.2/src/helix/cli/__main__.py +0 -369
  27. helix_framework-0.3.2/src/helix/core/workflow.py +0 -330
  28. helix_framework-0.3.2/src/helix/models/providers/gemini.py +0 -254
  29. {helix_framework-0.3.2 → helix_framework-0.3.4}/LICENSE +0 -0
  30. {helix_framework-0.3.2 → helix_framework-0.3.4}/NOTICE +0 -0
  31. {helix_framework-0.3.2 → helix_framework-0.3.4}/README.md +0 -0
  32. {helix_framework-0.3.2 → helix_framework-0.3.4}/setup.cfg +0 -0
  33. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/adapters/__init__.py +0 -0
  34. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/adapters/autogen.py +0 -0
  35. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/adapters/crewai.py +0 -0
  36. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/adapters/langchain.py +0 -0
  37. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/adapters/universal.py +0 -0
  38. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cache/__init__.py +0 -0
  39. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cache/controller.py +0 -0
  40. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cache/plan.py +0 -0
  41. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cache/prefix.py +0 -0
  42. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cache/semantic.py +0 -0
  43. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/cli/__init__.py +0 -0
  44. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/config_store.py +0 -0
  45. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/context.py +0 -0
  46. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/context_engine/__init__.py +0 -0
  47. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/context_engine/compactor.py +0 -0
  48. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/context_engine/engine.py +0 -0
  49. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/context_engine/preflight.py +0 -0
  50. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/__init__.py +0 -0
  51. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/session.py +0 -0
  52. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/core/team.py +0 -0
  53. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/errors.py +0 -0
  54. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/__init__.py +0 -0
  55. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/gate.py +0 -0
  56. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/monitor.py +0 -0
  57. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/scoring.py +0 -0
  58. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/eval/trajectory.py +0 -0
  59. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/interfaces.py +0 -0
  60. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/memory/__init__.py +0 -0
  61. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/memory/backends/__init__.py +0 -0
  62. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/memory/backends/inmemory.py +0 -0
  63. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/memory/store.py +0 -0
  64. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/memory/wal.py +0 -0
  65. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/__init__.py +0 -0
  66. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/complexity.py +0 -0
  67. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/embedder.py +0 -0
  68. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/__init__.py +0 -0
  69. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/anthropic.py +0 -0
  70. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/azure.py +0 -0
  71. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/cohere.py +0 -0
  72. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/groq.py +0 -0
  73. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/mistral.py +0 -0
  74. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/ollama.py +0 -0
  75. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/openai.py +0 -0
  76. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/openai_compat.py +0 -0
  77. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/providers/together.py +0 -0
  78. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/models/router.py +0 -0
  79. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/observability/__init__.py +0 -0
  80. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/observability/ghost_debug.py +0 -0
  81. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/observability/replay.py +0 -0
  82. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/observability/tracer.py +0 -0
  83. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/py.typed +0 -0
  84. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/runtime/__init__.py +0 -0
  85. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/runtime/engine.py +0 -0
  86. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/__init__.py +0 -0
  87. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/audit.py +0 -0
  88. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/governor.py +0 -0
  89. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/guardrails.py +0 -0
  90. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/hitl.py +0 -0
  91. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/safety/permissions.py +0 -0
  92. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/tools/__init__.py +0 -0
  93. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix/tools/taxonomy.py +0 -0
  94. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix_framework.egg-info/dependency_links.txt +0 -0
  95. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix_framework.egg-info/entry_points.txt +0 -0
  96. {helix_framework-0.3.2 → helix_framework-0.3.4}/src/helix_framework.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helix-framework
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: Production-grade AI agent framework — cost governance, memory, caching, multi-agent teams, and built-in eval
5
5
  Author: Dhruv Choudhary
6
6
  Maintainer: Dhruv Choudhary
@@ -219,7 +219,7 @@ License-File: LICENSE
219
219
  License-File: NOTICE
220
220
  Requires-Dist: pydantic>=2.0
221
221
  Provides-Extra: gemini
222
- Requires-Dist: google-generativeai>=0.8; extra == "gemini"
222
+ Requires-Dist: google-genai>=1.0; extra == "gemini"
223
223
  Provides-Extra: openai
224
224
  Requires-Dist: openai>=1.0; extra == "openai"
225
225
  Provides-Extra: anthropic
@@ -239,7 +239,7 @@ Requires-Dist: openai>=1.0; extra == "openrouter"
239
239
  Provides-Extra: deepseek
240
240
  Requires-Dist: openai>=1.0; extra == "deepseek"
241
241
  Provides-Extra: providers
242
- Requires-Dist: google-generativeai>=0.8; extra == "providers"
242
+ Requires-Dist: google-genai>=1.0; extra == "providers"
243
243
  Requires-Dist: openai>=1.0; extra == "providers"
244
244
  Requires-Dist: anthropic>=0.20; extra == "providers"
245
245
  Requires-Dist: groq>=0.9; extra == "providers"
@@ -251,7 +251,7 @@ Requires-Dist: tiktoken>=0.5; extra == "tiktoken"
251
251
  Provides-Extra: http
252
252
  Requires-Dist: httpx>=0.25; extra == "http"
253
253
  Provides-Extra: search
254
- Requires-Dist: duckduckgo-search>=3.9; extra == "search"
254
+ Requires-Dist: ddgs>=9.0; extra == "search"
255
255
  Provides-Extra: redis
256
256
  Requires-Dist: redis>=5.0; extra == "redis"
257
257
  Provides-Extra: schedule
@@ -263,7 +263,7 @@ Requires-Dist: pytest-cov>=4.0; extra == "dev"
263
263
  Requires-Dist: ruff>=0.4; extra == "dev"
264
264
  Requires-Dist: mypy>=1.0; extra == "dev"
265
265
  Provides-Extra: all
266
- Requires-Dist: google-generativeai>=0.8; extra == "all"
266
+ Requires-Dist: google-genai>=1.0; extra == "all"
267
267
  Requires-Dist: openai>=1.0; extra == "all"
268
268
  Requires-Dist: anthropic>=0.20; extra == "all"
269
269
  Requires-Dist: groq>=0.9; extra == "all"
@@ -272,7 +272,7 @@ Requires-Dist: cohere>=5.0; extra == "all"
272
272
  Requires-Dist: together>=1.2; extra == "all"
273
273
  Requires-Dist: tiktoken>=0.5; extra == "all"
274
274
  Requires-Dist: httpx>=0.25; extra == "all"
275
- Requires-Dist: duckduckgo-search>=3.9; extra == "all"
275
+ Requires-Dist: ddgs>=9.0; extra == "all"
276
276
  Requires-Dist: redis>=5.0; extra == "all"
277
277
  Requires-Dist: croniter>=2.0; extra == "all"
278
278
  Dynamic: license-file
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "helix-framework"
7
- version = "0.3.2"
7
+ version = "0.3.4"
8
8
  description = "Production-grade AI agent framework — cost governance, memory, caching, multi-agent teams, and built-in eval"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -33,7 +33,7 @@ dependencies = ["pydantic>=2.0"]
33
33
 
34
34
  [project.optional-dependencies]
35
35
  # ── Individual providers ──────────────────────────────────────────────────────
36
- gemini = ["google-generativeai>=0.8"]
36
+ gemini = ["google-genai>=1.0"]
37
37
  openai = ["openai>=1.0"]
38
38
  anthropic = ["anthropic>=0.20"]
39
39
  groq = ["groq>=0.9"]
@@ -46,7 +46,7 @@ deepseek = ["openai>=1.0"] # DeepSeek uses the openai package
46
46
 
47
47
  # ── All cloud API providers bundled ──────────────────────────────────────────
48
48
  providers = [
49
- "google-generativeai>=0.8",
49
+ "google-genai>=1.0",
50
50
  "openai>=1.0",
51
51
  "anthropic>=0.20",
52
52
  "groq>=0.9",
@@ -58,7 +58,7 @@ providers = [
58
58
  # ── Other optional features ───────────────────────────────────────────────────
59
59
  tiktoken = ["tiktoken>=0.5"]
60
60
  http = ["httpx>=0.25"]
61
- search = ["duckduckgo-search>=3.9"]
61
+ search = ["ddgs>=9.0"]
62
62
  redis = ["redis>=5.0"]
63
63
  schedule = ["croniter>=2.0"]
64
64
 
@@ -73,7 +73,7 @@ dev = [
73
73
 
74
74
  # ── Full install — everything ─────────────────────────────────────────────────
75
75
  all = [
76
- "google-generativeai>=0.8",
76
+ "google-genai>=1.0",
77
77
  "openai>=1.0",
78
78
  "anthropic>=0.20",
79
79
  "groq>=0.9",
@@ -82,7 +82,7 @@ all = [
82
82
  "together>=1.2",
83
83
  "tiktoken>=0.5",
84
84
  "httpx>=0.25",
85
- "duckduckgo-search>=3.9",
85
+ "ddgs>=9.0",
86
86
  "redis>=5.0",
87
87
  "croniter>=2.0",
88
88
  ]
@@ -32,6 +32,7 @@ Quickstart
32
32
  from __future__ import annotations
33
33
 
34
34
  import asyncio
35
+ import contextlib
35
36
  from typing import Any
36
37
 
37
38
  from helix.config import (
@@ -60,6 +61,8 @@ from helix.config import (
60
61
  from helix.config_store import apply_saved_config as _apply_saved_config
61
62
  from helix.context import ExecutionContext
62
63
  from helix.core.agent import Agent, AgentResult
64
+ from helix.core.agent_decorator import agent
65
+ from helix.core.graph import END, START, CompiledGraph, StateGraph
63
66
  from helix.core.group_chat import (
64
67
  ChatMessage,
65
68
  ConversableAgent,
@@ -67,10 +70,12 @@ from helix.core.group_chat import (
67
70
  GroupChatResult,
68
71
  HumanAgent,
69
72
  )
73
+ from helix.core.hooks import HookEvent
74
+ from helix.core.pipeline import AgentPipeline
70
75
  from helix.core.session import Session
71
76
  from helix.core.task import Pipeline, PipelineResult, Task, TaskOutput
72
77
  from helix.core.team import Team
73
- from helix.core.tool import ToolRegistry, registry, tool
78
+ from helix.core.tool import ToolRegistry, discover_tools, registry, tool
74
79
  from helix.core.workflow import Workflow, step
75
80
  from helix.errors import (
76
81
  BudgetExceededError,
@@ -83,6 +88,83 @@ from helix.errors import (
83
88
 
84
89
  _apply_saved_config()
85
90
 
91
+ # ── Register built-in tools in sys.modules so 'from helix.tools.builtin import …' works ──
92
+ with contextlib.suppress(Exception):
93
+ import helix.tools.builtin as _tools_builtin # noqa: F401 — side-effect import
94
+
95
+ # ── Preset agents: helix.presets.web_researcher(), helix.presets.coder()…
96
+ with contextlib.suppress(Exception):
97
+ from helix import presets # noqa: F401
98
+
99
+
100
+ def quick(
101
+ system_prompt: str,
102
+ *,
103
+ name: str = "Agent",
104
+ model: str | None = None,
105
+ tools: list[Any] | None = None,
106
+ budget_usd: float = 0.10,
107
+ on_event: Any | None = None,
108
+ ) -> Agent:
109
+ """
110
+ Create a minimal agent from a single system prompt string.
111
+
112
+ This is the fastest way to get started — no role, goal, or config
113
+ objects required. Perfect for experimentation and notebooks.
114
+
115
+ Args:
116
+ system_prompt: The agent's purpose, written as plain instructions.
117
+ name: Agent name (shown in traces). Default ``"Agent"``.
118
+ model: LLM model string, e.g. ``"gpt-4o"`` or ``"claude-sonnet-4-6"``.
119
+ Omit to auto-detect from available API keys.
120
+ tools: List of ``@helix.tool``-decorated functions.
121
+ budget_usd: Hard spend cap per run. Default ``0.10``.
122
+ on_event: Optional async or sync callback for live events.
123
+
124
+ Returns:
125
+ A :class:`helix.Agent` ready to run.
126
+
127
+ Example::
128
+
129
+ import helix
130
+
131
+ agent = helix.quick("You are a concise Python tutor.")
132
+ result = helix.run(agent, "Explain list comprehensions.")
133
+ print(result.output)
134
+ """
135
+ return Agent(
136
+ name=name,
137
+ role=name,
138
+ goal=system_prompt,
139
+ system_prompt=system_prompt,
140
+ tools=tools or [],
141
+ model=ModelConfig(primary=model) if model else ModelConfig(),
142
+ budget=BudgetConfig(budget_usd=budget_usd),
143
+ on_event=on_event,
144
+ )
145
+
146
+
147
+ def chain(*agents_or_pipelines: Any) -> AgentPipeline:
148
+ """
149
+ Build an :class:`AgentPipeline` from two or more agents.
150
+
151
+ Equivalent to ``agent_a | agent_b | agent_c`` but more readable
152
+ when composing many agents.
153
+
154
+ Example::
155
+
156
+ from helix.presets import web_researcher, summariser, writer
157
+
158
+ pipeline = helix.chain(web_researcher(), summariser(), writer())
159
+ result = pipeline.run_sync("Quantum computing advances 2026")
160
+ """
161
+ if not agents_or_pipelines:
162
+ raise ValueError("chain() requires at least one agent")
163
+ result: Any = agents_or_pipelines[0]
164
+ for nxt in agents_or_pipelines[1:]:
165
+ result = result | nxt
166
+ return result
167
+
86
168
 
87
169
  def run(
88
170
  agent: Agent,
@@ -222,11 +304,13 @@ try:
222
304
 
223
305
  __version__: str = _pkg_version("helix-framework")
224
306
  except _PNFE: # editable / source install without metadata
225
- __version__ = "0.3.2"
307
+ __version__ = "0.3.3"
226
308
 
227
309
  __all__ = [
228
310
  "run",
229
311
  "run_async",
312
+ "quick",
313
+ "chain",
230
314
  "create_agent",
231
315
  "wrap_llm",
232
316
  "from_crewai",
@@ -234,9 +318,15 @@ __all__ = [
234
318
  "from_autogen",
235
319
  "from_yaml",
236
320
  "eval_suite",
321
+ "discover_tools",
322
+ # Decorators
323
+ "agent",
324
+ "tool",
325
+ "step",
237
326
  # Core classes
238
327
  "Agent",
239
328
  "AgentResult",
329
+ "AgentPipeline",
240
330
  "ConversableAgent",
241
331
  "HumanAgent",
242
332
  "GroupChat",
@@ -249,11 +339,10 @@ __all__ = [
249
339
  "Workflow",
250
340
  "Team",
251
341
  "Session",
252
- "step",
253
- "tool",
254
342
  "ToolRegistry",
255
343
  "registry",
256
344
  "ExecutionContext",
345
+ "HookEvent",
257
346
  # Config
258
347
  "AgentConfig",
259
348
  "AgentMode",
@@ -274,6 +363,12 @@ __all__ = [
274
363
  "WorkflowMode",
275
364
  "EpisodeOutcome",
276
365
  "FailureClass",
366
+ # Graph
367
+ "StateGraph",
368
+ "CompiledGraph",
369
+ "END",
370
+ "START",
371
+ # Errors
277
372
  "HelixError",
278
373
  "BudgetExceededError",
279
374
  "LoopDetectedError",