ai-parrot 0.17.2__cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.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.
- agentui/.prettierrc +15 -0
- agentui/QUICKSTART.md +272 -0
- agentui/README.md +59 -0
- agentui/env.example +16 -0
- agentui/jsconfig.json +14 -0
- agentui/package-lock.json +4242 -0
- agentui/package.json +34 -0
- agentui/scripts/postinstall/apply-patches.mjs +260 -0
- agentui/src/app.css +61 -0
- agentui/src/app.d.ts +13 -0
- agentui/src/app.html +12 -0
- agentui/src/components/LoadingSpinner.svelte +64 -0
- agentui/src/components/ThemeSwitcher.svelte +159 -0
- agentui/src/components/index.js +4 -0
- agentui/src/lib/api/bots.ts +60 -0
- agentui/src/lib/api/chat.ts +22 -0
- agentui/src/lib/api/http.ts +25 -0
- agentui/src/lib/components/BotCard.svelte +33 -0
- agentui/src/lib/components/ChatBubble.svelte +63 -0
- agentui/src/lib/components/Toast.svelte +21 -0
- agentui/src/lib/config.ts +20 -0
- agentui/src/lib/stores/auth.svelte.ts +73 -0
- agentui/src/lib/stores/theme.svelte.js +64 -0
- agentui/src/lib/stores/toast.svelte.ts +31 -0
- agentui/src/lib/utils/conversation.ts +39 -0
- agentui/src/routes/+layout.svelte +20 -0
- agentui/src/routes/+page.svelte +232 -0
- agentui/src/routes/login/+page.svelte +200 -0
- agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
- agentui/src/routes/talk/[agentId]/+page.ts +7 -0
- agentui/static/README.md +1 -0
- agentui/svelte.config.js +11 -0
- agentui/tailwind.config.ts +53 -0
- agentui/tsconfig.json +3 -0
- agentui/vite.config.ts +10 -0
- ai_parrot-0.17.2.dist-info/METADATA +472 -0
- ai_parrot-0.17.2.dist-info/RECORD +535 -0
- ai_parrot-0.17.2.dist-info/WHEEL +6 -0
- ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
- ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
- ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
- crew-builder/.prettierrc +15 -0
- crew-builder/QUICKSTART.md +259 -0
- crew-builder/README.md +113 -0
- crew-builder/env.example +17 -0
- crew-builder/jsconfig.json +14 -0
- crew-builder/package-lock.json +4182 -0
- crew-builder/package.json +37 -0
- crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
- crew-builder/src/app.css +62 -0
- crew-builder/src/app.d.ts +13 -0
- crew-builder/src/app.html +12 -0
- crew-builder/src/components/LoadingSpinner.svelte +64 -0
- crew-builder/src/components/ThemeSwitcher.svelte +149 -0
- crew-builder/src/components/index.js +9 -0
- crew-builder/src/lib/api/bots.ts +60 -0
- crew-builder/src/lib/api/chat.ts +80 -0
- crew-builder/src/lib/api/client.ts +56 -0
- crew-builder/src/lib/api/crew/crew.ts +136 -0
- crew-builder/src/lib/api/index.ts +5 -0
- crew-builder/src/lib/api/o365/auth.ts +65 -0
- crew-builder/src/lib/auth/auth.ts +54 -0
- crew-builder/src/lib/components/AgentNode.svelte +43 -0
- crew-builder/src/lib/components/BotCard.svelte +33 -0
- crew-builder/src/lib/components/ChatBubble.svelte +67 -0
- crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
- crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
- crew-builder/src/lib/components/JsonViewer.svelte +24 -0
- crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
- crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
- crew-builder/src/lib/components/Toast.svelte +67 -0
- crew-builder/src/lib/components/Toolbar.svelte +157 -0
- crew-builder/src/lib/components/index.ts +10 -0
- crew-builder/src/lib/config.ts +8 -0
- crew-builder/src/lib/stores/auth.svelte.ts +228 -0
- crew-builder/src/lib/stores/crewStore.ts +369 -0
- crew-builder/src/lib/stores/theme.svelte.js +145 -0
- crew-builder/src/lib/stores/toast.svelte.ts +69 -0
- crew-builder/src/lib/utils/conversation.ts +39 -0
- crew-builder/src/lib/utils/markdown.ts +122 -0
- crew-builder/src/lib/utils/talkHistory.ts +47 -0
- crew-builder/src/routes/+layout.svelte +20 -0
- crew-builder/src/routes/+page.svelte +539 -0
- crew-builder/src/routes/agents/+page.svelte +247 -0
- crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
- crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
- crew-builder/src/routes/builder/+page.svelte +204 -0
- crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
- crew-builder/src/routes/crew/ask/+page.ts +1 -0
- crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
- crew-builder/src/routes/login/+page.svelte +197 -0
- crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
- crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
- crew-builder/static/README.md +1 -0
- crew-builder/svelte.config.js +11 -0
- crew-builder/tailwind.config.ts +53 -0
- crew-builder/tsconfig.json +3 -0
- crew-builder/vite.config.ts +10 -0
- mcp_servers/calculator_server.py +309 -0
- parrot/__init__.py +27 -0
- parrot/__pycache__/__init__.cpython-310.pyc +0 -0
- parrot/__pycache__/version.cpython-310.pyc +0 -0
- parrot/_version.py +34 -0
- parrot/a2a/__init__.py +48 -0
- parrot/a2a/client.py +658 -0
- parrot/a2a/discovery.py +89 -0
- parrot/a2a/mixin.py +257 -0
- parrot/a2a/models.py +376 -0
- parrot/a2a/server.py +770 -0
- parrot/agents/__init__.py +29 -0
- parrot/bots/__init__.py +12 -0
- parrot/bots/a2a_agent.py +19 -0
- parrot/bots/abstract.py +3139 -0
- parrot/bots/agent.py +1129 -0
- parrot/bots/basic.py +9 -0
- parrot/bots/chatbot.py +669 -0
- parrot/bots/data.py +1618 -0
- parrot/bots/database/__init__.py +5 -0
- parrot/bots/database/abstract.py +3071 -0
- parrot/bots/database/cache.py +286 -0
- parrot/bots/database/models.py +468 -0
- parrot/bots/database/prompts.py +154 -0
- parrot/bots/database/retries.py +98 -0
- parrot/bots/database/router.py +269 -0
- parrot/bots/database/sql.py +41 -0
- parrot/bots/db/__init__.py +6 -0
- parrot/bots/db/abstract.py +556 -0
- parrot/bots/db/bigquery.py +602 -0
- parrot/bots/db/cache.py +85 -0
- parrot/bots/db/documentdb.py +668 -0
- parrot/bots/db/elastic.py +1014 -0
- parrot/bots/db/influx.py +898 -0
- parrot/bots/db/mock.py +96 -0
- parrot/bots/db/multi.py +783 -0
- parrot/bots/db/prompts.py +185 -0
- parrot/bots/db/sql.py +1255 -0
- parrot/bots/db/tools.py +212 -0
- parrot/bots/document.py +680 -0
- parrot/bots/hrbot.py +15 -0
- parrot/bots/kb.py +170 -0
- parrot/bots/mcp.py +36 -0
- parrot/bots/orchestration/README.md +463 -0
- parrot/bots/orchestration/__init__.py +1 -0
- parrot/bots/orchestration/agent.py +155 -0
- parrot/bots/orchestration/crew.py +3330 -0
- parrot/bots/orchestration/fsm.py +1179 -0
- parrot/bots/orchestration/hr.py +434 -0
- parrot/bots/orchestration/storage/__init__.py +4 -0
- parrot/bots/orchestration/storage/memory.py +100 -0
- parrot/bots/orchestration/storage/mixin.py +119 -0
- parrot/bots/orchestration/verify.py +202 -0
- parrot/bots/product.py +204 -0
- parrot/bots/prompts/__init__.py +96 -0
- parrot/bots/prompts/agents.py +155 -0
- parrot/bots/prompts/data.py +216 -0
- parrot/bots/prompts/output_generation.py +8 -0
- parrot/bots/scraper/__init__.py +3 -0
- parrot/bots/scraper/models.py +122 -0
- parrot/bots/scraper/scraper.py +1173 -0
- parrot/bots/scraper/templates.py +115 -0
- parrot/bots/stores/__init__.py +5 -0
- parrot/bots/stores/local.py +172 -0
- parrot/bots/webdev.py +81 -0
- parrot/cli.py +17 -0
- parrot/clients/__init__.py +16 -0
- parrot/clients/base.py +1491 -0
- parrot/clients/claude.py +1191 -0
- parrot/clients/factory.py +129 -0
- parrot/clients/google.py +4567 -0
- parrot/clients/gpt.py +1975 -0
- parrot/clients/grok.py +432 -0
- parrot/clients/groq.py +986 -0
- parrot/clients/hf.py +582 -0
- parrot/clients/models.py +18 -0
- parrot/conf.py +395 -0
- parrot/embeddings/__init__.py +9 -0
- parrot/embeddings/base.py +157 -0
- parrot/embeddings/google.py +98 -0
- parrot/embeddings/huggingface.py +74 -0
- parrot/embeddings/openai.py +84 -0
- parrot/embeddings/processor.py +88 -0
- parrot/exceptions.c +13868 -0
- parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/exceptions.pxd +22 -0
- parrot/exceptions.pxi +15 -0
- parrot/exceptions.pyx +44 -0
- parrot/generators/__init__.py +29 -0
- parrot/generators/base.py +200 -0
- parrot/generators/html.py +293 -0
- parrot/generators/react.py +205 -0
- parrot/generators/streamlit.py +203 -0
- parrot/generators/template.py +105 -0
- parrot/handlers/__init__.py +4 -0
- parrot/handlers/agent.py +861 -0
- parrot/handlers/agents/__init__.py +1 -0
- parrot/handlers/agents/abstract.py +900 -0
- parrot/handlers/bots.py +338 -0
- parrot/handlers/chat.py +915 -0
- parrot/handlers/creation.sql +192 -0
- parrot/handlers/crew/ARCHITECTURE.md +362 -0
- parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
- parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
- parrot/handlers/crew/__init__.py +0 -0
- parrot/handlers/crew/handler.py +801 -0
- parrot/handlers/crew/models.py +229 -0
- parrot/handlers/crew/redis_persistence.py +523 -0
- parrot/handlers/jobs/__init__.py +10 -0
- parrot/handlers/jobs/job.py +384 -0
- parrot/handlers/jobs/mixin.py +627 -0
- parrot/handlers/jobs/models.py +115 -0
- parrot/handlers/jobs/worker.py +31 -0
- parrot/handlers/models.py +596 -0
- parrot/handlers/o365_auth.py +105 -0
- parrot/handlers/stream.py +337 -0
- parrot/interfaces/__init__.py +6 -0
- parrot/interfaces/aws.py +143 -0
- parrot/interfaces/credentials.py +113 -0
- parrot/interfaces/database.py +27 -0
- parrot/interfaces/google.py +1123 -0
- parrot/interfaces/hierarchy.py +1227 -0
- parrot/interfaces/http.py +651 -0
- parrot/interfaces/images/__init__.py +0 -0
- parrot/interfaces/images/plugins/__init__.py +24 -0
- parrot/interfaces/images/plugins/abstract.py +58 -0
- parrot/interfaces/images/plugins/analisys.py +148 -0
- parrot/interfaces/images/plugins/classify.py +150 -0
- parrot/interfaces/images/plugins/classifybase.py +182 -0
- parrot/interfaces/images/plugins/detect.py +150 -0
- parrot/interfaces/images/plugins/exif.py +1103 -0
- parrot/interfaces/images/plugins/hash.py +52 -0
- parrot/interfaces/images/plugins/vision.py +104 -0
- parrot/interfaces/images/plugins/yolo.py +66 -0
- parrot/interfaces/images/plugins/zerodetect.py +197 -0
- parrot/interfaces/o365.py +978 -0
- parrot/interfaces/onedrive.py +822 -0
- parrot/interfaces/sharepoint.py +1435 -0
- parrot/interfaces/soap.py +257 -0
- parrot/loaders/__init__.py +8 -0
- parrot/loaders/abstract.py +1131 -0
- parrot/loaders/audio.py +199 -0
- parrot/loaders/basepdf.py +53 -0
- parrot/loaders/basevideo.py +1568 -0
- parrot/loaders/csv.py +409 -0
- parrot/loaders/docx.py +116 -0
- parrot/loaders/epubloader.py +316 -0
- parrot/loaders/excel.py +199 -0
- parrot/loaders/factory.py +55 -0
- parrot/loaders/files/__init__.py +0 -0
- parrot/loaders/files/abstract.py +39 -0
- parrot/loaders/files/html.py +26 -0
- parrot/loaders/files/text.py +63 -0
- parrot/loaders/html.py +152 -0
- parrot/loaders/markdown.py +442 -0
- parrot/loaders/pdf.py +373 -0
- parrot/loaders/pdfmark.py +320 -0
- parrot/loaders/pdftables.py +506 -0
- parrot/loaders/ppt.py +476 -0
- parrot/loaders/qa.py +63 -0
- parrot/loaders/splitters/__init__.py +10 -0
- parrot/loaders/splitters/base.py +138 -0
- parrot/loaders/splitters/md.py +228 -0
- parrot/loaders/splitters/token.py +143 -0
- parrot/loaders/txt.py +26 -0
- parrot/loaders/video.py +89 -0
- parrot/loaders/videolocal.py +218 -0
- parrot/loaders/videounderstanding.py +377 -0
- parrot/loaders/vimeo.py +167 -0
- parrot/loaders/web.py +599 -0
- parrot/loaders/youtube.py +504 -0
- parrot/manager/__init__.py +5 -0
- parrot/manager/manager.py +1030 -0
- parrot/mcp/__init__.py +28 -0
- parrot/mcp/adapter.py +105 -0
- parrot/mcp/cli.py +174 -0
- parrot/mcp/client.py +119 -0
- parrot/mcp/config.py +75 -0
- parrot/mcp/integration.py +842 -0
- parrot/mcp/oauth.py +933 -0
- parrot/mcp/server.py +225 -0
- parrot/mcp/transports/__init__.py +3 -0
- parrot/mcp/transports/base.py +279 -0
- parrot/mcp/transports/grpc_session.py +163 -0
- parrot/mcp/transports/http.py +312 -0
- parrot/mcp/transports/mcp.proto +108 -0
- parrot/mcp/transports/quic.py +1082 -0
- parrot/mcp/transports/sse.py +330 -0
- parrot/mcp/transports/stdio.py +309 -0
- parrot/mcp/transports/unix.py +395 -0
- parrot/mcp/transports/websocket.py +547 -0
- parrot/memory/__init__.py +16 -0
- parrot/memory/abstract.py +209 -0
- parrot/memory/agent.py +32 -0
- parrot/memory/cache.py +175 -0
- parrot/memory/core.py +555 -0
- parrot/memory/file.py +153 -0
- parrot/memory/mem.py +131 -0
- parrot/memory/redis.py +613 -0
- parrot/models/__init__.py +46 -0
- parrot/models/basic.py +118 -0
- parrot/models/compliance.py +208 -0
- parrot/models/crew.py +395 -0
- parrot/models/detections.py +654 -0
- parrot/models/generation.py +85 -0
- parrot/models/google.py +223 -0
- parrot/models/groq.py +23 -0
- parrot/models/openai.py +30 -0
- parrot/models/outputs.py +285 -0
- parrot/models/responses.py +938 -0
- parrot/notifications/__init__.py +743 -0
- parrot/openapi/__init__.py +3 -0
- parrot/openapi/components.yaml +641 -0
- parrot/openapi/config.py +322 -0
- parrot/outputs/__init__.py +32 -0
- parrot/outputs/formats/__init__.py +108 -0
- parrot/outputs/formats/altair.py +359 -0
- parrot/outputs/formats/application.py +122 -0
- parrot/outputs/formats/base.py +351 -0
- parrot/outputs/formats/bokeh.py +356 -0
- parrot/outputs/formats/card.py +424 -0
- parrot/outputs/formats/chart.py +436 -0
- parrot/outputs/formats/d3.py +255 -0
- parrot/outputs/formats/echarts.py +310 -0
- parrot/outputs/formats/generators/__init__.py +0 -0
- parrot/outputs/formats/generators/abstract.py +61 -0
- parrot/outputs/formats/generators/panel.py +145 -0
- parrot/outputs/formats/generators/streamlit.py +86 -0
- parrot/outputs/formats/generators/terminal.py +63 -0
- parrot/outputs/formats/holoviews.py +310 -0
- parrot/outputs/formats/html.py +147 -0
- parrot/outputs/formats/jinja2.py +46 -0
- parrot/outputs/formats/json.py +87 -0
- parrot/outputs/formats/map.py +933 -0
- parrot/outputs/formats/markdown.py +172 -0
- parrot/outputs/formats/matplotlib.py +237 -0
- parrot/outputs/formats/mixins/__init__.py +0 -0
- parrot/outputs/formats/mixins/emaps.py +855 -0
- parrot/outputs/formats/plotly.py +341 -0
- parrot/outputs/formats/seaborn.py +310 -0
- parrot/outputs/formats/table.py +397 -0
- parrot/outputs/formats/template_report.py +138 -0
- parrot/outputs/formats/yaml.py +125 -0
- parrot/outputs/formatter.py +152 -0
- parrot/outputs/templates/__init__.py +95 -0
- parrot/pipelines/__init__.py +0 -0
- parrot/pipelines/abstract.py +210 -0
- parrot/pipelines/detector.py +124 -0
- parrot/pipelines/models.py +90 -0
- parrot/pipelines/planogram.py +3002 -0
- parrot/pipelines/table.sql +97 -0
- parrot/plugins/__init__.py +106 -0
- parrot/plugins/importer.py +80 -0
- parrot/py.typed +0 -0
- parrot/registry/__init__.py +18 -0
- parrot/registry/registry.py +594 -0
- parrot/scheduler/__init__.py +1189 -0
- parrot/scheduler/models.py +60 -0
- parrot/security/__init__.py +16 -0
- parrot/security/prompt_injection.py +268 -0
- parrot/security/security_events.sql +25 -0
- parrot/services/__init__.py +1 -0
- parrot/services/mcp/__init__.py +8 -0
- parrot/services/mcp/config.py +13 -0
- parrot/services/mcp/server.py +295 -0
- parrot/services/o365_remote_auth.py +235 -0
- parrot/stores/__init__.py +7 -0
- parrot/stores/abstract.py +352 -0
- parrot/stores/arango.py +1090 -0
- parrot/stores/bigquery.py +1377 -0
- parrot/stores/cache.py +106 -0
- parrot/stores/empty.py +10 -0
- parrot/stores/faiss_store.py +1157 -0
- parrot/stores/kb/__init__.py +9 -0
- parrot/stores/kb/abstract.py +68 -0
- parrot/stores/kb/cache.py +165 -0
- parrot/stores/kb/doc.py +325 -0
- parrot/stores/kb/hierarchy.py +346 -0
- parrot/stores/kb/local.py +457 -0
- parrot/stores/kb/prompt.py +28 -0
- parrot/stores/kb/redis.py +659 -0
- parrot/stores/kb/store.py +115 -0
- parrot/stores/kb/user.py +374 -0
- parrot/stores/models.py +59 -0
- parrot/stores/pgvector.py +3 -0
- parrot/stores/postgres.py +2853 -0
- parrot/stores/utils/__init__.py +0 -0
- parrot/stores/utils/chunking.py +197 -0
- parrot/telemetry/__init__.py +3 -0
- parrot/telemetry/mixin.py +111 -0
- parrot/template/__init__.py +3 -0
- parrot/template/engine.py +259 -0
- parrot/tools/__init__.py +23 -0
- parrot/tools/abstract.py +644 -0
- parrot/tools/agent.py +363 -0
- parrot/tools/arangodbsearch.py +537 -0
- parrot/tools/arxiv_tool.py +188 -0
- parrot/tools/calculator/__init__.py +3 -0
- parrot/tools/calculator/operations/__init__.py +38 -0
- parrot/tools/calculator/operations/calculus.py +80 -0
- parrot/tools/calculator/operations/statistics.py +76 -0
- parrot/tools/calculator/tool.py +150 -0
- parrot/tools/cloudwatch.py +988 -0
- parrot/tools/codeinterpreter/__init__.py +127 -0
- parrot/tools/codeinterpreter/executor.py +371 -0
- parrot/tools/codeinterpreter/internals.py +473 -0
- parrot/tools/codeinterpreter/models.py +643 -0
- parrot/tools/codeinterpreter/prompts.py +224 -0
- parrot/tools/codeinterpreter/tool.py +664 -0
- parrot/tools/company_info/__init__.py +6 -0
- parrot/tools/company_info/tool.py +1138 -0
- parrot/tools/correlationanalysis.py +437 -0
- parrot/tools/database/abstract.py +286 -0
- parrot/tools/database/bq.py +115 -0
- parrot/tools/database/cache.py +284 -0
- parrot/tools/database/models.py +95 -0
- parrot/tools/database/pg.py +343 -0
- parrot/tools/databasequery.py +1159 -0
- parrot/tools/db.py +1800 -0
- parrot/tools/ddgo.py +370 -0
- parrot/tools/decorators.py +271 -0
- parrot/tools/dftohtml.py +282 -0
- parrot/tools/document.py +549 -0
- parrot/tools/ecs.py +819 -0
- parrot/tools/edareport.py +368 -0
- parrot/tools/elasticsearch.py +1049 -0
- parrot/tools/employees.py +462 -0
- parrot/tools/epson/__init__.py +96 -0
- parrot/tools/excel.py +683 -0
- parrot/tools/file/__init__.py +13 -0
- parrot/tools/file/abstract.py +76 -0
- parrot/tools/file/gcs.py +378 -0
- parrot/tools/file/local.py +284 -0
- parrot/tools/file/s3.py +511 -0
- parrot/tools/file/tmp.py +309 -0
- parrot/tools/file/tool.py +501 -0
- parrot/tools/file_reader.py +129 -0
- parrot/tools/flowtask/__init__.py +19 -0
- parrot/tools/flowtask/tool.py +761 -0
- parrot/tools/gittoolkit.py +508 -0
- parrot/tools/google/__init__.py +18 -0
- parrot/tools/google/base.py +169 -0
- parrot/tools/google/tools.py +1251 -0
- parrot/tools/googlelocation.py +5 -0
- parrot/tools/googleroutes.py +5 -0
- parrot/tools/googlesearch.py +5 -0
- parrot/tools/googlesitesearch.py +5 -0
- parrot/tools/googlevoice.py +2 -0
- parrot/tools/gvoice.py +695 -0
- parrot/tools/ibisworld/README.md +225 -0
- parrot/tools/ibisworld/__init__.py +11 -0
- parrot/tools/ibisworld/tool.py +366 -0
- parrot/tools/jiratoolkit.py +1718 -0
- parrot/tools/manager.py +1098 -0
- parrot/tools/math.py +152 -0
- parrot/tools/metadata.py +476 -0
- parrot/tools/msteams.py +1621 -0
- parrot/tools/msword.py +635 -0
- parrot/tools/multidb.py +580 -0
- parrot/tools/multistoresearch.py +369 -0
- parrot/tools/networkninja.py +167 -0
- parrot/tools/nextstop/__init__.py +4 -0
- parrot/tools/nextstop/base.py +286 -0
- parrot/tools/nextstop/employee.py +733 -0
- parrot/tools/nextstop/store.py +462 -0
- parrot/tools/notification.py +435 -0
- parrot/tools/o365/__init__.py +42 -0
- parrot/tools/o365/base.py +295 -0
- parrot/tools/o365/bundle.py +522 -0
- parrot/tools/o365/events.py +554 -0
- parrot/tools/o365/mail.py +992 -0
- parrot/tools/o365/onedrive.py +497 -0
- parrot/tools/o365/sharepoint.py +641 -0
- parrot/tools/openapi_toolkit.py +904 -0
- parrot/tools/openweather.py +527 -0
- parrot/tools/pdfprint.py +1001 -0
- parrot/tools/powerbi.py +518 -0
- parrot/tools/powerpoint.py +1113 -0
- parrot/tools/pricestool.py +146 -0
- parrot/tools/products/__init__.py +246 -0
- parrot/tools/prophet_tool.py +171 -0
- parrot/tools/pythonpandas.py +630 -0
- parrot/tools/pythonrepl.py +910 -0
- parrot/tools/qsource.py +436 -0
- parrot/tools/querytoolkit.py +395 -0
- parrot/tools/quickeda.py +827 -0
- parrot/tools/resttool.py +553 -0
- parrot/tools/retail/__init__.py +0 -0
- parrot/tools/retail/bby.py +528 -0
- parrot/tools/sandboxtool.py +703 -0
- parrot/tools/sassie/__init__.py +352 -0
- parrot/tools/scraping/__init__.py +7 -0
- parrot/tools/scraping/docs/select.md +466 -0
- parrot/tools/scraping/documentation.md +1278 -0
- parrot/tools/scraping/driver.py +436 -0
- parrot/tools/scraping/models.py +576 -0
- parrot/tools/scraping/options.py +85 -0
- parrot/tools/scraping/orchestrator.py +517 -0
- parrot/tools/scraping/readme.md +740 -0
- parrot/tools/scraping/tool.py +3115 -0
- parrot/tools/seasonaldetection.py +642 -0
- parrot/tools/shell_tool/__init__.py +5 -0
- parrot/tools/shell_tool/actions.py +408 -0
- parrot/tools/shell_tool/engine.py +155 -0
- parrot/tools/shell_tool/models.py +322 -0
- parrot/tools/shell_tool/tool.py +442 -0
- parrot/tools/site_search.py +214 -0
- parrot/tools/textfile.py +418 -0
- parrot/tools/think.py +378 -0
- parrot/tools/toolkit.py +298 -0
- parrot/tools/webapp_tool.py +187 -0
- parrot/tools/whatif.py +1279 -0
- parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
- parrot/tools/workday/__init__.py +6 -0
- parrot/tools/workday/models.py +1389 -0
- parrot/tools/workday/tool.py +1293 -0
- parrot/tools/yfinance_tool.py +306 -0
- parrot/tools/zipcode.py +217 -0
- parrot/utils/__init__.py +2 -0
- parrot/utils/helpers.py +73 -0
- parrot/utils/parsers/__init__.py +5 -0
- parrot/utils/parsers/toml.c +12078 -0
- parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/parsers/toml.pyx +21 -0
- parrot/utils/toml.py +11 -0
- parrot/utils/types.cpp +20936 -0
- parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/types.pyx +213 -0
- parrot/utils/uv.py +11 -0
- parrot/version.py +10 -0
- parrot/yaml-rs/Cargo.lock +350 -0
- parrot/yaml-rs/Cargo.toml +19 -0
- parrot/yaml-rs/pyproject.toml +19 -0
- parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
- parrot/yaml-rs/src/lib.rs +222 -0
- requirements/docker-compose.yml +24 -0
- requirements/requirements-dev.txt +21 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
DROP TABLE IF EXISTS troc.planograms_configurations;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE troc.planograms_configurations (
|
|
4
|
+
-- Primary key
|
|
5
|
+
planogram_id SERIAL PRIMARY KEY,
|
|
6
|
+
|
|
7
|
+
-- Basic configuration info
|
|
8
|
+
config_name VARCHAR(255) NOT NULL UNIQUE,
|
|
9
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
10
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
11
|
+
|
|
12
|
+
-- Core planogram configuration (stored as JSONB for flexibility)
|
|
13
|
+
planogram_config JSONB NOT NULL,
|
|
14
|
+
|
|
15
|
+
-- Prompts (can be quite long)
|
|
16
|
+
roi_detection_prompt TEXT NOT NULL,
|
|
17
|
+
object_identification_prompt TEXT NOT NULL,
|
|
18
|
+
|
|
19
|
+
-- Reference images (stored as JSONB with paths/references, not actual image data)
|
|
20
|
+
reference_images JSONB DEFAULT '{}',
|
|
21
|
+
|
|
22
|
+
-- Detection parameters
|
|
23
|
+
confidence_threshold DECIMAL(3,2) NOT NULL DEFAULT 0.25 CHECK (confidence_threshold >= 0.0 AND confidence_threshold <= 1.0),
|
|
24
|
+
detection_model VARCHAR(100) NOT NULL DEFAULT 'yolo11l.pt',
|
|
25
|
+
|
|
26
|
+
-- EndcapGeometry fields (flattened for better queryability)
|
|
27
|
+
-- Basic geometry
|
|
28
|
+
aspect_ratio DECIMAL(4,2) NOT NULL DEFAULT 1.35,
|
|
29
|
+
left_margin_ratio DECIMAL(4,3) NOT NULL DEFAULT 0.010,
|
|
30
|
+
right_margin_ratio DECIMAL(4,3) NOT NULL DEFAULT 0.030,
|
|
31
|
+
top_margin_ratio DECIMAL(4,3) NOT NULL DEFAULT 0.020,
|
|
32
|
+
bottom_margin_ratio DECIMAL(4,3) NOT NULL DEFAULT 0.050,
|
|
33
|
+
inter_shelf_padding DECIMAL(4,3) NOT NULL DEFAULT 0.020,
|
|
34
|
+
|
|
35
|
+
-- ROI detection margins
|
|
36
|
+
width_margin_percent DECIMAL(4,3) NOT NULL DEFAULT 0.250,
|
|
37
|
+
height_margin_percent DECIMAL(4,3) NOT NULL DEFAULT 0.300,
|
|
38
|
+
top_margin_percent DECIMAL(4,3) NOT NULL DEFAULT 0.050,
|
|
39
|
+
side_margin_percent DECIMAL(4,3) NOT NULL DEFAULT 0.050,
|
|
40
|
+
|
|
41
|
+
-- Optional metadata
|
|
42
|
+
description TEXT,
|
|
43
|
+
brand VARCHAR(100),
|
|
44
|
+
program_slug VARCHAR,
|
|
45
|
+
version VARCHAR(20) DEFAULT '1.0',
|
|
46
|
+
is_active BOOLEAN DEFAULT TRUE
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
-- Indexes for better query performance
|
|
50
|
+
CREATE INDEX idx_planograms_config_name ON troc.planograms_configurations(config_name);
|
|
51
|
+
CREATE INDEX idx_planograms_brand ON troc.planograms_configurations(brand);
|
|
52
|
+
CREATE INDEX idx_planograms_active ON troc.planograms_configurations(is_active);
|
|
53
|
+
CREATE INDEX idx_planograms_created_at ON troc.planograms_configurations(created_at);
|
|
54
|
+
|
|
55
|
+
-- GIN index for JSONB fields to enable efficient JSON queries
|
|
56
|
+
CREATE INDEX idx_planograms_config_gin ON troc.planograms_configurations USING GIN (planogram_config);
|
|
57
|
+
CREATE INDEX idx_planograms_ref_images_gin ON troc.planograms_configurations USING GIN (reference_images);
|
|
58
|
+
|
|
59
|
+
-- Trigger to automatically update the updated_at timestamp
|
|
60
|
+
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
61
|
+
RETURNS TRIGGER AS $$
|
|
62
|
+
BEGIN
|
|
63
|
+
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
64
|
+
RETURN NEW;
|
|
65
|
+
END;
|
|
66
|
+
$$ language 'plpgsql';
|
|
67
|
+
|
|
68
|
+
CREATE TRIGGER update_planograms_configurations_updated_at
|
|
69
|
+
BEFORE UPDATE ON troc.planograms_configurations
|
|
70
|
+
FOR EACH ROW
|
|
71
|
+
EXECUTE FUNCTION update_updated_at_column();
|
|
72
|
+
|
|
73
|
+
-- Comments for documentation
|
|
74
|
+
COMMENT ON TABLE troc.planograms_configurations IS 'Stores planogram analysis pipeline configurations including prompts, reference images, and geometry parameters';
|
|
75
|
+
COMMENT ON COLUMN troc.planograms_configurations.planogram_config IS 'Complete planogram description as JSONB (shelves, products, compliance rules, etc.)';
|
|
76
|
+
COMMENT ON COLUMN troc.planograms_configurations.reference_images IS 'Reference images stored as JSONB with image paths/URLs, not binary data';
|
|
77
|
+
COMMENT ON COLUMN troc.planograms_configurations.roi_detection_prompt IS 'Prompt used for ROI detection phase by _find_poster method';
|
|
78
|
+
COMMENT ON COLUMN troc.planograms_configurations.object_identification_prompt IS 'Prompt used for Phase 2 object identification by _identify_objects method';
|
|
79
|
+
|
|
80
|
+
-- Example insert statement
|
|
81
|
+
-- INSERT INTO planograms_configurations (
|
|
82
|
+
-- config_name,
|
|
83
|
+
-- planogram_config,
|
|
84
|
+
-- roi_detection_prompt,
|
|
85
|
+
-- object_identification_prompt,
|
|
86
|
+
-- reference_images,
|
|
87
|
+
-- brand,
|
|
88
|
+
-- description
|
|
89
|
+
-- ) VALUES (
|
|
90
|
+
-- 'hisense_tv_display_v1',
|
|
91
|
+
-- '{"brand": "Hisense", "shelves": [...]}',
|
|
92
|
+
-- 'Find the Hisense promotional poster...',
|
|
93
|
+
-- 'Identify the TV models and promotional graphics...',
|
|
94
|
+
-- '{"poster_ref": "/images/hisense_poster.jpg", "u7_ref": "/images/u7_tv.jpg"}',
|
|
95
|
+
-- 'Hisense',
|
|
96
|
+
-- 'Hisense TV display configuration for retail endcaps'
|
|
97
|
+
-- );
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import contextlib
|
|
3
|
+
from importlib import import_module
|
|
4
|
+
from navconfig.logging import Logger
|
|
5
|
+
from parrot.conf import PLUGINS_DIR, AGENTS_DIR
|
|
6
|
+
from .importer import PluginImporter
|
|
7
|
+
|
|
8
|
+
# Add plugins directory to sys.path
|
|
9
|
+
# If AGENTS_DIR is already at position 0 (from parrot.conf), insert PLUGINS_DIR at position 1
|
|
10
|
+
# to preserve AGENTS_DIR priority. Otherwise, insert PLUGINS_DIR at position 0.
|
|
11
|
+
plugins_dir_str = str(PLUGINS_DIR)
|
|
12
|
+
agents_dir_str = str(AGENTS_DIR)
|
|
13
|
+
|
|
14
|
+
if plugins_dir_str not in sys.path:
|
|
15
|
+
# Check if AGENTS_DIR is at position 0
|
|
16
|
+
if sys.path and sys.path[0] == agents_dir_str:
|
|
17
|
+
# AGENTS_DIR has priority, insert PLUGINS_DIR at position 1
|
|
18
|
+
sys.path.insert(1, plugins_dir_str)
|
|
19
|
+
else:
|
|
20
|
+
# Insert PLUGINS_DIR at position 0
|
|
21
|
+
sys.path.insert(0, plugins_dir_str)
|
|
22
|
+
|
|
23
|
+
# Agents Loader - maps parrot.agents to project_folder/plugins/agents/
|
|
24
|
+
agents_dir = PLUGINS_DIR / "agents"
|
|
25
|
+
agents_dir.mkdir(exist_ok=True)
|
|
26
|
+
|
|
27
|
+
# Create __init__.py if it doesn't exist
|
|
28
|
+
init_file = agents_dir / "__init__.py"
|
|
29
|
+
if not init_file.exists():
|
|
30
|
+
init_file.touch()
|
|
31
|
+
|
|
32
|
+
def setup_plugin_importer(package_name: str, plugin_subdir: str):
|
|
33
|
+
"""
|
|
34
|
+
Configures a PluginImporter for any package to extend its search path.
|
|
35
|
+
|
|
36
|
+
This allows modules in both core package and plugins folder to be imported
|
|
37
|
+
with the same syntax.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
package_name: Full package name (e.g., 'parrot.agents', 'parrot.tools')
|
|
41
|
+
plugin_subdir: Subdirectory name in plugins folder (e.g., 'agents', 'tools')
|
|
42
|
+
|
|
43
|
+
Example:
|
|
44
|
+
# In parrot/agents/__init__.py:
|
|
45
|
+
from parrot.plugins import setup_plugin_importer
|
|
46
|
+
setup_plugin_importer('parrot.agents', 'agents')
|
|
47
|
+
|
|
48
|
+
# Now you can do:
|
|
49
|
+
from parrot.agents import MyPluginAgent # Works for both core and plugin agents
|
|
50
|
+
"""
|
|
51
|
+
try:
|
|
52
|
+
# Path to plugin subdirectory
|
|
53
|
+
plugin_dir = PLUGINS_DIR / plugin_subdir
|
|
54
|
+
|
|
55
|
+
# Create directory if it doesn't exist
|
|
56
|
+
plugin_dir.mkdir(parents=True, exist_ok=True)
|
|
57
|
+
|
|
58
|
+
# Ensure __init__.py exists
|
|
59
|
+
init_file = plugin_dir / "__init__.py"
|
|
60
|
+
if not init_file.exists():
|
|
61
|
+
init_file.touch()
|
|
62
|
+
|
|
63
|
+
# Register the importer to extend the package search path
|
|
64
|
+
sys.meta_path.append(
|
|
65
|
+
PluginImporter(package_name, str(plugin_dir))
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
return True
|
|
69
|
+
except Exception:
|
|
70
|
+
# During package build, dependencies might not be available
|
|
71
|
+
# This is fine - plugins just won't be available until runtime
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def dynamic_import_helper(package_name: str, attr_name: str):
|
|
76
|
+
"""
|
|
77
|
+
Helper for __getattr__ to dynamically import plugin modules.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
package_name: Package name (e.g., 'parrot.agents')
|
|
81
|
+
attr_name: Attribute being accessed (e.g., 'HRAgent')
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The imported class/module if found
|
|
85
|
+
|
|
86
|
+
Raises:
|
|
87
|
+
AttributeError: If the attribute cannot be found
|
|
88
|
+
|
|
89
|
+
Example:
|
|
90
|
+
# In parrot/agents/__init__.py:
|
|
91
|
+
def __getattr__(name):
|
|
92
|
+
from parrot.plugins import dynamic_import_helper
|
|
93
|
+
return dynamic_import_helper(__name__, name)
|
|
94
|
+
"""
|
|
95
|
+
with contextlib.suppress(ImportError):
|
|
96
|
+
# Try to import as a submodule (lowercase convention)
|
|
97
|
+
module = import_module(f".{attr_name.lower()}", package_name)
|
|
98
|
+
|
|
99
|
+
# Look for a class with the original name (usually CamelCase)
|
|
100
|
+
if hasattr(module, attr_name):
|
|
101
|
+
return getattr(module, attr_name)
|
|
102
|
+
|
|
103
|
+
# If not found, raise the appropriate error
|
|
104
|
+
raise AttributeError(
|
|
105
|
+
f"module '{package_name}' has no attribute '{attr_name}'"
|
|
106
|
+
)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import types
|
|
2
|
+
import importlib
|
|
3
|
+
import importlib.util
|
|
4
|
+
import importlib.abc
|
|
5
|
+
from importlib.machinery import SourceFileLoader
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PluginImporter(importlib.abc.MetaPathFinder, importlib.abc.Loader):
|
|
10
|
+
"""A custom importer to load plugins from a specified directory."""
|
|
11
|
+
def __init__(self, package_name, plugins_path):
|
|
12
|
+
self.package_name = package_name
|
|
13
|
+
self.plugins_path = plugins_path
|
|
14
|
+
|
|
15
|
+
def find_spec(self, fullname, path, target=None):
|
|
16
|
+
if fullname.startswith(self.package_name):
|
|
17
|
+
# Handle submodules
|
|
18
|
+
if fullname.startswith(self.package_name + "."):
|
|
19
|
+
component_name = fullname.split(".")[-1]
|
|
20
|
+
component_path = os.path.join(self.plugins_path, f"{component_name}.py")
|
|
21
|
+
|
|
22
|
+
if os.path.exists(component_path):
|
|
23
|
+
return importlib.util.spec_from_loader(fullname, self)
|
|
24
|
+
|
|
25
|
+
return None
|
|
26
|
+
|
|
27
|
+
def create_module(self, spec):
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
def exec_module(self, module):
|
|
31
|
+
fullname = module.__name__
|
|
32
|
+
|
|
33
|
+
# Handle package __init__.py loading
|
|
34
|
+
if fullname == self.package_name:
|
|
35
|
+
init_path = os.path.join(self.plugins_path, "__init__.py")
|
|
36
|
+
if os.path.exists(init_path):
|
|
37
|
+
loader = SourceFileLoader("__init__", init_path)
|
|
38
|
+
loaded = types.ModuleType(loader.name)
|
|
39
|
+
loader.exec_module(loaded)
|
|
40
|
+
module.__dict__.update(loaded.__dict__)
|
|
41
|
+
# Append plugins_path to __path__ instead of replacing it
|
|
42
|
+
# This allows both main directory and plugins directory to coexist
|
|
43
|
+
if not hasattr(module, '__path__'):
|
|
44
|
+
module.__path__ = []
|
|
45
|
+
if self.plugins_path not in module.__path__:
|
|
46
|
+
module.__path__.append(self.plugins_path)
|
|
47
|
+
|
|
48
|
+
# Handle individual component files
|
|
49
|
+
else:
|
|
50
|
+
component_name = fullname.split(".")[-1]
|
|
51
|
+
component_path = os.path.join(self.plugins_path, f"{component_name}.py")
|
|
52
|
+
if os.path.exists(component_path):
|
|
53
|
+
loader = SourceFileLoader(component_name, component_path)
|
|
54
|
+
loaded = types.ModuleType(loader.name)
|
|
55
|
+
loader.exec_module(loaded)
|
|
56
|
+
module.__dict__.update(loaded.__dict__)
|
|
57
|
+
|
|
58
|
+
def list_plugins(plugin_subdir: str) -> list[str]:
|
|
59
|
+
"""
|
|
60
|
+
List all available plugins in a subdirectory.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
plugin_subdir: Subdirectory name (e.g., 'agents', 'tools')
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
List of plugin module names (without .py extension)
|
|
67
|
+
"""
|
|
68
|
+
try:
|
|
69
|
+
from ..conf import PLUGINS_DIR
|
|
70
|
+
plugin_dir = PLUGINS_DIR / plugin_subdir
|
|
71
|
+
|
|
72
|
+
if not plugin_dir.exists():
|
|
73
|
+
return []
|
|
74
|
+
|
|
75
|
+
return [
|
|
76
|
+
f.stem for f in plugin_dir.glob("*.py")
|
|
77
|
+
if f.stem != "__init__"
|
|
78
|
+
]
|
|
79
|
+
except (ImportError, Exception):
|
|
80
|
+
return []
|
parrot/py.typed
ADDED
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from ..conf import AGENTS_DIR, PLUGINS_DIR
|
|
2
|
+
from .registry import AgentRegistry, BotMetadata
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Global default registry
|
|
6
|
+
agent_registry = AgentRegistry(
|
|
7
|
+
agents_dir=AGENTS_DIR,
|
|
8
|
+
extra_agent_dirs=[PLUGINS_DIR / "agents"]
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
register_agent = agent_registry.register_bot_decorator # type: ignore
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"agent_registry",
|
|
15
|
+
"BotMetadata",
|
|
16
|
+
"register_agent",
|
|
17
|
+
"AgentRegistry"
|
|
18
|
+
]
|