pub struct LMBuilder<S: State = Empty> { /* private fields */ }Expand description
Use builder syntax to set the inputs and finish with build().
Implementations§
Source§impl<S: State> LMBuilder<S>
impl<S: State> LMBuilder<S>
Sourcepub fn build(self) -> LMwhere
S: IsComplete,
pub fn build(self) -> LMwhere
S: IsComplete,
Finish building and return the requested object
Examples found in repository?
examples/05-heterogenous-examples.rs (line 18)
14async fn main() -> anyhow::Result<()> {
15 configure(
16 LM::builder()
17 .api_key(SecretString::from(std::env::var("OPENAI_API_KEY")?))
18 .build(),
19 ChatAdapter {},
20 );
21
22 let exp = example! {
23 "number": "input" => 10,
24 };
25 let predict = Predict::new(sign! {
26 (number: i32) -> number_squared: i32, number_cubed: i32
27 });
28
29 let prediction = predict.forward(exp).await?;
30 println!("{prediction:?}");
31
32 Ok(())
33}More examples
examples/03-evaluate-hotpotqa.rs (line 65)
61async fn main() -> anyhow::Result<()> {
62 configure(
63 LM::builder()
64 .api_key(SecretString::from(std::env::var("OPENAI_API_KEY")?))
65 .build(),
66 ChatAdapter {},
67 );
68
69 let examples = DataLoader::load_hf(
70 "hotpotqa/hotpot_qa",
71 vec!["question".to_string()],
72 vec!["answer".to_string()],
73 "fullwiki",
74 "validation",
75 true,
76 )?[..128]
77 .to_vec();
78
79 let evaluator = QARater::builder().build();
80 let metric = evaluator.evaluate(examples).await;
81
82 println!("Metric: {metric}");
83 Ok(())
84}examples/01-simple.rs (line 79)
71async fn main() -> Result<()> {
72 configure(
73 LM::builder()
74 .api_key(std::env::var("OPENROUTER_API_KEY")?.into())
75 .config(LMConfig {
76 model: "openrouter/openai/gpt-4o-mini".to_string(),
77 ..LMConfig::default()
78 })
79 .build(),
80 ChatAdapter,
81 );
82
83 let example = example! {
84 "question": "input" => "What is the capital of France?",
85 };
86
87 let qa_rater = QARater::builder().build();
88 let prediction = qa_rater.forward(example).await.unwrap();
89 println!("{prediction:?}");
90
91 Ok(())
92}examples/07-inspect-history.rs (line 37)
30async fn main() {
31 let lm = LM::builder()
32 .api_key(std::env::var("OPENAI_API_KEY").unwrap().into())
33 .config(LMConfig {
34 model: "gpt-4o-mini".to_string(),
35 ..LMConfig::default()
36 })
37 .build();
38 configure(lm, ChatAdapter);
39
40 let example = example! {
41 "question": "input" => "What is the capital of France?",
42 };
43
44 let qa_rater = QARater::builder().build();
45 let prediction = qa_rater.forward(example.clone()).await.unwrap();
46 println!("Prediction: {prediction:?}");
47
48 let history = get_lm().lock().await.inspect_history(1);
49 println!("History: {history:?}");
50}examples/04-optimize-hotpotqa.rs (line 63)
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}examples/06-oai-compatible-models-batch.rs (line 89)
78async fn main() {
79 // Anthropic
80 configure(
81 LM::builder()
82 .api_key(SecretString::from(
83 std::env::var("ANTHROPIC_API_KEY").unwrap(),
84 ))
85 .config(LMConfig {
86 model: "anthropic/claude-sonnet-4-20250514".to_string(),
87 ..LMConfig::default()
88 })
89 .build(),
90 ChatAdapter,
91 );
92
93 let example = vec![
94 example! {
95 "question": "input" => "What is the capital of France?",
96 },
97 example! {
98 "question": "input" => "What is the capital of Germany?",
99 },
100 example! {
101 "question": "input" => "What is the capital of Italy?",
102 },
103 ];
104
105 let qa_rater = QARater::builder().build();
106 let prediction = qa_rater.batch(example.clone(), 2, true).await.unwrap();
107 println!("Anthropic: {prediction:?}");
108
109 // Gemini
110 configure(
111 LM::builder()
112 .api_key(SecretString::from(std::env::var("GEMINI_API_KEY").unwrap()))
113 .config(LMConfig {
114 model: "google/gemini-2.0-flash".to_string(),
115 ..LMConfig::default()
116 })
117 .build(),
118 ChatAdapter,
119 );
120
121 let prediction = qa_rater.batch(example, 2, true).await.unwrap();
122 println!("Gemini: {prediction:?}");
123}Additional examples can be found in:
Sourcepub fn api_key(self, value: SecretString) -> LMBuilder<SetApiKey<S>>where
S::ApiKey: IsUnset,
pub fn api_key(self, value: SecretString) -> LMBuilder<SetApiKey<S>>where
S::ApiKey: IsUnset,
Required.
Examples found in repository?
examples/05-heterogenous-examples.rs (line 17)
14async fn main() -> anyhow::Result<()> {
15 configure(
16 LM::builder()
17 .api_key(SecretString::from(std::env::var("OPENAI_API_KEY")?))
18 .build(),
19 ChatAdapter {},
20 );
21
22 let exp = example! {
23 "number": "input" => 10,
24 };
25 let predict = Predict::new(sign! {
26 (number: i32) -> number_squared: i32, number_cubed: i32
27 });
28
29 let prediction = predict.forward(exp).await?;
30 println!("{prediction:?}");
31
32 Ok(())
33}More examples
examples/03-evaluate-hotpotqa.rs (line 64)
61async fn main() -> anyhow::Result<()> {
62 configure(
63 LM::builder()
64 .api_key(SecretString::from(std::env::var("OPENAI_API_KEY")?))
65 .build(),
66 ChatAdapter {},
67 );
68
69 let examples = DataLoader::load_hf(
70 "hotpotqa/hotpot_qa",
71 vec!["question".to_string()],
72 vec!["answer".to_string()],
73 "fullwiki",
74 "validation",
75 true,
76 )?[..128]
77 .to_vec();
78
79 let evaluator = QARater::builder().build();
80 let metric = evaluator.evaluate(examples).await;
81
82 println!("Metric: {metric}");
83 Ok(())
84}examples/01-simple.rs (line 74)
71async fn main() -> Result<()> {
72 configure(
73 LM::builder()
74 .api_key(std::env::var("OPENROUTER_API_KEY")?.into())
75 .config(LMConfig {
76 model: "openrouter/openai/gpt-4o-mini".to_string(),
77 ..LMConfig::default()
78 })
79 .build(),
80 ChatAdapter,
81 );
82
83 let example = example! {
84 "question": "input" => "What is the capital of France?",
85 };
86
87 let qa_rater = QARater::builder().build();
88 let prediction = qa_rater.forward(example).await.unwrap();
89 println!("{prediction:?}");
90
91 Ok(())
92}examples/07-inspect-history.rs (line 32)
30async fn main() {
31 let lm = LM::builder()
32 .api_key(std::env::var("OPENAI_API_KEY").unwrap().into())
33 .config(LMConfig {
34 model: "gpt-4o-mini".to_string(),
35 ..LMConfig::default()
36 })
37 .build();
38 configure(lm, ChatAdapter);
39
40 let example = example! {
41 "question": "input" => "What is the capital of France?",
42 };
43
44 let qa_rater = QARater::builder().build();
45 let prediction = qa_rater.forward(example.clone()).await.unwrap();
46 println!("Prediction: {prediction:?}");
47
48 let history = get_lm().lock().await.inspect_history(1);
49 println!("History: {history:?}");
50}examples/04-optimize-hotpotqa.rs (line 62)
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}examples/06-oai-compatible-models-batch.rs (lines 82-84)
78async fn main() {
79 // Anthropic
80 configure(
81 LM::builder()
82 .api_key(SecretString::from(
83 std::env::var("ANTHROPIC_API_KEY").unwrap(),
84 ))
85 .config(LMConfig {
86 model: "anthropic/claude-sonnet-4-20250514".to_string(),
87 ..LMConfig::default()
88 })
89 .build(),
90 ChatAdapter,
91 );
92
93 let example = vec![
94 example! {
95 "question": "input" => "What is the capital of France?",
96 },
97 example! {
98 "question": "input" => "What is the capital of Germany?",
99 },
100 example! {
101 "question": "input" => "What is the capital of Italy?",
102 },
103 ];
104
105 let qa_rater = QARater::builder().build();
106 let prediction = qa_rater.batch(example.clone(), 2, true).await.unwrap();
107 println!("Anthropic: {prediction:?}");
108
109 // Gemini
110 configure(
111 LM::builder()
112 .api_key(SecretString::from(std::env::var("GEMINI_API_KEY").unwrap()))
113 .config(LMConfig {
114 model: "google/gemini-2.0-flash".to_string(),
115 ..LMConfig::default()
116 })
117 .build(),
118 ChatAdapter,
119 );
120
121 let prediction = qa_rater.batch(example, 2, true).await.unwrap();
122 println!("Gemini: {prediction:?}");
123}Additional examples can be found in:
Sourcepub fn maybe_base_url(self, value: Option<String>) -> LMBuilder<SetBaseUrl<S>>where
S::BaseUrl: IsUnset,
pub fn maybe_base_url(self, value: Option<String>) -> LMBuilder<SetBaseUrl<S>>where
S::BaseUrl: IsUnset,
Sourcepub fn config(self, value: LMConfig) -> LMBuilder<SetConfig<S>>where
S::Config: IsUnset,
pub fn config(self, value: LMConfig) -> LMBuilder<SetConfig<S>>where
S::Config: IsUnset,
Examples found in repository?
examples/01-simple.rs (lines 75-78)
71async fn main() -> Result<()> {
72 configure(
73 LM::builder()
74 .api_key(std::env::var("OPENROUTER_API_KEY")?.into())
75 .config(LMConfig {
76 model: "openrouter/openai/gpt-4o-mini".to_string(),
77 ..LMConfig::default()
78 })
79 .build(),
80 ChatAdapter,
81 );
82
83 let example = example! {
84 "question": "input" => "What is the capital of France?",
85 };
86
87 let qa_rater = QARater::builder().build();
88 let prediction = qa_rater.forward(example).await.unwrap();
89 println!("{prediction:?}");
90
91 Ok(())
92}More examples
examples/07-inspect-history.rs (lines 33-36)
30async fn main() {
31 let lm = LM::builder()
32 .api_key(std::env::var("OPENAI_API_KEY").unwrap().into())
33 .config(LMConfig {
34 model: "gpt-4o-mini".to_string(),
35 ..LMConfig::default()
36 })
37 .build();
38 configure(lm, ChatAdapter);
39
40 let example = example! {
41 "question": "input" => "What is the capital of France?",
42 };
43
44 let qa_rater = QARater::builder().build();
45 let prediction = qa_rater.forward(example.clone()).await.unwrap();
46 println!("Prediction: {prediction:?}");
47
48 let history = get_lm().lock().await.inspect_history(1);
49 println!("History: {history:?}");
50}examples/06-oai-compatible-models-batch.rs (lines 85-88)
78async fn main() {
79 // Anthropic
80 configure(
81 LM::builder()
82 .api_key(SecretString::from(
83 std::env::var("ANTHROPIC_API_KEY").unwrap(),
84 ))
85 .config(LMConfig {
86 model: "anthropic/claude-sonnet-4-20250514".to_string(),
87 ..LMConfig::default()
88 })
89 .build(),
90 ChatAdapter,
91 );
92
93 let example = vec![
94 example! {
95 "question": "input" => "What is the capital of France?",
96 },
97 example! {
98 "question": "input" => "What is the capital of Germany?",
99 },
100 example! {
101 "question": "input" => "What is the capital of Italy?",
102 },
103 ];
104
105 let qa_rater = QARater::builder().build();
106 let prediction = qa_rater.batch(example.clone(), 2, true).await.unwrap();
107 println!("Anthropic: {prediction:?}");
108
109 // Gemini
110 configure(
111 LM::builder()
112 .api_key(SecretString::from(std::env::var("GEMINI_API_KEY").unwrap()))
113 .config(LMConfig {
114 model: "google/gemini-2.0-flash".to_string(),
115 ..LMConfig::default()
116 })
117 .build(),
118 ChatAdapter,
119 );
120
121 let prediction = qa_rater.batch(example, 2, true).await.unwrap();
122 println!("Gemini: {prediction:?}");
123}Sourcepub fn maybe_config(self, value: Option<LMConfig>) -> LMBuilder<SetConfig<S>>where
S::Config: IsUnset,
pub fn maybe_config(self, value: Option<LMConfig>) -> LMBuilder<SetConfig<S>>where
S::Config: IsUnset,
Sourcepub fn history(self, value: Vec<LMResponse>) -> LMBuilder<SetHistory<S>>where
S::History: IsUnset,
pub fn history(self, value: Vec<LMResponse>) -> LMBuilder<SetHistory<S>>where
S::History: IsUnset,
Sourcepub fn maybe_history(
self,
value: Option<Vec<LMResponse>>,
) -> LMBuilder<SetHistory<S>>where
S::History: IsUnset,
pub fn maybe_history(
self,
value: Option<Vec<LMResponse>>,
) -> LMBuilder<SetHistory<S>>where
S::History: IsUnset,
Sourcepub fn client(self, value: Client<OpenAIConfig>) -> LMBuilder<SetClient<S>>where
S::Client: IsUnset,
pub fn client(self, value: Client<OpenAIConfig>) -> LMBuilder<SetClient<S>>where
S::Client: IsUnset,
Sourcepub fn maybe_client(
self,
value: Option<Client<OpenAIConfig>>,
) -> LMBuilder<SetClient<S>>where
S::Client: IsUnset,
pub fn maybe_client(
self,
value: Option<Client<OpenAIConfig>>,
) -> LMBuilder<SetClient<S>>where
S::Client: IsUnset,
Auto Trait Implementations§
impl<S> Freeze for LMBuilder<S>
impl<S = Empty> !RefUnwindSafe for LMBuilder<S>
impl<S> Send for LMBuilder<S>
impl<S> Sync for LMBuilder<S>
impl<S> Unpin for LMBuilder<S>
impl<S = Empty> !UnwindSafe for LMBuilder<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more