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}