Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"schema_version": 1,
"event_id": "cf2d0564-6c1e-461b-8292-d4aa3654a056",
"issue_id": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"event_type": "issue_created",
"occurred_at": "2026-04-29T22:09:04.273Z",
"actor_id": "ryan",
"payload": {
"assignee": null,
"description": "Add first-class runtime support for reasoning_effort and verbosity so host applications can configure GPT-5-family controls for Tactus agents and LLM-backed models.\n\nDefinition of Done:\n- Runtime accepts reasoning_effort and verbosity.\n- Settings propagate through agents, LLMModelBackend, ModelPrimitive, and DSPy LM configuration.\n- Chat and Responses API shapes are covered by tests.\n- Targeted tests pass.",
"issue_type": "epic",
"labels": [],
"parent": null,
"priority": 2,
"status": "open",
"title": "Support runtime reasoning and verbosity controls"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"schema_version": 1,
"event_id": "556c81e3-a2c2-4143-b679-e5001b0b7ddb",
"issue_id": "tcts-d7500513-926c-4253-aef5-6349b2d81dd6",
"event_type": "issue_created",
"occurred_at": "2026-04-29T22:09:18.678Z",
"actor_id": "ryan",
"payload": {
"assignee": null,
"description": "Feature: Runtime GPT-5 controls\n\nScenario: Runtime configures agent model controls\nGiven a runtime has reasoning_effort and verbosity\nWhen an agent configures its DSPy LM\nThen both settings reach the LiteLLM request kwargs\n\nScenario: Runtime configures LLM-backed models\nGiven a ClassifyProcedure uses an LLMModel\nWhen runtime reasoning_effort and verbosity are set\nThen the LLM backend receives and forwards both settings\n\nScenario: Responses mode is used\nGiven model_type is responses\nWhen verbosity is set\nThen verbosity is sent as text.verbosity",
"issue_type": "story",
"labels": [],
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"priority": 2,
"status": "open",
"title": "Propagate GPT-5 controls through Tactus runtime"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"schema_version": 1,
"event_id": "d48dcde7-1b94-4f8c-9480-04bab8e02a59",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "issue_created",
"occurred_at": "2026-04-29T22:09:18.678Z",
"actor_id": "ryan",
"payload": {
"assignee": null,
"description": "Add runtime, agent, model, backend, and DSPy config support for reasoning_effort and verbosity.",
"issue_type": "task",
"labels": [],
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"priority": 2,
"status": "open",
"title": "Implement Tactus runtime GPT-5 controls"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"schema_version": 1,
"event_id": "54c134e2-01a3-4ba7-9265-95f5e2a8f911",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "state_transition",
"occurred_at": "2026-04-29T22:09:23.347Z",
"actor_id": "ryan",
"payload": {
"from_status": "open",
"to_status": "in_progress"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"schema_version": 1,
"event_id": "57743a66-6944-41e9-aeca-dc3eb08d71c7",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "comment_added",
"occurred_at": "2026-04-29T22:09:23.373Z",
"actor_id": "ryan",
"payload": {
"comment_author": "ryan",
"comment_id": "9972f909-5549-4fc8-8708-3a9e7fa0482d"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"schema_version": 1,
"event_id": "9e1ccc24-a941-4b2c-98e0-b142a2bbc816",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "comment_added",
"occurred_at": "2026-04-29T22:21:30.856Z",
"actor_id": "ryan",
"payload": {
"comment_author": "ryan",
"comment_id": "9d5b1e13-38ff-409d-b32e-a8a6e7644ea0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"schema_version": 1,
"event_id": "c288b592-34c2-4a83-ae21-8f2626641213",
"issue_id": "tcts-da6da4a2-7331-43cf-b3a5-0ad9be1fc89b",
"event_type": "issue_created",
"occurred_at": "2026-04-29T22:21:36.722Z",
"actor_id": "ryan",
"payload": {
"assignee": null,
"description": "Publish a Tactus package version containing runtime reasoning_effort and verbosity support so downstream repos can depend on it from package indexes.\n\nDefinition of Done:\n- Tactus feature branch is merged through the normal review path.\n- A new package version is published and installable.\n- Release notes mention TactusRuntime reasoning_effort and verbosity support.",
"issue_type": "task",
"labels": [],
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"priority": 2,
"status": "open",
"title": "Release Tactus package with GPT-5 controls"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"schema_version": 1,
"event_id": "cc92bc88-3666-4900-8a34-30efbc3ba790",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "comment_added",
"occurred_at": "2026-04-29T22:21:45.981Z",
"actor_id": "ryan",
"payload": {
"comment_author": "ryan",
"comment_id": "0cbe6e11-4712-4d2f-98dc-05396a6bfe5f"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"schema_version": 1,
"event_id": "8ec11433-64d2-4bca-8490-18d8dcc39818",
"issue_id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"event_type": "state_transition",
"occurred_at": "2026-04-29T22:21:45.994Z",
"actor_id": "ryan",
"payload": {
"from_status": "in_progress",
"to_status": "closed"
}
}
18 changes: 18 additions & 0 deletions project/issues/tcts-5f92fe70-3a01-465c-9982-687ec28025a3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"id": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"title": "Support runtime reasoning and verbosity controls",
"description": "Add first-class runtime support for reasoning_effort and verbosity so host applications can configure GPT-5-family controls for Tactus agents and LLM-backed models.\n\nDefinition of Done:\n- Runtime accepts reasoning_effort and verbosity.\n- Settings propagate through agents, LLMModelBackend, ModelPrimitive, and DSPy LM configuration.\n- Chat and Responses API shapes are covered by tests.\n- Targeted tests pass.",
"type": "epic",
"status": "open",
"priority": 2,
"assignee": null,
"creator": null,
"parent": null,
"labels": [],
"dependencies": [],
"comments": [],
"created_at": "2026-04-29T22:09:04.273139Z",
"updated_at": "2026-04-29T22:09:04.273139Z",
"closed_at": null,
"custom": {}
}
40 changes: 40 additions & 0 deletions project/issues/tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"id": "tcts-9116f787-cc42-4a34-bdd5-5c4dbd57bac6",
"title": "Implement Tactus runtime GPT-5 controls",
"description": "Add runtime, agent, model, backend, and DSPy config support for reasoning_effort and verbosity.",
"type": "task",
"status": "closed",
"priority": 2,
"assignee": null,
"creator": null,
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"labels": [],
"dependencies": [],
"comments": [
{
"id": "9972f909-5549-4fc8-8708-3a9e7fa0482d",
"author": "ryan",
"text": "Started implementation on feature/tactus-score-reasoning-verbosity. Scope is runtime-level reasoning_effort and verbosity propagation through agent and LLM-backed model execution.",
"created_at": "2026-04-29T22:09:23.372707Z"
},
{
"id": "9d5b1e13-38ff-409d-b32e-a8a6e7644ea0",
"author": "ryan",
"text": "Implemented runtime support for reasoning_effort and verbosity across TactusRuntime, DSPy agent configuration, configure_lm/create_lm, LLMModelBackend, ModelPrimitive, immediate DSL stubs, and YAML validation. Focused tests pass. Full ruff and black pass. behave --tags=-skip passes. test-ci.sh is blocked locally because /usr/local/bin/python3 lacks Poetry; direct pytest tests/ is blocked by missing moto in the local environment.",
"created_at": "2026-04-29T22:21:30.856720Z"
},
{
"id": "0cbe6e11-4712-4d2f-98dc-05396a6bfe5f",
"author": "ryan",
"text": "Closing implementation task: code implementation complete. Added Tactus runtime fields, propagation through agents/models/configuration, validation, and focused coverage. Release follow-up filed as tcts-da6da4.",
"created_at": "2026-04-29T22:21:45.981225Z"
}
],
"created_at": "2026-04-29T22:09:18.678440Z",
"updated_at": "2026-04-29T22:21:45.994208Z",
"closed_at": "2026-04-29T22:21:45.994208Z",
"custom": {
"project_label": "tcts",
"source": "shared"
}
}
18 changes: 18 additions & 0 deletions project/issues/tcts-d7500513-926c-4253-aef5-6349b2d81dd6.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"id": "tcts-d7500513-926c-4253-aef5-6349b2d81dd6",
"title": "Propagate GPT-5 controls through Tactus runtime",
"description": "Feature: Runtime GPT-5 controls\n\nScenario: Runtime configures agent model controls\nGiven a runtime has reasoning_effort and verbosity\nWhen an agent configures its DSPy LM\nThen both settings reach the LiteLLM request kwargs\n\nScenario: Runtime configures LLM-backed models\nGiven a ClassifyProcedure uses an LLMModel\nWhen runtime reasoning_effort and verbosity are set\nThen the LLM backend receives and forwards both settings\n\nScenario: Responses mode is used\nGiven model_type is responses\nWhen verbosity is set\nThen verbosity is sent as text.verbosity",
"type": "story",
"status": "open",
"priority": 2,
"assignee": null,
"creator": null,
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"labels": [],
"dependencies": [],
"comments": [],
"created_at": "2026-04-29T22:09:18.678297Z",
"updated_at": "2026-04-29T22:09:18.678297Z",
"closed_at": null,
"custom": {}
}
18 changes: 18 additions & 0 deletions project/issues/tcts-da6da4a2-7331-43cf-b3a5-0ad9be1fc89b.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"id": "tcts-da6da4a2-7331-43cf-b3a5-0ad9be1fc89b",
"title": "Release Tactus package with GPT-5 controls",
"description": "Publish a Tactus package version containing runtime reasoning_effort and verbosity support so downstream repos can depend on it from package indexes.\n\nDefinition of Done:\n- Tactus feature branch is merged through the normal review path.\n- A new package version is published and installable.\n- Release notes mention TactusRuntime reasoning_effort and verbosity support.",
"type": "task",
"status": "open",
"priority": 2,
"assignee": null,
"creator": null,
"parent": "tcts-5f92fe70-3a01-465c-9982-687ec28025a3",
"labels": [],
"dependencies": [],
"comments": [],
"created_at": "2026-04-29T22:21:36.722540Z",
"updated_at": "2026-04-29T22:21:36.722540Z",
"closed_at": null,
"custom": {}
}
8 changes: 8 additions & 0 deletions tactus/backends/llm_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ def __init__(
provider: Optional[str] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
reasoning_effort: Optional[str] = None,
verbosity: Optional[str] = None,
mock_manager: Optional[Any] = None,
registry: Optional[Any] = None,
execution_context: Optional[Any] = None,
Expand All @@ -41,6 +43,8 @@ def __init__(
temperature: Model temperature. None applies a model-specific default:
gpt-5 family omits temperature entirely; all others use 0.0.
max_tokens: Maximum tokens for response
reasoning_effort: Optional GPT-5-family reasoning effort control
verbosity: Optional GPT-5-family response verbosity control
mock_manager: Optional MockManager instance for testing
registry: Optional Registry instance
execution_context: Optional ExecutionContext (not used by internal Agent)
Expand All @@ -54,6 +58,8 @@ def __init__(
temperature = default_temperature_for_model(model)
self.temperature = temperature
self.max_tokens = max_tokens
self.reasoning_effort = reasoning_effort
self.verbosity = verbosity
self.mock_manager = mock_manager
self.registry = registry
# Note: execution_context not passed to Agent - we don't checkpoint internal turns
Expand All @@ -67,6 +73,8 @@ def __init__(
provider=provider,
temperature=temperature,
max_tokens=max_tokens,
reasoning_effort=reasoning_effort,
verbosity=verbosity,
mock_manager=mock_manager,
registry=registry,
execution_context=None, # Don't checkpoint internal agent turns
Expand Down
22 changes: 22 additions & 0 deletions tactus/core/dsl_stubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,8 @@ def accept_config(config) -> ModelHandle:
config=config_dict,
context=_runtime_context.get("execution_context"),
mock_manager=_runtime_context.get("mock_manager"),
reasoning_effort=_runtime_context.get("reasoning_effort"),
verbosity=_runtime_context.get("verbosity"),
)
handle._set_primitive(primitive)
_runtime_context.setdefault("_created_models", {})[model_name] = primitive
Expand Down Expand Up @@ -2013,6 +2015,16 @@ def _process_agent_config(agent_name, config):
# Add log_handler from runtime context
if "log_handler" in _runtime_context:
agent_config["log_handler"] = _runtime_context["log_handler"]
if (
_runtime_context.get("reasoning_effort") is not None
and "reasoning_effort" not in agent_config
):
agent_config["reasoning_effort"] = _runtime_context["reasoning_effort"]
if (
_runtime_context.get("verbosity") is not None
and "verbosity" not in agent_config
):
agent_config["verbosity"] = _runtime_context["verbosity"]

agent_primitive = create_dspy_agent(
agent_name,
Expand Down Expand Up @@ -2199,6 +2211,16 @@ def accept_config(config):
# Add log_handler from runtime context
if "log_handler" in _runtime_context:
agent_config["log_handler"] = _runtime_context["log_handler"]
if (
_runtime_context.get("reasoning_effort") is not None
and "reasoning_effort" not in agent_config
):
agent_config["reasoning_effort"] = _runtime_context["reasoning_effort"]
if (
_runtime_context.get("verbosity") is not None
and "verbosity" not in agent_config
):
agent_config["verbosity"] = _runtime_context["verbosity"]

logger.debug(
f"[AGENT_CREATION] Creating agent immediately: name={temporary_agent_name}, has_log_handler={'log_handler' in agent_config}"
Expand Down
Loading
Loading