Update GCP Auth to 0.12

This commit is contained in:
2024-06-04 07:25:01 +01:00
parent 1bd5ab830a
commit 14010f9f78
8 changed files with 68 additions and 100 deletions

View File

@@ -8,7 +8,7 @@ edition = "2021"
[dependencies] [dependencies]
deadqueue = "0.2" deadqueue = "0.2"
futures-util = "0.3" futures-util = "0.3"
gcp_auth = "0.11" gcp_auth = "0.12"
reqwest = { version = "0.12", features = ["json", "gzip"] } reqwest = { version = "0.12", features = ["json", "gzip"] }
reqwest-eventsource = "0.6" reqwest-eventsource = "0.6"
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }

View File

@@ -1,61 +1,59 @@
use std::{sync::Arc, time::Duration}; use console::style;
use dialoguer::{theme::ColorfulTheme, Input};
use console::style; use gemini_rs::prelude::*;
use dialoguer::{theme::ColorfulTheme, Input}; use std::time::Duration;
use gemini_rs::prelude::*;
use indicatif::{ProgressBar, ProgressStyle};
use gcp_auth::AuthenticationManager;
use indicatif::{ProgressBar, ProgressStyle}; #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
#[tokio::main] let authentication_manager = gcp_auth::provider().await?;
async fn main() -> Result<(), Box<dyn std::error::Error>> { let api_endpoint = std::env::var("API_ENDPOINT")?;
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let project_id = std::env::var("PROJECT_ID")?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let location_id = std::env::var("LOCATION_ID")?;
let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; tracing_subscriber::fmt().init();
tracing_subscriber::fmt().init(); let gemini = GeminiClient::new(
authentication_manager,
let gemini = GeminiClient::new( api_endpoint,
authentication_manager, project_id,
api_endpoint, location_id,
project_id, );
location_id,
); tracing::info!("Starting conversation...");
tracing::info!("Starting conversation..."); let mut conversation = Dialogue::new("gemini-pro");
loop {
let mut conversation = Dialogue::new("gemini-pro"); let message: String = Input::with_theme(&ColorfulTheme::default())
loop { .with_prompt("user")
let message: String = Input::with_theme(&ColorfulTheme::default()) .interact_text()?;
.with_prompt("user")
.interact_text()?; // Exit the conversation if the user types "exit"
if message == "exit" {
// Exit the conversation if the user types "exit" break;
if message == "exit" { }
break;
} // Show a spinner while the model is thinking.
let progress = ProgressBar::new_spinner();
// Show a spinner while the model is thinking. progress.enable_steady_tick(Duration::from_millis(120));
let progress = ProgressBar::new_spinner(); progress.set_style(ProgressStyle::with_template("{spinner:.green} {msg}")?);
progress.enable_steady_tick(Duration::from_millis(120)); progress.set_message("Thinking...");
progress.set_style(ProgressStyle::with_template("{spinner:.green} {msg}")?);
progress.set_message("Thinking..."); // Prompt the model with the conversation so far.
let response = conversation.do_turn(&gemini, &message).await?;
// Prompt the model with the conversation so far.
let response = conversation.do_turn(&gemini, &message).await?; // Stop the spinner and clear the terminal.
progress.finish_and_clear();
// Stop the spinner and clear the terminal.
progress.finish_and_clear(); // Print the model's response.
println!(
// Print the model's response. "{} {} {}",
println!( style(response.role.to_string()).bold(),
"{} {} {}", style("·").dim(),
style(response.role.to_string()).bold(), style(&response.text).cyan()
style("·").dim(), );
style(&response.text).cyan() }
);
} Ok(())
}
Ok(())
}

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*; use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?; let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,13 +1,9 @@
use std::sync::Arc;
use gemini_rs::prelude::*; use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt().init(); tracing_subscriber::fmt().init();
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?; let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*; use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?; let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*; use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?; let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*; use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = Arc::new(AuthenticationManager::new().await?); let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?; let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?; let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?; let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,7 +1,5 @@
use std::sync::Arc; use std::sync::Arc;
use gcp_auth::AuthenticationManager;
use crate::error::Result; use crate::error::Result;
pub trait TokenProvider { pub trait TokenProvider {
@@ -9,18 +7,10 @@ pub trait TokenProvider {
-> impl std::future::Future<Output = Result<String>> + Send; -> impl std::future::Future<Output = Result<String>> + Send;
} }
impl TokenProvider for Arc<AuthenticationManager> { impl TokenProvider for Arc<dyn gcp_auth::TokenProvider> {
async fn get_token(&self, scope: &[&str]) -> Result<String> { async fn get_token(&self, scope: &[&str]) -> Result<String> {
match AuthenticationManager::get_token(self, scope).await { let token = self.token(scope).await;
Ok(token) => Ok(token.as_str().to_string()), match token {
Err(e) => Err(e.into()),
}
}
}
impl TokenProvider for AuthenticationManager {
async fn get_token(&self, scope: &[&str]) -> Result<String> {
match AuthenticationManager::get_token(self, scope).await {
Ok(token) => Ok(token.as_str().to_string()), Ok(token) => Ok(token.as_str().to_string()),
Err(e) => Err(e.into()), Err(e) => Err(e.into()),
} }