mirror of
https://github.com/crewAIInc/crewAI.git
synced 2025-12-27 09:48:30 +00:00
Compare commits
551 Commits
devin/1764
...
gl/feat/wo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b85244b36 | ||
|
|
2b6fba8390 | ||
|
|
37b49756b5 | ||
|
|
6fd2d8e19b | ||
|
|
4d79c41a06 | ||
|
|
f0762473d0 | ||
|
|
aca826c553 | ||
|
|
1d1f5f455c | ||
|
|
58b72c3948 | ||
|
|
3b18e7d971 | ||
|
|
c062992806 | ||
|
|
9d3fe72e75 | ||
|
|
d2249e621d | ||
|
|
03a711c365 | ||
|
|
72366e846e | ||
|
|
0a09beca03 | ||
|
|
76ad0e0a10 | ||
|
|
6cf7da6d13 | ||
|
|
02267c1435 | ||
|
|
a717f44011 | ||
|
|
b88f065ad8 | ||
|
|
e2270456c4 | ||
|
|
3eeb9b8f6c | ||
|
|
14a1bf6317 | ||
|
|
98a8607c87 | ||
|
|
daf6f679ff | ||
|
|
74b5c88834 | ||
|
|
13e5ec711d | ||
|
|
e350817b8d | ||
|
|
2a927933f2 | ||
|
|
7c2aa2f923 | ||
|
|
1bd10bb254 | ||
|
|
e29ca9ec28 | ||
|
|
8d9cee45f2 | ||
|
|
f9925887aa | ||
|
|
6f2301c945 | ||
|
|
cb8a1da730 | ||
|
|
47b64d3507 | ||
|
|
33241ef363 | ||
|
|
93b841fc86 | ||
|
|
cb84d2ddfa | ||
|
|
1f581fa9ac | ||
|
|
6562587cba | ||
|
|
992cd726c4 | ||
|
|
403bb7e208 | ||
|
|
dc039cfac8 | ||
|
|
1ce016df8b | ||
|
|
23a16eb446 | ||
|
|
16d613488b | ||
|
|
99e174e575 | ||
|
|
41ce4981ac | ||
|
|
d00c9764fc | ||
|
|
4daf18256d | ||
|
|
9220cfba28 | ||
|
|
707c8583f4 | ||
|
|
30df46445b | ||
|
|
b8bd3000c6 | ||
|
|
e6ec6cc332 | ||
|
|
104485d18b | ||
|
|
c3e87fc31f | ||
|
|
2c38d1d448 | ||
|
|
9f6002a9dd | ||
|
|
78f5144bde | ||
|
|
eb09f2718f | ||
|
|
e0de166592 | ||
|
|
c45e92bd17 | ||
|
|
b4786d86b0 | ||
|
|
d53e96fcd7 | ||
|
|
26652e5e24 | ||
|
|
180cc38330 | ||
|
|
8723e66807 | ||
|
|
e4cb8bf797 | ||
|
|
03917411b4 | ||
|
|
e8825d071a | ||
|
|
78a062a907 | ||
|
|
c13b08de2e | ||
|
|
31b3dd2b94 | ||
|
|
9e92b84bcc | ||
|
|
2cca45b45a | ||
|
|
fac32d9503 | ||
|
|
5a99f07765 | ||
|
|
dc2d4af8ea | ||
|
|
748f438232 | ||
|
|
72b3a8c70a | ||
|
|
5d5377cfb9 | ||
|
|
0dbcbde119 | ||
|
|
ba6a85d342 | ||
|
|
8b887b4eb3 | ||
|
|
8ecc958e4c | ||
|
|
64f6f998d8 | ||
|
|
edd4e5bef9 | ||
|
|
fd4ef4f47a | ||
|
|
93d043bcd4 | ||
|
|
67be0c674d | ||
|
|
82d0209ce2 | ||
|
|
6909c587c2 | ||
|
|
7c1a87e5ab | ||
|
|
af5a605f31 | ||
|
|
40dd22ce2c | ||
|
|
4d86da80c3 | ||
|
|
edc9b44c47 | ||
|
|
78d0ec501d | ||
|
|
7973c163f3 | ||
|
|
a270742319 | ||
|
|
8cbdaeaff5 | ||
|
|
a95be24865 | ||
|
|
c2cb8e06be | ||
|
|
257f4bf385 | ||
|
|
6f95572e18 | ||
|
|
89394ef3e3 | ||
|
|
90c9d5d71d | ||
|
|
5b06a0c189 | ||
|
|
6b4453e1b1 | ||
|
|
d842e9df97 | ||
|
|
47acb5c3e4 | ||
|
|
e0adb4695c | ||
|
|
4fd7db2e53 | ||
|
|
5ded394e43 | ||
|
|
baea6dc8a4 | ||
|
|
5cfcb5c74a | ||
|
|
865930da78 | ||
|
|
319423b70a | ||
|
|
658c23547e | ||
|
|
568aace62e | ||
|
|
9e68cbbb3d | ||
|
|
c06076280e | ||
|
|
0c3140e758 | ||
|
|
db309ca1ae | ||
|
|
292adef7ba | ||
|
|
d47adfc34a | ||
|
|
e8326f134f | ||
|
|
c19591a689 | ||
|
|
5af2108307 | ||
|
|
cad804e87b | ||
|
|
7718df5437 | ||
|
|
9c7c7d3d75 | ||
|
|
3df25e65d5 | ||
|
|
7148c52bf6 | ||
|
|
f329b0d9d2 | ||
|
|
975c71a920 | ||
|
|
884ea63b49 | ||
|
|
35aff6e84e | ||
|
|
867305540c | ||
|
|
5bcb598f75 | ||
|
|
3fcc7b42cb | ||
|
|
13bad2bb69 | ||
|
|
6d8d30178d | ||
|
|
f1187c5469 | ||
|
|
7c16b7d284 | ||
|
|
837198ae08 | ||
|
|
554bba8036 | ||
|
|
12927ba79d | ||
|
|
96c3fbdddf | ||
|
|
5a9bb24b63 | ||
|
|
05982aeef2 | ||
|
|
d6a6325b55 | ||
|
|
6b19a3d156 | ||
|
|
052a07ddc7 | ||
|
|
aff40529a5 | ||
|
|
dcd4481ae2 | ||
|
|
6b93ebb97b | ||
|
|
9a09ea7703 | ||
|
|
bcfe015d9d | ||
|
|
90cdb48db0 | ||
|
|
199044f866 | ||
|
|
3808f98c14 | ||
|
|
060671983d | ||
|
|
bcb72a9305 | ||
|
|
141ff864f2 | ||
|
|
43d045f542 | ||
|
|
88785f4a74 | ||
|
|
b4d98bbb86 | ||
|
|
df3842ed88 | ||
|
|
4af3724ec2 | ||
|
|
0bd6006b27 | ||
|
|
4774b996d0 | ||
|
|
717edbba19 | ||
|
|
755a9ed055 | ||
|
|
d824f3bb3b | ||
|
|
14ecab7365 | ||
|
|
b03d74abe5 | ||
|
|
bee8fda006 | ||
|
|
ef611a9dcd | ||
|
|
fb4423c91d | ||
|
|
fe3f0bda81 | ||
|
|
3f2161efdb | ||
|
|
cef86f73d9 | ||
|
|
659cb6279e | ||
|
|
a606f48b70 | ||
|
|
9c4c4219cd | ||
|
|
fe2a5abf8d | ||
|
|
1568008db6 | ||
|
|
1bd87f514e | ||
|
|
334beda181 | ||
|
|
5cb5f4f1a6 | ||
|
|
14bc8de774 | ||
|
|
e343f26c03 | ||
|
|
1a824cf432 | ||
|
|
78aff9dbdc | ||
|
|
50779582ed | ||
|
|
31192bcdda | ||
|
|
d882818d6c | ||
|
|
e26667ea40 | ||
|
|
71f3ed9ef9 | ||
|
|
d3d3cc4c28 | ||
|
|
41cec25ad9 | ||
|
|
40dcf63a70 | ||
|
|
ecbf550be9 | ||
|
|
06f99fc6cd | ||
|
|
90a335de46 | ||
|
|
e5aabe05e1 | ||
|
|
4388235846 | ||
|
|
91bff42398 | ||
|
|
4f4b061907 | ||
|
|
c27727b16e | ||
|
|
ad4c711223 | ||
|
|
2f8c07320b | ||
|
|
4360adc725 | ||
|
|
dab8f648cb | ||
|
|
9f8529eab2 | ||
|
|
513c156c4b | ||
|
|
9a20c3952f | ||
|
|
66dee007b7 | ||
|
|
aafcf992ab | ||
|
|
c31a8d6ee2 | ||
|
|
a5d19e3ec3 | ||
|
|
7efc092873 | ||
|
|
fa901453fe | ||
|
|
8047ee067c | ||
|
|
ea85f02e03 | ||
|
|
d1be5a937f | ||
|
|
d360906f57 | ||
|
|
29a7961ca8 | ||
|
|
16cdabbf35 | ||
|
|
94cce06044 | ||
|
|
e0c6ec5bd3 | ||
|
|
fc68b9f6bf | ||
|
|
3c29a6cc11 | ||
|
|
64d54bd423 | ||
|
|
faff58ba1c | ||
|
|
555638a654 | ||
|
|
0b5f0841bf | ||
|
|
55f669989b | ||
|
|
29da6659cf | ||
|
|
954dd43c17 | ||
|
|
4c7ce3a945 | ||
|
|
10f8a87317 | ||
|
|
a7316a86bf | ||
|
|
15d6314379 | ||
|
|
62ddb6c9bd | ||
|
|
0d94a8f7d9 | ||
|
|
029afd3e14 | ||
|
|
20e852bffc | ||
|
|
dd3fea748f | ||
|
|
d3391d9ba4 | ||
|
|
aaf2641cc8 | ||
|
|
5e2c38c349 | ||
|
|
63e23c06c5 | ||
|
|
e5c47e46a8 | ||
|
|
b404439aa9 | ||
|
|
c3ebbba8ae | ||
|
|
0674b397f7 | ||
|
|
8dd4388c49 | ||
|
|
2ad99c04d3 | ||
|
|
cc509a363e | ||
|
|
ed261892df | ||
|
|
c7c8cd0a3c | ||
|
|
38a7b1e4da | ||
|
|
7b7327c168 | ||
|
|
97a4a348ff | ||
|
|
078120e548 | ||
|
|
7da783ef0e | ||
|
|
0ac6f915fb | ||
|
|
ba8f95964f | ||
|
|
64b98667a3 | ||
|
|
331840e6cc | ||
|
|
bb19f1c74c | ||
|
|
f11756387d | ||
|
|
b7a132db89 | ||
|
|
5e00b74cd4 | ||
|
|
4c5f1962ac | ||
|
|
8d8c3677ff | ||
|
|
b58d80dcf9 | ||
|
|
7608944e7f | ||
|
|
c070ba002c | ||
|
|
1bbac87e70 | ||
|
|
73b803ddc3 | ||
|
|
c7624e1f57 | ||
|
|
059d635f02 | ||
|
|
3795d7dd8e | ||
|
|
4551b8c625 | ||
|
|
cd37ede869 | ||
|
|
81981e43b6 | ||
|
|
2effe9a7d2 | ||
|
|
56a9060840 | ||
|
|
e40ca38daf | ||
|
|
b6bb5dbd53 | ||
|
|
c26e962d17 | ||
|
|
d94f7e03dc | ||
|
|
c76e0f3445 | ||
|
|
668e87d5e1 | ||
|
|
164442223e | ||
|
|
3a095183c5 | ||
|
|
2cb33b18e5 | ||
|
|
00418d98f7 | ||
|
|
1fd5805bef | ||
|
|
b0a948797a | ||
|
|
1eb5d50a55 | ||
|
|
a49be2fc52 | ||
|
|
d5d83cbd7e | ||
|
|
a0e0c28152 | ||
|
|
264f1e0f0e | ||
|
|
d5fb31e645 | ||
|
|
e1482d740f | ||
|
|
7c375976ab | ||
|
|
5b813e3d31 | ||
|
|
25969d9db7 | ||
|
|
f64a93b541 | ||
|
|
569d9e7f75 | ||
|
|
a64cccbd72 | ||
|
|
e0d3ee5b23 | ||
|
|
95cc6835a1 | ||
|
|
e7e059d02a | ||
|
|
5532ea8ff7 | ||
|
|
d168b8e245 | ||
|
|
6c242ef3bb | ||
|
|
0e49353fcd | ||
|
|
41711c1ffe | ||
|
|
ea2994d341 | ||
|
|
945ed7aaaa | ||
|
|
eed6a38ea4 | ||
|
|
ec9951e28a | ||
|
|
e677a271e5 | ||
|
|
49ad43ff08 | ||
|
|
a94470772f | ||
|
|
dd18c59a9b | ||
|
|
cbec6d5cd7 | ||
|
|
15970734e3 | ||
|
|
601abb2bc3 | ||
|
|
488782fb4a | ||
|
|
1c37158208 | ||
|
|
a3630418f9 | ||
|
|
10639d8775 | ||
|
|
2061f8ca41 | ||
|
|
1f8791953e | ||
|
|
96e52767ad | ||
|
|
9eac65f9f6 | ||
|
|
8e15bc6386 | ||
|
|
6a7e917e1d | ||
|
|
857d6c135c | ||
|
|
96429040de | ||
|
|
c4f8a1cdf1 | ||
|
|
d54b8a6e8d | ||
|
|
fe172cb4de | ||
|
|
1e76b66234 | ||
|
|
90a13cb6f7 | ||
|
|
1cc8966e2e | ||
|
|
a04d98f62f | ||
|
|
35fe222ca1 | ||
|
|
d19bba72b0 | ||
|
|
5957573625 | ||
|
|
91c394ffce | ||
|
|
d146e4a961 | ||
|
|
8007938d6b | ||
|
|
859e6162e8 | ||
|
|
e8b185e607 | ||
|
|
c32023df29 | ||
|
|
a228732423 | ||
|
|
b47926b1d9 | ||
|
|
64762887f0 | ||
|
|
5dd49762e3 | ||
|
|
d861dcc3c4 | ||
|
|
32abada521 | ||
|
|
2416c08760 | ||
|
|
fba480c582 | ||
|
|
50dc37ad5b | ||
|
|
1227c3fc7c | ||
|
|
2da8cfcf99 | ||
|
|
e7078f6502 | ||
|
|
a2e38b6121 | ||
|
|
4835c2bf68 | ||
|
|
d28dba453e | ||
|
|
0070df7451 | ||
|
|
b343c71b9b | ||
|
|
88becbd6e1 | ||
|
|
225ee06030 | ||
|
|
18a28261a4 | ||
|
|
c372641be8 | ||
|
|
6fd02cdf82 | ||
|
|
2df29f3dde | ||
|
|
8506505301 | ||
|
|
25343727fd | ||
|
|
0386120a5a | ||
|
|
21342fa0f6 | ||
|
|
d5e6b95817 | ||
|
|
d8c98f2e64 | ||
|
|
33a0f05804 | ||
|
|
d9ad8c62b9 | ||
|
|
3f3ef03395 | ||
|
|
f447f71a8e | ||
|
|
ac3ee8576d | ||
|
|
7227a0e740 | ||
|
|
1111a1ac6b | ||
|
|
7dd33e0b3a | ||
|
|
75ee346d18 | ||
|
|
2bcb9e7000 | ||
|
|
c9d22489b8 | ||
|
|
1a676c6340 | ||
|
|
1cf2ebb07b | ||
|
|
acf776f91a | ||
|
|
f0d924fab1 | ||
|
|
fc52061bc9 | ||
|
|
3be455e971 | ||
|
|
676e714c8b | ||
|
|
6f45c6ed09 | ||
|
|
65855cbe56 | ||
|
|
f056764132 | ||
|
|
cb1dc13a9d | ||
|
|
a5d2839431 | ||
|
|
cf67b424c2 | ||
|
|
ba05d18ab1 | ||
|
|
b4d91d1ce0 | ||
|
|
a801f1cd24 | ||
|
|
f2063d01fa | ||
|
|
d000bd2fc8 | ||
|
|
f743a5ce61 | ||
|
|
241dc37ba3 | ||
|
|
f79c385bf7 | ||
|
|
00e573c960 | ||
|
|
a3d3a70b5a | ||
|
|
9a8d88b8aa | ||
|
|
58354ec638 | ||
|
|
369c03a257 | ||
|
|
7ffd8f5129 | ||
|
|
ab484172ef | ||
|
|
be6e1a79dd | ||
|
|
41478abdf5 | ||
|
|
7a6e588c58 | ||
|
|
25339f3ee1 | ||
|
|
a95f5c27c6 | ||
|
|
f5d092f6a3 | ||
|
|
d4449ee5f0 | ||
|
|
f9c803a8c1 | ||
|
|
d84a616572 | ||
|
|
c97678bb11 | ||
|
|
2f80840c74 | ||
|
|
161c72b29f | ||
|
|
61cce93fd0 | ||
|
|
94e6651b55 | ||
|
|
1a4ac76b1e | ||
|
|
da75d51fe8 | ||
|
|
bd13b55afd | ||
|
|
0f703950d9 | ||
|
|
2b47377a78 | ||
|
|
f3bf13e1b1 | ||
|
|
806f884956 | ||
|
|
5e8e711170 | ||
|
|
2c0f90dd22 | ||
|
|
ffe3829cef | ||
|
|
d8b8edab08 | ||
|
|
ff80e6cb79 | ||
|
|
7ee7d846e2 | ||
|
|
53e9b40725 | ||
|
|
ad965357ce | ||
|
|
f0f1ab175a | ||
|
|
7d40c98434 | ||
|
|
56146b7df4 | ||
|
|
438c979a2e | ||
|
|
5b7276c0bb | ||
|
|
70b5a3ab85 | ||
|
|
60eb6e7c6f | ||
|
|
dd15dab111 | ||
|
|
0b49403635 | ||
|
|
4e1425665c | ||
|
|
1f08d74015 | ||
|
|
bedbac2aaf | ||
|
|
5c2d8c4cfa | ||
|
|
a11cc57345 | ||
|
|
e36af697cd | ||
|
|
a51a7000c5 | ||
|
|
53c7d815ae | ||
|
|
4b11881a70 | ||
|
|
cecfde6608 | ||
|
|
b14f2d4bf1 | ||
|
|
e0840e4826 | ||
|
|
7c6b1249fb | ||
|
|
037e80c6a3 | ||
|
|
59d9d9eb1f | ||
|
|
cf6231384c | ||
|
|
a95cbfdc6a | ||
|
|
cf96d5579f | ||
|
|
768bb74a2c | ||
|
|
ffd5942b31 | ||
|
|
5fb9ddfa2a | ||
|
|
b992238a5d | ||
|
|
a474745b67 | ||
|
|
5d64a5c41c | ||
|
|
d4fc993f1e | ||
|
|
843c982ba9 | ||
|
|
e6da49754d | ||
|
|
f78011e68c | ||
|
|
39aba4cb48 | ||
|
|
ed58694675 | ||
|
|
e0d799c075 | ||
|
|
b80dd1ca8b | ||
|
|
031fe500fb | ||
|
|
aab3acbaa6 | ||
|
|
3aa1bc3894 | ||
|
|
c5fd5196e2 | ||
|
|
be1a60554f | ||
|
|
873112d696 | ||
|
|
9f41fb4057 | ||
|
|
dd2349a90a | ||
|
|
776826ec99 | ||
|
|
9c98ad455d | ||
|
|
4e9709b8fb | ||
|
|
92abe0b726 | ||
|
|
80f9613959 | ||
|
|
3b77de7b21 | ||
|
|
f17057898d | ||
|
|
95fb44be88 | ||
|
|
1c8d010601 | ||
|
|
73cae1997d | ||
|
|
b8e86b0fb4 | ||
|
|
c09f62cf47 | ||
|
|
cf4f49c6e9 | ||
|
|
37aa8d6b63 | ||
|
|
8ffbd9665b | ||
|
|
7f683b21f5 | ||
|
|
d19814d7a3 | ||
|
|
51358b3cc4 | ||
|
|
ec97e15a3a | ||
|
|
640b5a9461 | ||
|
|
f2dfa07221 | ||
|
|
467b05532f | ||
|
|
79eec51c9a | ||
|
|
cff6082f1c | ||
|
|
9e560ff951 | ||
|
|
80942bf38c | ||
|
|
50bae27948 | ||
|
|
7c99e9ab50 | ||
|
|
f3c693a5bb | ||
|
|
e94fd2cad2 | ||
|
|
b4f270ad1f | ||
|
|
7ee9926f2e | ||
|
|
a20481d023 | ||
|
|
aa7e336989 | ||
|
|
db5d371769 | ||
|
|
a232bfbe60 | ||
|
|
c1182eb322 | ||
|
|
54e4554f49 |
2
.github/workflows/build-uv-cache.yml
vendored
2
.github/workflows/build-uv-cache.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
|||||||
- name: Install dependencies and populate cache
|
- name: Install dependencies and populate cache
|
||||||
run: |
|
run: |
|
||||||
echo "Building global UV cache for Python ${{ matrix.python-version }}..."
|
echo "Building global UV cache for Python ${{ matrix.python-version }}..."
|
||||||
uv sync --all-groups --all-extras --no-install-project
|
uv sync --all-groups --all-extras
|
||||||
echo "Cache populated successfully"
|
echo "Cache populated successfully"
|
||||||
|
|
||||||
- name: Save uv caches
|
- name: Save uv caches
|
||||||
|
|||||||
2
.github/workflows/linter.yml
vendored
2
.github/workflows/linter.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
enable-cache: false
|
enable-cache: false
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: uv sync --all-groups --all-extras --no-install-project
|
run: uv sync --all-packages --all-extras --no-install-project
|
||||||
|
|
||||||
- name: Get Changed Python Files
|
- name: Get Changed Python Files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
|
|||||||
63
.github/workflows/tests.yml
vendored
63
.github/workflows/tests.yml
vendored
@@ -25,17 +25,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Fetch all history for proper diff
|
fetch-depth: 0 # Fetch all history for proper diff
|
||||||
|
|
||||||
- name: Restore global uv cache
|
# - name: Restore global uv cache
|
||||||
id: cache-restore
|
# id: cache-restore
|
||||||
uses: actions/cache/restore@v4
|
# uses: actions/cache/restore@v4
|
||||||
with:
|
# with:
|
||||||
path: |
|
# path: |
|
||||||
~/.cache/uv
|
# ~/.cache/uv
|
||||||
~/.local/share/uv
|
# ~/.local/share/uv
|
||||||
.venv
|
# .venv
|
||||||
key: uv-main-py${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
|
# key: uv-main-py${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
|
||||||
restore-keys: |
|
# restore-keys: |
|
||||||
uv-main-py${{ matrix.python-version }}-
|
# uv-main-py${{ matrix.python-version }}-
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@v6
|
uses: astral-sh/setup-uv@v6
|
||||||
@@ -45,24 +45,24 @@ jobs:
|
|||||||
enable-cache: false
|
enable-cache: false
|
||||||
|
|
||||||
- name: Install the project
|
- name: Install the project
|
||||||
run: uv sync --all-groups --all-extras
|
run: uv sync --all-packages --all-extras
|
||||||
|
|
||||||
- name: Restore test durations
|
# - name: Restore test durations
|
||||||
uses: actions/cache/restore@v4
|
# uses: actions/cache/restore@v4
|
||||||
with:
|
# with:
|
||||||
path: .test_durations_py*
|
# path: .test_durations_py*
|
||||||
key: test-durations-py${{ matrix.python-version }}
|
# key: test-durations-py${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Run tests (group ${{ matrix.group }} of 8)
|
- name: Run tests (group ${{ matrix.group }} of 8)
|
||||||
run: |
|
run: |
|
||||||
PYTHON_VERSION_SAFE=$(echo "${{ matrix.python-version }}" | tr '.' '_')
|
PYTHON_VERSION_SAFE=$(echo "${{ matrix.python-version }}" | tr '.' '_')
|
||||||
DURATION_FILE=".test_durations_py${PYTHON_VERSION_SAFE}"
|
DURATION_FILE=".test_durations_py${PYTHON_VERSION_SAFE}"
|
||||||
|
|
||||||
# Temporarily always skip cached durations to fix test splitting
|
# Temporarily always skip cached durations to fix test splitting
|
||||||
# When durations don't match, pytest-split runs duplicate tests instead of splitting
|
# When durations don't match, pytest-split runs duplicate tests instead of splitting
|
||||||
echo "Using even test splitting (duration cache disabled until fix merged)"
|
echo "Using even test splitting (duration cache disabled until fix merged)"
|
||||||
DURATIONS_ARG=""
|
DURATIONS_ARG=""
|
||||||
|
|
||||||
# Original logic (disabled temporarily):
|
# Original logic (disabled temporarily):
|
||||||
# if [ ! -f "$DURATION_FILE" ]; then
|
# if [ ! -f "$DURATION_FILE" ]; then
|
||||||
# echo "No cached durations found, tests will be split evenly"
|
# echo "No cached durations found, tests will be split evenly"
|
||||||
@@ -74,8 +74,8 @@ jobs:
|
|||||||
# echo "No test changes detected, using cached test durations for optimal splitting"
|
# echo "No test changes detected, using cached test durations for optimal splitting"
|
||||||
# DURATIONS_ARG="--durations-path=${DURATION_FILE}"
|
# DURATIONS_ARG="--durations-path=${DURATION_FILE}"
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
uv run pytest \
|
uv run pytest lib/crewai \
|
||||||
--block-network \
|
--block-network \
|
||||||
--timeout=30 \
|
--timeout=30 \
|
||||||
-vv \
|
-vv \
|
||||||
@@ -84,14 +84,15 @@ jobs:
|
|||||||
$DURATIONS_ARG \
|
$DURATIONS_ARG \
|
||||||
--durations=10 \
|
--durations=10 \
|
||||||
-n auto \
|
-n auto \
|
||||||
--maxfail=3
|
--maxfail=3 \
|
||||||
|
-m "not requires_local_services"
|
||||||
|
|
||||||
- name: Save uv caches
|
# - name: Save uv caches
|
||||||
if: steps.cache-restore.outputs.cache-hit != 'true'
|
# if: steps.cache-restore.outputs.cache-hit != 'true'
|
||||||
uses: actions/cache/save@v4
|
# uses: actions/cache/save@v4
|
||||||
with:
|
# with:
|
||||||
path: |
|
# path: |
|
||||||
~/.cache/uv
|
# ~/.cache/uv
|
||||||
~/.local/share/uv
|
# ~/.local/share/uv
|
||||||
.venv
|
# .venv
|
||||||
key: uv-main-py${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
|
# key: uv-main-py${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
|
||||||
|
|||||||
2
.github/workflows/type-checker.yml
vendored
2
.github/workflows/type-checker.yml
vendored
@@ -40,7 +40,7 @@ jobs:
|
|||||||
enable-cache: false
|
enable-cache: false
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: uv sync --all-groups --all-extras
|
run: uv sync --all-packages --all-extras
|
||||||
|
|
||||||
- name: Get changed Python files
|
- name: Get changed Python files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,7 +2,6 @@
|
|||||||
.pytest_cache
|
.pytest_cache
|
||||||
__pycache__
|
__pycache__
|
||||||
dist/
|
dist/
|
||||||
lib/
|
|
||||||
.env
|
.env
|
||||||
assets/*
|
assets/*
|
||||||
.idea
|
.idea
|
||||||
|
|||||||
@@ -6,14 +6,19 @@ repos:
|
|||||||
entry: uv run ruff check
|
entry: uv run ruff check
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
|
files: ^lib/crewai/src/
|
||||||
|
exclude: ^lib/crewai/
|
||||||
- id: ruff-format
|
- id: ruff-format
|
||||||
name: ruff-format
|
name: ruff-format
|
||||||
entry: uv run ruff format
|
entry: uv run ruff format
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
|
files: ^lib/crewai/src/
|
||||||
|
exclude: ^lib/crewai/
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy
|
name: mypy
|
||||||
entry: uv run mypy
|
entry: uv run mypy
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
exclude: ^tests/
|
files: ^lib/crewai/src/
|
||||||
|
exclude: ^lib/crewai/
|
||||||
|
|||||||
BIN
assets/crew_only_logo.png
Normal file
BIN
assets/crew_only_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/crewai_logo.png
Normal file
BIN
assets/crewai_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
1
lib/crewai/.python-version
Normal file
1
lib/crewai/.python-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.13
|
||||||
124
lib/crewai/pyproject.toml
Normal file
124
lib/crewai/pyproject.toml
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
[project]
|
||||||
|
name = "crewai"
|
||||||
|
dynamic = ["version"]
|
||||||
|
description = ""
|
||||||
|
readme = "README.md"
|
||||||
|
authors = [
|
||||||
|
{ name = "Greyson Lalonde", email = "greyson.r.lalonde@gmail.com" }
|
||||||
|
]
|
||||||
|
keywords = [
|
||||||
|
"crewai",
|
||||||
|
"ai",
|
||||||
|
"agents",
|
||||||
|
"framework",
|
||||||
|
"orchestration",
|
||||||
|
"llm",
|
||||||
|
"core",
|
||||||
|
"typed",
|
||||||
|
]
|
||||||
|
classifiers = [
|
||||||
|
"Development Status :: 3 - Alpha",
|
||||||
|
"Intended Audience :: Developers",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"Programming Language :: Python :: 3.12",
|
||||||
|
"Programming Language :: Python :: 3.13",
|
||||||
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||||
|
"Typing :: Typed",
|
||||||
|
]
|
||||||
|
requires-python = ">=3.10, <3.14"
|
||||||
|
dependencies = [
|
||||||
|
# Core Dependencies
|
||||||
|
"crewai",
|
||||||
|
"pydantic>=2.11.9",
|
||||||
|
"openai>=1.13.3",
|
||||||
|
"litellm==1.74.9",
|
||||||
|
"instructor>=1.3.3",
|
||||||
|
# Text Processing
|
||||||
|
"pdfplumber>=0.11.4",
|
||||||
|
"regex>=2024.9.11",
|
||||||
|
# Telemetry and Monitoring
|
||||||
|
"opentelemetry-api>=1.30.0",
|
||||||
|
"opentelemetry-sdk>=1.30.0",
|
||||||
|
"opentelemetry-exporter-otlp-proto-http>=1.30.0",
|
||||||
|
"tokenizers>=0.20.3",
|
||||||
|
"openpyxl>=3.1.5",
|
||||||
|
"pyvis>=0.3.2",
|
||||||
|
# Authentication and Security
|
||||||
|
"python-dotenv>=1.1.1",
|
||||||
|
"pyjwt>=2.9.0",
|
||||||
|
# Configuration and Utils
|
||||||
|
"click>=8.1.7",
|
||||||
|
"appdirs>=1.4.4",
|
||||||
|
"jsonref>=1.1.0",
|
||||||
|
"json-repair==0.25.2",
|
||||||
|
"tomli-w>=1.1.0",
|
||||||
|
"tomli>=2.0.2",
|
||||||
|
"blinker>=1.9.0",
|
||||||
|
"json5>=0.10.0",
|
||||||
|
"portalocker==2.7.0",
|
||||||
|
"chromadb~=1.1.0",
|
||||||
|
"pydantic-settings>=2.10.1",
|
||||||
|
"uv>=0.4.25",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
tools = [
|
||||||
|
"crewai-tools",
|
||||||
|
]
|
||||||
|
embeddings = [
|
||||||
|
"tiktoken~=0.8.0"
|
||||||
|
]
|
||||||
|
pdfplumber = [
|
||||||
|
"pdfplumber>=0.11.4",
|
||||||
|
]
|
||||||
|
pandas = [
|
||||||
|
"pandas>=2.2.3",
|
||||||
|
]
|
||||||
|
openpyxl = [
|
||||||
|
"openpyxl>=3.1.5",
|
||||||
|
]
|
||||||
|
mem0 = ["mem0ai>=0.1.94"]
|
||||||
|
docling = [
|
||||||
|
"docling>=2.12.0",
|
||||||
|
]
|
||||||
|
aisuite = [
|
||||||
|
"aisuite>=0.1.10",
|
||||||
|
]
|
||||||
|
qdrant = [
|
||||||
|
"qdrant-client[fastembed]>=1.14.3",
|
||||||
|
]
|
||||||
|
aws = [
|
||||||
|
"boto3>=1.40.38",
|
||||||
|
]
|
||||||
|
watson = [
|
||||||
|
"ibm-watsonx-ai>=1.3.39",
|
||||||
|
]
|
||||||
|
voyageai = [
|
||||||
|
"voyageai>=0.3.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
crewai = "crewai.cli.cli:crewai"
|
||||||
|
|
||||||
|
[project.urls]
|
||||||
|
Homepage = "https://crewai.com"
|
||||||
|
Documentation = "https://docs.crewai.com"
|
||||||
|
Repository = "https://github.com/crewAIInc/crewAI"
|
||||||
|
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
testpaths = ["tests"]
|
||||||
|
asyncio_mode = "strict"
|
||||||
|
asyncio_default_fixture_loop_scope = "function"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["hatchling"]
|
||||||
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[tool.hatch.version]
|
||||||
|
path = "src/crewai/__init__.py"
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = ["src/crewai"]
|
||||||
@@ -40,7 +40,7 @@ def _suppress_pydantic_deprecation_warnings() -> None:
|
|||||||
|
|
||||||
_suppress_pydantic_deprecation_warnings()
|
_suppress_pydantic_deprecation_warnings()
|
||||||
|
|
||||||
__version__ = "0.201.1"
|
__version__ = "1.0.0a0"
|
||||||
_telemetry_submitted = False
|
_telemetry_submitted = False
|
||||||
|
|
||||||
|
|
||||||
@@ -5,12 +5,13 @@ from collections.abc import Callable, Sequence
|
|||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
Literal,
|
Literal,
|
||||||
|
cast,
|
||||||
)
|
)
|
||||||
|
|
||||||
from pydantic import Field, InstanceOf, PrivateAttr, model_validator
|
from pydantic import Field, InstanceOf, PrivateAttr, model_validator
|
||||||
|
|
||||||
from crewai.agents import CacheHandler
|
from crewai.agents import CacheHandler
|
||||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
from crewai.agents.agent_builder.base_agent import BaseAgent, PlatformAppOrAction
|
||||||
from crewai.agents.crew_agent_executor import CrewAgentExecutor
|
from crewai.agents.crew_agent_executor import CrewAgentExecutor
|
||||||
from crewai.events.event_bus import crewai_event_bus
|
from crewai.events.event_bus import crewai_event_bus
|
||||||
from crewai.events.types.agent_events import (
|
from crewai.events.types.agent_events import (
|
||||||
@@ -78,6 +79,7 @@ class Agent(BaseAgent):
|
|||||||
step_callback: Callback to be executed after each step of the agent execution.
|
step_callback: Callback to be executed after each step of the agent execution.
|
||||||
knowledge_sources: Knowledge sources for the agent.
|
knowledge_sources: Knowledge sources for the agent.
|
||||||
embedder: Embedder configuration for the agent.
|
embedder: Embedder configuration for the agent.
|
||||||
|
apps: List of applications that the agent can access through CrewAI Platform.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_times_executed: int = PrivateAttr(default=0)
|
_times_executed: int = PrivateAttr(default=0)
|
||||||
@@ -174,7 +176,7 @@ class Agent(BaseAgent):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@model_validator(mode="before")
|
@model_validator(mode="before")
|
||||||
def validate_from_repository(cls, v): # noqa: N805
|
def validate_from_repository(cls, v): # noqa: N805
|
||||||
if v is not None and (from_repository := v.get("from_repository")):
|
if v is not None and (from_repository := v.get("from_repository")):
|
||||||
return load_agent_from_repository(from_repository) | v
|
return load_agent_from_repository(from_repository) | v
|
||||||
return v
|
return v
|
||||||
@@ -271,11 +273,7 @@ class Agent(BaseAgent):
|
|||||||
# Add the reasoning plan to the task description
|
# Add the reasoning plan to the task description
|
||||||
task.description += f"\n\nReasoning Plan:\n{reasoning_output.plan.plan}"
|
task.description += f"\n\nReasoning Plan:\n{reasoning_output.plan.plan}"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if hasattr(self, "_logger"):
|
self._logger.log("error", f"Error during reasoning process: {e!s}")
|
||||||
self._logger.log("error", f"Error during reasoning process: {e!s}")
|
|
||||||
else:
|
|
||||||
print(f"Error during reasoning process: {e!s}")
|
|
||||||
|
|
||||||
self._inject_date_to_task(task)
|
self._inject_date_to_task(task)
|
||||||
|
|
||||||
if self.tools_handler:
|
if self.tools_handler:
|
||||||
@@ -327,7 +325,7 @@ class Agent(BaseAgent):
|
|||||||
agent=self,
|
agent=self,
|
||||||
task=task,
|
task=task,
|
||||||
)
|
)
|
||||||
memory = contextual_memory.build_context_for_task(task, context) # type: ignore[arg-type]
|
memory = contextual_memory.build_context_for_task(task, context or "")
|
||||||
if memory.strip() != "":
|
if memory.strip() != "":
|
||||||
task_prompt += self.i18n.slice("memory").format(memory=memory)
|
task_prompt += self.i18n.slice("memory").format(memory=memory)
|
||||||
|
|
||||||
@@ -579,7 +577,7 @@ class Agent(BaseAgent):
|
|||||||
agent=self,
|
agent=self,
|
||||||
crew=self.crew,
|
crew=self.crew,
|
||||||
tools=parsed_tools,
|
tools=parsed_tools,
|
||||||
prompt=prompt, # type: ignore[arg-type]
|
prompt=cast(dict[str, str], prompt),
|
||||||
original_tools=raw_tools,
|
original_tools=raw_tools,
|
||||||
stop_words=stop_words,
|
stop_words=stop_words,
|
||||||
max_iter=self.max_iter,
|
max_iter=self.max_iter,
|
||||||
@@ -599,6 +597,17 @@ class Agent(BaseAgent):
|
|||||||
agent_tools = AgentTools(agents=agents)
|
agent_tools = AgentTools(agents=agents)
|
||||||
return agent_tools.tools()
|
return agent_tools.tools()
|
||||||
|
|
||||||
|
def get_platform_tools(self, apps: list[PlatformAppOrAction]) -> list[BaseTool]:
|
||||||
|
try:
|
||||||
|
from crewai_tools import ( # type: ignore[import-not-found]
|
||||||
|
CrewaiPlatformTools, # type: ignore[import-untyped]
|
||||||
|
)
|
||||||
|
|
||||||
|
return CrewaiPlatformTools(apps=apps)
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.log("error", f"Error getting platform tools: {e!s}")
|
||||||
|
return []
|
||||||
|
|
||||||
def get_multimodal_tools(self) -> Sequence[BaseTool]:
|
def get_multimodal_tools(self) -> Sequence[BaseTool]:
|
||||||
from crewai.tools.agent_tools.add_image_tool import AddImageTool
|
from crewai.tools.agent_tools.add_image_tool import AddImageTool
|
||||||
|
|
||||||
@@ -606,7 +615,9 @@ class Agent(BaseAgent):
|
|||||||
|
|
||||||
def get_code_execution_tools(self):
|
def get_code_execution_tools(self):
|
||||||
try:
|
try:
|
||||||
from crewai_tools import CodeInterpreterTool # type: ignore
|
from crewai_tools import ( # type: ignore[import-not-found]
|
||||||
|
CodeInterpreterTool,
|
||||||
|
)
|
||||||
|
|
||||||
# Set the unsafe_mode based on the code_execution_mode attribute
|
# Set the unsafe_mode based on the code_execution_mode attribute
|
||||||
unsafe_mode = self.code_execution_mode == "unsafe"
|
unsafe_mode = self.code_execution_mode == "unsafe"
|
||||||
@@ -695,14 +706,15 @@ class Agent(BaseAgent):
|
|||||||
|
|
||||||
def _validate_docker_installation(self) -> None:
|
def _validate_docker_installation(self) -> None:
|
||||||
"""Check if Docker is installed and running."""
|
"""Check if Docker is installed and running."""
|
||||||
if not shutil.which("docker"):
|
docker_path = shutil.which("docker")
|
||||||
|
if not docker_path:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f"Docker is not installed. Please install Docker to use code execution with agent: {self.role}"
|
f"Docker is not installed. Please install Docker to use code execution with agent: {self.role}"
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
subprocess.run(
|
subprocess.run( # noqa: S603
|
||||||
["/usr/bin/docker", "info"],
|
[docker_path, "info"],
|
||||||
check=True,
|
check=True,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
@@ -711,6 +723,10 @@ class Agent(BaseAgent):
|
|||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f"Docker is not running. Please start Docker to use code execution with agent: {self.role}"
|
f"Docker is not running. Please start Docker to use code execution with agent: {self.role}"
|
||||||
) from e
|
) from e
|
||||||
|
except subprocess.TimeoutExpired as e:
|
||||||
|
raise RuntimeError(
|
||||||
|
f"Docker command timed out. Please check your Docker installation for agent: {self.role}"
|
||||||
|
) from e
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"Agent(role={self.role}, goal={self.goal}, backstory={self.backstory})"
|
return f"Agent(role={self.role}, goal={self.goal}, backstory={self.backstory})"
|
||||||
@@ -3,7 +3,7 @@ from abc import ABC, abstractmethod
|
|||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from copy import copy as shallow_copy
|
from copy import copy as shallow_copy
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
from typing import Any, TypeVar
|
from typing import Any, Literal, TypeVar
|
||||||
|
|
||||||
from pydantic import (
|
from pydantic import (
|
||||||
UUID4,
|
UUID4,
|
||||||
@@ -31,6 +31,27 @@ from crewai.utilities.string_utils import interpolate_only
|
|||||||
|
|
||||||
T = TypeVar("T", bound="BaseAgent")
|
T = TypeVar("T", bound="BaseAgent")
|
||||||
|
|
||||||
|
PlatformApp = Literal[
|
||||||
|
"asana",
|
||||||
|
"box",
|
||||||
|
"clickup",
|
||||||
|
"github",
|
||||||
|
"gmail",
|
||||||
|
"google_calendar",
|
||||||
|
"google_sheets",
|
||||||
|
"hubspot",
|
||||||
|
"jira",
|
||||||
|
"linear",
|
||||||
|
"notion",
|
||||||
|
"salesforce",
|
||||||
|
"shopify",
|
||||||
|
"slack",
|
||||||
|
"stripe",
|
||||||
|
"zendesk",
|
||||||
|
]
|
||||||
|
|
||||||
|
PlatformAppOrAction = PlatformApp | str
|
||||||
|
|
||||||
|
|
||||||
class BaseAgent(ABC, BaseModel):
|
class BaseAgent(ABC, BaseModel):
|
||||||
"""Abstract Base Class for all third party agents compatible with CrewAI.
|
"""Abstract Base Class for all third party agents compatible with CrewAI.
|
||||||
@@ -41,11 +62,11 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
goal (str): Objective of the agent.
|
goal (str): Objective of the agent.
|
||||||
backstory (str): Backstory of the agent.
|
backstory (str): Backstory of the agent.
|
||||||
cache (bool): Whether the agent should use a cache for tool usage.
|
cache (bool): Whether the agent should use a cache for tool usage.
|
||||||
config (Optional[Dict[str, Any]]): Configuration for the agent.
|
config (dict[str, Any] | None): Configuration for the agent.
|
||||||
verbose (bool): Verbose mode for the Agent Execution.
|
verbose (bool): Verbose mode for the Agent Execution.
|
||||||
max_rpm (Optional[int]): Maximum number of requests per minute for the agent execution.
|
max_rpm (int | None): Maximum number of requests per minute for the agent execution.
|
||||||
allow_delegation (bool): Allow delegation of tasks to agents.
|
allow_delegation (bool): Allow delegation of tasks to agents.
|
||||||
tools (Optional[List[Any]]): Tools at the agent's disposal.
|
tools (list[Any] | None): Tools at the agent's disposal.
|
||||||
max_iter (int): Maximum iterations for an agent to execute a task.
|
max_iter (int): Maximum iterations for an agent to execute a task.
|
||||||
agent_executor (InstanceOf): An instance of the CrewAgentExecutor class.
|
agent_executor (InstanceOf): An instance of the CrewAgentExecutor class.
|
||||||
llm (Any): Language model that will run the agent.
|
llm (Any): Language model that will run the agent.
|
||||||
@@ -57,18 +78,22 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
knowledge_sources: Knowledge sources for the agent.
|
knowledge_sources: Knowledge sources for the agent.
|
||||||
knowledge_storage: Custom knowledge storage for the agent.
|
knowledge_storage: Custom knowledge storage for the agent.
|
||||||
security_config: Security configuration for the agent, including fingerprinting.
|
security_config: Security configuration for the agent, including fingerprinting.
|
||||||
|
apps: List of enterprise applications that the agent can access through CrewAI Enterprise Tools.
|
||||||
|
actions: List of actions that the agent can access through CrewAI Enterprise Tools.
|
||||||
|
|
||||||
|
|
||||||
Methods:
|
Methods:
|
||||||
execute_task(task: Any, context: Optional[str] = None, tools: Optional[List[BaseTool]] = None) -> str:
|
execute_task(task: Any, context: str | None = None, tools: list[BaseTool] | None = None) -> str:
|
||||||
Abstract method to execute a task.
|
Abstract method to execute a task.
|
||||||
create_agent_executor(tools=None) -> None:
|
create_agent_executor(tools=None) -> None:
|
||||||
Abstract method to create an agent executor.
|
Abstract method to create an agent executor.
|
||||||
get_delegation_tools(agents: List["BaseAgent"]):
|
get_delegation_tools(agents: list["BaseAgent"]):
|
||||||
Abstract method to set the agents task tools for handling delegation and question asking to other agents in crew.
|
Abstract method to set the agents task tools for handling delegation and question asking to other agents in crew.
|
||||||
|
get_platform_tools(apps: list[PlatformAppOrAction]):
|
||||||
|
Abstract method to get platform tools for the specified list of applications and/or application/action combinations.
|
||||||
get_output_converter(llm, model, instructions):
|
get_output_converter(llm, model, instructions):
|
||||||
Abstract method to get the converter class for the agent to create json/pydantic outputs.
|
Abstract method to get the converter class for the agent to create json/pydantic outputs.
|
||||||
interpolate_inputs(inputs: Dict[str, Any]) -> None:
|
interpolate_inputs(inputs: dict[str, Any]) -> None:
|
||||||
Interpolate inputs into the agent description and backstory.
|
Interpolate inputs into the agent description and backstory.
|
||||||
set_cache_handler(cache_handler: CacheHandler) -> None:
|
set_cache_handler(cache_handler: CacheHandler) -> None:
|
||||||
Set the cache handler for the agent.
|
Set the cache handler for the agent.
|
||||||
@@ -161,6 +186,10 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
default=None,
|
default=None,
|
||||||
description="Knowledge configuration for the agent such as limits and threshold",
|
description="Knowledge configuration for the agent such as limits and threshold",
|
||||||
)
|
)
|
||||||
|
apps: list[PlatformAppOrAction] | None = Field(
|
||||||
|
default=None,
|
||||||
|
description="List of applications or application/action combinations that the agent can access through CrewAI Platform. Can contain app names (e.g., 'gmail') or specific actions (e.g., 'gmail/send_email')",
|
||||||
|
)
|
||||||
|
|
||||||
@model_validator(mode="before")
|
@model_validator(mode="before")
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -196,6 +225,24 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
)
|
)
|
||||||
return processed_tools
|
return processed_tools
|
||||||
|
|
||||||
|
@field_validator("apps")
|
||||||
|
@classmethod
|
||||||
|
def validate_apps(
|
||||||
|
cls, apps: list[PlatformAppOrAction] | None
|
||||||
|
) -> list[PlatformAppOrAction] | None:
|
||||||
|
if not apps:
|
||||||
|
return apps
|
||||||
|
|
||||||
|
validated_apps = []
|
||||||
|
for app in apps:
|
||||||
|
if app.count("/") > 1:
|
||||||
|
raise ValueError(
|
||||||
|
f"Invalid app format '{app}'. Apps can only have one '/' for app/action format (e.g., 'gmail/send_email')"
|
||||||
|
)
|
||||||
|
validated_apps.append(app)
|
||||||
|
|
||||||
|
return list(set(validated_apps))
|
||||||
|
|
||||||
@model_validator(mode="after")
|
@model_validator(mode="after")
|
||||||
def validate_and_set_attributes(self):
|
def validate_and_set_attributes(self):
|
||||||
# Validate required fields
|
# Validate required fields
|
||||||
@@ -266,6 +313,10 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
def get_delegation_tools(self, agents: list["BaseAgent"]) -> list[BaseTool]:
|
def get_delegation_tools(self, agents: list["BaseAgent"]) -> list[BaseTool]:
|
||||||
"""Set the task tools that init BaseAgenTools class."""
|
"""Set the task tools that init BaseAgenTools class."""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_platform_tools(self, apps: list[PlatformAppOrAction]) -> list[BaseTool]:
|
||||||
|
"""Get platform tools for the specified list of applications and/or application/action combinations."""
|
||||||
|
|
||||||
def copy(self: T) -> T: # type: ignore # Signature of "copy" incompatible with supertype "BaseModel"
|
def copy(self: T) -> T: # type: ignore # Signature of "copy" incompatible with supertype "BaseModel"
|
||||||
"""Create a deep copy of the Agent."""
|
"""Create a deep copy of the Agent."""
|
||||||
exclude = {
|
exclude = {
|
||||||
@@ -282,6 +333,8 @@ class BaseAgent(ABC, BaseModel):
|
|||||||
"knowledge_sources",
|
"knowledge_sources",
|
||||||
"knowledge_storage",
|
"knowledge_storage",
|
||||||
"knowledge",
|
"knowledge",
|
||||||
|
"apps",
|
||||||
|
"actions",
|
||||||
}
|
}
|
||||||
|
|
||||||
# Copy llm
|
# Copy llm
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
from crewai import Agent, Crew, Process, Task
|
from crewai import Agent, Crew, Process, Task
|
||||||
from crewai.project import CrewBase, agent, crew, task
|
|
||||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
from crewai.agents.agent_builder.base_agent import BaseAgent
|
||||||
from typing import List
|
from crewai.project import CrewBase, agent, crew, task
|
||||||
|
|
||||||
# If you want to run a snippet of code before or after the crew starts,
|
# If you want to run a snippet of code before or after the crew starts,
|
||||||
# you can use the @before_kickoff and @after_kickoff decorators
|
# you can use the @before_kickoff and @after_kickoff decorators
|
||||||
@@ -12,8 +11,8 @@ from typing import List
|
|||||||
class PoemCrew:
|
class PoemCrew:
|
||||||
"""Poem Crew"""
|
"""Poem Crew"""
|
||||||
|
|
||||||
agents: List[BaseAgent]
|
agents: list[BaseAgent]
|
||||||
tasks: List[Task]
|
tasks: list[Task]
|
||||||
|
|
||||||
# Learn more about YAML configuration files here:
|
# Learn more about YAML configuration files here:
|
||||||
# Agents: https://docs.crewai.com/concepts/agents#yaml-configuration-recommended
|
# Agents: https://docs.crewai.com/concepts/agents#yaml-configuration-recommended
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
from typing import Type
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from crewai.tools import BaseTool
|
from crewai.tools import BaseTool
|
||||||
from pydantic import BaseModel, Field
|
|
||||||
|
|
||||||
|
|
||||||
class MyCustomToolInput(BaseModel):
|
class MyCustomToolInput(BaseModel):
|
||||||
@@ -12,10 +11,8 @@ class MyCustomToolInput(BaseModel):
|
|||||||
|
|
||||||
class MyCustomTool(BaseTool):
|
class MyCustomTool(BaseTool):
|
||||||
name: str = "Name of my tool"
|
name: str = "Name of my tool"
|
||||||
description: str = (
|
description: str = "Clear description for what this tool is useful for, your agent will need this information to use it."
|
||||||
"Clear description for what this tool is useful for, your agent will need this information to use it."
|
args_schema: type[BaseModel] = MyCustomToolInput
|
||||||
)
|
|
||||||
args_schema: Type[BaseModel] = MyCustomToolInput
|
|
||||||
|
|
||||||
def _run(self, argument: str) -> str:
|
def _run(self, argument: str) -> str:
|
||||||
# Implementation goes here
|
# Implementation goes here
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user