commit
636bc8702d
|
@ -139,7 +139,7 @@ dmypy.json
|
||||||
cython_debug/
|
cython_debug/
|
||||||
|
|
||||||
# PyCharm
|
# PyCharm
|
||||||
#.idea/
|
.idea/
|
||||||
|
|
||||||
# Interpreter
|
# Interpreter
|
||||||
interpreter_workspace/
|
interpreter_workspace/
|
||||||
|
@ -148,4 +148,4 @@ interpreter_workspace/
|
||||||
archive/
|
archive/
|
||||||
savedir/
|
savedir/
|
||||||
output/
|
output/
|
||||||
tool_output/
|
tool_output/
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
feedback@huggingface.co.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.1, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||||
|
[https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
|
@ -0,0 +1,98 @@
|
||||||
|
<!---
|
||||||
|
Copyright 2025 The HuggingFace Team. All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Contribute to smolagents
|
||||||
|
|
||||||
|
Everyone is welcome to contribute, and we value everybody's contribution. Code
|
||||||
|
contributions are not the only way to help the community. Answering questions, helping
|
||||||
|
others, and improving the documentation are also immensely valuable.
|
||||||
|
|
||||||
|
It also helps us if you spread the word! Reference the library in blog posts
|
||||||
|
about the awesome projects it made possible, shout out on Twitter every time it has
|
||||||
|
helped you, or simply ⭐️ the repository to say thank you.
|
||||||
|
|
||||||
|
However you choose to contribute, please be mindful and respect our
|
||||||
|
[code of conduct](https://github.com/huggingface/smolagents/blob/main/CODE_OF_CONDUCT.md).
|
||||||
|
|
||||||
|
**This guide was heavily inspired by the awesome [scikit-learn guide to contributing](https://github.com/scikit-learn/scikit-learn/blob/main/CONTRIBUTING.md).**
|
||||||
|
|
||||||
|
## Ways to contribute
|
||||||
|
|
||||||
|
There are several ways you can contribute to smolagents.
|
||||||
|
|
||||||
|
* Fix outstanding issues with the existing code.
|
||||||
|
* Submit issues related to bugs or desired new features.
|
||||||
|
* Contribute to the examples or to the documentation.
|
||||||
|
|
||||||
|
> All contributions are equally valuable to the community. 🥰
|
||||||
|
|
||||||
|
## Fixing outstanding issues
|
||||||
|
|
||||||
|
If you notice an issue with the existing code and have a fix in mind, feel free to [start contributing](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) and open
|
||||||
|
a Pull Request!
|
||||||
|
|
||||||
|
## Submitting a bug-related issue or feature request
|
||||||
|
|
||||||
|
Do your best to follow these guidelines when submitting a bug-related issue or a feature
|
||||||
|
request. It will make it easier for us to come back to you quickly and with good
|
||||||
|
feedback.
|
||||||
|
|
||||||
|
### Did you find a bug?
|
||||||
|
|
||||||
|
The smolagents library is robust and reliable thanks to users who report the problems they encounter.
|
||||||
|
|
||||||
|
Before you report an issue, we would really appreciate it if you could **make sure the bug was not
|
||||||
|
already reported** (use the search bar on GitHub under Issues). Your issue should also be related to bugs in the
|
||||||
|
library itself, and not your code.
|
||||||
|
|
||||||
|
Once you've confirmed the bug hasn't already been reported, please include the following information in your issue so
|
||||||
|
we can quickly resolve it:
|
||||||
|
|
||||||
|
* Your **OS type and version**, as well as your environment versions (versions of rust, python, and dependencies).
|
||||||
|
* A short, self-contained, code snippet that allows us to reproduce the bug.
|
||||||
|
* The *full* traceback if an exception is raised.
|
||||||
|
* Attach any other additional information, like screenshots, you think may help.
|
||||||
|
|
||||||
|
### Do you want a new feature?
|
||||||
|
|
||||||
|
If there is a new feature you'd like to see in smolagents, please open an issue and describe:
|
||||||
|
|
||||||
|
1. What is the *motivation* behind this feature? Is it related to a problem or frustration with the library? Is it
|
||||||
|
a feature related to something you need for a project? Is it something you worked on and think it could benefit
|
||||||
|
the community?
|
||||||
|
|
||||||
|
Whatever it is, we'd love to hear about it!
|
||||||
|
|
||||||
|
2. Describe your requested feature in as much detail as possible. The more you can tell us about it, the better
|
||||||
|
we'll be able to help you.
|
||||||
|
3. Provide a *code snippet* that demonstrates the feature's usage.
|
||||||
|
4. If the feature is related to a paper, please include a link.
|
||||||
|
|
||||||
|
If your issue is well written we're already 80% of the way there by the time you create it.
|
||||||
|
|
||||||
|
## Do you want to add documentation?
|
||||||
|
|
||||||
|
We're always looking for improvements to the documentation that make it more clear and accurate. Please let us know
|
||||||
|
how the documentation can be improved such as typos and any content that is missing, unclear or inaccurate. We'll be
|
||||||
|
happy to make the changes or help you make a contribution if you're interested!
|
||||||
|
|
||||||
|
## I want to become a maintainer of the project. How do I get there?
|
||||||
|
|
||||||
|
Smolagents is a project led and managed by Hugging Face as an initial fork of Transformers Agents. We are more than
|
||||||
|
happy to have motivated individuals from other organizations join us as maintainers with the goal of helping Smolagents
|
||||||
|
make a dent in the world of Agents.
|
||||||
|
|
||||||
|
If you are such an individual (or organization), please reach out to us and let's collaborate.
|
|
@ -87,7 +87,7 @@ def get_weather_api(location: str, date_time: str) -> str:
|
||||||
|
|
||||||
Why is it bad?
|
Why is it bad?
|
||||||
- there's no precision of the format that should be used for `date_time`
|
- there's no precision of the format that should be used for `date_time`
|
||||||
- there's no detail on how location should
|
- there's no detail on how location should be specified.
|
||||||
- there's no logging mechanism tying to explicit failure cases like location not being in a proper format, or date_time not being properly formatted.
|
- there's no logging mechanism tying to explicit failure cases like location not being in a proper format, or date_time not being properly formatted.
|
||||||
- the output format is hard to understand
|
- the output format is hard to understand
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ Then you can also use less powerful models but guide them better.
|
||||||
|
|
||||||
Put yourself in the shoes of your model: if you were the model solving the task, would you struggle with the information available to you (from the system prompt + task formulation + tool description) ?
|
Put yourself in the shoes of your model: if you were the model solving the task, would you struggle with the information available to you (from the system prompt + task formulation + tool description) ?
|
||||||
|
|
||||||
Would you need some added clarifications?
|
Would you need some added clarifications?
|
||||||
|
|
||||||
To provide extra information, we do not recommend to change the system prompt right away: the default system prompt has many adjustments that you do not want to mess up except if you understand the prompt very well.
|
To provide extra information, we do not recommend to change the system prompt right away: the default system prompt has many adjustments that you do not want to mess up except if you understand the prompt very well.
|
||||||
Better ways to guide your LLM engine are:
|
Better ways to guide your LLM engine are:
|
||||||
|
|
|
@ -958,6 +958,12 @@ class CodeAgent(MultiStepAgent):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
error_msg = f"Code execution failed: {str(e)}"
|
error_msg = f"Code execution failed: {str(e)}"
|
||||||
|
if "Import of " in str(e) and " is not allowed" in str(e):
|
||||||
|
console.print(
|
||||||
|
"[bold red]Code execution failed due to an unauthorized import. Consider passing said import under additional_authorized_imports when initializing your CodeAgent."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
console.print("PLACEHOLDER" + str(e))
|
||||||
raise AgentExecutionError(error_msg)
|
raise AgentExecutionError(error_msg)
|
||||||
|
|
||||||
truncated_output = truncate_content(str(output))
|
truncated_output = truncate_content(str(output))
|
||||||
|
|
|
@ -829,7 +829,7 @@ def evaluate_ast(
|
||||||
The code to evaluate, as an abstract syntax tree.
|
The code to evaluate, as an abstract syntax tree.
|
||||||
state (`Dict[str, Any]`):
|
state (`Dict[str, Any]`):
|
||||||
A dictionary mapping variable names to values. The `state` is updated if need be when the evaluation
|
A dictionary mapping variable names to values. The `state` is updated if need be when the evaluation
|
||||||
encounters assignements.
|
encounters assignments.
|
||||||
static_tools (`Dict[str, Callable]`):
|
static_tools (`Dict[str, Callable]`):
|
||||||
Functions that may be called during the evaluation. Trying to change one of these static_tools will raise an error.
|
Functions that may be called during the evaluation. Trying to change one of these static_tools will raise an error.
|
||||||
custom_tools (`Dict[str, Callable]`):
|
custom_tools (`Dict[str, Callable]`):
|
||||||
|
@ -845,7 +845,7 @@ def evaluate_ast(
|
||||||
)
|
)
|
||||||
OPERATIONS_COUNT += 1
|
OPERATIONS_COUNT += 1
|
||||||
if isinstance(expression, ast.Assign):
|
if isinstance(expression, ast.Assign):
|
||||||
# Assignement -> we evaluate the assignment which should update the state
|
# Assignment -> we evaluate the assignment which should update the state
|
||||||
# We return the variable assigned as it may be used to determine the final result.
|
# We return the variable assigned as it may be used to determine the final result.
|
||||||
return evaluate_assign(expression, state, static_tools, custom_tools)
|
return evaluate_assign(expression, state, static_tools, custom_tools)
|
||||||
elif isinstance(expression, ast.AugAssign):
|
elif isinstance(expression, ast.AugAssign):
|
||||||
|
|
|
@ -130,6 +130,17 @@ final_answer("got an error")
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def fake_code_model_import(messages, stop_sequences=None) -> str:
|
||||||
|
return """
|
||||||
|
Thought: I can answer the question
|
||||||
|
Code:
|
||||||
|
```py
|
||||||
|
import numpy as np
|
||||||
|
final_answer("got an error")
|
||||||
|
```<end_code>
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def fake_code_functiondef(messages, stop_sequences=None) -> str:
|
def fake_code_functiondef(messages, stop_sequences=None) -> str:
|
||||||
prompt = str(messages)
|
prompt = str(messages)
|
||||||
if "special_marker" not in prompt:
|
if "special_marker" not in prompt:
|
||||||
|
@ -340,3 +351,13 @@ class AgentTests(unittest.TestCase):
|
||||||
assert (
|
assert (
|
||||||
"You can also give requests to team members." in manager_agent.system_prompt
|
"You can also give requests to team members." in manager_agent.system_prompt
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_code_agent_missing_import_triggers_advice_in_error_log(self):
|
||||||
|
agent = CodeAgent(tools=[], model=fake_code_model_import)
|
||||||
|
|
||||||
|
from smolagents.agents import console
|
||||||
|
|
||||||
|
with console.capture() as capture:
|
||||||
|
agent.run("Count to 3")
|
||||||
|
str_output = capture.get()
|
||||||
|
assert "import under additional_authorized_imports" in str_output
|
||||||
|
|
Loading…
Reference in New Issue