Retry reply
Why are these changes needed?
There are situations when I want to resample a message, instead of using one from a sequence of messages in the cache.
That is, sometimes I want to stop at some point in the middle of such sequence of cached messages, and fork the "history".
For that, I'd need to signal the agent.generate_reply() to not go along with the cache this time, but sample one from the API (assuming we are using openai) instead.
I've needed this feature in a couple of projects when I introduce some rule-based checks on a given reply, and if it doesn't comply them, I need to signal the next agent to generate a reply discarding the one it had in a previous reply. Another simple and gross solution would be the delete the whole cache, but that would remove the history of valid messages. So nope.
I introduced a use_cache argument in agent.generate_reply(..., use_cache) and all upstream locations. But... there are so many upstream locations I need to patch, which hints me that maybe I'm doing something wrong.
What do you guys think?
Related issue number
Checks
- [ ] I've included any doc changes needed for https://microsoft.github.io/autogen/. See https://microsoft.github.io/autogen/docs/Contribute#documentation to build and test documentation locally.
- [ ] I've added tests (if relevant) corresponding to the changes introduced in this PR.
- [ ] I've made sure all auto checks have passed.
I think instead of making these changes, you can take a look at the new cache module.
You can clear the cache (or use a new one) after each generate reply.
from autogen.cache import Cache
with Cache.disk(cache_seed=1) as cache:
agent.client_cache = cache
agent.generate_reply(…)
cache.clear() # or create a new one next time.
If you use the same cache_seed each time it will reuse the same cached responses from before.
I think instead of making these changes, you can take a look at the new cache module.
You can clear the cache (or use a new one) after each generate reply.
from autogen.cache import Cache with Cache.disk(cache_seed=1) as cache: agent.client_cache = cache agent.generate_reply(…) cache.clear() # or create a new one next time.If you use the same cache_seed each time it will reuse the same cached responses from before.
I think instead of making these changes, you can take a look at the new cache module.
You can clear the cache (or use a new one) after each generate reply.
from autogen.cache import Cache with Cache.disk(cache_seed=1) as cache: agent.client_cache = cache agent.generate_reply(…) cache.clear() # or create a new one next time.If you use the same cache_seed each time it will reuse the same cached responses from before.
Sir, this is the kind of solution I looking for. I already tested it on my pipeline 😀
Just to make sure I understand (I did some testings though), this creates an ephemeral cache, right? I mean, next time this block executes, it'll create an independent cache instance with seed=1, w/o remembering anything from the past instances of seed=1, right?
Btw, that clear() method must be used like cache.cache.cache.clear() because that autogen Cache class doesn't have a clear() method directly.
this creates an ephemeral cache, right? I mean, next time this block executes, it'll create an independent cache instance with seed=1, w/o remembering anything from the past instances of seed=1, right?
Actually if you use the same seed it will use the same cache instance. So the cache is not ephemeral. If you want to resample a specific response, just use different cache_seed, and pick one you want to continue the conversation. Cache is based on input messages.
Btw, that clear() method must be used like cache.cache.cache.clear() because that autogen Cache class doesn't have a clear() method directly.
Ahw you got me :D
Btw if you are interested you are welcome to write a tutorial chapter on caching. See #1702
Btw, that clear() method must be used like cache.cache.cache.clear() because that autogen Cache class doesn't have a clear() method directly.
Ahw you got me :D
Btw if you are interested you are welcome to write a tutorial chapter on caching. See #1702
Will take a look at the tutorial ticket!
@jimsrc do you want to put this PR to close for now? We can add more improvement in a future PR
⚠️ GitGuardian has uncovered 96 secrets following the scan of your pull request.
Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.
Since your pull request originates from a forked repository, GitGuardian is not able to associate the secrets uncovered with secret incidents on your GitGuardian dashboard. Skipping this check run and merging your pull request will create secret incidents on your GitGuardian dashboard.
🔎 Detected hardcoded secrets in your pull request
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 12853598 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | e43a86c78f3f947b6e142b3aaf36e7a9852f7078 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | bdb40d77d7be9ea42e5fa28f6e851edf549ef0af | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | 954ca451f949a4924578bb7e3e93c97ad4ba1dd5 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10404662 | Triggered | Generic CLI Secret | eff19acf1365e34fe17d9ac0939666f32b3ceda5 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 06a0a5ddb39fb3000e40cb4872741dead9fcb7e0 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 0524c774dda696855e9a8f87fe0b9ed96cce13f6 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | d7ea410501cb96bc97a203a0a95431541515f9cc | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | e43a86c78f3f947b6e142b3aaf36e7a9852f7078 | .github/workflows/dotnet-build.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 841ed315e2f19d79a6b86ed587eb6e0fc4a0c0da | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 802f099588bedf1d022b2bba5fb534635df8e6f1 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 9a484d8589761d58940e3c0b79215204ce6a23c1 | .github/workflows/dotnet-build.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | e973ac38ea4f7b36687ea03aa44f770d7e2ddcac | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 89650e74f572bbc60e9c24e04b4c601616e439c7 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | e07b06bc939353dee2afc6dd52c159d6cb3428d5 | .github/workflows/dotnet-release.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | abe4c419c45a244e2399508f9ffef606ce6a4685 | .github/workflows/dotnet-build.yml | View secret |
| 10404662 | Triggered | Generic CLI Secret | 7362fb9cf4f0a6b3e7ae4e97229afad655d5d87b | .github/workflows/dotnet-release.yml | View secret |
| 12853599 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10404694 | Triggered | Generic High Entropy Secret | e43a86c78f3f947b6e142b3aaf36e7a9852f7078 | test/oai/test_utils.py | View secret |
| 10404694 | Triggered | Generic High Entropy Secret | 954ca451f949a4924578bb7e3e93c97ad4ba1dd5 | test/oai/test_utils.py | View secret |
| 10404694 | Triggered | Generic High Entropy Secret | bdb40d77d7be9ea42e5fa28f6e851edf549ef0af | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | abad9ff4487444324d1916a6b94c8049b4cab9e7 | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | 954ca451f949a4924578bb7e3e93c97ad4ba1dd5 | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | c7bb588a684a038dbee7f9dc9afd6d44ce35ac3a | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | b97b99d4b2cfe735a7aa46258508d4a7cda9cad5 | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | e43a86c78f3f947b6e142b3aaf36e7a9852f7078 | test/oai/test_utils.py | View secret |
| 12853600 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 12853601 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10493810 | Triggered | Generic Password | 49e8053dd1e5456d3758b4a85f5721e9c9b12e16 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 501610b4fc0c649fa2b1cbf0fd72fa6f14f026d0 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 49e8053dd1e5456d3758b4a85f5721e9c9b12e16 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 501610b4fc0c649fa2b1cbf0fd72fa6f14f026d0 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | d422c63596fce7b84e0ef8a7bd6518d5f4336eaf | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 97fa339ac749b3c7d51f1b0fae156d41c02b214e | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 49e8053dd1e5456d3758b4a85f5721e9c9b12e16 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | d422c63596fce7b84e0ef8a7bd6518d5f4336eaf | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 97fa339ac749b3c7d51f1b0fae156d41c02b214e | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | d422c63596fce7b84e0ef8a7bd6518d5f4336eaf | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 97fa339ac749b3c7d51f1b0fae156d41c02b214e | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 501610b4fc0c649fa2b1cbf0fd72fa6f14f026d0 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | 954ca451f949a4924578bb7e3e93c97ad4ba1dd5 | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | bdb40d77d7be9ea42e5fa28f6e851edf549ef0af | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | e43a86c78f3f947b6e142b3aaf36e7a9852f7078 | test/oai/test_utils.py | View secret |
| 10422482 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 10422482 | Triggered | Generic High Entropy Secret | bdb40d77d7be9ea42e5fa28f6e851edf549ef0af | test/oai/test_utils.py | View secret |
| 12853602 | Triggered | Generic High Entropy Secret | 79dbb7bc2561713bc11225849e408dc74db1228f | test/oai/test_utils.py | View secret |
| 11616921 | Triggered | Generic High Entropy Secret | a86d0fde2e667f9177eea55da17312b770c9d76b | notebook/agentchat_agentops.ipynb | View secret |
| 11616921 | Triggered | Generic High Entropy Secret | 394561b4629222c19d8bb3bc58222fc8813a5833 | notebook/agentchat_agentops.ipynb | View secret |
| 11616921 | Triggered | Generic High Entropy Secret | 3eac646b8974e1d1be3fde557b055563f56f2f5f | notebook/agentchat_agentops.ipynb | View secret |
| 11616921 | Triggered | Generic High Entropy Secret | f45b55337aa7f9d6151f21f2c55ba5dc83f95b79 | notebook/agentchat_agentops.ipynb | View secret |
| 11616921 | Triggered | Generic High Entropy Secret | 65632487224aae2c7faca67de40fd2bda3ad3905 | notebook/agentchat_agentops.ipynb | View secret |
| 12853598 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 12853598 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | 0a3c6c49834b4f68c688c1d2e76a5ebb8f7d91e2 | test/oai/test_utils.py | View secret |
| 10404693 | Triggered | Generic High Entropy Secret | 76f5f5a66532a3b95d03fe0ae8a56a59e43012e1 | test/oai/test_utils.py | View secret |
| 10404662 | Triggered | Generic CLI Secret | 954ca451f949a4924578bb7e3e93c97ad4ba1dd5 | .github/workflows/dotnet-build.yml | View secret |
| 12853599 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 12853599 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 10404694 | Triggered | Generic High Entropy Secret | 76f5f5a66532a3b95d03fe0ae8a56a59e43012e1 | test/oai/test_utils.py | View secret |
| 10404694 | Triggered | Generic High Entropy Secret | 0a3c6c49834b4f68c688c1d2e76a5ebb8f7d91e2 | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | 3b79cc6fdfa485026262ec44aa5f1f0238bf7c3d | test/oai/test_utils.py | View secret |
| 10404695 | Triggered | Generic High Entropy Secret | 11baa52155c3846299d39ed0b5a814b33b0eb671 | test/oai/test_utils.py | View secret |
| 12853600 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 12853600 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 12853601 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 12853601 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 10493810 | Triggered | Generic Password | 3b79cc6fdfa485026262ec44aa5f1f0238bf7c3d | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 11baa52155c3846299d39ed0b5a814b33b0eb671 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 11baa52155c3846299d39ed0b5a814b33b0eb671 | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10493810 | Triggered | Generic Password | 3b79cc6fdfa485026262ec44aa5f1f0238bf7c3d | notebook/agentchat_pgvector_RetrieveChat.ipynb | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | 0a3c6c49834b4f68c688c1d2e76a5ebb8f7d91e2 | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | 76f5f5a66532a3b95d03fe0ae8a56a59e43012e1 | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
| 10404696 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 10422482 | Triggered | Generic High Entropy Secret | 2b3a9ae05569d38cfc89d9daa4b1612b8406d178 | test/oai/test_utils.py | View secret |
| 10422482 | Triggered | Generic High Entropy Secret | c03558f5b2708c31df36666486f54b2714435162 | test/oai/test_utils.py | View secret |
and 16 others.
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secrets safely. Learn here the best practices.
- Revoke and rotate these secrets.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.