mindroom 0.0.0__py3-none-any.whl → 0.1.1__py3-none-any.whl

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 (155) hide show
  1. mindroom/__init__.py +3 -0
  2. mindroom/agent_prompts.py +963 -0
  3. mindroom/agents.py +248 -0
  4. mindroom/ai.py +421 -0
  5. mindroom/api/__init__.py +1 -0
  6. mindroom/api/credentials.py +137 -0
  7. mindroom/api/google_integration.py +355 -0
  8. mindroom/api/google_tools_helper.py +40 -0
  9. mindroom/api/homeassistant_integration.py +421 -0
  10. mindroom/api/integrations.py +189 -0
  11. mindroom/api/main.py +506 -0
  12. mindroom/api/matrix_operations.py +219 -0
  13. mindroom/api/tools.py +94 -0
  14. mindroom/background_tasks.py +87 -0
  15. mindroom/bot.py +2470 -0
  16. mindroom/cli.py +86 -0
  17. mindroom/commands.py +377 -0
  18. mindroom/config.py +343 -0
  19. mindroom/config_commands.py +324 -0
  20. mindroom/config_confirmation.py +411 -0
  21. mindroom/constants.py +52 -0
  22. mindroom/credentials.py +146 -0
  23. mindroom/credentials_sync.py +134 -0
  24. mindroom/custom_tools/__init__.py +8 -0
  25. mindroom/custom_tools/config_manager.py +765 -0
  26. mindroom/custom_tools/gmail.py +92 -0
  27. mindroom/custom_tools/google_calendar.py +92 -0
  28. mindroom/custom_tools/google_sheets.py +92 -0
  29. mindroom/custom_tools/homeassistant.py +341 -0
  30. mindroom/error_handling.py +35 -0
  31. mindroom/file_watcher.py +49 -0
  32. mindroom/interactive.py +313 -0
  33. mindroom/logging_config.py +207 -0
  34. mindroom/matrix/__init__.py +1 -0
  35. mindroom/matrix/client.py +782 -0
  36. mindroom/matrix/event_info.py +173 -0
  37. mindroom/matrix/identity.py +149 -0
  38. mindroom/matrix/large_messages.py +267 -0
  39. mindroom/matrix/mentions.py +141 -0
  40. mindroom/matrix/message_builder.py +94 -0
  41. mindroom/matrix/message_content.py +209 -0
  42. mindroom/matrix/presence.py +178 -0
  43. mindroom/matrix/rooms.py +311 -0
  44. mindroom/matrix/state.py +77 -0
  45. mindroom/matrix/typing.py +91 -0
  46. mindroom/matrix/users.py +217 -0
  47. mindroom/memory/__init__.py +21 -0
  48. mindroom/memory/config.py +137 -0
  49. mindroom/memory/functions.py +396 -0
  50. mindroom/py.typed +0 -0
  51. mindroom/response_tracker.py +128 -0
  52. mindroom/room_cleanup.py +139 -0
  53. mindroom/routing.py +107 -0
  54. mindroom/scheduling.py +758 -0
  55. mindroom/stop.py +207 -0
  56. mindroom/streaming.py +203 -0
  57. mindroom/teams.py +749 -0
  58. mindroom/thread_utils.py +318 -0
  59. mindroom/tools/__init__.py +520 -0
  60. mindroom/tools/agentql.py +64 -0
  61. mindroom/tools/airflow.py +57 -0
  62. mindroom/tools/apify.py +49 -0
  63. mindroom/tools/arxiv.py +64 -0
  64. mindroom/tools/aws_lambda.py +41 -0
  65. mindroom/tools/aws_ses.py +57 -0
  66. mindroom/tools/baidusearch.py +87 -0
  67. mindroom/tools/brightdata.py +116 -0
  68. mindroom/tools/browserbase.py +62 -0
  69. mindroom/tools/cal_com.py +98 -0
  70. mindroom/tools/calculator.py +112 -0
  71. mindroom/tools/cartesia.py +84 -0
  72. mindroom/tools/composio.py +166 -0
  73. mindroom/tools/config_manager.py +44 -0
  74. mindroom/tools/confluence.py +73 -0
  75. mindroom/tools/crawl4ai.py +101 -0
  76. mindroom/tools/csv.py +104 -0
  77. mindroom/tools/custom_api.py +106 -0
  78. mindroom/tools/dalle.py +85 -0
  79. mindroom/tools/daytona.py +180 -0
  80. mindroom/tools/discord.py +81 -0
  81. mindroom/tools/docker.py +73 -0
  82. mindroom/tools/duckdb.py +124 -0
  83. mindroom/tools/duckduckgo.py +99 -0
  84. mindroom/tools/e2b.py +121 -0
  85. mindroom/tools/eleven_labs.py +77 -0
  86. mindroom/tools/email.py +74 -0
  87. mindroom/tools/exa.py +246 -0
  88. mindroom/tools/fal.py +50 -0
  89. mindroom/tools/file.py +80 -0
  90. mindroom/tools/financial_datasets_api.py +112 -0
  91. mindroom/tools/firecrawl.py +124 -0
  92. mindroom/tools/gemini.py +85 -0
  93. mindroom/tools/giphy.py +49 -0
  94. mindroom/tools/github.py +376 -0
  95. mindroom/tools/gmail.py +102 -0
  96. mindroom/tools/google_calendar.py +55 -0
  97. mindroom/tools/google_maps.py +112 -0
  98. mindroom/tools/google_sheets.py +86 -0
  99. mindroom/tools/googlesearch.py +83 -0
  100. mindroom/tools/groq.py +77 -0
  101. mindroom/tools/hackernews.py +54 -0
  102. mindroom/tools/jina.py +108 -0
  103. mindroom/tools/jira.py +70 -0
  104. mindroom/tools/linear.py +103 -0
  105. mindroom/tools/linkup.py +65 -0
  106. mindroom/tools/lumalabs.py +71 -0
  107. mindroom/tools/mem0.py +82 -0
  108. mindroom/tools/modelslabs.py +85 -0
  109. mindroom/tools/moviepy_video_tools.py +62 -0
  110. mindroom/tools/newspaper4k.py +63 -0
  111. mindroom/tools/openai.py +143 -0
  112. mindroom/tools/openweather.py +89 -0
  113. mindroom/tools/oxylabs.py +54 -0
  114. mindroom/tools/pandas.py +35 -0
  115. mindroom/tools/pubmed.py +64 -0
  116. mindroom/tools/python.py +120 -0
  117. mindroom/tools/reddit.py +155 -0
  118. mindroom/tools/replicate.py +56 -0
  119. mindroom/tools/resend.py +55 -0
  120. mindroom/tools/scrapegraph.py +87 -0
  121. mindroom/tools/searxng.py +120 -0
  122. mindroom/tools/serpapi.py +55 -0
  123. mindroom/tools/serper.py +81 -0
  124. mindroom/tools/shell.py +46 -0
  125. mindroom/tools/slack.py +80 -0
  126. mindroom/tools/sleep.py +38 -0
  127. mindroom/tools/spider.py +62 -0
  128. mindroom/tools/sql.py +138 -0
  129. mindroom/tools/tavily.py +104 -0
  130. mindroom/tools/telegram.py +54 -0
  131. mindroom/tools/todoist.py +103 -0
  132. mindroom/tools/trello.py +121 -0
  133. mindroom/tools/twilio.py +97 -0
  134. mindroom/tools/web_browser_tools.py +37 -0
  135. mindroom/tools/webex.py +63 -0
  136. mindroom/tools/website.py +45 -0
  137. mindroom/tools/whatsapp.py +81 -0
  138. mindroom/tools/wikipedia.py +45 -0
  139. mindroom/tools/x.py +97 -0
  140. mindroom/tools/yfinance.py +121 -0
  141. mindroom/tools/youtube.py +81 -0
  142. mindroom/tools/zendesk.py +62 -0
  143. mindroom/tools/zep.py +107 -0
  144. mindroom/tools/zoom.py +62 -0
  145. mindroom/tools_metadata.json +7643 -0
  146. mindroom/tools_metadata.py +220 -0
  147. mindroom/topic_generator.py +153 -0
  148. mindroom/voice_handler.py +266 -0
  149. mindroom-0.1.1.dist-info/METADATA +425 -0
  150. mindroom-0.1.1.dist-info/RECORD +152 -0
  151. {mindroom-0.0.0.dist-info → mindroom-0.1.1.dist-info}/WHEEL +1 -2
  152. mindroom-0.1.1.dist-info/entry_points.txt +2 -0
  153. mindroom-0.0.0.dist-info/METADATA +0 -24
  154. mindroom-0.0.0.dist-info/RECORD +0 -4
  155. mindroom-0.0.0.dist-info/top_level.txt +0 -1
@@ -0,0 +1,71 @@
1
+ """Luma Labs tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.lumalab import LumaLabTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="lumalabs",
21
+ display_name="Luma Labs",
22
+ description="3D content creation and video generation using Luma AI Dream Machine",
23
+ category=ToolCategory.DEVELOPMENT, # others/ category maps to DEVELOPMENT
24
+ status=ToolStatus.REQUIRES_CONFIG, # Requires LUMAAI_API_KEY
25
+ setup_type=SetupType.API_KEY, # API key authentication
26
+ icon="FaVideo", # Video-related icon
27
+ icon_color="text-purple-600", # Purple color for AI/ML tools
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="luma_api_...",
36
+ description="Luma AI API key for authentication (can also be set via LUMAAI_API_KEY env var)",
37
+ ),
38
+ # Generation settings
39
+ ConfigField(
40
+ name="wait_for_completion",
41
+ label="Wait for Completion",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Wait for video generation to complete before returning results",
46
+ ),
47
+ ConfigField(
48
+ name="poll_interval",
49
+ label="Poll Interval",
50
+ type="number",
51
+ required=False,
52
+ default=3,
53
+ description="Interval in seconds between status checks during video generation",
54
+ ),
55
+ ConfigField(
56
+ name="max_wait_time",
57
+ label="Max Wait Time",
58
+ type="number",
59
+ required=False,
60
+ default=300,
61
+ description="Maximum time in seconds to wait for video generation completion",
62
+ ),
63
+ ],
64
+ dependencies=["lumaai"],
65
+ docs_url="https://docs.agno.com/tools/toolkits/others/lumalabs",
66
+ )
67
+ def lumalabs_tools() -> type[LumaLabTools]:
68
+ """Return Luma Labs tools for 3D content creation and video generation."""
69
+ from agno.tools.lumalab import LumaLabTools
70
+
71
+ return LumaLabTools
mindroom/tools/mem0.py ADDED
@@ -0,0 +1,82 @@
1
+ """Mem0 Memory tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import ConfigField, SetupType, ToolCategory, ToolStatus, register_tool_with_metadata
8
+
9
+ if TYPE_CHECKING:
10
+ from agno.tools.mem0 import Mem0Tools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="mem0",
15
+ display_name="Mem0 Memory",
16
+ description="Persistent memory system that stores, retrieves, searches, and manages user memories and context",
17
+ category=ToolCategory.PRODUCTIVITY, # Database tools → Productivity
18
+ status=ToolStatus.REQUIRES_CONFIG, # Requires API key for cloud usage
19
+ setup_type=SetupType.API_KEY, # Optional API key for cloud usage
20
+ icon="Brain",
21
+ icon_color="text-purple-600", # Memory/brain theme
22
+ config_fields=[
23
+ # Authentication/Connection parameters first
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="mem0_...",
30
+ description="Mem0 API key for cloud usage (can also be set via MEM0_API_KEY env var)",
31
+ ),
32
+ ConfigField(
33
+ name="org_id",
34
+ label="Organization ID",
35
+ type="text",
36
+ required=False,
37
+ placeholder="org_123...",
38
+ description="Organization ID for Mem0 cloud (can also be set via MEM0_ORG_ID env var)",
39
+ ),
40
+ ConfigField(
41
+ name="project_id",
42
+ label="Project ID",
43
+ type="text",
44
+ required=False,
45
+ placeholder="proj_456...",
46
+ description="Project ID for Mem0 cloud (can also be set via MEM0_PROJECT_ID env var)",
47
+ ),
48
+ # Configuration parameters
49
+ ConfigField(
50
+ name="config",
51
+ label="Local Configuration",
52
+ type="text",
53
+ required=False,
54
+ placeholder='{"vector_store": {"provider": "chroma"}}',
55
+ description="JSON configuration for self-hosted Mem0 instance (overrides cloud API)",
56
+ ),
57
+ ConfigField(
58
+ name="user_id",
59
+ label="Default User ID",
60
+ type="text",
61
+ required=False,
62
+ placeholder="user_123",
63
+ description="Default user ID for memory operations (can be overridden per operation)",
64
+ ),
65
+ # Feature parameters
66
+ ConfigField(
67
+ name="infer",
68
+ label="Enable Memory Inference",
69
+ type="boolean",
70
+ required=False,
71
+ default=True,
72
+ description="Enable automatic memory inference and extraction from conversations",
73
+ ),
74
+ ],
75
+ dependencies=["mem0ai"], # Already in pyproject.toml
76
+ docs_url="https://docs.agno.com/tools/toolkits/database/mem0",
77
+ )
78
+ def mem0_tools() -> type[Mem0Tools]:
79
+ """Return Mem0 memory tools for persistent memory management."""
80
+ from agno.tools.mem0 import Mem0Tools
81
+
82
+ return Mem0Tools
@@ -0,0 +1,85 @@
1
+ """ModelsLabs tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.models_labs import ModelsLabTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="modelslabs",
21
+ display_name="ModelsLabs",
22
+ description="AI model marketplace for generating videos, audio, and GIFs from text prompts",
23
+ category=ToolCategory.DEVELOPMENT, # From docs URL: /tools/toolkits/others/
24
+ status=ToolStatus.REQUIRES_CONFIG, # Requires API key
25
+ setup_type=SetupType.API_KEY, # Uses api_key parameter
26
+ icon="Video", # React icon for video generation
27
+ icon_color="text-purple-600", # Purple color for creative/AI tools
28
+ config_fields=[
29
+ # Authentication parameter
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ default=None,
36
+ placeholder="your-modelslabs-api-key",
37
+ description="The ModelsLab API key for authentication (can also be set via MODELS_LAB_API_KEY env var)",
38
+ ),
39
+ # Media generation parameters
40
+ ConfigField(
41
+ name="file_type",
42
+ label="File Type",
43
+ type="text",
44
+ required=False,
45
+ # The agno default is FileType.MP4, which has value "mp4"
46
+ default="mp4",
47
+ placeholder="mp4",
48
+ description="The type of file to generate (mp4, gif, or mp3)",
49
+ ),
50
+ # Timing and completion parameters
51
+ ConfigField(
52
+ name="wait_for_completion",
53
+ label="Wait for Completion",
54
+ type="boolean",
55
+ required=False,
56
+ default=False,
57
+ description="Whether to wait for the media generation to complete before returning",
58
+ ),
59
+ ConfigField(
60
+ name="add_to_eta",
61
+ label="Add to ETA",
62
+ type="number",
63
+ required=False,
64
+ default=15,
65
+ placeholder="15",
66
+ description="Time in seconds to add to the ETA to account for the time it takes to fetch the media",
67
+ ),
68
+ ConfigField(
69
+ name="max_wait_time",
70
+ label="Max Wait Time",
71
+ type="number",
72
+ required=False,
73
+ default=60,
74
+ placeholder="60",
75
+ description="Maximum time in seconds to wait for the media to be ready",
76
+ ),
77
+ ],
78
+ dependencies=["requests"], # Already in pyproject.toml
79
+ docs_url="https://docs.agno.com/tools/toolkits/others/models_labs",
80
+ )
81
+ def modelslabs_tools() -> type[ModelsLabTools]:
82
+ """Return ModelsLabs tool for AI-powered media generation."""
83
+ from agno.tools.models_labs import ModelsLabTools
84
+
85
+ return ModelsLabTools
@@ -0,0 +1,62 @@
1
+ """MoviePy Video Tools configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.moviepy_video import MoviePyVideoTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="moviepy_video_tools",
21
+ display_name="MoviePy Video Tools",
22
+ description="Process videos, extract audio, generate SRT caption files, and embed rich word-highlighted captions",
23
+ category=ToolCategory.DEVELOPMENT, # Derived from docs URL (/others/)
24
+ status=ToolStatus.AVAILABLE, # No authentication required
25
+ setup_type=SetupType.NONE, # No authentication needed
26
+ icon="FaVideo", # React icon name for video
27
+ icon_color="text-purple-600", # Purple color for video processing
28
+ config_fields=[
29
+ # Video processing features
30
+ ConfigField(
31
+ name="process_video",
32
+ label="Process Video",
33
+ type="boolean",
34
+ required=False,
35
+ default=True,
36
+ description="Enable the extract_audio tool for extracting audio tracks from video files",
37
+ ),
38
+ ConfigField(
39
+ name="generate_captions",
40
+ label="Generate Captions",
41
+ type="boolean",
42
+ required=False,
43
+ default=True,
44
+ description="Enable the create_srt tool for saving transcriptions to SRT formatted files",
45
+ ),
46
+ ConfigField(
47
+ name="embed_captions",
48
+ label="Embed Captions",
49
+ type="boolean",
50
+ required=False,
51
+ default=True,
52
+ description="Enable the embed_captions tool for creating videos with word-level highlighted captions",
53
+ ),
54
+ ],
55
+ dependencies=["moviepy"], # From agno requirements
56
+ docs_url="https://docs.agno.com/tools/toolkits/others/moviepy", # URL from llms.txt but WITHOUT .md extension
57
+ )
58
+ def moviepy_video_tools() -> type[MoviePyVideoTools]:
59
+ """Return MoviePy Video Tools for video processing, audio extraction, and caption generation."""
60
+ from agno.tools.moviepy_video import MoviePyVideoTools
61
+
62
+ return MoviePyVideoTools
@@ -0,0 +1,63 @@
1
+ """Newspaper4k tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.newspaper4k import Newspaper4kTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="newspaper4k",
21
+ display_name="Newspaper4k",
22
+ description="Read and extract content from news articles using advanced web scraping",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaNewspaper",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Article reading functionality
30
+ ConfigField(
31
+ name="read_article",
32
+ label="Read Article",
33
+ type="boolean",
34
+ required=False,
35
+ default=True,
36
+ description="Enable the functionality to read the full content of an article",
37
+ ),
38
+ # Content options
39
+ ConfigField(
40
+ name="include_summary",
41
+ label="Include Summary",
42
+ type="boolean",
43
+ required=False,
44
+ default=False,
45
+ description="Include a summary of the article along with the full content",
46
+ ),
47
+ ConfigField(
48
+ name="article_length",
49
+ label="Article Length",
50
+ type="number",
51
+ required=False,
52
+ placeholder="5000",
53
+ description="Maximum length of the article or its summary to be processed or returned",
54
+ ),
55
+ ],
56
+ dependencies=["newspaper4k", "lxml_html_clean"],
57
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/newspaper4k",
58
+ )
59
+ def newspaper4k_tools() -> type[Newspaper4kTools]:
60
+ """Return Newspaper4k tools for news article extraction."""
61
+ from agno.tools.newspaper4k import Newspaper4kTools
62
+
63
+ return Newspaper4kTools
@@ -0,0 +1,143 @@
1
+ """OpenAI tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.openai import OpenAITools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="openai",
21
+ display_name="OpenAI",
22
+ description="AI-powered tools for transcription, image generation, and speech synthesis",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="SiOpenai",
27
+ icon_color="text-green-600",
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="sk-...",
36
+ description="OpenAI API key (can also be set via OPENAI_API_KEY env var)",
37
+ ),
38
+ # Feature toggles
39
+ ConfigField(
40
+ name="enable_transcription",
41
+ label="Enable Transcription",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Enable audio transcription using Whisper",
46
+ ),
47
+ ConfigField(
48
+ name="enable_image_generation",
49
+ label="Enable Image Generation",
50
+ type="boolean",
51
+ required=False,
52
+ default=True,
53
+ description="Enable image generation using DALL-E",
54
+ ),
55
+ ConfigField(
56
+ name="enable_speech_generation",
57
+ label="Enable Speech Generation",
58
+ type="boolean",
59
+ required=False,
60
+ default=True,
61
+ description="Enable text-to-speech synthesis",
62
+ ),
63
+ # Transcription settings
64
+ ConfigField(
65
+ name="transcription_model",
66
+ label="Transcription Model",
67
+ type="text",
68
+ required=False,
69
+ default="whisper-1",
70
+ placeholder="whisper-1",
71
+ description="Model to use for audio transcription",
72
+ ),
73
+ # Text-to-speech settings
74
+ ConfigField(
75
+ name="text_to_speech_voice",
76
+ label="Text-to-Speech Voice",
77
+ type="text",
78
+ required=False,
79
+ default="alloy",
80
+ placeholder="alloy",
81
+ description="Voice to use for speech generation (alloy, echo, fable, onyx, nova, shimmer)",
82
+ ),
83
+ ConfigField(
84
+ name="text_to_speech_model",
85
+ label="Text-to-Speech Model",
86
+ type="text",
87
+ required=False,
88
+ default="tts-1",
89
+ placeholder="tts-1",
90
+ description="Model to use for text-to-speech (tts-1, tts-1-hd)",
91
+ ),
92
+ ConfigField(
93
+ name="text_to_speech_format",
94
+ label="Text-to-Speech Format",
95
+ type="text",
96
+ required=False,
97
+ default="mp3",
98
+ placeholder="mp3",
99
+ description="Audio format for speech generation (mp3, opus, aac, flac, wav, pcm)",
100
+ ),
101
+ # Image generation settings
102
+ ConfigField(
103
+ name="image_model",
104
+ label="Image Model",
105
+ type="text",
106
+ required=False,
107
+ default="dall-e-3",
108
+ placeholder="dall-e-3",
109
+ description="Model to use for image generation",
110
+ ),
111
+ ConfigField(
112
+ name="image_quality",
113
+ label="Image Quality",
114
+ type="text",
115
+ required=False,
116
+ placeholder="standard",
117
+ description="Quality setting for image generation (standard, hd)",
118
+ ),
119
+ ConfigField(
120
+ name="image_size",
121
+ label="Image Size",
122
+ type="text",
123
+ required=False,
124
+ placeholder="1024x1024",
125
+ description="Size for generated images (256x256, 512x512, 1024x1024, 1792x1024, 1024x1792)",
126
+ ),
127
+ ConfigField(
128
+ name="image_style",
129
+ label="Image Style",
130
+ type="text",
131
+ required=False,
132
+ placeholder="vivid",
133
+ description="Style for generated images (vivid, natural)",
134
+ ),
135
+ ],
136
+ dependencies=["openai"],
137
+ docs_url="https://docs.agno.com/tools/toolkits/models/openai",
138
+ )
139
+ def openai_tools() -> type[OpenAITools]:
140
+ """Return OpenAI tools for AI-powered transcription, image generation, and speech synthesis."""
141
+ from agno.tools.openai import OpenAITools
142
+
143
+ return OpenAITools
@@ -0,0 +1,89 @@
1
+ """OpenWeather tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.openweather import OpenWeatherTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="openweather",
21
+ display_name="OpenWeather",
22
+ description="Weather data services from OpenWeatherMap API",
23
+ category=ToolCategory.DEVELOPMENT, # Based on agno docs structure: /tools/toolkits/others/
24
+ status=ToolStatus.REQUIRES_CONFIG, # Requires API key
25
+ setup_type=SetupType.API_KEY, # Uses api_key parameter
26
+ icon="WiDaySunny", # Weather icon
27
+ icon_color="text-orange-500", # Orange sun color
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="your_openweather_api_key",
36
+ description="OpenWeatherMap API key. If not provided, uses OPENWEATHER_API_KEY env var.",
37
+ ),
38
+ # Configuration
39
+ ConfigField(
40
+ name="units",
41
+ label="Units",
42
+ type="text",
43
+ required=False,
44
+ default="metric",
45
+ placeholder="metric",
46
+ description="Units of measurement. Options: 'standard', 'metric', 'imperial'.",
47
+ ),
48
+ # Feature flags
49
+ ConfigField(
50
+ name="current_weather",
51
+ label="Current Weather",
52
+ type="boolean",
53
+ required=False,
54
+ default=True,
55
+ description="Enable current weather function",
56
+ ),
57
+ ConfigField(
58
+ name="forecast",
59
+ label="Forecast",
60
+ type="boolean",
61
+ required=False,
62
+ default=True,
63
+ description="Enable forecast function",
64
+ ),
65
+ ConfigField(
66
+ name="air_pollution",
67
+ label="Air Pollution",
68
+ type="boolean",
69
+ required=False,
70
+ default=True,
71
+ description="Enable air pollution function",
72
+ ),
73
+ ConfigField(
74
+ name="geocoding",
75
+ label="Geocoding",
76
+ type="boolean",
77
+ required=False,
78
+ default=True,
79
+ description="Enable geocoding function",
80
+ ),
81
+ ],
82
+ dependencies=["requests"], # From agno requirements
83
+ docs_url="https://docs.agno.com/tools/toolkits/others/openweather", # URL without .md extension
84
+ )
85
+ def openweather_tools() -> type[OpenWeatherTools]:
86
+ """Return OpenWeather tools for weather data access."""
87
+ from agno.tools.openweather import OpenWeatherTools
88
+
89
+ return OpenWeatherTools
@@ -0,0 +1,54 @@
1
+ """Oxylabs tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.oxylabs import OxylabsTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="oxylabs",
21
+ display_name="Oxylabs",
22
+ description="Powerful web scraping capabilities including SERP, Amazon product data, and universal web scraping",
23
+ category=ToolCategory.RESEARCH, # web_scrape maps to RESEARCH
24
+ status=ToolStatus.REQUIRES_CONFIG, # requires username and password
25
+ setup_type=SetupType.API_KEY, # uses username/password credentials
26
+ icon="FaGlobe",
27
+ icon_color="text-blue-600", # Web/scraping theme
28
+ config_fields=[
29
+ # Authentication credentials
30
+ ConfigField(
31
+ name="username",
32
+ label="Username",
33
+ type="text",
34
+ required=False,
35
+ placeholder="your_oxylabs_username",
36
+ description="Oxylabs dashboard username (can also be set via OXYLABS_USERNAME env var)",
37
+ ),
38
+ ConfigField(
39
+ name="password",
40
+ label="Password",
41
+ type="password",
42
+ required=False,
43
+ placeholder="your_oxylabs_password",
44
+ description="Oxylabs dashboard password (can also be set via OXYLABS_PASSWORD env var)",
45
+ ),
46
+ ],
47
+ dependencies=["oxylabs"],
48
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/oxylabs",
49
+ )
50
+ def oxylabs_tools() -> type[OxylabsTools]:
51
+ """Return Oxylabs tools for web scraping and data extraction."""
52
+ from agno.tools.oxylabs import OxylabsTools
53
+
54
+ return OxylabsTools
@@ -0,0 +1,35 @@
1
+ """Pandas tools configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ SetupType,
9
+ ToolCategory,
10
+ ToolStatus,
11
+ register_tool_with_metadata,
12
+ )
13
+
14
+ if TYPE_CHECKING:
15
+ from agno.tools.pandas import PandasTools
16
+
17
+
18
+ @register_tool_with_metadata(
19
+ name="pandas",
20
+ display_name="Pandas",
21
+ description="Advanced data manipulation and analysis",
22
+ category=ToolCategory.PRODUCTIVITY,
23
+ status=ToolStatus.AVAILABLE,
24
+ setup_type=SetupType.NONE,
25
+ icon="Database",
26
+ icon_color="text-blue-600",
27
+ config_fields=[],
28
+ dependencies=["pandas"],
29
+ docs_url="https://docs.agno.com/tools/toolkits/database/pandas",
30
+ )
31
+ def pandas_tools() -> type[PandasTools]:
32
+ """Return Pandas tools for data manipulation and analysis."""
33
+ from agno.tools.pandas import PandasTools
34
+
35
+ return PandasTools