mindroom 0.0.0__py3-none-any.whl → 0.1.0__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.
- mindroom/__init__.py +3 -0
- mindroom/agent_prompts.py +963 -0
- mindroom/agents.py +248 -0
- mindroom/ai.py +421 -0
- mindroom/api/__init__.py +1 -0
- mindroom/api/credentials.py +137 -0
- mindroom/api/google_integration.py +355 -0
- mindroom/api/google_tools_helper.py +40 -0
- mindroom/api/homeassistant_integration.py +421 -0
- mindroom/api/integrations.py +189 -0
- mindroom/api/main.py +506 -0
- mindroom/api/matrix_operations.py +219 -0
- mindroom/api/tools.py +94 -0
- mindroom/background_tasks.py +87 -0
- mindroom/bot.py +2470 -0
- mindroom/cli.py +86 -0
- mindroom/commands.py +377 -0
- mindroom/config.py +343 -0
- mindroom/config_commands.py +324 -0
- mindroom/config_confirmation.py +411 -0
- mindroom/constants.py +52 -0
- mindroom/credentials.py +146 -0
- mindroom/credentials_sync.py +134 -0
- mindroom/custom_tools/__init__.py +8 -0
- mindroom/custom_tools/config_manager.py +765 -0
- mindroom/custom_tools/gmail.py +92 -0
- mindroom/custom_tools/google_calendar.py +92 -0
- mindroom/custom_tools/google_sheets.py +92 -0
- mindroom/custom_tools/homeassistant.py +341 -0
- mindroom/error_handling.py +35 -0
- mindroom/file_watcher.py +49 -0
- mindroom/interactive.py +313 -0
- mindroom/logging_config.py +207 -0
- mindroom/matrix/__init__.py +1 -0
- mindroom/matrix/client.py +782 -0
- mindroom/matrix/event_info.py +173 -0
- mindroom/matrix/identity.py +149 -0
- mindroom/matrix/large_messages.py +267 -0
- mindroom/matrix/mentions.py +141 -0
- mindroom/matrix/message_builder.py +94 -0
- mindroom/matrix/message_content.py +209 -0
- mindroom/matrix/presence.py +178 -0
- mindroom/matrix/rooms.py +311 -0
- mindroom/matrix/state.py +77 -0
- mindroom/matrix/typing.py +91 -0
- mindroom/matrix/users.py +217 -0
- mindroom/memory/__init__.py +21 -0
- mindroom/memory/config.py +137 -0
- mindroom/memory/functions.py +396 -0
- mindroom/py.typed +0 -0
- mindroom/response_tracker.py +128 -0
- mindroom/room_cleanup.py +139 -0
- mindroom/routing.py +107 -0
- mindroom/scheduling.py +758 -0
- mindroom/stop.py +207 -0
- mindroom/streaming.py +203 -0
- mindroom/teams.py +749 -0
- mindroom/thread_utils.py +318 -0
- mindroom/tools/__init__.py +520 -0
- mindroom/tools/agentql.py +64 -0
- mindroom/tools/airflow.py +57 -0
- mindroom/tools/apify.py +49 -0
- mindroom/tools/arxiv.py +64 -0
- mindroom/tools/aws_lambda.py +41 -0
- mindroom/tools/aws_ses.py +57 -0
- mindroom/tools/baidusearch.py +87 -0
- mindroom/tools/brightdata.py +116 -0
- mindroom/tools/browserbase.py +62 -0
- mindroom/tools/cal_com.py +98 -0
- mindroom/tools/calculator.py +112 -0
- mindroom/tools/cartesia.py +84 -0
- mindroom/tools/composio.py +166 -0
- mindroom/tools/config_manager.py +44 -0
- mindroom/tools/confluence.py +73 -0
- mindroom/tools/crawl4ai.py +101 -0
- mindroom/tools/csv.py +104 -0
- mindroom/tools/custom_api.py +106 -0
- mindroom/tools/dalle.py +85 -0
- mindroom/tools/daytona.py +180 -0
- mindroom/tools/discord.py +81 -0
- mindroom/tools/docker.py +73 -0
- mindroom/tools/duckdb.py +124 -0
- mindroom/tools/duckduckgo.py +99 -0
- mindroom/tools/e2b.py +121 -0
- mindroom/tools/eleven_labs.py +77 -0
- mindroom/tools/email.py +74 -0
- mindroom/tools/exa.py +246 -0
- mindroom/tools/fal.py +50 -0
- mindroom/tools/file.py +80 -0
- mindroom/tools/financial_datasets_api.py +112 -0
- mindroom/tools/firecrawl.py +124 -0
- mindroom/tools/gemini.py +85 -0
- mindroom/tools/giphy.py +49 -0
- mindroom/tools/github.py +376 -0
- mindroom/tools/gmail.py +102 -0
- mindroom/tools/google_calendar.py +55 -0
- mindroom/tools/google_maps.py +112 -0
- mindroom/tools/google_sheets.py +86 -0
- mindroom/tools/googlesearch.py +83 -0
- mindroom/tools/groq.py +77 -0
- mindroom/tools/hackernews.py +54 -0
- mindroom/tools/jina.py +108 -0
- mindroom/tools/jira.py +70 -0
- mindroom/tools/linear.py +103 -0
- mindroom/tools/linkup.py +65 -0
- mindroom/tools/lumalabs.py +71 -0
- mindroom/tools/mem0.py +82 -0
- mindroom/tools/modelslabs.py +85 -0
- mindroom/tools/moviepy_video_tools.py +62 -0
- mindroom/tools/newspaper4k.py +63 -0
- mindroom/tools/openai.py +143 -0
- mindroom/tools/openweather.py +89 -0
- mindroom/tools/oxylabs.py +54 -0
- mindroom/tools/pandas.py +35 -0
- mindroom/tools/pubmed.py +64 -0
- mindroom/tools/python.py +120 -0
- mindroom/tools/reddit.py +155 -0
- mindroom/tools/replicate.py +56 -0
- mindroom/tools/resend.py +55 -0
- mindroom/tools/scrapegraph.py +87 -0
- mindroom/tools/searxng.py +120 -0
- mindroom/tools/serpapi.py +55 -0
- mindroom/tools/serper.py +81 -0
- mindroom/tools/shell.py +46 -0
- mindroom/tools/slack.py +80 -0
- mindroom/tools/sleep.py +38 -0
- mindroom/tools/spider.py +62 -0
- mindroom/tools/sql.py +138 -0
- mindroom/tools/tavily.py +104 -0
- mindroom/tools/telegram.py +54 -0
- mindroom/tools/todoist.py +103 -0
- mindroom/tools/trello.py +121 -0
- mindroom/tools/twilio.py +97 -0
- mindroom/tools/web_browser_tools.py +37 -0
- mindroom/tools/webex.py +63 -0
- mindroom/tools/website.py +45 -0
- mindroom/tools/whatsapp.py +81 -0
- mindroom/tools/wikipedia.py +45 -0
- mindroom/tools/x.py +97 -0
- mindroom/tools/yfinance.py +121 -0
- mindroom/tools/youtube.py +81 -0
- mindroom/tools/zendesk.py +62 -0
- mindroom/tools/zep.py +107 -0
- mindroom/tools/zoom.py +62 -0
- mindroom/tools_metadata.json +7643 -0
- mindroom/tools_metadata.py +220 -0
- mindroom/topic_generator.py +153 -0
- mindroom/voice_handler.py +266 -0
- mindroom-0.1.0.dist-info/METADATA +425 -0
- mindroom-0.1.0.dist-info/RECORD +152 -0
- {mindroom-0.0.0.dist-info → mindroom-0.1.0.dist-info}/WHEEL +1 -2
- mindroom-0.1.0.dist-info/entry_points.txt +2 -0
- mindroom-0.0.0.dist-info/METADATA +0 -24
- mindroom-0.0.0.dist-info/RECORD +0 -4
- mindroom-0.0.0.dist-info/top_level.txt +0 -1
mindroom/tools/e2b.py
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"""E2B code execution 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.e2b import E2BTools
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register_tool_with_metadata(
|
|
14
|
+
name="e2b",
|
|
15
|
+
display_name="E2B Code Execution",
|
|
16
|
+
description="Code execution sandbox environment with Python, file operations, and web server capabilities",
|
|
17
|
+
category=ToolCategory.DEVELOPMENT,
|
|
18
|
+
status=ToolStatus.REQUIRES_CONFIG,
|
|
19
|
+
setup_type=SetupType.API_KEY,
|
|
20
|
+
icon="Terminal",
|
|
21
|
+
icon_color="text-blue-600",
|
|
22
|
+
config_fields=[
|
|
23
|
+
# Authentication
|
|
24
|
+
ConfigField(
|
|
25
|
+
name="api_key",
|
|
26
|
+
label="API Key",
|
|
27
|
+
type="password",
|
|
28
|
+
required=False,
|
|
29
|
+
placeholder="e2b_...",
|
|
30
|
+
description="E2B API key for authentication (can also be set via E2B_API_KEY env var)",
|
|
31
|
+
),
|
|
32
|
+
# Configuration
|
|
33
|
+
ConfigField(
|
|
34
|
+
name="timeout",
|
|
35
|
+
label="Timeout",
|
|
36
|
+
type="number",
|
|
37
|
+
required=False,
|
|
38
|
+
default=300,
|
|
39
|
+
placeholder="300",
|
|
40
|
+
description="Timeout in seconds for the sandbox (default: 5 minutes)",
|
|
41
|
+
),
|
|
42
|
+
# Code execution features
|
|
43
|
+
ConfigField(
|
|
44
|
+
name="run_code",
|
|
45
|
+
label="Run Code",
|
|
46
|
+
type="boolean",
|
|
47
|
+
required=False,
|
|
48
|
+
default=True,
|
|
49
|
+
description="Enable running Python code in the sandbox",
|
|
50
|
+
),
|
|
51
|
+
# File operations
|
|
52
|
+
ConfigField(
|
|
53
|
+
name="upload_file",
|
|
54
|
+
label="Upload File",
|
|
55
|
+
type="boolean",
|
|
56
|
+
required=False,
|
|
57
|
+
default=True,
|
|
58
|
+
description="Enable uploading files to the sandbox",
|
|
59
|
+
),
|
|
60
|
+
ConfigField(
|
|
61
|
+
name="download_result",
|
|
62
|
+
label="Download Result",
|
|
63
|
+
type="boolean",
|
|
64
|
+
required=False,
|
|
65
|
+
default=True,
|
|
66
|
+
description="Enable downloading execution results (PNG images, charts, files)",
|
|
67
|
+
),
|
|
68
|
+
# Filesystem operations
|
|
69
|
+
ConfigField(
|
|
70
|
+
name="filesystem",
|
|
71
|
+
label="Filesystem Operations",
|
|
72
|
+
type="boolean",
|
|
73
|
+
required=False,
|
|
74
|
+
default=False,
|
|
75
|
+
description="Enable filesystem operations (list, read, write files and directories)",
|
|
76
|
+
),
|
|
77
|
+
# Internet access
|
|
78
|
+
ConfigField(
|
|
79
|
+
name="internet_access",
|
|
80
|
+
label="Internet Access",
|
|
81
|
+
type="boolean",
|
|
82
|
+
required=False,
|
|
83
|
+
default=False,
|
|
84
|
+
description="Enable internet access functions (public URLs, web servers)",
|
|
85
|
+
),
|
|
86
|
+
# Sandbox management
|
|
87
|
+
ConfigField(
|
|
88
|
+
name="sandbox_management",
|
|
89
|
+
label="Sandbox Management",
|
|
90
|
+
type="boolean",
|
|
91
|
+
required=False,
|
|
92
|
+
default=False,
|
|
93
|
+
description="Enable sandbox management functions (timeout, status, shutdown)",
|
|
94
|
+
),
|
|
95
|
+
# Advanced configuration
|
|
96
|
+
ConfigField(
|
|
97
|
+
name="sandbox_options",
|
|
98
|
+
label="Sandbox Options",
|
|
99
|
+
type="text",
|
|
100
|
+
required=False,
|
|
101
|
+
placeholder='{"template": "python"}',
|
|
102
|
+
description="Additional options to pass to the Sandbox constructor (JSON format)",
|
|
103
|
+
),
|
|
104
|
+
# Command execution
|
|
105
|
+
ConfigField(
|
|
106
|
+
name="command_execution",
|
|
107
|
+
label="Command Execution",
|
|
108
|
+
type="boolean",
|
|
109
|
+
required=False,
|
|
110
|
+
default=False,
|
|
111
|
+
description="Enable shell command execution in the sandbox",
|
|
112
|
+
),
|
|
113
|
+
],
|
|
114
|
+
dependencies=["e2b_code_interpreter"],
|
|
115
|
+
docs_url="https://docs.agno.com/tools/toolkits/others/e2b",
|
|
116
|
+
)
|
|
117
|
+
def e2b_tools() -> type[E2BTools]:
|
|
118
|
+
"""Return E2B code execution tools for secure sandbox environments."""
|
|
119
|
+
from agno.tools.e2b import E2BTools
|
|
120
|
+
|
|
121
|
+
return E2BTools
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""Eleven Labs 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.eleven_labs import ElevenLabsTools
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register_tool_with_metadata(
|
|
14
|
+
name="eleven_labs",
|
|
15
|
+
display_name="Eleven Labs",
|
|
16
|
+
description="Text-to-speech and sound effect generation using AI voices",
|
|
17
|
+
category=ToolCategory.DEVELOPMENT,
|
|
18
|
+
status=ToolStatus.REQUIRES_CONFIG,
|
|
19
|
+
setup_type=SetupType.API_KEY,
|
|
20
|
+
icon="FaVolumeUp",
|
|
21
|
+
icon_color="text-orange-500",
|
|
22
|
+
config_fields=[
|
|
23
|
+
# Authentication
|
|
24
|
+
ConfigField(
|
|
25
|
+
name="api_key",
|
|
26
|
+
label="API Key",
|
|
27
|
+
type="password",
|
|
28
|
+
required=False,
|
|
29
|
+
placeholder="sk-...",
|
|
30
|
+
description="Eleven Labs API key for authentication (can also be set via ELEVEN_LABS_API_KEY env var)",
|
|
31
|
+
),
|
|
32
|
+
# Voice Configuration
|
|
33
|
+
ConfigField(
|
|
34
|
+
name="voice_id",
|
|
35
|
+
label="Voice ID",
|
|
36
|
+
type="text",
|
|
37
|
+
required=False,
|
|
38
|
+
default="JBFqnCBsd6RMkjVDRZzb",
|
|
39
|
+
placeholder="JBFqnCBsd6RMkjVDRZzb",
|
|
40
|
+
description="The voice ID to use for audio generation",
|
|
41
|
+
),
|
|
42
|
+
ConfigField(
|
|
43
|
+
name="model_id",
|
|
44
|
+
label="Model ID",
|
|
45
|
+
type="text",
|
|
46
|
+
required=False,
|
|
47
|
+
default="eleven_multilingual_v2",
|
|
48
|
+
placeholder="eleven_multilingual_v2",
|
|
49
|
+
description="The model's ID to use for audio generation",
|
|
50
|
+
),
|
|
51
|
+
# Output Configuration
|
|
52
|
+
ConfigField(
|
|
53
|
+
name="output_format",
|
|
54
|
+
label="Output Format",
|
|
55
|
+
type="text",
|
|
56
|
+
required=False,
|
|
57
|
+
default="mp3_44100_64",
|
|
58
|
+
placeholder="mp3_44100_64",
|
|
59
|
+
description="The output format for audio generation (e.g., mp3_44100_64, pcm_44100)",
|
|
60
|
+
),
|
|
61
|
+
ConfigField(
|
|
62
|
+
name="target_directory",
|
|
63
|
+
label="Target Directory",
|
|
64
|
+
type="text",
|
|
65
|
+
required=False,
|
|
66
|
+
placeholder="audio_generations",
|
|
67
|
+
description="Directory to save generated audio files (optional)",
|
|
68
|
+
),
|
|
69
|
+
],
|
|
70
|
+
dependencies=["elevenlabs"],
|
|
71
|
+
docs_url="https://docs.agno.com/tools/toolkits/others/eleven_labs",
|
|
72
|
+
)
|
|
73
|
+
def eleven_labs_tools() -> type[ElevenLabsTools]:
|
|
74
|
+
"""Return Eleven Labs tools for text-to-speech and sound effect generation."""
|
|
75
|
+
from agno.tools.eleven_labs import ElevenLabsTools
|
|
76
|
+
|
|
77
|
+
return ElevenLabsTools
|
mindroom/tools/email.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Email 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.email import EmailTools
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@register_tool_with_metadata(
|
|
20
|
+
name="email",
|
|
21
|
+
display_name="Email",
|
|
22
|
+
description="Send emails via SMTP (Gmail)",
|
|
23
|
+
category=ToolCategory.EMAIL,
|
|
24
|
+
status=ToolStatus.REQUIRES_CONFIG,
|
|
25
|
+
setup_type=SetupType.API_KEY,
|
|
26
|
+
icon="Mail",
|
|
27
|
+
icon_color="text-blue-600",
|
|
28
|
+
config_fields=[
|
|
29
|
+
# Authentication/Connection parameters
|
|
30
|
+
ConfigField(
|
|
31
|
+
name="receiver_email",
|
|
32
|
+
label="Receiver Email",
|
|
33
|
+
type="text",
|
|
34
|
+
required=False,
|
|
35
|
+
default=None,
|
|
36
|
+
placeholder="recipient@example.com",
|
|
37
|
+
description="Default recipient email address",
|
|
38
|
+
),
|
|
39
|
+
ConfigField(
|
|
40
|
+
name="sender_name",
|
|
41
|
+
label="Sender Name",
|
|
42
|
+
type="text",
|
|
43
|
+
required=False,
|
|
44
|
+
default=None,
|
|
45
|
+
placeholder="Your Name",
|
|
46
|
+
description="Name to display as the sender",
|
|
47
|
+
),
|
|
48
|
+
ConfigField(
|
|
49
|
+
name="sender_email",
|
|
50
|
+
label="Sender Email",
|
|
51
|
+
type="text",
|
|
52
|
+
required=False,
|
|
53
|
+
default=None,
|
|
54
|
+
placeholder="your.email@gmail.com",
|
|
55
|
+
description="Gmail address to send emails from",
|
|
56
|
+
),
|
|
57
|
+
ConfigField(
|
|
58
|
+
name="sender_passkey",
|
|
59
|
+
label="Sender Password/App Password",
|
|
60
|
+
type="password",
|
|
61
|
+
required=False,
|
|
62
|
+
default=None,
|
|
63
|
+
placeholder="Gmail password or app-specific password",
|
|
64
|
+
description="Gmail password or app-specific password for authentication",
|
|
65
|
+
),
|
|
66
|
+
],
|
|
67
|
+
dependencies=[], # Uses built-in smtplib
|
|
68
|
+
docs_url="https://docs.agno.com/tools/toolkits/social/email",
|
|
69
|
+
)
|
|
70
|
+
def email_tools() -> type[EmailTools]:
|
|
71
|
+
"""Return email tools for sending messages via SMTP."""
|
|
72
|
+
from agno.tools.email import EmailTools
|
|
73
|
+
|
|
74
|
+
return EmailTools
|
mindroom/tools/exa.py
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"""Exa 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.exa import ExaTools
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@register_tool_with_metadata(
|
|
20
|
+
name="exa",
|
|
21
|
+
display_name="Exa",
|
|
22
|
+
description="Advanced AI-powered web search engine for research and content discovery",
|
|
23
|
+
category=ToolCategory.RESEARCH,
|
|
24
|
+
status=ToolStatus.REQUIRES_CONFIG,
|
|
25
|
+
setup_type=SetupType.API_KEY,
|
|
26
|
+
icon="FaSearch",
|
|
27
|
+
icon_color="text-blue-600",
|
|
28
|
+
config_fields=[
|
|
29
|
+
# Authentication
|
|
30
|
+
ConfigField(
|
|
31
|
+
name="api_key",
|
|
32
|
+
label="API Key",
|
|
33
|
+
type="password",
|
|
34
|
+
required=False,
|
|
35
|
+
placeholder="exa_...",
|
|
36
|
+
description="Exa API key for authentication (can also be set via EXA_API_KEY env var)",
|
|
37
|
+
),
|
|
38
|
+
# Tool functionality flags
|
|
39
|
+
ConfigField(
|
|
40
|
+
name="search",
|
|
41
|
+
label="Search",
|
|
42
|
+
type="boolean",
|
|
43
|
+
required=False,
|
|
44
|
+
default=True,
|
|
45
|
+
description="Enable web search functionality",
|
|
46
|
+
),
|
|
47
|
+
ConfigField(
|
|
48
|
+
name="get_contents",
|
|
49
|
+
label="Get Contents",
|
|
50
|
+
type="boolean",
|
|
51
|
+
required=False,
|
|
52
|
+
default=True,
|
|
53
|
+
description="Enable retrieving detailed content from URLs",
|
|
54
|
+
),
|
|
55
|
+
ConfigField(
|
|
56
|
+
name="find_similar",
|
|
57
|
+
label="Find Similar",
|
|
58
|
+
type="boolean",
|
|
59
|
+
required=False,
|
|
60
|
+
default=True,
|
|
61
|
+
description="Enable finding similar pages to a given URL",
|
|
62
|
+
),
|
|
63
|
+
ConfigField(
|
|
64
|
+
name="answer",
|
|
65
|
+
label="Answer",
|
|
66
|
+
type="boolean",
|
|
67
|
+
required=False,
|
|
68
|
+
default=True,
|
|
69
|
+
description="Enable LLM-powered question answering with search results",
|
|
70
|
+
),
|
|
71
|
+
ConfigField(
|
|
72
|
+
name="research",
|
|
73
|
+
label="Research",
|
|
74
|
+
type="boolean",
|
|
75
|
+
required=False,
|
|
76
|
+
default=False,
|
|
77
|
+
description="Enable deep research functionality with structured output",
|
|
78
|
+
),
|
|
79
|
+
# Content options
|
|
80
|
+
ConfigField(
|
|
81
|
+
name="text",
|
|
82
|
+
label="Text",
|
|
83
|
+
type="boolean",
|
|
84
|
+
required=False,
|
|
85
|
+
default=True,
|
|
86
|
+
description="Retrieve text content from search results",
|
|
87
|
+
),
|
|
88
|
+
ConfigField(
|
|
89
|
+
name="text_length_limit",
|
|
90
|
+
label="Text Length Limit",
|
|
91
|
+
type="number",
|
|
92
|
+
required=False,
|
|
93
|
+
default=1000,
|
|
94
|
+
description="Maximum length of text content per result",
|
|
95
|
+
),
|
|
96
|
+
ConfigField(
|
|
97
|
+
name="highlights",
|
|
98
|
+
label="Highlights",
|
|
99
|
+
type="boolean",
|
|
100
|
+
required=False,
|
|
101
|
+
default=True,
|
|
102
|
+
description="Include highlighted snippets in results",
|
|
103
|
+
),
|
|
104
|
+
ConfigField(
|
|
105
|
+
name="summary",
|
|
106
|
+
label="Summary",
|
|
107
|
+
type="boolean",
|
|
108
|
+
required=False,
|
|
109
|
+
default=False,
|
|
110
|
+
description="Include AI-generated summaries in results",
|
|
111
|
+
),
|
|
112
|
+
# Search configuration
|
|
113
|
+
ConfigField(
|
|
114
|
+
name="num_results",
|
|
115
|
+
label="Number of Results",
|
|
116
|
+
type="number",
|
|
117
|
+
required=False,
|
|
118
|
+
placeholder="10",
|
|
119
|
+
description="Default number of search results to return (overrides individual searches if set)",
|
|
120
|
+
),
|
|
121
|
+
ConfigField(
|
|
122
|
+
name="livecrawl",
|
|
123
|
+
label="Live Crawl",
|
|
124
|
+
type="text",
|
|
125
|
+
required=False,
|
|
126
|
+
default="always",
|
|
127
|
+
placeholder="always",
|
|
128
|
+
description="Live crawl setting for fresh content",
|
|
129
|
+
),
|
|
130
|
+
# Date filtering
|
|
131
|
+
ConfigField(
|
|
132
|
+
name="start_crawl_date",
|
|
133
|
+
label="Start Crawl Date",
|
|
134
|
+
type="text",
|
|
135
|
+
required=False,
|
|
136
|
+
placeholder="2024-01-01",
|
|
137
|
+
description="Include results crawled on/after this date (YYYY-MM-DD format)",
|
|
138
|
+
),
|
|
139
|
+
ConfigField(
|
|
140
|
+
name="end_crawl_date",
|
|
141
|
+
label="End Crawl Date",
|
|
142
|
+
type="text",
|
|
143
|
+
required=False,
|
|
144
|
+
placeholder="2024-12-31",
|
|
145
|
+
description="Include results crawled on/before this date (YYYY-MM-DD format)",
|
|
146
|
+
),
|
|
147
|
+
ConfigField(
|
|
148
|
+
name="start_published_date",
|
|
149
|
+
label="Start Published Date",
|
|
150
|
+
type="text",
|
|
151
|
+
required=False,
|
|
152
|
+
placeholder="2024-01-01",
|
|
153
|
+
description="Include results published on/after this date (YYYY-MM-DD format)",
|
|
154
|
+
),
|
|
155
|
+
ConfigField(
|
|
156
|
+
name="end_published_date",
|
|
157
|
+
label="End Published Date",
|
|
158
|
+
type="text",
|
|
159
|
+
required=False,
|
|
160
|
+
placeholder="2024-12-31",
|
|
161
|
+
description="Include results published on/before this date (YYYY-MM-DD format)",
|
|
162
|
+
),
|
|
163
|
+
# Search enhancement
|
|
164
|
+
ConfigField(
|
|
165
|
+
name="use_autoprompt",
|
|
166
|
+
label="Use Autoprompt",
|
|
167
|
+
type="boolean",
|
|
168
|
+
required=False,
|
|
169
|
+
description="Enable autoprompt features to improve query understanding",
|
|
170
|
+
),
|
|
171
|
+
ConfigField(
|
|
172
|
+
name="type",
|
|
173
|
+
label="Content Type",
|
|
174
|
+
type="text",
|
|
175
|
+
required=False,
|
|
176
|
+
placeholder="article",
|
|
177
|
+
description="Specify content type filter (e.g., article, blog, video)",
|
|
178
|
+
),
|
|
179
|
+
ConfigField(
|
|
180
|
+
name="category",
|
|
181
|
+
label="Category",
|
|
182
|
+
type="text",
|
|
183
|
+
required=False,
|
|
184
|
+
placeholder="research paper",
|
|
185
|
+
description='Filter results by category. Options: "company", "research paper", "news", "pdf", "github", "tweet", "personal site", "linkedin profile", "financial report"',
|
|
186
|
+
),
|
|
187
|
+
ConfigField(
|
|
188
|
+
name="include_domains",
|
|
189
|
+
label="Include Domains",
|
|
190
|
+
type="text",
|
|
191
|
+
required=False,
|
|
192
|
+
placeholder="example.com,google.com",
|
|
193
|
+
description="Comma-separated list of domains to restrict results to",
|
|
194
|
+
),
|
|
195
|
+
ConfigField(
|
|
196
|
+
name="exclude_domains",
|
|
197
|
+
label="Exclude Domains",
|
|
198
|
+
type="text",
|
|
199
|
+
required=False,
|
|
200
|
+
placeholder="spam.com,ads.com",
|
|
201
|
+
description="Comma-separated list of domains to exclude from results",
|
|
202
|
+
),
|
|
203
|
+
# Model settings
|
|
204
|
+
ConfigField(
|
|
205
|
+
name="model",
|
|
206
|
+
label="Search Model",
|
|
207
|
+
type="text",
|
|
208
|
+
required=False,
|
|
209
|
+
placeholder="exa",
|
|
210
|
+
description='The search model to use. Options: "exa" or "exa-pro"',
|
|
211
|
+
),
|
|
212
|
+
ConfigField(
|
|
213
|
+
name="research_model",
|
|
214
|
+
label="Research Model",
|
|
215
|
+
type="text",
|
|
216
|
+
required=False,
|
|
217
|
+
default="exa-research",
|
|
218
|
+
placeholder="exa-research",
|
|
219
|
+
description='Model for research functionality. Options: "exa-research" or "exa-research-pro"',
|
|
220
|
+
),
|
|
221
|
+
# System settings
|
|
222
|
+
ConfigField(
|
|
223
|
+
name="timeout",
|
|
224
|
+
label="Timeout",
|
|
225
|
+
type="number",
|
|
226
|
+
required=False,
|
|
227
|
+
default=30,
|
|
228
|
+
description="Maximum time in seconds to wait for API responses",
|
|
229
|
+
),
|
|
230
|
+
ConfigField(
|
|
231
|
+
name="show_results",
|
|
232
|
+
label="Show Results",
|
|
233
|
+
type="boolean",
|
|
234
|
+
required=False,
|
|
235
|
+
default=False,
|
|
236
|
+
description="Log search results for debugging purposes",
|
|
237
|
+
),
|
|
238
|
+
],
|
|
239
|
+
dependencies=["exa_py"],
|
|
240
|
+
docs_url="https://docs.agno.com/tools/toolkits/search/exa",
|
|
241
|
+
)
|
|
242
|
+
def exa_tools() -> type[ExaTools]:
|
|
243
|
+
"""Return Exa tools for AI-powered web search and research."""
|
|
244
|
+
from agno.tools.exa import ExaTools
|
|
245
|
+
|
|
246
|
+
return ExaTools
|
mindroom/tools/fal.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Fal 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.fal import FalTools
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register_tool_with_metadata(
|
|
14
|
+
name="fal",
|
|
15
|
+
display_name="Fal",
|
|
16
|
+
description="AI model serving platform for media generation (images and videos)",
|
|
17
|
+
category=ToolCategory.DEVELOPMENT, # others category maps to DEVELOPMENT
|
|
18
|
+
status=ToolStatus.REQUIRES_CONFIG, # requires FAL_KEY API key
|
|
19
|
+
setup_type=SetupType.API_KEY, # uses API key authentication
|
|
20
|
+
icon="FaRobot", # AI/robot icon for AI model serving
|
|
21
|
+
icon_color="text-purple-600", # Purple for AI/ML services
|
|
22
|
+
config_fields=[
|
|
23
|
+
# Authentication
|
|
24
|
+
ConfigField(
|
|
25
|
+
name="api_key",
|
|
26
|
+
label="API Key",
|
|
27
|
+
type="password",
|
|
28
|
+
required=False,
|
|
29
|
+
placeholder="fal-***",
|
|
30
|
+
description="Fal API key for authentication (can also be set via FAL_KEY env var)",
|
|
31
|
+
),
|
|
32
|
+
# Model configuration
|
|
33
|
+
ConfigField(
|
|
34
|
+
name="model",
|
|
35
|
+
label="Model",
|
|
36
|
+
type="text",
|
|
37
|
+
required=False,
|
|
38
|
+
default="fal-ai/hunyuan-video",
|
|
39
|
+
placeholder="fal-ai/hunyuan-video",
|
|
40
|
+
description="The model to use for media generation (default: fal-ai/hunyuan-video)",
|
|
41
|
+
),
|
|
42
|
+
],
|
|
43
|
+
dependencies=["fal-client"], # From agno requirements
|
|
44
|
+
docs_url="https://docs.agno.com/tools/toolkits/others/fal", # URL without .md extension
|
|
45
|
+
)
|
|
46
|
+
def fal_tools() -> type[FalTools]:
|
|
47
|
+
"""Return Fal tools for AI model serving and media generation."""
|
|
48
|
+
from agno.tools.fal import FalTools
|
|
49
|
+
|
|
50
|
+
return FalTools
|
mindroom/tools/file.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""File 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.file import FileTools
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@register_tool_with_metadata(
|
|
20
|
+
name="file",
|
|
21
|
+
display_name="File Tools",
|
|
22
|
+
description="Local file operations including read, write, list, and search",
|
|
23
|
+
category=ToolCategory.DEVELOPMENT, # Local tool
|
|
24
|
+
status=ToolStatus.AVAILABLE, # No config needed
|
|
25
|
+
setup_type=SetupType.NONE, # No authentication required
|
|
26
|
+
icon="FaFolder", # React icon name
|
|
27
|
+
icon_color="text-yellow-500", # Tailwind color class
|
|
28
|
+
config_fields=[
|
|
29
|
+
# Base directory configuration
|
|
30
|
+
ConfigField(
|
|
31
|
+
name="base_dir",
|
|
32
|
+
label="Base Directory",
|
|
33
|
+
type="text",
|
|
34
|
+
required=False,
|
|
35
|
+
default=None,
|
|
36
|
+
placeholder="/path/to/directory",
|
|
37
|
+
description="Base directory for file operations (defaults to current working directory)",
|
|
38
|
+
),
|
|
39
|
+
# File operation controls
|
|
40
|
+
ConfigField(
|
|
41
|
+
name="save_files",
|
|
42
|
+
label="Save Files",
|
|
43
|
+
type="boolean",
|
|
44
|
+
required=False,
|
|
45
|
+
default=True,
|
|
46
|
+
description="Enable file saving operations",
|
|
47
|
+
),
|
|
48
|
+
ConfigField(
|
|
49
|
+
name="read_files",
|
|
50
|
+
label="Read Files",
|
|
51
|
+
type="boolean",
|
|
52
|
+
required=False,
|
|
53
|
+
default=True,
|
|
54
|
+
description="Enable file reading operations",
|
|
55
|
+
),
|
|
56
|
+
ConfigField(
|
|
57
|
+
name="list_files",
|
|
58
|
+
label="List Files",
|
|
59
|
+
type="boolean",
|
|
60
|
+
required=False,
|
|
61
|
+
default=True,
|
|
62
|
+
description="Enable file listing operations",
|
|
63
|
+
),
|
|
64
|
+
ConfigField(
|
|
65
|
+
name="search_files",
|
|
66
|
+
label="Search Files",
|
|
67
|
+
type="boolean",
|
|
68
|
+
required=False,
|
|
69
|
+
default=True,
|
|
70
|
+
description="Enable file search operations with pattern matching",
|
|
71
|
+
),
|
|
72
|
+
],
|
|
73
|
+
dependencies=["agno"], # From agno requirements
|
|
74
|
+
docs_url="https://docs.agno.com/tools/toolkits/local/file",
|
|
75
|
+
)
|
|
76
|
+
def file_tools() -> type[FileTools]:
|
|
77
|
+
"""Return file tools for local file operations."""
|
|
78
|
+
from agno.tools.file import FileTools
|
|
79
|
+
|
|
80
|
+
return FileTools
|