-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbase.py
More file actions
63 lines (45 loc) · 1.62 KB
/
base.py
File metadata and controls
63 lines (45 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""Base classes for Echo SDK prompt management."""
from abc import ABC, abstractmethod
from typing import Any, Dict, Optional
from pydantic import BaseModel
from echo.agents.config import AgentConfig
from .observability import NoopPromptObservability, PromptObservability
class FetchedPrompt(BaseModel):
"""Prompt with ready-to-use AgentConfig."""
name: str
version: Optional[str] = None
agent_config: AgentConfig # Ready to use, already compiled
model_config = {"arbitrary_types_allowed": True}
class PromptFetchError(Exception):
"""Raised when prompt fetch fails."""
pass
class BasePromptProvider(ABC):
"""Abstract base class for prompt providers."""
def __init__(self, observability: Optional[PromptObservability] = None) -> None:
"""
Args:
observability: Hook into prompt events (start/success/failure).
"""
self.observability: PromptObservability = (
observability or NoopPromptObservability()
)
@abstractmethod
async def get_prompt(
self,
name: str,
version: Optional[str] = None,
prompt_variables: Optional[Dict[str, Any]] = None,
**kwargs: Any,
) -> FetchedPrompt:
"""
Fetch prompt from provider and return ready-to-use AgentConfig.
Args:
name: Prompt name/identifier
version: Optional version number as string
**variables: Variables to compile the prompt with
Returns:
FetchedPrompt with agent_config ready to use
Raises:
PromptFetchError: If fetch fails
"""
pass