Skip to content

[feat] Extend prompt templates#4171

Merged
ashrafchowdury merged 46 commits intorelease/v0.97.0from
feat/extend-prompt-templates
May 4, 2026
Merged

[feat] Extend prompt templates#4171
ashrafchowdury merged 46 commits intorelease/v0.97.0from
feat/extend-prompt-templates

Conversation

@jp-agenta
Copy link
Copy Markdown
Member

This PR extends prompt templates to support extra optional runtime behavior around LLM execution without changing the existing llm_config contract. It adds root-level fallback_llm_configs, retry_policy, and fallback_policy. Fallback configs reuse the same LLM config shape as the primary model, retry applies per attempted config, and fallback only happens after retries are exhausted according to the selected fallback policy.

It also expands the reusable LLM config shape with chat_template_kwargs for provider-specific model parameters, including playground support requested in #3996.

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 17, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agenta-documentation Ready Ready Preview, Comment May 4, 2026 7:02am

Request Review

@jp-agenta jp-agenta changed the title [feat] Extend prompt templats [feat] Extend prompt templates Apr 17, 2026
@jp-agenta jp-agenta marked this pull request as ready for review April 17, 2026 15:14
@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. enhancement New feature or request labels Apr 17, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 17, 2026

Railway Preview Environment

Status Destroyed (PR closed)

Updated at 2026-05-04T07:26:07.339Z

Copy link
Copy Markdown
Contributor

@ardaerzin ardaerzin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

few FE comments

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Member

@mmabrouk mmabrouk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Backward compatibility check needed

Please verify that the new prompt fields:

  • fallback_llm_configs
  • retry_policy
  • fallback_policy
  • chat_template_kwargs

do not leak into stored config JSON for old apps that do not use them.

Cases to verify

  1. No-op commit on an old app
    Open an old app and commit without touching any fallback or retry controls.
    Expected: no new keys appear in the stored JSON.

  2. Popover opened, but no changes made
    Open the Retry or Fallback popovers, then commit without changing anything.
    Expected: no new keys appear in the stored JSON.

  3. Add/remove or reset to default
    Add a fallback model and then remove it, or set a policy and then click Reset default, then commit.
    Expected: no new keys appear in the stored JSON.

  4. SDK round-trip compatibility
    Verify that:

    PromptTemplate(**old_config).model_dump(exclude_none=True)

Comment thread sdk/agenta/sdk/utils/types.py Outdated
Comment thread sdk/agenta/sdk/utils/types.py
devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Member

@mmabrouk mmabrouk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for the PR @jp-agenta ! I have added a bunch of comments, not all need action.

The ones I feel strongly about is:

  • chat_template_kwargs unless it's user pull / request / real case
  • some weird refactoring that should be easy to resovle (unless I misunderstood thing)
  • There seems to be a bug in the logic for retrial

For the policy, I think we can keep it as is. I would neither remove it nor change it.

However, for the frontend, I don't think we should add the options as top level options. The playground is already very complex as is, we should hide complexity in submenues for power users to discover it. In this case we should have these under the model sidebar. I have created designs that I will share in the next comment for @ashrafchowdury to look at.

Finally, we should have documentation for this and test the backward compatibility (previous comment)

Comment thread sdk/agenta/sdk/engines/running/handlers.py Outdated
Comment thread sdk/agenta/sdk/engines/running/handlers.py Outdated
Comment thread sdk/agenta/sdk/engines/running/handlers.py Outdated
Comment thread sdk/agenta/sdk/engines/running/handlers.py Outdated
Comment thread sdk/agenta/sdk/utils/types.py
@mmabrouk
Copy link
Copy Markdown
Member

mmabrouk commented Apr 27, 2026

CleanShot.2026-04-27.at.21.36.38.mp4

Fallback models.zip

@ashrafchowdury can you please take over the frontend here. And please take into account @ardaerzin feedback

@mmabrouk
Copy link
Copy Markdown
Member

@ashrafchowdury I have updated the design on how to deal with the kwargs (see the thread). Basically the idea is to hide the json editor under an advanced collapsible.

CleanShot.2026-04-28.at.11.36.36.mp4

Copy link
Copy Markdown
Member Author

jp-agenta commented Apr 28, 2026

Synced the retry/fallback findings back into the ledger and addressed the two Devin retry findings.

Fixed:

  • RetryConfig.max_retries now defaults to 0, so existing prompt templates keep one-attempt behavior unless retry is explicitly configured.
  • Retry controls are split into:
    • retry_config: { max_retries, delay_ms }
    • retry_policy: off | availability | capacity | transient | any
  • _run_prompt_llm_config_with_retry() now classifies retry eligibility before another same-model attempt, so deterministic errors such as missing secrets are not retried.
  • Added FallbackPolicy.CONTEXT for context-window/token-limit provider errors, before the broader any policy.
  • Renamed prompt fallback root field from fallback_llm_configs to fallback_configs and use ModelConfig directly for fallback entries.

@jp-agenta jp-agenta changed the base branch from main to release/v0.96.10 April 28, 2026 10:06
@mmabrouk
Copy link
Copy Markdown
Member

@jp-agenta you did not commit

@jp-agenta jp-agenta changed the base branch from main to release/v0.96.11 April 30, 2026 13:07
[fix] Add exponential backoff to retry in prompts
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

View 36 additional findings in Devin Review.

Open in Devin Review

@bekossy bekossy changed the base branch from release/v0.96.11 to main May 1, 2026 14:04
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 1, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c407e841-75a4-4dc6-b8c4-eeec66837a0a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR extends prompt templates with root-level fallback models, retry configurations, and provider-specific chat template kwargs. Changes encompass design documentation, SDK runtime logic with retry/fallback execution, comprehensive test coverage, user-facing documentation, and new web UI components for configuring fallback policies and retry behavior.

Changes

Cohort / File(s) Summary
Design & Strategy Documentation
docs/designs/extend-prompt-templates/research.md, gap.md, initial.specs.md, plan.md, proposal.md, findings.md
New design docs establishing the feature architecture: current state research, implementation gaps, spec details defining fallback/retry model behavior and field structure, overall plan, proposal with runtime execution semantics, and verification findings. Covers SDK/API/web data flow, handler logic, schema updates, and test requirements.
SDK Type System & Core Definitions
sdk/agenta/sdk/utils/types.py
Adds RetryPolicy, RetryConfig, FallbackPolicy enums/classes and extends PromptTemplate with fallback_configs, fallback_policy, retry_config, retry_policy. Introduces chat_template_kwargs to ModelConfig and AgLLM. Refactors PromptTemplate.format to handle llm_config and fallback config formatting; adds _format_llm_config helper and optional model-specific to_openai_kwargs.
SDK Runtime Handlers & Execution
sdk/agenta/sdk/engines/running/handlers.py
Refactors completion_v0 and chat_v0 to use unified _run_prompt_with_fallback wrapper. Implements configurable retry logic with exponential backoff and error classification (HTTP status/timeout-based). Adds FallbackPolicy enforcement to attempt fallback configs when errors match policy categories. Forwards chat_template_kwargs into LiteLLM kwargs. Refactors _apply_responses_bridge_if_needed to accept llm_config directly.
SDK Schema & Interfaces
sdk/agenta/sdk/engines/running/interfaces.py
Adds chat_template_kwargs object field to llm_v0_interface workflow parameters schema, accepting any additional properties for provider-specific options.
SDK Test Coverage
api/oss/tests/pytest/unit/evaluators/test_catalog_types.py, sdk/oss/tests/pytest/unit/test_prompt_template_extensions.py
Expands catalog schema validation for nested fallback/retry field definitions, enum constraints, and x-ag-type markers. Introduces comprehensive test suite covering: default value omission for backward compatibility, template formatting without affecting kwargs literals, fallback/retry policy classification, retry loop with max_retries enforcement, deterministic-error non-retry behavior, and status-code-driven retry/fallback decision matrices.
Build & Test Infrastructure
api/run-tests.py
Detects local SDK directory at <repo_root>/sdk and prepends it to PYTHONPATH via new _prepend_pythonpath helper. Adds module constants ROOT_DIR and LOCAL_SDK_DIR for SDK discovery.
User-Facing Documentation
docs/docs/prompt-engineering/playground/05-fallback-models-and-retry.mdx, 06-chat-template-kwargs.mdx, integrating-prompts/07-fallback-models-and-retry.mdx, 08-chat-template-kwargs.mdx, docs/custom-workflows/03-configuration-types.mdx, docs/reference/sdk/01-configuration-management.mdx, 03-custom-workflow.mdx
Introduces user and developer documentation explaining fallback model configuration flow (primary → retry → fallback → retry fallback until success/exhaustion), retry/fallback policy selection, chat_template_kwargs pass-through semantics, and playground/SDK usage examples. Updates configuration schema reference docs with new optional fields.
Web UI Components for Config Editing
web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/ModelConfigEditor.tsx, FallbackConfigTab.tsx, RetryConfigTab.tsx, AdvancedConfigFields.tsx
New memoized components: ModelConfigEditor renders primary LLM config (model selection, enum/numeric fields, advanced JSON) and chat_template_kwargs editor; FallbackConfigTab manages ordered fallback configs with add/edit/remove UI and policy selection; RetryConfigTab configures max_retries and base_delay with enablement logic; AdvancedConfigFields provides JSON editor for additional fields with schema validation.
Web Config Management UI
web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection.tsx
Replaces single-popover model config with tabbed popover (Model, Fallback, Retry sections). Delegates field rendering to new component editors. Adds schema-driven fallback/retry policy enum lists with optional descriptions. Implements add/edit/remove/reset flows for fallback configs and mutation helpers targeting canonical root-level and llms[0] structures plus legacy prompt.llm_config shapes.
Web Numeric Control Enhancement
web/packages/agenta-entity-ui/src/DrillInView/SchemaControls/NumberSliderControl.tsx
Adds disabledReason prop to override disabled-state tooltip text. Adds allowClear prop (default true) controlling optional reset button that clears value to null. Derives numeric precision from schema type (0 for integers).
Web Request & Trace Schema Updates
web/packages/agenta-entities/src/shared/execution/requestBodyBuilder.ts, trace/core/schema.ts
Request builder generalizes prompt config preservation from input_keys/template_format to include fallback_configs, retry_config, retry_policy, fallback_policy. Trace schema widens TraceSpan.spans from single-record to union (record of single TraceSpan or array of TraceSpan) for multi-span nesting.
Web UI Type & Utility Updates
web/oss/src/components/Playground/Components/Modals/RefinePromptModal/types.ts, hooks/useRefinePrompt.ts, web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts
Prompt template type now includes optional/nullable fallback_configs, retry_config, retry_policy, fallback_policy fields and index signature for extra properties. extractPromptTemplate and parseRefineResponse spread original prompt to retain all fields. Deployment dialog test updates to wait for real table rows before selection and verify revision-details panel rendering. Provider mock-model selector updates from "Model Parameters" popover to "Configure" popover.
Web Editor Plugin Enhancement
web/packages/agenta-ui/src/Editor/plugins/code/index.tsx
Refines code block selection logic to only select when editor has focus. Expands reconstruction condition from currentTextValue to include hasIncomingContent and forceUpdate flags. Optimizes editor state-clearing path when reconstruction condition not met.

Sequence Diagram

sequenceDiagram
    participant Client
    participant Handler as Prompt Handler
    participant Retry as Retry Loop
    participant Provider as LLM Provider
    participant Fallback as Fallback Loop

    Client->>Handler: Execute prompt with fallback_configs, retry_config, retry_policy, fallback_policy

    rect rgb(200, 150, 255, 0.5)
    Note over Handler,Provider: Primary Model Attempt
    Handler->>Retry: Start retry loop (max_retries)
    Retry->>Provider: Call LLM with primary llm_config
    Provider-->>Retry: Response or Error
    alt Provider Error
        Retry->>Retry: Classify error (HTTP status, timeout, timeout)
        alt Should Retry (per retry_policy & error type)
            Retry->>Retry: Apply exponential backoff (base_delay)
            Retry->>Provider: Retry LLM call
            Note over Retry: Loop up to max_retries
        else Should Not Retry (deterministic error)
            Retry->>Fallback: Exhausted retries or non-retryable error
        end
    else Success
        Retry-->>Handler: Return response
    end
    end

    rect rgb(255, 150, 150, 0.5)
    Note over Fallback,Provider: Fallback Models Attempt
    Fallback->>Fallback: Check if fallback_policy permits fallback for error type
    alt Policy Allows Fallback & fallback_configs not empty
        Fallback->>Fallback: Select next fallback config (in order)
        Fallback->>Retry: Start retry loop for fallback (same max_retries)
        Retry->>Provider: Call LLM with fallback llm_config
        Provider-->>Retry: Response or Error
        alt Fallback Success
            Retry-->>Handler: Return response
        else Fallback Error
            alt More Fallbacks
                Fallback->>Fallback: Move to next fallback config
                Fallback->>Retry: Retry with next config
                Note over Fallback,Retry: Repeat until success or exhaustion
            else No More Fallbacks
                Fallback->>Handler: Re-raise last error
            end
        end
    else Policy Denies or No Fallbacks
        Fallback->>Handler: Re-raise error
    end
    end

    Handler-->>Client: Final response or error
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.86% which is insufficient. The required threshold is 60.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title '[feat] Extend prompt templates' directly matches the main objective: extending prompt templates with fallback configs, retry/fallback policies, and chat_template_kwargs support.
Description check ✅ Passed The description is directly related to the changeset, explaining the addition of fallback configs, retry/fallback policies, and chat_template_kwargs to prompt templates without modifying the existing llm_config contract.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/extend-prompt-templates

Comment @coderabbitai help to get the list of available commands and usage tips.

@bekossy bekossy changed the base branch from main to release/v0.97.0 May 1, 2026 14:13
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts (1)

434-449: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Guard against empty currentModel before filtering selects.

On Line 448, hasText: currentModel || "" makes an empty model text match any select in the Configure popover, which can pick the wrong control and create flaky tests.

Suggested fix
 const currentModel = (await modelButton.textContent())?.trim()
+if (!currentModel) {
+    throw new Error("Could not determine current model from the model selector button")
+}
 if (currentModel?.includes(MOCK_MODEL_NAME)) {
     return
 }
@@
 const modelSelect = configurePopover
     .locator(".ant-select")
-    .filter({hasText: currentModel || ""})
+    .filter({hasText: currentModel})
     .first()
web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection.tsx (1)

1313-1330: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Root-level prompt schemas never reach the Configure popover.

For canonical prompt templates, the popover is supposed to hang off the top-level messages field, but Lines 1316-1321 return early for arrays before the fieldKey === "messages" && promptModelInfo?.isRootLevel branch can run. That makes model/fallback/retry editing unreachable for root-level prompt schemas, and the refine action is lost with it.

Suggested fix
-            if (
-                fieldValue === null ||
-                fieldValue === undefined ||
-                typeof fieldValue !== "object" ||
-                Array.isArray(fieldValue)
-            ) {
+            const allowArrayHeader =
+                fieldKey === "messages" && promptModelInfo?.isRootLevel
+
+            if (
+                !allowArrayHeader &&
+                (fieldValue === null ||
+                    fieldValue === undefined ||
+                    typeof fieldValue !== "object" ||
+                    Array.isArray(fieldValue))
+            ) {
                 return null
             }
🧹 Nitpick comments (3)
sdk/agenta/sdk/utils/types.py (1)

982-984: Replace deprecated .dict(by_alias=True) with .model_dump(by_alias=True) to align with Pydantic v2.

Line 983 uses the deprecated Pydantic v1 API .dict(by_alias=True), while the rest of the file uses .model_dump() (e.g., line 941 uses .model_dump(by_alias=True) for the same purpose). Since the project requires Pydantic v2, update line 983 to use .model_dump(by_alias=True) for consistency.

Proposed fix
-        if llm_config.response_format:
-            kwargs["response_format"] = llm_config.response_format.dict(by_alias=True)
+        if llm_config.response_format:
+            kwargs["response_format"] = llm_config.response_format.model_dump(by_alias=True)
web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/AdvancedConfigFields.tsx (1)

127-140: 💤 Low value

Unsafe type cast when validating non-object JSON values.

If the user enters a valid JSON array, string, number, or boolean (e.g., [1, 2, 3] or true), parsed won't be a Record<string, unknown>. The cast at line 134 may cause validateConfigAgainstSchema to behave unexpectedly or fail silently.

Consider adding a type check before validation:

🛡️ Proposed fix to handle non-object JSON
         if (parsed === null) {
             setParseError(null)
             onChange(fieldKey, null)
             return
         }

+        if (typeof parsed !== "object" || Array.isArray(parsed)) {
+            setParseError("Expected a JSON object")
+            return
+        }
+
         const validationResult = validateConfigAgainstSchema(
             parsed as Record<string, unknown>,
             schema as Record<string, unknown>,
         )
docs/designs/extend-prompt-templates/initial.specs.md (1)

192-210: 💤 Low value

Runtime loop pseudocode may not match implementation.

The pseudocode shows fallback only occurs "if max_retries" (line 203), but based on the handler implementation in handlers.py, fallback is controlled by fallback_policy independently of retry configuration. The actual implementation in _run_prompt_with_fallback always checks _should_fallback(exc, formatted_prompt.fallback_policy) regardless of retry count.

Consider updating the pseudocode to reflect the actual behavior:

📝 Suggested pseudocode correction
 for current_llm_config in llm_configs:
   run current_llm_config with retry_config and retry_policy

   if success:
     return response

-  if max_retries:
-    if fallback_policy allows fallback given final error:
-      continue to next current_llm_config
+  if fallback_policy allows fallback given final error:
+    continue to next current_llm_config

   fail with final error

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 16499c07-2b1b-4cb9-be35-2f4e8fd50658

📥 Commits

Reviewing files that changed from the base of the PR and between b5f0a54 and 70ebeb6.

⛔ Files ignored due to path filters (3)
  • api/poetry.lock is excluded by !**/*.lock
  • sdk/poetry.lock is excluded by !**/*.lock
  • services/poetry.lock is excluded by !**/*.lock
📒 Files selected for processing (32)
  • api/oss/tests/pytest/unit/evaluators/test_catalog_types.py
  • api/run-tests.py
  • docs/designs/extend-prompt-templates/findings.md
  • docs/designs/extend-prompt-templates/gap.md
  • docs/designs/extend-prompt-templates/initial.specs.md
  • docs/designs/extend-prompt-templates/plan.md
  • docs/designs/extend-prompt-templates/proposal.md
  • docs/designs/extend-prompt-templates/research.md
  • docs/docs/custom-workflows/03-configuration-types.mdx
  • docs/docs/prompt-engineering/integrating-prompts/07-fallback-models-and-retry.mdx
  • docs/docs/prompt-engineering/integrating-prompts/08-chat-template-kwargs.mdx
  • docs/docs/prompt-engineering/playground/05-fallback-models-and-retry.mdx
  • docs/docs/prompt-engineering/playground/06-chat-template-kwargs.mdx
  • docs/docs/reference/sdk/01-configuration-management.mdx
  • docs/docs/reference/sdk/03-custom-workflow.mdx
  • sdk/agenta/sdk/engines/running/handlers.py
  • sdk/agenta/sdk/engines/running/interfaces.py
  • sdk/agenta/sdk/utils/types.py
  • sdk/oss/tests/pytest/unit/test_prompt_template_extensions.py
  • web/oss/src/components/Playground/Components/Modals/RefinePromptModal/hooks/useRefinePrompt.ts
  • web/oss/src/components/Playground/Components/Modals/RefinePromptModal/types.ts
  • web/oss/tests/playwright/acceptance/deployment/index.ts
  • web/packages/agenta-entities/src/shared/execution/requestBodyBuilder.ts
  • web/packages/agenta-entities/src/trace/core/schema.ts
  • web/packages/agenta-entity-ui/src/DrillInView/SchemaControls/NumberSliderControl.tsx
  • web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection.tsx
  • web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/AdvancedConfigFields.tsx
  • web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/FallbackConfigTab.tsx
  • web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/ModelConfigEditor.tsx
  • web/packages/agenta-entity-ui/src/DrillInView/components/PlaygroundConfigSection/RetryConfigTab.tsx
  • web/packages/agenta-ui/src/Editor/plugins/code/index.tsx
  • web/tests/tests/fixtures/base.fixture/providerHelpers/index.ts

Comment thread docs/designs/extend-prompt-templates/findings.md
Comment thread docs/designs/extend-prompt-templates/proposal.md
Comment thread sdk/oss/tests/pytest/unit/test_prompt_template_extensions.py
Comment thread web/packages/agenta-ui/src/Editor/plugins/code/index.tsx
Comment thread web/packages/agenta-ui/src/Editor/plugins/code/index.tsx
@ashrafchowdury ashrafchowdury merged commit c0832ff into release/v0.97.0 May 4, 2026
26 of 27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants