Python: [BREAKING] update to v1.0.0 (#5062)

* updates to final deprecated pieces and versions

* fix mypy

* fix readme links
This commit is contained in:
Eduard van Valkenburg
2026-04-02 15:26:30 +00:00
committed by GitHub
parent 5f06b68535
commit 3446eb8d5d
171 changed files with 2580 additions and 2392 deletions
@@ -82,10 +82,13 @@ class PurviewPolicyMiddleware(AgentMiddleware):
if should_block_prompt:
from agent_framework import AgentResponse, Message
msg = self._settings.get("blocked_prompt_message", None) or "Prompt blocked by policy"
context.result = AgentResponse(
messages=[
Message(
role="system", text=self._settings.get("blocked_prompt_message", "Prompt blocked by policy")
role="system",
contents=[msg],
)
]
)
@@ -119,11 +122,13 @@ class PurviewPolicyMiddleware(AgentMiddleware):
if should_block_response:
from agent_framework import AgentResponse, Message
msg = self._settings.get("blocked_response_message", None) or "Response blocked by policy"
context.result = AgentResponse(
messages=[
Message(
role="system",
text=self._settings.get("blocked_response_message", "Response blocked by policy"),
contents=[msg],
)
]
)
@@ -189,7 +194,8 @@ class PurviewChatPolicyMiddleware(ChatMiddleware):
from agent_framework import ChatResponse, Message
blocked_message = Message(
role="system", text=self._settings.get("blocked_prompt_message", "Prompt blocked by policy")
role="system",
contents=[self._settings.get("blocked_prompt_message", None) or "Prompt blocked by policy"],
)
context.result = ChatResponse(messages=[blocked_message])
raise MiddlewareTermination
@@ -224,7 +230,9 @@ class PurviewChatPolicyMiddleware(ChatMiddleware):
blocked_message = Message(
role="system",
text=self._settings.get("blocked_response_message", "Response blocked by policy"),
contents=[
self._settings.get("blocked_response_message", None) or "Response blocked by policy"
],
)
context.result = ChatResponse(messages=[blocked_message])
else:
+3 -3
View File
@@ -4,7 +4,7 @@ description = "Microsoft Purview (Graph dataSecurityAndGovernance) integration f
authors = [{ name = "Microsoft", email = "af-support@microsoft.com"}]
readme = "README.md"
requires-python = ">=3.10"
version = "1.0.0b260330"
version = "1.0.0b260402"
license-files = ["LICENSE"]
urls.homepage = "https://github.com/microsoft/agent-framework"
urls.source = "https://github.com/microsoft/agent-framework/tree/main/python"
@@ -12,7 +12,7 @@ urls.release_notes = "https://github.com/microsoft/agent-framework/releases"
urls.issues = "https://github.com/microsoft/agent-framework/issues"
classifiers = [
"License :: OSI Approved :: MIT License",
"Development Status :: 3 - Alpha",
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
@@ -24,7 +24,7 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
"agent-framework-core>=1.0.0rc6",
"agent-framework-core>=1.0.0,<2",
"azure-core>=1.30.0,<2",
"httpx>=0.27.0,<0.29",
]
@@ -37,7 +37,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
return ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
return ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
async def test_initialization(self, middleware: PurviewChatPolicyMiddleware) -> None:
assert middleware._client is not None
@@ -55,7 +55,7 @@ class TestPurviewChatPolicyMiddleware:
class Result:
def __init__(self):
self.messages = [Message(role="assistant", text="Hi there")]
self.messages = [Message(role="assistant", contents=["Hi there"])]
chat_context.result = Result()
@@ -91,7 +91,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
class Result:
def __init__(self):
self.messages = [Message(role="assistant", text="Sensitive output")] # pragma: no cover
self.messages = [Message(role="assistant", contents=["Sensitive output"])] # pragma: no cover
chat_context.result = Result()
@@ -108,7 +108,7 @@ class TestPurviewChatPolicyMiddleware:
chat_options.model = "test-model"
streaming_context = ChatContext(
client=client,
messages=[Message(role="user", text="Hello")],
messages=[Message(role="user", contents=["Hello"])],
options=chat_options,
stream=True,
)
@@ -140,7 +140,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Response")]
result.messages = [Message(role="assistant", contents=["Response"])]
chat_context.result = result
await middleware.process(chat_context, mock_next)
@@ -164,7 +164,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Response")]
result.messages = [Message(role="assistant", contents=["Response"])]
chat_context.result = result
await middleware.process(chat_context, mock_next)
@@ -187,7 +187,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
async def mock_process_messages(*args, **kwargs):
raise PurviewPaymentRequiredError("Payment required")
@@ -211,7 +211,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
call_count = 0
@@ -226,7 +226,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="OK")]
result.messages = [Message(role="assistant", contents=["OK"])]
context.result = result
with pytest.raises(PurviewPaymentRequiredError):
@@ -242,7 +242,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
async def mock_process_messages(*args, **kwargs):
raise PurviewPaymentRequiredError("Payment required")
@@ -251,7 +251,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Response")]
result.messages = [Message(role="assistant", contents=["Response"])]
context.result = result
# Should not raise, just log
@@ -282,7 +282,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
async def mock_process_messages(*args, **kwargs):
raise ValueError("Some error")
@@ -291,7 +291,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Response")]
result.messages = [Message(role="assistant", contents=["Response"])]
context.result = result
# Should not raise, just log
@@ -309,7 +309,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
with patch.object(middleware._processor, "process_messages", side_effect=ValueError("boom")):
@@ -329,7 +329,7 @@ class TestPurviewChatPolicyMiddleware:
client = DummyChatClient()
chat_options = MagicMock()
chat_options.model = "test-model"
context = ChatContext(client=client, messages=[Message(role="user", text="Hello")], options=chat_options)
context = ChatContext(client=client, messages=[Message(role="user", contents=["Hello"])], options=chat_options)
call_count = 0
@@ -344,7 +344,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="OK")]
result.messages = [Message(role="assistant", contents=["OK"])]
context.result = result
with pytest.raises(ValueError, match="post"):
@@ -355,7 +355,7 @@ class TestPurviewChatPolicyMiddleware:
) -> None:
"""Test that session_id is extracted from context.options['conversation_id']."""
chat_client = DummyChatClient()
messages = [Message(role="user", text="Hello")]
messages = [Message(role="user", contents=["Hello"])]
options = {"conversation_id": "conv-123", "model": "test-model"}
context = ChatContext(client=chat_client, messages=messages, options=options)
@@ -363,7 +363,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Hi")]
result.messages = [Message(role="assistant", contents=["Hi"])]
context.result = result
await middleware.process(context, mock_next)
@@ -377,14 +377,14 @@ class TestPurviewChatPolicyMiddleware:
) -> None:
"""Test that session_id is None when options don't contain conversation_id."""
chat_client = DummyChatClient()
messages = [Message(role="user", text="Hello")]
messages = [Message(role="user", contents=["Hello"])]
context = ChatContext(client=chat_client, messages=messages, options=None)
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Hi")]
result.messages = [Message(role="assistant", contents=["Hi"])]
context.result = result
await middleware.process(context, mock_next)
@@ -395,7 +395,7 @@ class TestPurviewChatPolicyMiddleware:
async def test_chat_middleware_session_id_used_in_post_check(self, middleware: PurviewChatPolicyMiddleware) -> None:
"""Test that session_id is passed to post-check process_messages call."""
chat_client = DummyChatClient()
messages = [Message(role="user", text="Hello")]
messages = [Message(role="user", contents=["Hello"])]
options = {"conversation_id": "conv-999"}
context = ChatContext(client=chat_client, messages=messages, options=options)
@@ -403,7 +403,7 @@ class TestPurviewChatPolicyMiddleware:
async def mock_next() -> None:
result = MagicMock()
result.messages = [Message(role="assistant", text="Response")]
result.messages = [Message(role="assistant", contents=["Response"])]
context.result = result
await middleware.process(context, mock_next)
@@ -50,7 +50,7 @@ class TestPurviewPolicyMiddleware:
self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock
) -> None:
"""Test middleware allows prompt that passes policy check."""
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello, how are you?")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello, how are you?"])])
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")):
next_called = False
@@ -58,7 +58,7 @@ class TestPurviewPolicyMiddleware:
async def mock_next() -> None:
nonlocal next_called
next_called = True
context.result = AgentResponse(messages=[Message(role="assistant", text="I'm good, thanks!")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["I'm good, thanks!"])])
await middleware.process(context, mock_next)
@@ -69,7 +69,7 @@ class TestPurviewPolicyMiddleware:
self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock
) -> None:
"""Test middleware blocks prompt that violates policy."""
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Sensitive information")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Sensitive information"])])
with patch.object(middleware._processor, "process_messages", return_value=(True, "user-123")):
next_called = False
@@ -89,7 +89,7 @@ class TestPurviewPolicyMiddleware:
async def test_middleware_checks_response(self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock) -> None:
"""Test middleware checks agent response for policy violations."""
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
call_count = 0
@@ -103,7 +103,7 @@ class TestPurviewPolicyMiddleware:
async def mock_next() -> None:
context.result = AgentResponse(
messages=[Message(role="assistant", text="Here's some sensitive information")]
messages=[Message(role="assistant", contents=["Here's some sensitive information"])]
)
await middleware.process(context, mock_next)
@@ -121,7 +121,7 @@ class TestPurviewPolicyMiddleware:
# Set ignore_exceptions to True so AttributeError is caught and logged
middleware._settings["ignore_exceptions"] = True
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")):
@@ -138,12 +138,12 @@ class TestPurviewPolicyMiddleware:
"""Test middleware passes correct activity type to processor."""
from agent_framework_purview._models import Activity
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Test")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Test"])])
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_process:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Response")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Response"])])
await middleware.process(context, mock_next)
@@ -157,13 +157,13 @@ class TestPurviewPolicyMiddleware:
self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock
) -> None:
"""Test that streaming results skip post-check evaluation."""
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
context.stream = True
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="streaming")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["streaming"])])
await middleware.process(context, mock_next)
@@ -175,7 +175,7 @@ class TestPurviewPolicyMiddleware:
"""Test that 402 in pre-check is raised when ignore_payment_required=False."""
from agent_framework_purview._exceptions import PurviewPaymentRequiredError
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
with patch.object(
middleware._processor,
@@ -195,7 +195,7 @@ class TestPurviewPolicyMiddleware:
"""Test that 402 in post-check is raised when ignore_payment_required=False."""
from agent_framework_purview._exceptions import PurviewPaymentRequiredError
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
call_count = 0
@@ -209,7 +209,7 @@ class TestPurviewPolicyMiddleware:
with patch.object(middleware._processor, "process_messages", side_effect=side_effect):
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="OK")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["OK"])])
with pytest.raises(PurviewPaymentRequiredError):
await middleware.process(context, mock_next)
@@ -220,7 +220,7 @@ class TestPurviewPolicyMiddleware:
"""Test that post-check exceptions are propagated when ignore_exceptions=False."""
middleware._settings["ignore_exceptions"] = False
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
call_count = 0
@@ -234,7 +234,7 @@ class TestPurviewPolicyMiddleware:
with patch.object(middleware._processor, "process_messages", side_effect=side_effect):
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="OK")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["OK"])])
with pytest.raises(ValueError, match="Post-check blew up"):
await middleware.process(context, mock_next)
@@ -246,14 +246,14 @@ class TestPurviewPolicyMiddleware:
# Set ignore_exceptions to True
middleware._settings["ignore_exceptions"] = True
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Test")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Test"])])
with patch.object(
middleware._processor, "process_messages", side_effect=Exception("Pre-check error")
) as mock_process:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Response")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Response"])])
await middleware.process(context, mock_next)
@@ -269,7 +269,7 @@ class TestPurviewPolicyMiddleware:
# Set ignore_exceptions to True
middleware._settings["ignore_exceptions"] = True
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Test")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Test"])])
call_count = 0
@@ -283,7 +283,7 @@ class TestPurviewPolicyMiddleware:
with patch.object(middleware._processor, "process_messages", side_effect=mock_process_messages):
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Response")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Response"])])
await middleware.process(context, mock_next)
@@ -300,7 +300,7 @@ class TestPurviewPolicyMiddleware:
mock_agent = MagicMock()
mock_agent.name = "test-agent"
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Test")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Test"])])
# Mock processor to raise an exception
async def mock_process_messages(*args, **kwargs):
@@ -309,7 +309,7 @@ class TestPurviewPolicyMiddleware:
with patch.object(middleware._processor, "process_messages", side_effect=mock_process_messages):
async def mock_next():
context.result = AgentResponse(messages=[Message(role="assistant", text="Response")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Response"])])
# Should not raise, just log
await middleware.process(context, mock_next)
@@ -324,7 +324,7 @@ class TestPurviewPolicyMiddleware:
mock_agent = MagicMock()
mock_agent.name = "test-agent"
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Test")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Test"])])
# Mock processor to raise an exception
async def mock_process_messages(*args, **kwargs):
@@ -344,12 +344,12 @@ class TestPurviewPolicyMiddleware:
) -> None:
"""Test that session_id is extracted from session.service_session_id."""
session = AgentSession(service_session_id="thread-123")
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")], session=session)
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])], session=session)
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Hi")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Hi"])])
await middleware.process(context, mock_next)
@@ -361,13 +361,13 @@ class TestPurviewPolicyMiddleware:
self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock
) -> None:
"""Test that session_id is extracted from message.additional_properties['conversation_id']."""
messages = [Message(role="user", text="Hello", additional_properties={"conversation_id": "conv-456"})]
messages = [Message(role="user", contents=["Hello"], additional_properties={"conversation_id": "conv-456"})]
context = AgentContext(agent=mock_agent, messages=messages)
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Hi")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Hi"])])
await middleware.process(context, mock_next)
@@ -380,13 +380,13 @@ class TestPurviewPolicyMiddleware:
) -> None:
"""Test that session.service_session_id takes precedence over message conversation_id."""
session = AgentSession(service_session_id="thread-789")
messages = [Message(role="user", text="Hello", additional_properties={"conversation_id": "conv-456"})]
messages = [Message(role="user", contents=["Hello"], additional_properties={"conversation_id": "conv-456"})]
context = AgentContext(agent=mock_agent, messages=messages, session=session)
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Hi")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Hi"])])
await middleware.process(context, mock_next)
@@ -397,12 +397,12 @@ class TestPurviewPolicyMiddleware:
self, middleware: PurviewPolicyMiddleware, mock_agent: MagicMock
) -> None:
"""Test that session_id is None when no session or conversation_id is available."""
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")])
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])])
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Hi")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Hi"])])
await middleware.process(context, mock_next)
@@ -414,12 +414,12 @@ class TestPurviewPolicyMiddleware:
) -> None:
"""Test that session_id is passed to post-check process_messages call."""
session = AgentSession(service_session_id="thread-999")
context = AgentContext(agent=mock_agent, messages=[Message(role="user", text="Hello")], session=session)
context = AgentContext(agent=mock_agent, messages=[Message(role="user", contents=["Hello"])], session=session)
with patch.object(middleware._processor, "process_messages", return_value=(False, "user-123")) as mock_proc:
async def mock_next() -> None:
context.result = AgentResponse(messages=[Message(role="assistant", text="Response")])
context.result = AgentResponse(messages=[Message(role="assistant", contents=["Response"])])
await middleware.process(context, mock_next)
@@ -83,8 +83,8 @@ class TestScopedContentProcessor:
async def test_process_messages_with_defaults(self, processor: ScopedContentProcessor) -> None:
"""Test process_messages with settings that have defaults."""
messages = [
Message(role="user", text="Hello"),
Message(role="assistant", text="Hi there"),
Message(role="user", contents=["Hello"]),
Message(role="assistant", contents=["Hi there"]),
]
with patch.object(processor, "_map_messages", return_value=([], None)) as mock_map:
@@ -98,7 +98,7 @@ class TestScopedContentProcessor:
self, processor: ScopedContentProcessor, process_content_request_factory
) -> None:
"""Test process_messages returns True when content should be blocked."""
messages = [Message(role="user", text="Sensitive content")]
messages = [Message(role="user", contents=["Sensitive content"])]
mock_request = process_content_request_factory("Sensitive content")
@@ -122,7 +122,7 @@ class TestScopedContentProcessor:
messages = [
Message(
role="user",
text="Test message",
contents=["Test message"],
message_id="msg-123",
author_name="12345678-1234-1234-1234-123456789012",
),
@@ -139,7 +139,7 @@ class TestScopedContentProcessor:
"""Test _map_messages gets token info when settings lack some defaults."""
settings = PurviewSettings(app_name="Test App", tenant_id="12345678-1234-1234-1234-123456789012")
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test", message_id="msg-123")]
messages = [Message(role="user", contents=["Test"], message_id="msg-123")]
requests, user_id = await processor._map_messages(messages, Activity.UPLOAD_TEXT)
@@ -156,7 +156,7 @@ class TestScopedContentProcessor:
return_value={"user_id": "test-user", "client_id": "test-client"}
)
messages = [Message(role="user", text="Test", message_id="msg-123")]
messages = [Message(role="user", contents=["Test"], message_id="msg-123")]
with pytest.raises(ValueError, match="Tenant id required"):
await processor._map_messages(messages, Activity.UPLOAD_TEXT)
@@ -333,7 +333,7 @@ class TestScopedContentProcessor:
messages = [
Message(
role="user",
text="Test message",
contents=["Test message"],
additional_properties={"user_id": "22345678-1234-1234-1234-123456789012"},
),
]
@@ -355,7 +355,7 @@ class TestScopedContentProcessor:
)
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test message")]
messages = [Message(role="user", contents=["Test message"])]
requests, user_id = await processor._map_messages(
messages, Activity.UPLOAD_TEXT, provided_user_id="32345678-1234-1234-1234-123456789012"
@@ -376,7 +376,7 @@ class TestScopedContentProcessor:
)
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test message")]
messages = [Message(role="user", contents=["Test message"])]
requests, user_id = await processor._map_messages(messages, Activity.UPLOAD_TEXT)
@@ -479,7 +479,7 @@ class TestUserIdResolution:
settings = PurviewSettings(app_name="Test App") # No tenant_id or app_location
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test")]
messages = [Message(role="user", contents=["Test"])]
requests, user_id = await processor._map_messages(messages, Activity.UPLOAD_TEXT)
@@ -495,7 +495,7 @@ class TestUserIdResolution:
messages = [
Message(
role="user",
text="Test",
contents=["Test"],
additional_properties={"user_id": "22222222-2222-2222-2222-222222222222"},
)
]
@@ -515,7 +515,7 @@ class TestUserIdResolution:
messages = [
Message(
role="user",
text="Test",
contents=["Test"],
author_name="33333333-3333-3333-3333-333333333333",
)
]
@@ -533,7 +533,7 @@ class TestUserIdResolution:
messages = [
Message(
role="user",
text="Test",
contents=["Test"],
author_name="John Doe", # Not a GUID
)
]
@@ -550,7 +550,7 @@ class TestUserIdResolution:
"""Test provided_user_id parameter is used as last resort."""
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test")]
messages = [Message(role="user", contents=["Test"])]
requests, user_id = await processor._map_messages(
messages, Activity.UPLOAD_TEXT, provided_user_id="44444444-4444-4444-4444-444444444444"
@@ -562,7 +562,7 @@ class TestUserIdResolution:
"""Test invalid provided_user_id is ignored."""
processor = ScopedContentProcessor(mock_client, settings)
messages = [Message(role="user", text="Test")]
messages = [Message(role="user", contents=["Test"])]
requests, user_id = await processor._map_messages(messages, Activity.UPLOAD_TEXT, provided_user_id="not-a-guid")
@@ -575,10 +575,12 @@ class TestUserIdResolution:
messages = [
Message(
role="user", text="First", additional_properties={"user_id": "55555555-5555-5555-5555-555555555555"}
role="user",
contents=["First"],
additional_properties={"user_id": "55555555-5555-5555-5555-555555555555"},
),
Message(role="assistant", text="Response"),
Message(role="user", text="Second"),
Message(role="assistant", contents=["Response"]),
Message(role="user", contents=["Second"]),
]
requests, user_id = await processor._map_messages(messages, Activity.UPLOAD_TEXT)
@@ -594,14 +596,16 @@ class TestUserIdResolution:
processor = ScopedContentProcessor(mock_client, settings)
messages = [
Message(role="user", text="First", author_name="Not a GUID"),
Message(role="user", contents=["First"], author_name="Not a GUID"),
Message(
role="assistant",
text="Response",
contents=["Response"],
additional_properties={"user_id": "66666666-6666-6666-6666-666666666666"},
),
Message(
role="user", text="Third", additional_properties={"user_id": "77777777-7777-7777-7777-777777777777"}
role="user",
contents=["Third"],
additional_properties={"user_id": "77777777-7777-7777-7777-777777777777"},
),
]
@@ -653,7 +657,7 @@ class TestScopedContentProcessorCaching:
scope_identifier="scope-123", scopes=[]
)
messages = [Message(role="user", text="Test")]
messages = [Message(role="user", contents=["Test"])]
await processor.process_messages(messages, Activity.UPLOAD_TEXT, user_id="12345678-1234-1234-1234-123456789012")
@@ -675,7 +679,7 @@ class TestScopedContentProcessorCaching:
mock_client.get_protection_scopes.side_effect = PurviewPaymentRequiredError("Payment required")
messages = [Message(role="user", text="Test")]
messages = [Message(role="user", contents=["Test"])]
with pytest.raises(PurviewPaymentRequiredError):
await processor.process_messages(