unique_toolkit 0.7.42__tar.gz → 0.8.0__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 (81) hide show
  1. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/CHANGELOG.md +3 -0
  2. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/PKG-INFO +5 -2
  3. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/pyproject.toml +2 -2
  4. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/__init__.py +6 -0
  5. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/schemas.py +51 -0
  6. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/LICENSE +0 -0
  7. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/README.md +0 -0
  8. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/__init__.py +0 -0
  9. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/_common/_base_service.py +0 -0
  10. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/_common/_time_utils.py +0 -0
  11. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/_common/exception.py +0 -0
  12. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/_common/validate_required_values.py +0 -0
  13. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/_common/validators.py +0 -0
  14. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/event_util.py +0 -0
  15. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/init_logging.py +0 -0
  16. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/init_sdk.py +0 -0
  17. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
  18. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  19. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/sse_client.py +0 -0
  20. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/unique_settings.py +0 -0
  21. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/app/verification.py +0 -0
  22. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/__init__.py +0 -0
  23. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/constants.py +0 -0
  24. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/functions.py +0 -0
  25. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/schemas.py +0 -0
  26. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/service.py +0 -0
  27. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/state.py +0 -0
  28. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/chat/utils.py +0 -0
  29. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/__init__.py +0 -0
  30. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/constants.py +0 -0
  31. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/functions.py +0 -0
  32. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/schemas.py +0 -0
  33. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/service.py +0 -0
  34. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/content/utils.py +0 -0
  35. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/__init__.py +0 -0
  36. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/constants.py +0 -0
  37. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/functions.py +0 -0
  38. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/schemas.py +0 -0
  39. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/service.py +0 -0
  40. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/embedding/utils.py +0 -0
  41. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/__init__.py +0 -0
  42. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/config.py +0 -0
  43. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/constants.py +0 -0
  44. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/context_relevancy/constants.py +0 -0
  45. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/context_relevancy/prompts.py +0 -0
  46. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/context_relevancy/service.py +0 -0
  47. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/context_relevancy/utils.py +0 -0
  48. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/exception.py +0 -0
  49. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/hallucination/constants.py +0 -0
  50. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/hallucination/prompts.py +0 -0
  51. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/hallucination/service.py +0 -0
  52. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/hallucination/utils.py +0 -0
  53. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/output_parser.py +0 -0
  54. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/evaluators/schemas.py +0 -0
  55. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  56. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  57. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  58. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  59. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/framework_utilities/utils.py +0 -0
  60. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/__init__.py +0 -0
  61. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/builder.py +0 -0
  62. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/constants.py +0 -0
  63. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/functions.py +0 -0
  64. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/infos.py +0 -0
  65. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/prompt.py +0 -0
  66. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/reference.py +0 -0
  67. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/schemas.py +0 -0
  68. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/service.py +0 -0
  69. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/language_model/utils.py +0 -0
  70. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/protocols/support.py +0 -0
  71. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
  72. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/short_term_memory/constants.py +0 -0
  73. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/short_term_memory/functions.py +0 -0
  74. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
  75. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/short_term_memory/service.py +0 -0
  76. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/smart_rules/__init__.py +0 -0
  77. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/smart_rules/compile.py +0 -0
  78. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/tools/tool_definitions.py +0 -0
  79. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/tools/tool_definitionsV2.py +0 -0
  80. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/tools/tool_factory.py +0 -0
  81. {unique_toolkit-0.7.42 → unique_toolkit-0.8.0}/unique_toolkit/tools/tool_progress_reporter.py +0 -0
@@ -5,6 +5,9 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.8.0] - 2025-08-04
9
+ - Add MCP support
10
+
8
11
  ## [0.7.42] - 2025-08-01
9
12
  - Added tool definitions
10
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 0.7.42
3
+ Version: 0.8.0
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Martin Fadler
@@ -19,7 +19,7 @@ Requires-Dist: regex (>=2024.5.15,<2025.0.0)
19
19
  Requires-Dist: sseclient (>=0.0.27,<0.0.28)
20
20
  Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
21
21
  Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
22
- Requires-Dist: unique-sdk (>=0.9.40,<0.10.0)
22
+ Requires-Dist: unique-sdk (>=0.10.0,<0.11.0)
23
23
  Description-Content-Type: text/markdown
24
24
 
25
25
  # Unique Toolkit
@@ -113,6 +113,9 @@ All notable changes to this project will be documented in this file.
113
113
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
114
114
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
115
115
 
116
+ ## [0.8.0] - 2025-08-04
117
+ - Add MCP support
118
+
116
119
  ## [0.7.42] - 2025-08-01
117
120
  - Added tool definitions
118
121
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_toolkit"
3
- version = "0.7.42"
3
+ version = "0.8.0"
4
4
  description = ""
5
5
  authors = [
6
6
  "Martin Fadler <martin.fadler@unique.ch>",
@@ -20,7 +20,7 @@ numpy = "^1.26.4"
20
20
  python-dotenv = "^1.0.1"
21
21
  regex = "^2024.5.15"
22
22
  tiktoken = "^0.7.0"
23
- unique-sdk = "^0.9.40"
23
+ unique-sdk = "^0.10.0"
24
24
  pydantic-settings = "^2.10.1"
25
25
  sseclient = "^0.0.27"
26
26
 
@@ -41,5 +41,11 @@ from .schemas import (
41
41
  from .verification import (
42
42
  verify_signature_and_construct_event as verify_signature_and_construct_event,
43
43
  )
44
+ from .schemas import (
45
+ McpServer as McpServer,
46
+ )
47
+ from .schemas import (
48
+ McpTool as McpTool,
49
+ )
44
50
 
45
51
  DOMAIN_NAME = "app"
@@ -38,6 +38,53 @@ class BaseEvent(BaseModel):
38
38
  return cls.model_validate(data)
39
39
 
40
40
 
41
+ ###
42
+ # MCP schemas
43
+ ###
44
+
45
+ class McpTool(BaseModel):
46
+ model_config = model_config
47
+
48
+ name: str
49
+ description: Optional[str] = None
50
+ input_schema: dict[str, Any]
51
+ output_schema: Optional[dict[str, Any]] = None
52
+ annotations: Optional[dict[str, Any]] = None
53
+ title: Optional[str] = Field(
54
+ default=None,
55
+ description="The display title for a tool. This is a Unique specific field.",
56
+ )
57
+ icon: Optional[str] = Field(
58
+ default=None,
59
+ description="An icon name from the Lucide icon set for the tool. This is a Unique specific field.",
60
+ )
61
+ system_prompt: Optional[str] = Field(
62
+ default=None,
63
+ description="An optional system prompt for the tool. This is a Unique specific field.",
64
+ )
65
+ user_prompt: Optional[str] = Field(
66
+ default=None,
67
+ description="An optional user prompt for the tool. This is a Unique specific field.",
68
+ )
69
+ is_connected: bool = Field(
70
+ description="Whether the tool is connected to the MCP server. This is a Unique specific field.",
71
+ )
72
+
73
+ class McpServer(BaseModel):
74
+ model_config = model_config
75
+
76
+ id: str
77
+ name: str
78
+ system_prompt: Optional[str] = Field(
79
+ default=None,
80
+ description="An optional system prompt for the MCP server.",
81
+ )
82
+ user_prompt: Optional[str] = Field(
83
+ default=None,
84
+ description="An optional user prompt for the MCP server.",
85
+ )
86
+ tools: list[McpTool] = []
87
+
41
88
  ###
42
89
  # ChatEvent schemas
43
90
  ###
@@ -133,6 +180,10 @@ class ChatEventPayload(BaseModel):
133
180
  default=None,
134
181
  description="Raw UniqueQL rule that can be compiled to a metadata filter.",
135
182
  )
183
+ mcp_servers: list[McpServer] = Field(
184
+ default_factory=list,
185
+ description="A list of MCP servers with tools available for the chat session.",
186
+ )
136
187
 
137
188
  @field_validator("raw_scope_rules", mode="before")
138
189
  def validate_scope_rules(cls, value: dict[str, Any] | None) -> UniqueQL | None:
File without changes