1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//! Provides a simple client implementation for the [groq cloud API](https://console.groq.com/playground).
//! You can learn more about the API provided [API Documentation](https://console.groq.com/docs/quickstart)
//! This crate uses [`reqwest`], [`reqwest_eventsource`], [`tokio`], [`serde`], [`serde_json`], [`anyhow`],
//! [`chrono`],[`futures`]
//!
//! # MSRV
//! 1.78.0
//!
//! # Usage
//! ```sh
//! cargo add groq-api-rs
//! ```
//!
//! # Example
//! Request a completion object from Groq
//! ```
//! use groq_api_rs::completion::{client::Groq, message::Message, request::builder};
//!
//! async fn create_completion() -> anyhow::Result<()> {
//! let messages = vec![Message::UserMessage {
//! role: Some("user".to_string()),
//! content: Some("Explain the importance of fast language models".to_string()),
//! name: None,
//! tool_call_id: None,
//! }];
//! let request = builder::RequestBuilder::new("mixtral-8x7b-32768".to_string());
//! let api_key = env!("GROQ_API_KEY");
//!
//! let mut client = Groq::new(api_key);
//! client.add_messages(messages);
//!
//! let res = client.create(request).await;
//! assert!(res.is_ok());
//! Ok(())
//! }
//! ```
//!
//! Request a completion chunk object from Groq using stream option implemented with SSE
//! ```
//! use groq_api_rs::completion::{client::Groq, message::Message, request::builder};
//! async fn create_stream_completion() -> anyhow::Result<()> {
//! let messages = vec![Message::UserMessage {
//! role: Some("user".to_string()),
//! content: Some("Explain the importance of fast language models".to_string()),
//! name: None,
//! tool_call_id: None,
//! }];
//! let request =
//! builder::RequestBuilder::new("mixtral-8x7b-32768".to_string()).with_stream(true);
//! let api_key = env!("GROQ_API_KEY");
//!
//! let mut client = Groq::new(api_key);
//! client.add_messages(messages);
//!
//! let res = client.create(request).await;
//! assert!(res.is_ok());
//! Ok(())
//! }
//! ```
//!
//! Example that the completion can return Error Object and augmented with HTTP status code.
//! ```
//! use groq_api_rs::completion::{client::Groq, message::Message, request::builder};
//! async fn error_does_return() -> anyhow::Result<()> {
//! let messages = vec![Message::UserMessage {
//! role: Some("user".to_string()),
//! content: Some("Explain the importance of fast language models".to_string()),
//! name: None,
//! tool_call_id: None,
//! }];
//! let request =
//! builder::RequestBuilder::new("mixtral-8x7b-32768".to_string()).with_stream(true);
//! let api_key = "";
//!
//! let mut client = Groq::new(api_key);
//! client.add_messages(messages);
//!
//! let res = client.create(request).await;
//! assert!(res.is_err());
//! eprintln!("{}", res.unwrap_err());
//! Ok(())
//! }
//! ```