Optimizable

Trait Optimizable 

Source
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§

Source

fn parameters(&mut self) -> IndexMap<String, &mut dyn Optimizable>

Provided Methods§

Source

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}
Source

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}

Implementors§