nxtgauge-ai-assistant/src/state.rs
Ashwin Kumar Sivakumar f0fbb15e54 Route through LiteLLM's task-specific models and implement missing Ask Ash features
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.
2026-07-02 18:48:43 +05:30

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,
}
}
}