How to Configure Built-in Components
In a multi-agent system, agents will have vastly different needs. For example, system prompts can be vague or preciese, or you may want to use a variety of LLM models.
Eidolon allows you to configure agents without ever needing to jump into code. You can override deeply nested configuration default, as well as define new custom resources to use as templates.
Why
LLM applications require a ton of tweaking ๐จ. Jumping into code for each and every code means this fiddling is slower and more error-prone. That is why at Eidolon ๐ป we separated prompting and system configuration into simple kubernetes-like yaml files that can be modified without needing to open up a code editor ๐ก.
Beyond simply speeding up cycle time ๐, this also allows more personas ๐งโ๐๐งโ๐ซ๐งโ๐จ to work on the application without needing deep understanding of the codebase ๐ก. This allows different personas to focus on architecture, fine-tuning, model selection, and prompt engineering so each person can focus on their domain expertise without getting bogged down.
How
Spec Configuration
In Eidolonโs agent yaml files, you can have probably noticed the spec
field. This is where you can customize portions of the componentโs configuration.
Field Configuration
You can override component defaults at the individual field or attribute level.
Overriding Implementation Defaults
Most components have a default implementation. Check the Built-in Components โOverviewโ and child pages to see the defaults. For example, agents use the SimpleAgent template by default.
You can override implementation defaults, but remember the new contents need to match the new implementationโs spec pattern.
Nested Spec Customization
Components can also make References to other components. These subcomponents can be customized as well.
Nested Implementation Customization
Of course you can also override nested implementations.
This implementation pointer override is quite common, so we have added as shortcut for it. If you just specify a string for the reference, we will treat it as an implementation override.
Reusable References
Now component customization is nice for experimentation, but it can get quite verbose if we need to constantly make the same customization to multiple components. For this reason, we have added References. These are reusable configurations that can be referenced by multiple components.
Letโs create a named resource frugal_apu
so we can easily point to an older model for some agents.
frugal_apu.eidolon.yaml
Now within our agentโs spec we can just reference this reference by name like we would any other component.
We can continue to override sub components as you would expect.
Changing Default Components
Now what if you are a lean startup, and want to use the frugal_apu for all of your agents unless specified otherwise? You would prefer not to override the apu of every agent, you just want to set frugal_apu as the default apu.
This reference resource will change any component that references the APU to use our new frugal_apu instead of the default (ConversationalAPU).
Recipes
Most recipes will have some form of customization. Here are a few examples that use it more heavily.
GitHub Repo Expert
The RepoSearch overrides its loader with a different implementation to be able to read from github. On top of this it then customizes the files this loader can read.