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]
deadqueue = "0.2"
futures-util = "0.3"
gcp_auth = "0.11"
gcp_auth = "0.12"
reqwest = { version = "0.12", features = ["json", "gzip"] }
reqwest-eventsource = "0.6"
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 gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
use indicatif::{ProgressBar, ProgressStyle};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = Arc::new(AuthenticationManager::new().await?);
let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;
tracing_subscriber::fmt().init();
let gemini = GeminiClient::new(
authentication_manager,
api_endpoint,
project_id,
location_id,
);
tracing::info!("Starting conversation...");
let mut conversation = Dialogue::new("gemini-pro");
loop {
let message: String = Input::with_theme(&ColorfulTheme::default())
.with_prompt("user")
.interact_text()?;
// Exit the conversation if the user types "exit"
if message == "exit" {
break;
}
// Show a spinner while the model is thinking.
let progress = ProgressBar::new_spinner();
progress.enable_steady_tick(Duration::from_millis(120));
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?;
// Stop the spinner and clear the terminal.
progress.finish_and_clear();
// Print the model's response.
println!(
"{} {} {}",
style(response.role.to_string()).bold(),
style("·").dim(),
style(&response.text).cyan()
);
}
Ok(())
}
use console::style;
use dialoguer::{theme::ColorfulTheme, Input};
use gemini_rs::prelude::*;
use std::time::Duration;
use indicatif::{ProgressBar, ProgressStyle};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let authentication_manager = gcp_auth::provider().await?;
let api_endpoint = std::env::var("API_ENDPOINT")?;
let project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;
tracing_subscriber::fmt().init();
let gemini = GeminiClient::new(
authentication_manager,
api_endpoint,
project_id,
location_id,
);
tracing::info!("Starting conversation...");
let mut conversation = Dialogue::new("gemini-pro");
loop {
let message: String = Input::with_theme(&ColorfulTheme::default())
.with_prompt("user")
.interact_text()?;
// Exit the conversation if the user types "exit"
if message == "exit" {
break;
}
// Show a spinner while the model is thinking.
let progress = ProgressBar::new_spinner();
progress.enable_steady_tick(Duration::from_millis(120));
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?;
// Stop the spinner and clear the terminal.
progress.finish_and_clear();
// Print the model's response.
println!(
"{} {} {}",
style(response.role.to_string()).bold(),
style("·").dim(),
style(&response.text).cyan()
);
}
Ok(())
}

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main]
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 project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,13 +1,9 @@
use std::sync::Arc;
use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
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 project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main]
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 project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main]
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 project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,12 +1,8 @@
use std::sync::Arc;
use gemini_rs::prelude::*;
use gcp_auth::AuthenticationManager;
#[tokio::main]
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 project_id = std::env::var("PROJECT_ID")?;
let location_id = std::env::var("LOCATION_ID")?;

View File

@@ -1,7 +1,5 @@
use std::sync::Arc;
use gcp_auth::AuthenticationManager;
use crate::error::Result;
pub trait TokenProvider {
@@ -9,18 +7,10 @@ pub trait TokenProvider {
-> 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> {
match AuthenticationManager::get_token(self, scope).await {
Ok(token) => Ok(token.as_str().to_string()),
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 {
let token = self.token(scope).await;
match token {
Ok(token) => Ok(token.as_str().to_string()),
Err(e) => Err(e.into()),
}