Handle the case where provider is a string

Updated example
This commit is contained in:
Fahad
2025-06-21 12:58:11 +04:00
parent f72b78a18d
commit d12094b536
6 changed files with 139 additions and 15 deletions

View File

@@ -1640,7 +1640,15 @@ When recommending searches, be specific about what information you need and why
# TEST COVERAGE: tests/test_provider_routing_bugs.py::TestProviderMetadataBug
provider = model_info.get("provider")
if provider:
metadata["provider_used"] = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
metadata["provider_used"] = provider
else:
try:
metadata["provider_used"] = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
metadata["provider_used"] = str(provider)
return ToolOutput(
status=status_key,
@@ -1684,7 +1692,15 @@ When recommending searches, be specific about what information you need and why
if model_info:
provider = model_info.get("provider")
if provider:
model_provider = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
model_provider = provider
else:
try:
model_provider = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
model_provider = str(provider)
model_name = model_info.get("model_name")
model_response = model_info.get("model_response")
if model_response:
@@ -1721,7 +1737,15 @@ When recommending searches, be specific about what information you need and why
# FEATURE: Add provider_used metadata (Added for Issue #98)
provider = model_info.get("provider")
if provider:
metadata["provider_used"] = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
metadata["provider_used"] = provider
else:
try:
metadata["provider_used"] = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
metadata["provider_used"] = str(provider)
return ToolOutput(
status="success",
@@ -1814,7 +1838,15 @@ When recommending searches, be specific about what information you need and why
if model_info:
provider = model_info.get("provider")
if provider:
model_provider = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
model_provider = provider
else:
try:
model_provider = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
model_provider = str(provider)
model_name = model_info.get("model_name")
model_response = model_info.get("model_response")
if model_response:
@@ -1860,7 +1892,15 @@ When recommending searches, be specific about what information you need and why
# FEATURE: Add provider_used metadata (Added for Issue #98)
provider = model_info.get("provider")
if provider:
metadata["provider_used"] = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
metadata["provider_used"] = provider
else:
try:
metadata["provider_used"] = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
metadata["provider_used"] = str(provider)
return ToolOutput(
status="continuation_available",
@@ -1883,7 +1923,15 @@ When recommending searches, be specific about what information you need and why
# FEATURE: Add provider_used metadata (Added for Issue #98)
provider = model_info.get("provider")
if provider:
metadata["provider_used"] = provider.get_provider_type().value
# Handle both provider objects and string values
if isinstance(provider, str):
metadata["provider_used"] = provider
else:
try:
metadata["provider_used"] = provider.get_provider_type().value
except AttributeError:
# Fallback if provider doesn't have get_provider_type method
metadata["provider_used"] = str(provider)
return ToolOutput(
status="success",

View File

@@ -445,9 +445,23 @@ class PlannerTool(WorkflowTool):
step_data = self.prepare_step_data(request)
self.branches[request.branch_id].append(step_data)
# Update metadata to reflect the new branch
if "metadata" in response_data:
response_data["metadata"]["branches"] = list(self.branches.keys())
# Ensure metadata exists and preserve existing metadata from build_base_response
if "metadata" not in response_data:
response_data["metadata"] = {}
# Store planner-specific metadata that should persist through workflow metadata addition
planner_metadata = {
"branches": list(self.branches.keys()),
"is_step_revision": request.is_step_revision or False,
"revises_step_number": request.revises_step_number,
"is_branch_point": request.is_branch_point or False,
"branch_from_step": request.branch_from_step,
"branch_id": request.branch_id,
"more_steps_needed": request.more_steps_needed or False,
}
# Update metadata while preserving existing values
response_data["metadata"].update(planner_metadata)
# Add planner-specific output instructions for final steps
if not request.next_step_required:

View File

@@ -1083,8 +1083,10 @@ class BaseWorkflowMixin(ABC):
"provider_used": provider_name,
}
# Add metadata to response
response_data["metadata"] = metadata
# Preserve existing metadata and add workflow metadata
if "metadata" not in response_data:
response_data["metadata"] = {}
response_data["metadata"].update(metadata)
logger.debug(
f"[WORKFLOW_METADATA] {self.get_name()}: Added metadata - "
@@ -1102,7 +1104,10 @@ class BaseWorkflowMixin(ABC):
"provider_used": "unknown",
}
response_data["metadata"] = metadata
# Preserve existing metadata and add workflow metadata
if "metadata" not in response_data:
response_data["metadata"] = {}
response_data["metadata"].update(metadata)
logger.debug(
f"[WORKFLOW_METADATA] {self.get_name()}: Added fallback metadata - "