pub struct LM {
pub api_key: SecretString,
pub base_url: String,
pub config: LMConfig,
pub history: Vec<LMResponse>,
/* private fields */
}Fields§
§api_key: SecretString§base_url: String§config: LMConfig§history: Vec<LMResponse>Implementations§
Source§impl LM
impl LM
Sourcepub fn builder() -> LMBuilder
pub fn builder() -> LMBuilder
Create an instance of LM using the builder syntax
Examples found in repository?
examples/05-heterogenous-examples.rs (line 16)
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 63)
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 73)
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 31)
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 61)
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 81)
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:
Source§impl LM
impl LM
pub async fn call( &mut self, messages: Chat, signature: &str, ) -> Result<(Message, LmUsage)>
Sourcepub fn inspect_history(&self, n: usize) -> Vec<LMResponse>
pub fn inspect_history(&self, n: usize) -> Vec<LMResponse>
Examples found in repository?
examples/07-inspect-history.rs (line 48)
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}Trait Implementations§
Auto Trait Implementations§
impl Freeze for LM
impl !RefUnwindSafe for LM
impl Send for LM
impl Sync for LM
impl Unpin for LM
impl !UnwindSafe for LM
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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