feat: improved configuration

configuration now works with both env variables and config file
This commit is contained in:
Per Stark
2025-04-09 11:32:23 +02:00
parent c3c0f69bba
commit 804461ac01
6 changed files with 21 additions and 19 deletions

View File

@@ -1,7 +1,9 @@
use config::{Config, ConfigError, File};
use config::{Config, ConfigError, Environment, File};
use serde::Deserialize;
#[derive(Clone, Debug)]
#[derive(Clone, Deserialize, Debug)]
pub struct AppConfig {
pub openai_api_key: String,
pub surrealdb_address: String,
pub surrealdb_username: String,
pub surrealdb_password: String,
@@ -11,14 +13,9 @@ pub struct AppConfig {
pub fn get_config() -> Result<AppConfig, ConfigError> {
let config = Config::builder()
.add_source(File::with_name("config"))
.add_source(File::with_name("config").required(false))
.add_source(Environment::default())
.build()?;
Ok(AppConfig {
surrealdb_address: config.get_string("SURREALDB_ADDRESS")?,
surrealdb_username: config.get_string("SURREALDB_USERNAME")?,
surrealdb_password: config.get_string("SURREALDB_PASSWORD")?,
surrealdb_namespace: config.get_string("SURREALDB_NAMESPACE")?,
surrealdb_database: config.get_string("SURREALDB_DATABASE")?,
})
Ok(config.try_deserialize()?)
}

View File

@@ -145,8 +145,10 @@ where
.unwrap_or_else(|| "An error occurred.".to_string());
let trigger_payload = json!({"toast": {"title": title, "description": description, "type": "error"}});
let trigger_value = serde_json::to_string(&trigger_payload).unwrap_or_else(|e| {error!("Failed to serialize HX-Trigger payload: {}", e);
r#"{"toast":{"title":"Error","description":"An unexpected error occurred.", "type":"error"}}"#.to_string()});
let trigger_value = serde_json::to_string(&trigger_payload).unwrap_or_else(|e| {
error!("Failed to serialize HX-Trigger payload: {}", e);
r#"{"toast":{"title":"Error","description":"An unexpected error occurred.", "type":"error"}}"#.to_string()
});
(StatusCode::NO_CONTENT, [(HX_TRIGGER, trigger_value)], "").into_response()
} else {
// Non-HTMX request: Render the full errors/error.html page

View File

@@ -151,7 +151,6 @@ pub async fn show_active_jobs(
State(state): State<HtmlState>,
RequireUser(user): RequireUser,
) -> Result<impl IntoResponse, HtmlError> {
return Ok(TemplateResponse::server_error());
let active_jobs = User::get_unfinished_ingestion_tasks(&user.id, &state.db).await?;
Ok(TemplateResponse::new_partial(

View File

@@ -37,7 +37,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
db.ensure_initialized().await?;
let session_store = Arc::new(db.create_session_store().await?);
let openai_client = Arc::new(async_openai::Client::new());
let openai_client = Arc::new(async_openai::Client::with_config(
OpenAIConfig::new().with_api_key(&config.openai_api_key),
));
let html_state = HtmlState::new_with_resources(db, openai_client, session_store)?;

View File

@@ -35,7 +35,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
db.ensure_initialized().await?;
let session_store = Arc::new(db.create_session_store().await?);
let openai_client = Arc::new(async_openai::Client::new());
let openai_client = Arc::new(async_openai::Client::with_config(
OpenAIConfig::new().with_api_key(&config.openai_api_key),
));
let html_state = HtmlState::new_with_resources(db, openai_client, session_store)?;

View File

@@ -1,10 +1,8 @@
\[\] archive ingressed webpage
\[\] configs primarily get envs
\[x\] configs primarily get envs
\[\] filtering on categories
\[\] integrate assets folder in release build
\[\] make sure error messages render correctly
\[\] markdown rendering in client
\[\] openai api key in config
\[x\] openai api key in config
\[\] testing core functions
\[\] three js graph explorer
\[\] three js vector explorer
@@ -17,11 +15,13 @@
\[x\] gdpr
\[x\] html ingression
\[x\] hx-redirect
\[x\] integrate assets folder in release build
\[x\] integrate templates in release build
\[x\] ios shortcut generation
\[x\] job queue
\[x\] link to ingressed urls or archives
\[x\] macro for pagedata?
\[x\] make sure error messages render correctly
\[x\] on updates of knowledgeentity create new embeddings
\[x\] option to set models, query and processing
\[x\] redirects