from skald_sdk import Skald
from skald_sdk.types import (
MemoData,
UpdateMemoData,
SearchRequest,
ChatRequest,
Filter,
SearchMethod,
FilterOperator,
FilterType,
CreateMemoResponse,
Memo,
ListMemosResponse,
UpdateMemoResponse,
IdType,
SearchResponse,
ChatResponse,
ChatStreamEvent,
GenerateDocRequest,
GenerateDocResponse,
GenerateDocStreamEvent
)
async def main():
async with Skald('your-api-key-here') as skald:
# Create a memo with types
memo_data: MemoData = {
'title': 'My Memo',
'content': 'Content here',
'tags': ['tag1', 'tag2'],
'metadata': {'department': 'engineering'}
}
create_response: CreateMemoResponse = await skald.create_memo(memo_data)
# Get memo with types
memo: Memo = await skald.get_memo('550e8400-e29b-41d4-a716-446655440000')
memo_by_ref: Memo = await skald.get_memo('external-id-123', 'reference_id')
# List memos with types
memos: ListMemosResponse = await skald.list_memos({'page': 1, 'page_size': 20})
# Update memo with types
update_data: UpdateMemoData = {
'title': 'Updated Title',
'metadata': {'status': 'reviewed'}
}
update_response: UpdateMemoResponse = await skald.update_memo(
'550e8400-e29b-41d4-a716-446655440000',
update_data
)
# Delete memo
await skald.delete_memo('550e8400-e29b-41d4-a716-446655440000')
# Search with filters and types
filters: list[Filter] = [
{
'field': 'source',
'operator': 'eq',
'value': 'notion',
'filter_type': 'native_field'
},
{
'field': 'department',
'operator': 'eq',
'value': 'engineering',
'filter_type': 'custom_metadata'
}
]
search_request: SearchRequest = {
'query': 'quarterly goals',
'search_method': 'chunk_vector_search',
'limit': 10,
'filters': filters
}
search_response: SearchResponse = await skald.search(search_request)
# Chat with filters and types
chat_response: ChatResponse = await skald.chat({
'query': 'What are our quarterly goals?',
'filters': filters
})
# Streaming chat with types
async for event in skald.streamed_chat({
'query': 'What are our quarterly goals?',
'filters': filters
}):
typed_event: ChatStreamEvent = event
if typed_event['type'] == 'token':
print(typed_event['content'], end='', flush=True)
# Generate document with filters and types
generate_doc_response: GenerateDocResponse = await skald.generate_doc({
'prompt': 'Create a product requirements document for a new mobile app',
'rules': 'Use formal business language. Include sections for: Overview, Requirements',
'filters': filters
})
# Streaming document generation with types
async for event in skald.streamed_generate_doc({
'prompt': 'Write a technical specification',
'rules': 'Include Architecture and Security sections',
'filters': filters
}):
typed_event: GenerateDocStreamEvent = event
if typed_event['type'] == 'token':
print(typed_event['content'], end='', flush=True)
elif typed_event['type'] == 'done':
print('\nDone!')