xpander-sdk 2.0.193__tar.gz → 2.0.195__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 (111) hide show
  1. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/PKG-INFO +1 -1
  2. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/setup.py +1 -1
  3. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/consts/api_routes.py +3 -0
  4. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/orchestrations.py +4 -0
  5. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/sub_modules/agent.py +2 -0
  6. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/frameworks/agno.py +28 -2
  7. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk.egg-info/PKG-INFO +1 -1
  8. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/LICENSE +0 -0
  9. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/README.md +0 -0
  10. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/pyproject.toml +0 -0
  11. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/setup.cfg +0 -0
  12. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/__init__.py +0 -0
  13. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/consts/__init__.py +0 -0
  14. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/core/__init__.py +0 -0
  15. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/core/module_base.py +0 -0
  16. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/core/state.py +0 -0
  17. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/core/xpander_api_client.py +0 -0
  18. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/exceptions/__init__.py +0 -0
  19. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/exceptions/module_exception.py +0 -0
  20. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/__init__.py +0 -0
  21. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/activity.py +0 -0
  22. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/compactization.py +0 -0
  23. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/configuration.py +0 -0
  24. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/deep_planning.py +0 -0
  25. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/events.py +0 -0
  26. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/frameworks.py +0 -0
  27. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/generic.py +0 -0
  28. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/notifications.py +0 -0
  29. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/shared.py +0 -0
  30. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/models/user.py +0 -0
  31. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/__init__.py +0 -0
  32. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/__init__.py +0 -0
  33. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/agents_module.py +0 -0
  34. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/models/__init__.py +0 -0
  35. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/models/agent.py +0 -0
  36. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/models/agent_list.py +0 -0
  37. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/models/knowledge_bases.py +0 -0
  38. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/sub_modules/__init__.py +0 -0
  39. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/utils/__init__.py +0 -0
  40. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/agents/utils/generic.py +0 -0
  41. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/__init__.py +0 -0
  42. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/backend_module.py +0 -0
  43. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/decorators/__init__.py +0 -0
  44. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/decorators/on_auth_event.py +0 -0
  45. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/events_registry.py +0 -0
  46. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/frameworks/__init__.py +0 -0
  47. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/frameworks/dispatch.py +0 -0
  48. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/utils/__init__.py +0 -0
  49. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/backend/utils/mcp_oauth.py +0 -0
  50. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/__init__.py +0 -0
  51. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/decorators/__init__.py +0 -0
  52. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/decorators/on_boot.py +0 -0
  53. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/decorators/on_shutdown.py +0 -0
  54. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/decorators/on_task.py +0 -0
  55. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/decorators/on_tool.py +0 -0
  56. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/events_module.py +0 -0
  57. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/models/__init__.py +0 -0
  58. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/models/deployments.py +0 -0
  59. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/models/events.py +0 -0
  60. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/utils/__init__.py +0 -0
  61. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/utils/generic.py +0 -0
  62. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/events/utils/git_init.py +0 -0
  63. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/__init__.py +0 -0
  64. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/knowledge_bases_module.py +0 -0
  65. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/models/__init__.py +0 -0
  66. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/models/knowledge_bases.py +0 -0
  67. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/sub_modules/__init__.py +0 -0
  68. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/sub_modules/knowledge_base.py +0 -0
  69. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/sub_modules/knowledge_base_document_item.py +0 -0
  70. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/knowledge_bases/utils/__init__.py +0 -0
  71. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/__init__.py +0 -0
  72. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/models/__init__.py +0 -0
  73. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/models/task.py +0 -0
  74. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/models/tasks_list.py +0 -0
  75. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/sub_modules/__init__.py +0 -0
  76. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/sub_modules/task.py +0 -0
  77. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/tasks_module.py +0 -0
  78. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/utils/__init__.py +0 -0
  79. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tasks/utils/files.py +0 -0
  80. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/__init__.py +0 -0
  81. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/decorators/__init__.py +0 -0
  82. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/decorators/register_tool.py +0 -0
  83. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/models/__init__.py +0 -0
  84. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/models/mcp.py +0 -0
  85. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/models/tool_invocation_result.py +0 -0
  86. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/sub_modules/__init__.py +0 -0
  87. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/sub_modules/tool.py +0 -0
  88. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/tools_repository_module.py +0 -0
  89. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/utils/__init__.py +0 -0
  90. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/utils/generic.py +0 -0
  91. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/utils/local_tools.py +0 -0
  92. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/modules/tools_repository/utils/schemas.py +0 -0
  93. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/__init__.py +0 -0
  94. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/agents/__init__.py +0 -0
  95. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/agents/compactization_agent.py +0 -0
  96. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/env.py +0 -0
  97. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/event_loop.py +0 -0
  98. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/generic.py +0 -0
  99. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk/utils/tools.py +0 -0
  100. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk.egg-info/SOURCES.txt +0 -0
  101. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk.egg-info/dependency_links.txt +0 -0
  102. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk.egg-info/requires.txt +0 -0
  103. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/src/xpander_sdk.egg-info/top_level.txt +0 -0
  104. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_agents_module.py +0 -0
  105. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_api_client.py +0 -0
  106. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_backend_module.py +0 -0
  107. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_boot_shutdown_handlers.py +0 -0
  108. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_configuration.py +0 -0
  109. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_knowledge_bases_module.py +0 -0
  110. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_tasks_module.py +0 -0
  111. {xpander_sdk-2.0.193 → xpander_sdk-2.0.195}/tests/test_tools_repository.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xpander-sdk
3
- Version: 2.0.193
3
+ Version: 2.0.195
4
4
  Summary: xpander.ai Backend-as-a-service for AI Agents - SDK
5
5
  Home-page: https://www.xpander.ai
6
6
  Author: xpanderAI
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setup(
7
7
  name="xpander-sdk",
8
- version="2.0.193",
8
+ version="2.0.195",
9
9
  author="xpanderAI",
10
10
  author_email="dev@xpander.ai",
11
11
  description="xpander.ai Backend-as-a-service for AI Agents - SDK",
@@ -63,6 +63,9 @@ and deleting resources.
63
63
  HITLRequest = "/hitl/request"
64
64
  HITLApprove = "/hitl/{task_id}/approve"
65
65
  HITLReject = "/hitl/{task_id}/reject"
66
+
67
+ # Metadata
68
+ GetOrgDefaultLLMExtraHeaders = "/metadata/default_llm_extra_headers"
66
69
 
67
70
  def __str__(self) -> str:
68
71
  return str(self.value)
@@ -119,6 +119,8 @@ class OrchestrationClassifierNodeLLMSettings(XPanderSharedModel):
119
119
  llm_credentials_key: Key identifier for stored credentials.
120
120
  llm_credentials_key_type: Type of credential key storage. Defaults to XPander.
121
121
  llm_credentials: Direct credential object if not using stored credentials.
122
+ llm_api_base: Alternative API Base for the LLM.
123
+ llm_extra_headers: Extra headers to be set to LLM Requests.
122
124
  """
123
125
 
124
126
  model_provider: Optional[LLMModelProvider] = LLMModelProvider.OpenAI
@@ -128,6 +130,8 @@ class OrchestrationClassifierNodeLLMSettings(XPanderSharedModel):
128
130
  LLMCredentialsKeyType.XPander
129
131
  )
130
132
  llm_credentials: Optional[LLMCredentials] = None
133
+ llm_api_base: Optional[str] = None
134
+ llm_extra_headers: Optional[Dict[str,str]] = {}
131
135
 
132
136
  class OrchestrationPointerNode(XPanderSharedModel):
133
137
  """Node that references an external asset (agent, function, or orchestration).
@@ -159,6 +159,7 @@ class Agent(XPanderSharedModel):
159
159
  deep_planning: Optional[bool] = False
160
160
  enforce_deep_planning: Optional[bool] = False
161
161
  llm_api_base: Optional[str]
162
+ llm_extra_headers: Optional[Dict[str,str]]
162
163
  webhook_url: Optional[str]
163
164
  created_at: Optional[datetime]
164
165
  type: Optional[AgentType]
@@ -206,6 +207,7 @@ class Agent(XPanderSharedModel):
206
207
  deep_planning: Optional[bool] = False
207
208
  enforce_deep_planning: Optional[bool] = False
208
209
  llm_api_base: Optional[str] = None
210
+ llm_extra_headers: Optional[Dict[str,str]] = {}
209
211
  webhook_url: Optional[str] = None
210
212
  created_at: Optional[datetime] = None
211
213
  type: Optional[AgentType] = None
@@ -7,6 +7,8 @@ from typing import Any, Callable, Dict, List, Optional
7
7
  from loguru import logger
8
8
  from toon import encode as toon_encode
9
9
  from xpander_sdk import Configuration
10
+ from xpander_sdk.consts.api_routes import APIRoute
11
+ from xpander_sdk.core.xpander_api_client import APIClient
10
12
  from xpander_sdk.models.shared import OutputFormat, ThinkMode
11
13
  from xpander_sdk.modules.agents.agents_module import Agents
12
14
  from xpander_sdk.modules.agents.models.agent import AgentGraphItemType, LLMReasoningEffort
@@ -31,6 +33,8 @@ from agno.guardrails import PIIDetectionGuardrail
31
33
  from agno.guardrails import PromptInjectionGuardrail
32
34
  from agno.guardrails import OpenAIModerationGuardrail
33
35
 
36
+ from xpander_sdk.utils.event_loop import run_sync
37
+
34
38
  async def build_agent_args(
35
39
  xpander_agent: Agent,
36
40
  task: Optional[Task] = None,
@@ -635,6 +639,26 @@ def _load_llm_model(agent: Agent, override: Optional[Dict[str, Any]] = {}) -> An
635
639
 
636
640
  llm_args = {}
637
641
 
642
+ llm_extra_headers = {}
643
+
644
+ # Get organization default LLM extra headers
645
+ api_client = APIClient(configuration=agent.configuration)
646
+ org_default_llm_headers = run_sync(
647
+ api_client.make_request(
648
+ path=APIRoute.GetOrgDefaultLLMExtraHeaders,
649
+ )
650
+ )
651
+
652
+ # set default headers
653
+ if org_default_llm_headers:
654
+ llm_extra_headers = {**llm_extra_headers,**org_default_llm_headers}
655
+
656
+ # set override by agnet
657
+ if agent.llm_extra_headers and isinstance(agent.llm_extra_headers, dict):
658
+ llm_extra_headers = {**llm_extra_headers, **agent.llm_extra_headers}
659
+
660
+ llm_args["extra_headers"] = llm_extra_headers
661
+
638
662
  if agent.llm_reasoning_effort and agent.llm_reasoning_effort != LLMReasoningEffort.Medium and agent.model_name and "gpt-5" in agent.model_name.lower():
639
663
  llm_args = { "reasoning_effort": agent.llm_reasoning_effort.value }
640
664
 
@@ -687,7 +711,7 @@ def _load_llm_model(agent: Agent, override: Optional[Dict[str, Any]] = {}) -> An
687
711
  # Google AI Studio - supports gemini models
688
712
  elif provider == "google_ai_studio":
689
713
  from agno.models.google import Gemini
690
-
714
+ del llm_args["extra_headers"]
691
715
  return Gemini(
692
716
  id=agent.model_name,
693
717
  # Try xpander.ai-specific key first, fallback to standard OpenAI key
@@ -718,6 +742,7 @@ def _load_llm_model(agent: Agent, override: Optional[Dict[str, Any]] = {}) -> An
718
742
  elif provider == "amazon_bedrock":
719
743
  from agno.models.aws.bedrock import AwsBedrock
720
744
  environ["AWS_BEARER_TOKEN_BEDROCK"] = get_llm_key("AWS_BEARER_TOKEN_BEDROCK") # set to env
745
+ del llm_args["extra_headers"]
721
746
  return AwsBedrock(
722
747
  id=agent.model_name,
723
748
  temperature=0.0,
@@ -727,7 +752,8 @@ def _load_llm_model(agent: Agent, override: Optional[Dict[str, Any]] = {}) -> An
727
752
  # Anthropic Provider - supports Claude models
728
753
  elif provider == "anthropic":
729
754
  from agno.models.anthropic import Claude
730
-
755
+ llm_args["default_headers"] = llm_args["extra_headers"]
756
+ del llm_args["extra_headers"]
731
757
  return Claude(
732
758
  id=agent.model_name,
733
759
  api_key=get_llm_key("ANTHROPIC_API_KEY"),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xpander-sdk
3
- Version: 2.0.193
3
+ Version: 2.0.195
4
4
  Summary: xpander.ai Backend-as-a-service for AI Agents - SDK
5
5
  Home-page: https://www.xpander.ai
6
6
  Author: xpanderAI
File without changes
File without changes
File without changes