lazychih114
commited on
Commit
·
0c55394
1
Parent(s):
d191efd
update readme
Browse files- README.md +62 -2
- licenses/license_template.txt +13 -0
- licenses/update_license.py +132 -0
README.md
CHANGED
@@ -2,10 +2,43 @@
|
|
2 |
🦉 OWL: Optimized Workforce Learning for General Multi-Agent Assistance in Real-World Task Automation
|
3 |
</h1>
|
4 |
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
OWL achieves 58.18 average score on GAIA benchmark and ranks #1 among open-source frameworks.
|
|
|
|
|
|
|
|
|
7 |
|
8 |
-
Our vision is to revolutionize how AI agents collaborate to solve real-world tasks. By leveraging dynamic agent interactions, OWL enables more natural, efficient, and robust task automation across diverse domains.
|
9 |
|
10 |
<!-- # Key Features -->
|
11 |
|
@@ -80,3 +113,30 @@ python run_gaia_roleplaying.py
|
|
80 |
|
81 |
|
82 |
# Cite -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
🦉 OWL: Optimized Workforce Learning for General Multi-Agent Assistance in Real-World Task Automation
|
3 |
</h1>
|
4 |
|
5 |
+
|
6 |
+
<div align="center">
|
7 |
+
|
8 |
+
[![Documentation][docs-image]][docs-url]
|
9 |
+
[![Discord][discord-image]][discord-url]
|
10 |
+
[![X][x-image]][x-url]
|
11 |
+
[![Reddit][reddit-image]][reddit-url]
|
12 |
+
[![Wechat][wechat-image]][wechat-url]
|
13 |
+
[![Hugging Face][huggingface-image]][huggingface-url]
|
14 |
+
[![Star][star-image]][star-url]
|
15 |
+
[![Package License][package-license-image]][package-license-url]
|
16 |
+
|
17 |
+
</div>
|
18 |
+
|
19 |
+
|
20 |
+
<hr>
|
21 |
+
|
22 |
+
<div align="center">
|
23 |
+
<h4 align="center">
|
24 |
+
|
25 |
+
[Community](https://github.com/camel-ai/camel#community) |
|
26 |
+
[Installation](https://github.com/camel-ai/camel#installation) |
|
27 |
+
[Examples](https://github.com/camel-ai/camel/tree/HEAD/examples) |
|
28 |
+
[Paper](https://arxiv.org/abs/2303.17760) |
|
29 |
+
[Citation](https://github.com/camel-ai/camel#citation) |
|
30 |
+
[Contributing](https://github.com/camel-ai/camel#contributing-to-camel-) |
|
31 |
+
[CAMEL-AI](https://www.camel-ai.org/)
|
32 |
+
|
33 |
+
</h4>
|
34 |
+
|
35 |
+
<p style="line-height: 1.5; text-align: center;"> 🦉 OWL is a cutting-edge framework for multi-agent collaboration that pushes the boundaries of task automation, built on top of the [CAMEL-AI Framework](https://github.com/camel-ai/camel).
|
36 |
OWL achieves 58.18 average score on GAIA benchmark and ranks #1 among open-source frameworks.
|
37 |
+
Our vision is to revolutionize how AI agents collaborate to solve real-world tasks. By leveraging dynamic agent interactions, OWL enables more natural, efficient, and robust task automation across diverse domains.</p>
|
38 |
+
<br>
|
39 |
+
|
40 |
+
|
41 |
|
|
|
42 |
|
43 |
<!-- # Key Features -->
|
44 |
|
|
|
113 |
|
114 |
|
115 |
# Cite -->
|
116 |
+
|
117 |
+
# 📄 License
|
118 |
+
|
119 |
+
The source code is licensed under Apache 2.0.
|
120 |
+
|
121 |
+
|
122 |
+
[docs-image]: https://img.shields.io/badge/Documentation-EB3ECC
|
123 |
+
[docs-url]: https://camel-ai.github.io/camel/index.html
|
124 |
+
[star-image]: https://img.shields.io/github/stars/camel-ai/owl?label=stars&logo=github&color=brightgreen
|
125 |
+
[star-url]: https://github.com/camel-ai/camel/stargazers
|
126 |
+
[package-license-image]: https://img.shields.io/badge/License-Apache_2.0-blue.svg
|
127 |
+
[package-license-url]: https://github.com/camel-ai/camel/blob/master/licenses/LICENSE
|
128 |
+
|
129 |
+
[colab-url]: https://colab.research.google.com/drive/1AzP33O8rnMW__7ocWJhVBXjKziJXPtim?usp=sharing
|
130 |
+
[colab-image]: https://colab.research.google.com/assets/colab-badge.svg
|
131 |
+
[huggingface-url]: https://huggingface.co/camel-ai
|
132 |
+
[huggingface-image]: https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-CAMEL--AI-ffc107?color=ffc107&logoColor=white
|
133 |
+
[discord-url]: https://discord.camel-ai.org/
|
134 |
+
[discord-image]: https://img.shields.io/discord/1082486657678311454?logo=discord&labelColor=%20%235462eb&logoColor=%20%23f5f5f5&color=%20%235462eb
|
135 |
+
[wechat-url]: https://ghli.org/camel/wechat.png
|
136 |
+
[wechat-image]: https://img.shields.io/badge/WeChat-CamelAIOrg-brightgreen?logo=wechat&logoColor=white
|
137 |
+
[x-url]: https://x.com/CamelAIOrg
|
138 |
+
[x-image]: https://img.shields.io/twitter/follow/CamelAIOrg?style=social
|
139 |
+
[twitter-image]: https://img.shields.io/twitter/follow/CamelAIOrg?style=social&color=brightgreen&logo=twitter
|
140 |
+
[reddit-url]: https://www.reddit.com/r/CamelAI/
|
141 |
+
[reddit-image]: https://img.shields.io/reddit/subreddit-subscribers/CamelAI?style=plastic&logo=reddit&label=r%2FCAMEL&labelColor=white
|
142 |
+
[ambassador-url]: https://www.camel-ai.org/community
|
licenses/license_template.txt
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
2 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
3 |
+
# you may not use this file except in compliance with the License.
|
4 |
+
# You may obtain a copy of the License at
|
5 |
+
#
|
6 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
7 |
+
#
|
8 |
+
# Unless required by applicable law or agreed to in writing, software
|
9 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
10 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
11 |
+
# See the License for the specific language governing permissions and
|
12 |
+
# limitations under the License.
|
13 |
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
licenses/update_license.py
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
2 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
3 |
+
# you may not use this file except in compliance with the License.
|
4 |
+
# You may obtain a copy of the License at
|
5 |
+
#
|
6 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
7 |
+
#
|
8 |
+
# Unless required by applicable law or agreed to in writing, software
|
9 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
10 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
11 |
+
# See the License for the specific language governing permissions and
|
12 |
+
# limitations under the License.
|
13 |
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
14 |
+
import os
|
15 |
+
import re
|
16 |
+
import sys
|
17 |
+
from pathlib import Path
|
18 |
+
from typing import List
|
19 |
+
|
20 |
+
|
21 |
+
# The license template file is hard-coded with specific start and end lines
|
22 |
+
def fine_license_start_line(lines: List[str], start_with: str) -> int:
|
23 |
+
for i in range(len(lines)):
|
24 |
+
if lines[i].startswith(start_with):
|
25 |
+
return i
|
26 |
+
return None
|
27 |
+
|
28 |
+
|
29 |
+
def find_license_end_line(lines: List[str], start_with: str) -> int:
|
30 |
+
for i in range(len(lines) - 1, -1, -1):
|
31 |
+
if lines[i].startswith(start_with):
|
32 |
+
return i
|
33 |
+
return None
|
34 |
+
|
35 |
+
|
36 |
+
def update_license_in_file(
|
37 |
+
file_path: str,
|
38 |
+
license_template_path: str,
|
39 |
+
start_line_start_with: str,
|
40 |
+
end_line_start_with: str,
|
41 |
+
) -> bool:
|
42 |
+
with open(
|
43 |
+
file_path, 'r', encoding='utf-8'
|
44 |
+
) as f: # for windows compatibility
|
45 |
+
content = f.read()
|
46 |
+
|
47 |
+
with open(license_template_path, 'r', encoding='utf-8') as f:
|
48 |
+
new_license = f.read().strip()
|
49 |
+
|
50 |
+
maybe_existing_licenses = re.findall(
|
51 |
+
r'^#.*?(?=\n)', content, re.MULTILINE | re.DOTALL
|
52 |
+
)
|
53 |
+
start_index = fine_license_start_line(
|
54 |
+
maybe_existing_licenses, start_line_start_with
|
55 |
+
)
|
56 |
+
end_index = find_license_end_line(
|
57 |
+
maybe_existing_licenses, end_line_start_with
|
58 |
+
)
|
59 |
+
if start_index is not None and end_index is not None:
|
60 |
+
maybe_existing_licenses = maybe_existing_licenses[
|
61 |
+
start_index : end_index + 1
|
62 |
+
]
|
63 |
+
else:
|
64 |
+
maybe_existing_licenses = None
|
65 |
+
if maybe_existing_licenses:
|
66 |
+
maybe_old_licenses = '\n'.join(maybe_existing_licenses)
|
67 |
+
if maybe_old_licenses.strip() != new_license.strip():
|
68 |
+
replaced_content = content.replace(maybe_old_licenses, new_license)
|
69 |
+
with open(file_path, 'w') as f:
|
70 |
+
f.write(replaced_content)
|
71 |
+
print(f'Replaced license in {file_path}')
|
72 |
+
return True
|
73 |
+
else:
|
74 |
+
return False
|
75 |
+
else:
|
76 |
+
with open(file_path, 'w') as f:
|
77 |
+
f.write(new_license + '\n' + content)
|
78 |
+
print(f'Added license to {file_path}')
|
79 |
+
return True
|
80 |
+
|
81 |
+
|
82 |
+
def update_license_in_directory(
|
83 |
+
directory_path: str,
|
84 |
+
license_template_path: str,
|
85 |
+
start_line_start_with: str,
|
86 |
+
end_line_start_with: str,
|
87 |
+
) -> None:
|
88 |
+
# Check if directory exists
|
89 |
+
if not os.path.isdir(directory_path):
|
90 |
+
raise NotADirectoryError(f'{directory_path} is not a directory')
|
91 |
+
# Check if license template exists
|
92 |
+
if not os.path.isfile(license_template_path):
|
93 |
+
raise FileNotFoundError(f'{license_template_path} not found')
|
94 |
+
|
95 |
+
file_count = 0
|
96 |
+
for py_files in Path(directory_path).rglob("*.py"):
|
97 |
+
if py_files.name.startswith('.'):
|
98 |
+
continue
|
99 |
+
if any(part.startswith('.') for part in py_files.parts):
|
100 |
+
continue
|
101 |
+
if update_license_in_file(
|
102 |
+
py_files,
|
103 |
+
license_template_path,
|
104 |
+
start_line_start_with,
|
105 |
+
end_line_start_with,
|
106 |
+
):
|
107 |
+
file_count += 1
|
108 |
+
|
109 |
+
print(f'License updated in {file_count} files')
|
110 |
+
|
111 |
+
|
112 |
+
if __name__ == '__main__':
|
113 |
+
if len(sys.argv) < 3:
|
114 |
+
print(
|
115 |
+
"Usage from command line: "
|
116 |
+
"python update_license.py <directory_path> <license_template_path>"
|
117 |
+
"No valid input arguments found, please enter manually."
|
118 |
+
)
|
119 |
+
directory_path = input("Enter directory path: ")
|
120 |
+
license_template_path = input("Enter license template path: ")
|
121 |
+
else:
|
122 |
+
directory_path = sys.argv[1]
|
123 |
+
license_template_path = sys.argv[2]
|
124 |
+
|
125 |
+
start_line_start_with = "# ========= Copyright"
|
126 |
+
end_line_start_with = "# ========= Copyright"
|
127 |
+
update_license_in_directory(
|
128 |
+
directory_path,
|
129 |
+
license_template_path,
|
130 |
+
start_line_start_with,
|
131 |
+
end_line_start_with,
|
132 |
+
)
|