Skip to content

Commit ec29b53

Browse files
author
Jesus Terrazas
committed
Merge branch 'main' into users/joratz/removeenvid
2 parents 6ab05ed + 3d2c4fd commit ec29b53

35 files changed

Lines changed: 959 additions & 94 deletions

File tree

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
name: Bug Report
2+
description: Report an issue with the Agent365 Python SDK.
3+
title: "[BUG] - [short description]"
4+
labels: ["bug"]
5+
assignees: []
6+
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
## Bug Report
12+
13+
Thank you for reporting a bug in the Agent365 Python SDK! Please fill out the following information to help us diagnose and fix the issue.
14+
15+
- type: input
16+
attributes:
17+
label: "Bug Description"
18+
description: "Provide a clear and concise description of the bug."
19+
placeholder: "e.g., Agent runtime throws TypeError when processing tool responses, or observability module fails to emit telemetry events."
20+
required: true
21+
22+
- type: textarea
23+
attributes:
24+
label: "Steps to Reproduce"
25+
description: "List the steps to reproduce the behavior. Include code snippets if possible."
26+
placeholder: |
27+
e.g.,
28+
1. Import microsoft_agents_a365.runtime
29+
2. Create an agent with custom tools
30+
3. Call agent.process_activity() with a specific message
31+
4. Observe error in console
32+
value: |
33+
1.
34+
2.
35+
3.
36+
required: true
37+
38+
- type: textarea
39+
attributes:
40+
label: "Expected Behavior"
41+
description: "What did you expect to happen?"
42+
placeholder: "e.g., The agent should process the tool response and return a successful activity without errors."
43+
required: true
44+
45+
- type: textarea
46+
attributes:
47+
label: "Actual Behavior"
48+
description: "What actually happened? Include error messages, stack traces, or unexpected output."
49+
placeholder: |
50+
e.g.,
51+
TypeError: 'NoneType' object is not subscriptable
52+
File "microsoft_agents_a365/runtime/agent.py", line 123, in process_activity
53+
required: true
54+
55+
- type: dropdown
56+
attributes:
57+
label: "Affected SDK Component"
58+
description: "Which Agent365 SDK package is affected?"
59+
options:
60+
- microsoft-agents-a365-runtime
61+
- microsoft-agents-a365-tooling
62+
- microsoft-agents-a365-observability-core
63+
- microsoft-agents-a365-observability-extensions-langchain
64+
- microsoft-agents-a365-observability-extensions-openai
65+
- microsoft-agents-a365-observability-extensions-semantickernel
66+
- microsoft-agents-a365-tooling-extensions-agentframework
67+
- microsoft-agents-a365-tooling-extensions-azureaifoundry
68+
- microsoft-agents-a365-tooling-extensions-openai
69+
- microsoft-agents-a365-tooling-extensions-semantickernel
70+
- microsoft-agents-a365-notifications
71+
- Not sure / Multiple components
72+
required: true
73+
74+
- type: input
75+
attributes:
76+
label: "SDK Version"
77+
description: "What version of the Agent365 SDK are you using? (Run: pip show microsoft-agents-a365-runtime)"
78+
placeholder: "e.g., 0.1.0 or 0.1.0.dev5"
79+
required: true
80+
81+
- type: input
82+
attributes:
83+
label: "Python Version"
84+
description: "What version of Python are you using? (Run: python --version)"
85+
placeholder: "e.g., Python 3.11.5 or Python 3.12.0"
86+
required: true
87+
88+
- type: dropdown
89+
attributes:
90+
label: "Operating System"
91+
description: "What operating system are you running on?"
92+
options:
93+
- Windows
94+
- macOS
95+
- Linux (Ubuntu)
96+
- Linux (other distribution)
97+
- Azure (Container Apps / App Service)
98+
- Other
99+
required: true
100+
101+
- type: textarea
102+
attributes:
103+
label: "Environment Details"
104+
description: "Additional environment information (virtual environment, container, cloud service, etc.)"
105+
placeholder: |
106+
e.g.,
107+
- Running in Docker container
108+
- Deployed on Azure Container Apps
109+
- Using venv virtual environment
110+
- Running in GitHub Codespaces
111+
required: false
112+
113+
- type: textarea
114+
attributes:
115+
label: "Code Sample (Optional)"
116+
description: "Provide a minimal code sample that reproduces the issue."
117+
placeholder: |
118+
```python
119+
from microsoft_agents_a365.runtime import Agent
120+
121+
# Your code here that reproduces the bug
122+
agent = Agent(...)
123+
```
124+
required: false
125+
126+
- type: textarea
127+
attributes:
128+
label: "Additional Context"
129+
description: "Add any other context, logs, stack traces, or screenshots that might help."
130+
placeholder: |
131+
e.g.,
132+
- Full stack trace
133+
- Relevant log output
134+
- Related issues or discussions
135+
- Workarounds attempted
136+
required: false
137+
138+
- type: checkboxes
139+
attributes:
140+
label: "Impact"
141+
description: "How does this bug affect your work?"
142+
options:
143+
- label: Blocks development completely
144+
- label: Blocks specific feature implementation
145+
- label: Has a workaround but impacts productivity
146+
- label: Minor issue with minimal impact

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# .github/ISSUE_TEMPLATE/config.yml
2+
blank_issues_enabled: false
3+
contact_links:
4+
- name: 📚 Documentation
5+
url: https://github.com/microsoft/Agent365-python/blob/main/README.md
6+
about: Check the documentation for guides, API references, and examples
7+
- name: 💬 Discussions
8+
url: https://github.com/microsoft/Agent365-python/discussions
9+
about: Ask questions, share ideas, and engage with the community
10+
- name: ⚡ Quick Start Guide
11+
url: https://github.com/microsoft/Agent365-python/blob/main/README.md#getting-started
12+
about: Get started with the Agent365 Python SDK
13+
- name: 🔒 Security Vulnerability
14+
url: https://github.com/microsoft/Agent365-python/security/advisories/new
15+
about: Report security vulnerabilities privately (do not create public issues)
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Feature Request
2+
description: Suggest a new feature or improvement for the Agent365 Python SDK.
3+
title: "[FEATURE] - [short description]"
4+
labels: ["enhancement"]
5+
assignees: []
6+
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
## Feature Request
12+
13+
Thank you for suggesting a feature for the Agent365 Python SDK! Please fill out the following template to help us evaluate your request.
14+
15+
- type: input
16+
attributes:
17+
label: "Feature Description"
18+
description: "Describe the feature or enhancement you would like to see in the Agent SDK."
19+
placeholder: "e.g., Add support for streaming responses in the observability module, or support for custom authentication providers."
20+
required: true
21+
22+
- type: textarea
23+
attributes:
24+
label: "Use Case"
25+
description: "What problem does this feature solve or how would it improve agent development?"
26+
placeholder: "e.g., Streaming responses would allow real-time monitoring of agent interactions in production, improving debugging capabilities for long-running agents."
27+
required: true
28+
29+
- type: dropdown
30+
attributes:
31+
label: "Affected SDK Component"
32+
description: "Which part of the Agent365 SDK would this feature affect?"
33+
options:
34+
- microsoft-agents-a365-runtime
35+
- microsoft-agents-a365-tooling
36+
- microsoft-agents-a365-observability-core
37+
- microsoft-agents-a365-observability-extensions
38+
- microsoft-agents-a365-tooling-extensions
39+
- microsoft-agents-a365-notifications
40+
- Documentation
41+
- Multiple components
42+
- Other (specify in additional context)
43+
required: true
44+
45+
- type: input
46+
attributes:
47+
label: "Potential Impact"
48+
description: "How would this feature impact agent development or the developer experience?"
49+
placeholder: "e.g., Would reduce development time by 30% for implementing observability in production agents."
50+
required: true
51+
52+
- type: dropdown
53+
attributes:
54+
label: "Priority"
55+
description: "How important is this feature to your agent development workflow?"
56+
options:
57+
- Low - Nice to have
58+
- Medium - Would improve workflow
59+
- High - Blocking current development
60+
- Critical - Prevents SDK adoption
61+
required: true
62+
63+
- type: textarea
64+
attributes:
65+
label: "Proposed Solution (Optional)"
66+
description: "If you have ideas on how this feature could be implemented, please share them."
67+
placeholder: "e.g., Could add a StreamingObserver class that implements the Observer pattern for real-time event callbacks."
68+
required: false
69+
70+
- type: textarea
71+
attributes:
72+
label: "Alternative Solutions Considered"
73+
description: "Have you considered any workarounds or alternative approaches?"
74+
placeholder: "e.g., Currently using custom logging, but it doesn't integrate with the SDK's observability framework."
75+
required: false
76+
77+
- type: textarea
78+
attributes:
79+
label: "Additional Context"
80+
description: "Add any other information that might be helpful (code examples, related issues, external resources)."
81+
placeholder: "e.g., Related to #123, similar to feature in Microsoft.Agents .NET SDK, or example code showing the desired API."
82+
required: false

libraries/microsoft-agents-a365-notifications/microsoft_agents_a365/notifications/agent_notification.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,8 @@ def on_agent_notification(
6161

6262
def route_selector(context: TurnContext) -> bool:
6363
ch = context.activity.channel_id
64-
received_channel = ch.channel if ch else ""
65-
received_subchannel = ch.sub_channel if ch else ""
66-
received_channel = received_channel.lower()
67-
received_subchannel = received_subchannel.lower()
64+
received_channel = (ch.channel if ch else "").lower()
65+
received_subchannel = (ch.sub_channel if ch and ch.sub_channel else "").lower()
6866
if received_channel != registered_channel:
6967
return False
7068
if registered_subchannel == "*":
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
# Copyright (c) Microsoft Corporation.
22
# Licensed under the MIT License.
33

4+
import sys
5+
from pathlib import Path
46
from os import environ
57
from setuptools import setup
68

79
# Get version from environment variable set by CI/CD
8-
# This will be set by setuptools-git-versioning in the CI pipeline
910
package_version = environ.get("AGENT365_PYTHON_SDK_PACKAGE_VERSION", "0.0.0")
1011

12+
# Add versioning helper to path
13+
helper_path = Path(__file__).parent.parent.parent / "versioning" / "helper"
14+
sys.path.insert(0, str(helper_path))
15+
16+
from setup_utils import get_dynamic_dependencies
17+
18+
# Use minimum version strategy:
19+
# - Internal packages get: >= current_base_version (e.g., >= 0.1.0)
20+
# - Automatically updates when you build new versions
21+
# - Consumers can upgrade to any higher version
1122
setup(
1223
version=package_version,
24+
install_requires=get_dynamic_dependencies(
25+
use_compatible_release=False, # No upper bound
26+
use_exact_match=False, # Not exact match
27+
),
1328
)

libraries/microsoft-agents-a365-observability-core/microsoft_agents_a365/observability/core/config.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from .exporters.utils import is_agent365_exporter_enabled
1515
from .trace_processor.span_processor import SpanProcessor
1616

17+
DEFAULT_LOGGER_NAME = __name__
18+
1719

1820
class TelemetryManager:
1921
"""
@@ -46,7 +48,7 @@ def configure(
4648
self,
4749
service_name: str,
4850
service_namespace: str,
49-
logger_name: str = "agent365",
51+
logger_name: str = DEFAULT_LOGGER_NAME,
5052
token_resolver: Callable[[str, str], str | None] | None = None,
5153
cluster_category: str = "prod",
5254
**kwargs: Any,
@@ -158,11 +160,11 @@ def get_tracer(self, name: str | None = None, version: str | None = None):
158160
to call `configure(...)` during application startup so the tracer
159161
returned is backed by the configured TracerProvider.
160162
161-
:param name: Optional tracer name. Defaults to 'agent365' when not provided.
163+
:param name: Optional tracer name. Defaults to 'microsoft_agents_a365.observability.core' when not provided.
162164
:param version: Optional tracer version.
163165
:return: An OpenTelemetry Tracer instance.
164166
"""
165-
tracer_name = name or "agent365"
167+
tracer_name = name or DEFAULT_LOGGER_NAME
166168
if self._tracer_provider is None:
167169
# Not configured — return whatever tracer OpenTelemetry provides (no-op)
168170
self._logger.warning(
@@ -192,7 +194,7 @@ def get_tracer_provider(self):
192194
def configure(
193195
service_name: str,
194196
service_namespace: str,
195-
logger_name: str = "agent365",
197+
logger_name: str = DEFAULT_LOGGER_NAME,
196198
token_resolver: Callable[[str, str], str | None] | None = None,
197199
cluster_category: str = "prod",
198200
**kwargs: Any,
@@ -228,7 +230,7 @@ def get_tracer(name: str | None = None, version: str | None = None):
228230
"""
229231
Return a tracer tied to the TracerProvider configured by the SDK.
230232
231-
:param name: Optional tracer name. If omitted, defaults to 'agent365'.
233+
:param name: Optional tracer name. If omitted, defaults to 'microsoft_agents_a365.observability.core'.
232234
:param version: Optional tracer version.
233235
:return: An OpenTelemetry Tracer (may be a no-op tracer if SDK isn't configured).
234236
"""

0 commit comments

Comments
 (0)