Wires up 8 previously missing/stub Ask Ash capabilities: resume improvement, job post improvement, professional/jobseeker/company profile improvement, service description generation, KB article/notification writing, admin support ticket summarization, and lead/credit guidance. Also upgrades explain_plan_limits and check_ai_pack_balance from static canned strings to real generated answers. Adds AiProvider::complete_as(model, ...) so callers can target specific LiteLLM model aliases (jd-generator, profile-writer, service-writer, support-drafter, decision-support, askash-main/fast) that were already defined in apps/litellm/base/configmap.yaml but never actually used by ai-assistant, since it wasn't even configured to use the litellm provider (defaulted to plain Ollama with the tiny gemma3:270m model for every task, with no LLM_PROVIDER/LITELLM_* env vars set in the deployment). New content_tools module holds the shared generation logic; new routes registered for each feature; KB content generation and support ticket summarization are gated to ADMIN/EMPLOYEE roles via JWT claims. Registry gains 4 new ActionDefinitions (improve_job_post, generate_kb_content, lead_credit_guidance, ai_auto_apply_status) to match the existing registry pattern.
69 lines
2.2 KiB
Rust
69 lines
2.2 KiB
Rust
use std::sync::Arc;
|
|
|
|
use crate::{
|
|
chat::orchestrator::ChatOrchestrator,
|
|
config::AppConfig,
|
|
content_tools::service::ContentToolsService,
|
|
cover_letter::service::CoverLetterService,
|
|
db::Database,
|
|
forms::service::FormService,
|
|
jobs::service::JobsService,
|
|
providers::{
|
|
help_center::help_center_provider::HelpCenterProvider, llm::ai_provider::AiProvider,
|
|
tickets::ticket_provider::TicketProvider,
|
|
},
|
|
services::action_confirmation::ActionConfirmationService,
|
|
tickets::service::TicketService,
|
|
};
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub config: AppConfig,
|
|
pub db: Database,
|
|
pub chat_orchestrator: ChatOrchestrator,
|
|
pub jobs_service: JobsService,
|
|
pub form_service: FormService,
|
|
pub cover_letter_service: CoverLetterService,
|
|
pub content_tools_service: ContentToolsService,
|
|
pub ticket_service: TicketService,
|
|
pub help_center: Arc<dyn HelpCenterProvider>,
|
|
pub action_confirmation_service: ActionConfirmationService,
|
|
}
|
|
|
|
impl AppState {
|
|
pub fn new(
|
|
config: AppConfig,
|
|
db: Database,
|
|
ai_provider: Arc<dyn AiProvider>,
|
|
help_center: Arc<dyn HelpCenterProvider>,
|
|
ticket_provider: Arc<dyn TicketProvider>,
|
|
) -> Self {
|
|
let jobs_service = JobsService::new(ai_provider.clone());
|
|
let form_service = FormService::new(ai_provider.clone());
|
|
let cover_letter_service = CoverLetterService::new(ai_provider.clone());
|
|
let content_tools_service = ContentToolsService::new(ai_provider.clone());
|
|
let ticket_service = TicketService::new(ticket_provider, db.clone());
|
|
let chat_orchestrator = ChatOrchestrator::new(
|
|
jobs_service.clone(),
|
|
form_service.clone(),
|
|
help_center.clone(),
|
|
ticket_service.clone(),
|
|
content_tools_service.clone(),
|
|
ai_provider.clone(),
|
|
);
|
|
let action_confirmation_service = ActionConfirmationService::new();
|
|
|
|
Self {
|
|
config,
|
|
db,
|
|
chat_orchestrator,
|
|
jobs_service,
|
|
form_service,
|
|
cover_letter_service,
|
|
content_tools_service,
|
|
ticket_service,
|
|
help_center,
|
|
action_confirmation_service,
|
|
}
|
|
}
|
|
}
|