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,286 @@
|
|
|
1
|
+
from typing import Union, Optional, Callable, Dict, Any, get_origin, get_args
|
|
2
|
+
import inspect
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
import aiofiles
|
|
6
|
+
import pandas as pd
|
|
7
|
+
from asyncdb import AsyncDB
|
|
8
|
+
from datamodel.parsers.json import json_encoder, json_decoder # pylint: disable=E0611
|
|
9
|
+
from querysource.conf import default_dsn
|
|
10
|
+
from ..toolkit import AbstractToolkit
|
|
11
|
+
from ...conf import AGENTS_DIR
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def is_collection_model(structured_obj: type) -> bool:
|
|
15
|
+
"""
|
|
16
|
+
Determine if a BaseModel is a collection container (single instance with records field)
|
|
17
|
+
or a direct list model (List[SomeModel]).
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
structured_obj: The class/type to inspect
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
bool: True if it's a collection container, False if it's a direct list
|
|
24
|
+
"""
|
|
25
|
+
# Check if it's a List type annotation like List[SomeModel]
|
|
26
|
+
origin = get_origin(structured_obj)
|
|
27
|
+
if origin is list or origin is Union:
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
# Check if it's a BaseModel subclass with a 'records' field
|
|
31
|
+
if inspect.isclass(structured_obj) and issubclass(structured_obj, BaseModel):
|
|
32
|
+
# Get model fields
|
|
33
|
+
if hasattr(structured_obj, 'model_fields'):
|
|
34
|
+
fields = structured_obj.model_fields
|
|
35
|
+
else:
|
|
36
|
+
# Fallback for older Pydantic versions
|
|
37
|
+
fields = getattr(structured_obj, '__fields__', {})
|
|
38
|
+
|
|
39
|
+
# Check if it has a 'records' field that's a list
|
|
40
|
+
if 'records' in fields:
|
|
41
|
+
field_info = fields['records']
|
|
42
|
+
field_type = field_info.annotation if hasattr(field_info, 'annotation') else field_info.type_
|
|
43
|
+
return get_origin(field_type) is list
|
|
44
|
+
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
def get_model_from_collection(collection_model: type) -> type:
|
|
48
|
+
"""
|
|
49
|
+
Extract the individual record model from a collection container model.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
collection_model: Collection model like VisitsByManagerOutput
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
type: Individual record model like VisitsByManagerRecord
|
|
56
|
+
"""
|
|
57
|
+
if hasattr(collection_model, 'model_fields'):
|
|
58
|
+
fields = collection_model.model_fields
|
|
59
|
+
else:
|
|
60
|
+
fields = getattr(collection_model, '__fields__', {})
|
|
61
|
+
|
|
62
|
+
if 'records' in fields:
|
|
63
|
+
field_info = fields['records']
|
|
64
|
+
field_type = field_info.annotation if hasattr(field_info, 'annotation') else field_info.type_
|
|
65
|
+
if (args := get_args(field_type)):
|
|
66
|
+
return args[0] # Return the type inside List[Type]
|
|
67
|
+
|
|
68
|
+
raise ValueError(f"Could not extract record model from {collection_model}")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class BaseNextStop(AbstractToolkit):
|
|
72
|
+
"""Abstract base class for NextStop toolkits.
|
|
73
|
+
|
|
74
|
+
This class provides a foundation for NextStop toolkits, including
|
|
75
|
+
common configurations and methods for interacting with the database.
|
|
76
|
+
It is designed to be extended by specific toolkits that implement
|
|
77
|
+
functionality related to NextStop operations.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
def __init__(self, dsn: str = None, program: str = None, **kwargs):
|
|
81
|
+
"""Initialize the StoreInfo toolkit.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
dsn: Default database connection string
|
|
85
|
+
**kwargs: Additional configuration options
|
|
86
|
+
"""
|
|
87
|
+
super().__init__(**kwargs)
|
|
88
|
+
self.default_dsn = dsn or default_dsn
|
|
89
|
+
self.program = program or ''
|
|
90
|
+
self.agent_name: str = kwargs.get('agent_name', 'nextstop')
|
|
91
|
+
self._json_encoder = json_encoder
|
|
92
|
+
self._json_decoder = json_decoder
|
|
93
|
+
|
|
94
|
+
def set_program(self, program: str):
|
|
95
|
+
"""Set the program slug for the toolkit.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
program: The program slug to set
|
|
99
|
+
"""
|
|
100
|
+
self.program = program
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def program_slug(self) -> str:
|
|
104
|
+
"""Get the program slug."""
|
|
105
|
+
return self.program
|
|
106
|
+
|
|
107
|
+
async def _open_file(self, file_path: Path) -> str:
|
|
108
|
+
"""Open a file and return its content as a string."""
|
|
109
|
+
try:
|
|
110
|
+
async with aiofiles.open(file_path, mode='r', encoding='utf-8') as f:
|
|
111
|
+
content = await f.read()
|
|
112
|
+
return content
|
|
113
|
+
except FileNotFoundError as e:
|
|
114
|
+
raise FileNotFoundError(
|
|
115
|
+
f"File not found: {file_path}"
|
|
116
|
+
) from e
|
|
117
|
+
except Exception as e:
|
|
118
|
+
raise RuntimeError(
|
|
119
|
+
f"Error reading file {file_path}: {e}"
|
|
120
|
+
) from e
|
|
121
|
+
|
|
122
|
+
async def _get_prompt(self, prompt_file: str) -> str:
|
|
123
|
+
"""Fetch the prompt content from the specified file."""
|
|
124
|
+
print('AQUI > ', AGENTS_DIR)
|
|
125
|
+
prompt_path = AGENTS_DIR.joinpath(
|
|
126
|
+
self.agent_name,
|
|
127
|
+
self.program,
|
|
128
|
+
'prompts',
|
|
129
|
+
f"{prompt_file}.txt"
|
|
130
|
+
)
|
|
131
|
+
return await self._open_file(prompt_path)
|
|
132
|
+
|
|
133
|
+
async def _get_query(
|
|
134
|
+
self,
|
|
135
|
+
query_name: str
|
|
136
|
+
) -> str:
|
|
137
|
+
"""Fetch a SQL query from the toolkit's queries directory.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
query_name: The name of the SQL query file (without extension)
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
str: The content of the SQL query file
|
|
144
|
+
|
|
145
|
+
Raises:
|
|
146
|
+
FileNotFoundError: If the query file does not exist
|
|
147
|
+
"""
|
|
148
|
+
query_path = AGENTS_DIR.joinpath(
|
|
149
|
+
self.agent_name,
|
|
150
|
+
self.program,
|
|
151
|
+
'queries',
|
|
152
|
+
f"{query_name}.sql"
|
|
153
|
+
)
|
|
154
|
+
if not query_path.exists():
|
|
155
|
+
raise FileNotFoundError(f"Query file not found: {query_path}")
|
|
156
|
+
return await self._open_file(query_path)
|
|
157
|
+
|
|
158
|
+
async def _fetch_one(
|
|
159
|
+
self,
|
|
160
|
+
query: str,
|
|
161
|
+
output_format: str = 'pandas',
|
|
162
|
+
structured_obj: Optional[Callable[[Dict[str, Any]], Any]] = None
|
|
163
|
+
) -> Union[pd.DataFrame, Dict[str, Any]]:
|
|
164
|
+
"""Fetch a single record based on the provided query.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
query: The SQL query string to fetch the record
|
|
168
|
+
output_format: Output format ('pandas' or 'dict')
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
Union[pd.DataFrame, Dict]: Record in the requested format
|
|
172
|
+
|
|
173
|
+
Raises:
|
|
174
|
+
Exception: If there's an error executing the query
|
|
175
|
+
"""
|
|
176
|
+
frmt = output_format.lower()
|
|
177
|
+
if frmt == 'structured':
|
|
178
|
+
frmt = 'native' # Default to json for structured output
|
|
179
|
+
db = AsyncDB('pg', dsn=self.default_dsn)
|
|
180
|
+
async with await db.connection() as conn: # pylint: disable=E1101 # noqa
|
|
181
|
+
conn.output_format(frmt)
|
|
182
|
+
result, error = await conn.query(query)
|
|
183
|
+
if error:
|
|
184
|
+
raise RuntimeError(
|
|
185
|
+
f"Error fetching record: {error}"
|
|
186
|
+
)
|
|
187
|
+
if isinstance(result, pd.DataFrame) and result.empty:
|
|
188
|
+
raise ValueError(
|
|
189
|
+
"No data found for the provided query."
|
|
190
|
+
)
|
|
191
|
+
elif not result:
|
|
192
|
+
raise ValueError(
|
|
193
|
+
"No data found for the provided query."
|
|
194
|
+
)
|
|
195
|
+
if output_format == "pandas":
|
|
196
|
+
# return the first row as a DataFrame
|
|
197
|
+
return result.iloc[0:1]
|
|
198
|
+
elif output_format == "json":
|
|
199
|
+
return json_encoder(
|
|
200
|
+
result.to_dict(orient='records')
|
|
201
|
+
)
|
|
202
|
+
elif output_format == "structured":
|
|
203
|
+
# Convert to Pydantic model
|
|
204
|
+
return structured_obj(**result[0])
|
|
205
|
+
else:
|
|
206
|
+
raise TypeError(
|
|
207
|
+
f"Unsupported output format: {output_format}"
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
async def _get_dataset(
|
|
211
|
+
self,
|
|
212
|
+
query: str,
|
|
213
|
+
output_format: str = 'pandas',
|
|
214
|
+
structured_obj: Optional[Callable[[Dict[str, Any]], Any]] = None
|
|
215
|
+
) -> Union[pd.DataFrame, Dict[str, Any]]:
|
|
216
|
+
"""Fetch a dataset based on the provided query.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
query: The SQL query string to fetch the dataset
|
|
220
|
+
output_format: Output format ('pandas' or 'dict')
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
Union[pd.DataFrame, Dict]: Dataset in the requested format
|
|
224
|
+
|
|
225
|
+
Raises:
|
|
226
|
+
Exception: If there's an error executing the query
|
|
227
|
+
"""
|
|
228
|
+
frmt = output_format.lower()
|
|
229
|
+
if frmt in {'structured', 'json'}:
|
|
230
|
+
frmt = 'pandas' # Default to pandas for structured output
|
|
231
|
+
db = AsyncDB('pg', dsn=self.default_dsn)
|
|
232
|
+
async with await db.connection() as conn: # pylint: disable=E1101 # noqa
|
|
233
|
+
conn.output_format(frmt)
|
|
234
|
+
result, error = await conn.query(query)
|
|
235
|
+
if error:
|
|
236
|
+
raise RuntimeError(
|
|
237
|
+
f"Error fetching dataset: {error}"
|
|
238
|
+
)
|
|
239
|
+
if result.empty:
|
|
240
|
+
raise ValueError(
|
|
241
|
+
"No data found for the provided query."
|
|
242
|
+
)
|
|
243
|
+
if output_format == "pandas":
|
|
244
|
+
return result
|
|
245
|
+
if output_format == "json":
|
|
246
|
+
return json_encoder(
|
|
247
|
+
result.to_dict(orient='records')
|
|
248
|
+
)
|
|
249
|
+
if output_format == "structured":
|
|
250
|
+
# Convert DataFrame to Pydantic models
|
|
251
|
+
data = []
|
|
252
|
+
try:
|
|
253
|
+
if structured_obj is None:
|
|
254
|
+
raise ValueError(
|
|
255
|
+
"structured_obj must be provided for structured output"
|
|
256
|
+
)
|
|
257
|
+
# Convert DataFrame rows to dictionaries
|
|
258
|
+
records_data = [row.to_dict() for _, row in result.iterrows()]
|
|
259
|
+
print(
|
|
260
|
+
f"Detected collection model: {structured_obj.__name__}"
|
|
261
|
+
)
|
|
262
|
+
if is_collection_model(structured_obj):
|
|
263
|
+
record_model = get_model_from_collection(structured_obj)
|
|
264
|
+
individual_records = [record_model(**row_dict) for row_dict in records_data]
|
|
265
|
+
# Create the container model with records
|
|
266
|
+
return structured_obj(
|
|
267
|
+
records=individual_records,
|
|
268
|
+
total_records=len(individual_records)
|
|
269
|
+
)
|
|
270
|
+
elif get_origin(structured_obj) is list:
|
|
271
|
+
# Handle direct list types like List[VisitsByManagerRecord]
|
|
272
|
+
record_model = get_args(structured_obj)[0]
|
|
273
|
+
return [record_model(**row_dict) for row_dict in records_data]
|
|
274
|
+
# Convert each row to the structured object
|
|
275
|
+
else:
|
|
276
|
+
for _, row in result.iterrows():
|
|
277
|
+
data.append(structured_obj(**row.to_dict()))
|
|
278
|
+
return data
|
|
279
|
+
except Exception as e:
|
|
280
|
+
raise ValueError(
|
|
281
|
+
f"Error converting to structured output: {e}"
|
|
282
|
+
)
|
|
283
|
+
else:
|
|
284
|
+
raise TypeError(
|
|
285
|
+
f"Unsupported output format: {output_format}"
|
|
286
|
+
)
|