Skip to main content

lha_core/
skills.rs

1use crate::SessionId;
2use async_trait::async_trait;
3use lha_llm::RuntimeMetadata;
4use lha_llm::ToolDescriptor;
5use lha_llm::TranscriptItem;
6use thiserror::Error;
7
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct Skill {
10    pub id: String,
11    pub name: String,
12    pub description: Option<String>,
13    pub instructions: String,
14    pub required_tools: Vec<String>,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18pub struct SkillContext {
19    pub session_id: SessionId,
20    pub conversation: Vec<TranscriptItem>,
21    pub runtime: RuntimeMetadata,
22    pub tools: Vec<ToolDescriptor>,
23}
24
25#[derive(Debug, Error)]
26pub enum SkillError {
27    #[error("{0}")]
28    Fatal(String),
29}
30
31#[async_trait]
32pub trait SkillProvider: Send + Sync {
33    async fn skills_for_turn(
34        &self,
35        context: &SkillContext,
36    ) -> std::result::Result<Vec<Skill>, SkillError>;
37}