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
parrot/models/crew.py
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Data models for Agent Crew execution results.
|
|
3
|
+
|
|
4
|
+
Provides standardized output format for all crew execution modes.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
from typing import List, Dict, Any, Optional, Literal, Union, Protocol
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
import uuid
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
import numpy as np
|
|
12
|
+
from datamodel.parsers.json import json_encoder # pylint: disable=E0611 # noqa
|
|
13
|
+
from .responses import AIMessage, AgentResponse
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
ResponseType = Union[AIMessage, AgentResponse, Any]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class AgentExecutionInfo:
|
|
21
|
+
"""Information about an agent's execution in a crew workflow."""
|
|
22
|
+
agent_id: str
|
|
23
|
+
"""Unique identifier for the agent"""
|
|
24
|
+
agent_name: str
|
|
25
|
+
"""Human-readable name of the agent"""
|
|
26
|
+
provider: Optional[str] = None
|
|
27
|
+
"""LLM provider used (e.g., 'openai', 'anthropic', 'google')"""
|
|
28
|
+
model: Optional[str] = None
|
|
29
|
+
"""Model name used (e.g., 'gpt-4', 'claude-3-opus')"""
|
|
30
|
+
execution_time: float = 0.0
|
|
31
|
+
"""Time taken to execute this agent (seconds)"""
|
|
32
|
+
tool_calls: List[Dict[str, Any]] = field(default_factory=list)
|
|
33
|
+
"""List of tool calls made by this agent"""
|
|
34
|
+
status: Literal['completed', 'failed', 'pending', 'running'] = 'pending'
|
|
35
|
+
"""Execution status of the agent"""
|
|
36
|
+
error: Optional[str] = None
|
|
37
|
+
"""Error message if agent failed"""
|
|
38
|
+
client: Optional[str] = None
|
|
39
|
+
"""Concrete client class name backing the agent (if available)"""
|
|
40
|
+
|
|
41
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
42
|
+
"""Serialise the execution info to a plain dictionary."""
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
'agent_id': self.agent_id,
|
|
46
|
+
'agent_name': self.agent_name,
|
|
47
|
+
'llm_provider': self.provider,
|
|
48
|
+
'model': self.model,
|
|
49
|
+
'execution_time': self.execution_time,
|
|
50
|
+
'tool_calls': self.tool_calls,
|
|
51
|
+
'status': self.status,
|
|
52
|
+
'error': self.error,
|
|
53
|
+
'client': self.client,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass
|
|
58
|
+
class CrewResult:
|
|
59
|
+
"""
|
|
60
|
+
Standardized result from crew execution.
|
|
61
|
+
|
|
62
|
+
This dataclass provides a consistent interface across all crew execution modes
|
|
63
|
+
(sequential, parallel, flow, FSM) and is compatible with OutputFormatter.
|
|
64
|
+
|
|
65
|
+
Attributes:
|
|
66
|
+
output: The final output text (alias for content)
|
|
67
|
+
content: The final output text (primary field for OutputFormatter compatibility)
|
|
68
|
+
response: List of raw response objects (AIMessage/AgentResponse) from each agent
|
|
69
|
+
results: List of all agent outputs in execution order
|
|
70
|
+
agent_ids: List of agent IDs that executed
|
|
71
|
+
agents: Detailed information about each agent's execution
|
|
72
|
+
execution_log: Detailed log of execution steps
|
|
73
|
+
total_time: Total execution time in seconds
|
|
74
|
+
status: Overall execution status
|
|
75
|
+
errors: Dictionary of errors by agent_id (if any)
|
|
76
|
+
metadata: Additional metadata about the execution
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
output: str
|
|
80
|
+
response: Dict[str, ResponseType] = field(default_factory=dict)
|
|
81
|
+
results: List[Any] = field(default_factory=list)
|
|
82
|
+
agent_ids: List[str] = field(default_factory=list)
|
|
83
|
+
agents: List[AgentExecutionInfo] = field(default_factory=list)
|
|
84
|
+
"""Detailed information about each agent's execution"""
|
|
85
|
+
execution_log: List[Dict[str, Any]] = field(default_factory=list)
|
|
86
|
+
"""Detailed log of execution steps"""
|
|
87
|
+
total_time: float = 0.0
|
|
88
|
+
status: Literal['completed', 'partial', 'failed'] = 'completed'
|
|
89
|
+
"""
|
|
90
|
+
Overall execution status:
|
|
91
|
+
- completed: All agents succeeded
|
|
92
|
+
- partial: Some agents succeeded, some failed
|
|
93
|
+
- failed: All agents failed or critical error
|
|
94
|
+
"""
|
|
95
|
+
errors: Dict[str, str] = field(default_factory=dict)
|
|
96
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
97
|
+
"""Additional metadata about the execution (mode, iterations, etc.)"""
|
|
98
|
+
|
|
99
|
+
def __str__(self) -> str:
|
|
100
|
+
"""String representation showing the final output."""
|
|
101
|
+
return str(self.content)
|
|
102
|
+
|
|
103
|
+
def __repr__(self) -> str:
|
|
104
|
+
"""Detailed representation for debugging."""
|
|
105
|
+
return f"CrewResult(status={self.status}, agents={len(self.agents)}, time={self.total_time:.2f}s)"
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def content(self) -> Optional[Any]:
|
|
109
|
+
"""Alias for the final output content."""
|
|
110
|
+
|
|
111
|
+
return self.output
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def final_result(self) -> Optional[Any]:
|
|
115
|
+
"""Compatibility alias for previous API."""
|
|
116
|
+
|
|
117
|
+
return self.output
|
|
118
|
+
|
|
119
|
+
@property
|
|
120
|
+
def success(self) -> bool:
|
|
121
|
+
"""Boolean success flag for backward compatibility."""
|
|
122
|
+
|
|
123
|
+
return self.status == "completed"
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def agent_results(self) -> Dict[str, Any]:
|
|
127
|
+
"""Map agent IDs to their outputs."""
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
agent_id: self.results[idx]
|
|
131
|
+
for idx, agent_id in enumerate(self.agent_ids)
|
|
132
|
+
if idx < len(self.results)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def completed(self) -> List[str]:
|
|
137
|
+
"""Return agent IDs with successful execution."""
|
|
138
|
+
completed_agents: List[str] = []
|
|
139
|
+
|
|
140
|
+
for agent in self.agents:
|
|
141
|
+
if isinstance(agent, AgentExecutionInfo):
|
|
142
|
+
if agent.status == "completed" and agent.agent_id:
|
|
143
|
+
completed_agents.append(agent.agent_id)
|
|
144
|
+
elif isinstance(agent, dict):
|
|
145
|
+
agent_id = agent.get("agent_id")
|
|
146
|
+
status = _normalise_agent_status(agent.get("status", ""))
|
|
147
|
+
|
|
148
|
+
if agent_id and status == "completed":
|
|
149
|
+
completed_agents.append(agent_id)
|
|
150
|
+
|
|
151
|
+
return completed_agents
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def failed(self) -> List[str]:
|
|
155
|
+
"""Return agent IDs with failed execution."""
|
|
156
|
+
failed_agents: List[str] = []
|
|
157
|
+
|
|
158
|
+
for agent in self.agents:
|
|
159
|
+
if isinstance(agent, AgentExecutionInfo):
|
|
160
|
+
if agent.status == "failed" and agent.agent_id:
|
|
161
|
+
failed_agents.append(agent.agent_id)
|
|
162
|
+
elif isinstance(agent, dict):
|
|
163
|
+
agent_id = agent.get("agent_id")
|
|
164
|
+
status = _normalise_agent_status(agent.get("status", ""))
|
|
165
|
+
|
|
166
|
+
if agent_id and status == "failed":
|
|
167
|
+
failed_agents.append(agent_id)
|
|
168
|
+
|
|
169
|
+
return failed_agents
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
def total_execution_time(self) -> float:
|
|
173
|
+
"""Compatibility alias for total execution time."""
|
|
174
|
+
return self.total_time
|
|
175
|
+
|
|
176
|
+
def __getitem__(self, item: str) -> Any:
|
|
177
|
+
"""Dictionary-style access for backward compatibility."""
|
|
178
|
+
|
|
179
|
+
mapping = {
|
|
180
|
+
"final_result": self.output,
|
|
181
|
+
"output": self.output,
|
|
182
|
+
"content": self.content,
|
|
183
|
+
"results": self.agent_results,
|
|
184
|
+
"results_list": self.results,
|
|
185
|
+
"agent_results": self.agent_results,
|
|
186
|
+
"agent_ids": self.agent_ids,
|
|
187
|
+
"agents": [agent.to_dict() if isinstance(agent, AgentExecutionInfo) else agent for agent in self.agents],
|
|
188
|
+
"errors": self.errors,
|
|
189
|
+
"execution_log": self.execution_log,
|
|
190
|
+
"total_time": self.total_time,
|
|
191
|
+
"total_execution_time": self.total_time,
|
|
192
|
+
"success": self.success,
|
|
193
|
+
"status": self.status,
|
|
194
|
+
"response": self.response,
|
|
195
|
+
"completed": self.completed,
|
|
196
|
+
"failed": self.failed,
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if item in mapping:
|
|
200
|
+
return mapping[item]
|
|
201
|
+
|
|
202
|
+
raise KeyError(item)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
"""Crew-related data models."""
|
|
206
|
+
def determine_run_status(
|
|
207
|
+
success_count: int,
|
|
208
|
+
failure_count: int,
|
|
209
|
+
) -> Literal['completed', 'partial', 'failed']:
|
|
210
|
+
"""Compute the overall status for a crew execution."""
|
|
211
|
+
|
|
212
|
+
if failure_count == 0:
|
|
213
|
+
return 'completed'
|
|
214
|
+
|
|
215
|
+
return 'failed' if success_count == 0 else 'partial'
|
|
216
|
+
|
|
217
|
+
def _serialise_tool_calls(tool_calls: Any) -> List[Any]:
|
|
218
|
+
"""Normalise tool call structures for metadata output."""
|
|
219
|
+
|
|
220
|
+
if not tool_calls:
|
|
221
|
+
return []
|
|
222
|
+
|
|
223
|
+
serialised: List[Any] = []
|
|
224
|
+
|
|
225
|
+
for call in tool_calls:
|
|
226
|
+
if hasattr(call, "model_dump"):
|
|
227
|
+
serialised.append(call.model_dump())
|
|
228
|
+
elif hasattr(call, "dict"):
|
|
229
|
+
serialised.append(call.dict())
|
|
230
|
+
else:
|
|
231
|
+
serialised.append(call)
|
|
232
|
+
|
|
233
|
+
return serialised
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def _get_llm_info(agent: Optional[Any]) -> Dict[str, Any]:
|
|
237
|
+
"""Extract lightweight information about the agent LLM/client."""
|
|
238
|
+
|
|
239
|
+
if agent is None:
|
|
240
|
+
return {}
|
|
241
|
+
|
|
242
|
+
llm_info: Dict[str, Any] = {}
|
|
243
|
+
|
|
244
|
+
provider = getattr(agent, "use_llm", None) or getattr(agent, "provider", None)
|
|
245
|
+
if provider:
|
|
246
|
+
llm_info["provider"] = provider
|
|
247
|
+
|
|
248
|
+
if (client := getattr(agent, "llm", None) or getattr(agent, "_llm", None)):
|
|
249
|
+
if (model_name := getattr(client, "model", None) or getattr(client, "deployment_name", None)):
|
|
250
|
+
llm_info["model"] = model_name
|
|
251
|
+
llm_info.setdefault("client", client.__class__.__name__)
|
|
252
|
+
|
|
253
|
+
return llm_info
|
|
254
|
+
|
|
255
|
+
def _normalise_agent_status(
|
|
256
|
+
status: str,
|
|
257
|
+
) -> Literal['completed', 'failed', 'pending', 'running']:
|
|
258
|
+
"""Map legacy status strings to the AgentExecutionInfo status options."""
|
|
259
|
+
|
|
260
|
+
normalised = status.lower()
|
|
261
|
+
mapping = {
|
|
262
|
+
'success': 'completed',
|
|
263
|
+
'completed': 'completed',
|
|
264
|
+
'error': 'failed',
|
|
265
|
+
'failed': 'failed',
|
|
266
|
+
'pending': 'pending',
|
|
267
|
+
'running': 'running',
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return mapping.get(normalised, 'pending')
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def build_agent_metadata(
|
|
274
|
+
agent_id: str,
|
|
275
|
+
agent: Optional[Any],
|
|
276
|
+
response: Optional[ResponseType],
|
|
277
|
+
output: Optional[Any],
|
|
278
|
+
execution_time: float,
|
|
279
|
+
status: str,
|
|
280
|
+
error: Optional[str] = None,
|
|
281
|
+
) -> AgentExecutionInfo:
|
|
282
|
+
"""Create execution metadata for an agent run."""
|
|
283
|
+
|
|
284
|
+
model = None
|
|
285
|
+
provider = None
|
|
286
|
+
tool_calls: List[Any] = []
|
|
287
|
+
|
|
288
|
+
# Prefer structured response information when available
|
|
289
|
+
if isinstance(response, AgentResponse):
|
|
290
|
+
ai_message = response.response if isinstance(response.response, AIMessage) else None
|
|
291
|
+
model = getattr(response, 'model', None) or getattr(ai_message, 'model', None)
|
|
292
|
+
provider = getattr(response, 'provider', None) or getattr(ai_message, 'provider', None)
|
|
293
|
+
raw_tool_calls = (
|
|
294
|
+
getattr(response, 'tool_calls', None)
|
|
295
|
+
or getattr(ai_message, 'tool_calls', None)
|
|
296
|
+
or []
|
|
297
|
+
)
|
|
298
|
+
tool_calls = _serialise_tool_calls(raw_tool_calls)
|
|
299
|
+
if output is None:
|
|
300
|
+
output = response.output or getattr(ai_message, 'output', None)
|
|
301
|
+
elif isinstance(response, AIMessage):
|
|
302
|
+
model = getattr(response, 'model', None)
|
|
303
|
+
provider = getattr(response, 'provider', None)
|
|
304
|
+
tool_calls = _serialise_tool_calls(getattr(response, 'tool_calls', None))
|
|
305
|
+
if output is None:
|
|
306
|
+
output = getattr(response, 'output', None) or getattr(response, 'content', None)
|
|
307
|
+
elif response is not None:
|
|
308
|
+
model = getattr(response, 'model', None)
|
|
309
|
+
provider = getattr(response, 'provider', None)
|
|
310
|
+
tool_calls = _serialise_tool_calls(getattr(response, 'tool_calls', None))
|
|
311
|
+
|
|
312
|
+
llm_info = _get_llm_info(agent)
|
|
313
|
+
provider = provider or llm_info.get('provider')
|
|
314
|
+
model = model or llm_info.get('model')
|
|
315
|
+
|
|
316
|
+
return AgentExecutionInfo(
|
|
317
|
+
agent_id=agent_id,
|
|
318
|
+
agent_name=getattr(agent, 'name', agent_id) if agent else agent_id,
|
|
319
|
+
provider=provider,
|
|
320
|
+
model=model,
|
|
321
|
+
execution_time=execution_time,
|
|
322
|
+
tool_calls=tool_calls,
|
|
323
|
+
status=_normalise_agent_status(status),
|
|
324
|
+
error=error,
|
|
325
|
+
client=llm_info.get('client'),
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
@dataclass
|
|
329
|
+
class AgentResult:
|
|
330
|
+
"""Captures a single agent execution with full context"""
|
|
331
|
+
agent_id: str
|
|
332
|
+
agent_name: str
|
|
333
|
+
task: str
|
|
334
|
+
result: Any
|
|
335
|
+
metadata: Dict[str, Any]
|
|
336
|
+
execution_time: float
|
|
337
|
+
timestamp: datetime = field(default_factory=datetime.utcnow)
|
|
338
|
+
parent_execution_id: Optional[str] = None # For tracking re-executions
|
|
339
|
+
execution_id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
|
340
|
+
|
|
341
|
+
def to_text(self) -> str:
|
|
342
|
+
"""Convert execution result to text for vectorization"""
|
|
343
|
+
from pandas import DataFrame # noqa F401
|
|
344
|
+
|
|
345
|
+
result_type = type(self.result).__name__
|
|
346
|
+
|
|
347
|
+
base_info = f"""Agent: {self.agent_name}
|
|
348
|
+
Task: {self.task}
|
|
349
|
+
Result Type: {result_type}
|
|
350
|
+
Execution Time: {self.execution_time}s
|
|
351
|
+
Timestamp: {self.timestamp.isoformat()}
|
|
352
|
+
"""
|
|
353
|
+
|
|
354
|
+
if isinstance(self.result, DataFrame):
|
|
355
|
+
df = self.result
|
|
356
|
+
content = f"""
|
|
357
|
+
Shape: {df.shape[0]} rows × {df.shape[1]} columns
|
|
358
|
+
Columns: {', '.join(df.columns)}
|
|
359
|
+
|
|
360
|
+
Data Types:
|
|
361
|
+
{df.dtypes.to_string()}
|
|
362
|
+
|
|
363
|
+
Statistics:
|
|
364
|
+
{df.describe().to_string() if len(df) > 0 else 'No numerical data'}
|
|
365
|
+
|
|
366
|
+
Sample Data (first 10 rows):
|
|
367
|
+
{df.head(10).to_string()}
|
|
368
|
+
"""
|
|
369
|
+
elif isinstance(self.result, dict):
|
|
370
|
+
content = f"""
|
|
371
|
+
Keys: {', '.join(self.result.keys())}
|
|
372
|
+
Content:
|
|
373
|
+
{json_encoder(self.result)}
|
|
374
|
+
"""
|
|
375
|
+
elif isinstance(self.result, list):
|
|
376
|
+
content = f"""
|
|
377
|
+
Length: {len(self.result)} items
|
|
378
|
+
Item Types: {', '.join(set(type(item).__name__ for item in self.result[:100]))}
|
|
379
|
+
Sample Items:
|
|
380
|
+
{json_encoder(self.result[:10]) if len(self.result) > 0 else '[]'}
|
|
381
|
+
"""
|
|
382
|
+
else:
|
|
383
|
+
content = f"""
|
|
384
|
+
Content:
|
|
385
|
+
{str(self.result)}
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
return base_info + content
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
class VectorStoreProtocol(Protocol):
|
|
392
|
+
"""Protocol for vector store implementations"""
|
|
393
|
+
def encode(self, texts: List[str]) -> np.ndarray:
|
|
394
|
+
"""Encode texts to embeddings"""
|
|
395
|
+
...
|