pub trait Optimizable {
// Required method
fn parameters(&mut self) -> IndexMap<String, &mut dyn Optimizable>;
// Provided methods
fn get_signature(&self) -> &dyn MetaSignature { ... }
fn update_signature_instruction(
&mut self,
instruction: String,
) -> Result<()> { ... }
}
Required Methods§
fn parameters(&mut self) -> IndexMap<String, &mut dyn Optimizable>
Provided Methods§
Sourcefn get_signature(&self) -> &dyn MetaSignature
fn get_signature(&self) -> &dyn MetaSignature
Examples found in repository?
examples/04-optimize-hotpotqa.rs (line 80)
59async fn main() -> anyhow::Result<()> {
60 configure(
61 LM::builder()
62 .api_key(SecretString::from(std::env::var("OPENAI_API_KEY")?))
63 .build(),
64 ChatAdapter {},
65 );
66
67 let examples = DataLoader::load_hf(
68 "hotpotqa/hotpot_qa",
69 vec!["question".to_string()],
70 vec!["answer".to_string()],
71 "fullwiki",
72 "validation",
73 true,
74 )?[..10]
75 .to_vec();
76
77 let mut rater = QARater::builder().build();
78 let optimizer = COPRO::builder().breadth(10).depth(1).build();
79
80 println!("Rater: {:?}", rater.answerer.get_signature().instruction());
81
82 optimizer.compile(&mut rater, examples.clone()).await?;
83
84 println!("Rater: {:?}", rater.answerer.get_signature().instruction());
85
86 Ok(())
87}
Sourcefn update_signature_instruction(&mut self, instruction: String) -> Result<()>
fn update_signature_instruction(&mut self, instruction: String) -> Result<()>
Examples found in repository?
examples/02-module-iteration-and-updation.rs (line 96)
91async fn main() {
92 // Single module test
93 let mut qa_rater = QARater::builder().build();
94 for (name, param) in qa_rater.parameters() {
95 param
96 .update_signature_instruction("Updated instruction for ".to_string() + &name)
97 .unwrap();
98 }
99 println!(
100 "single.answerer -> {}",
101 qa_rater.answerer.signature.instruction()
102 );
103 println!(
104 "single.rater -> {}",
105 qa_rater.rater.signature.instruction()
106 );
107
108 // Nested module test
109 let mut nested = NestedModule::builder().build();
110 for (name, param) in nested.parameters() {
111 param
112 .update_signature_instruction("Deep updated: ".to_string() + &name)
113 .unwrap();
114 }
115
116 // Show nested updates (module-in-module)
117 println!(
118 "nested.qa_outer.answerer -> {}",
119 nested.qa_outer.answerer.signature.instruction()
120 );
121 println!(
122 "nested.qa_outer.rater -> {}",
123 nested.qa_outer.rater.signature.instruction()
124 );
125 println!(
126 "nested.qa_inner.answerer -> {}",
127 nested.qa_inner.answerer.signature.instruction()
128 );
129 println!(
130 "nested.qa_inner.rater -> {}",
131 nested.qa_inner.rater.signature.instruction()
132 );
133 println!(
134 "nested.extra -> {}",
135 nested.extra.signature.instruction()
136 );
137}