Skip to content

Commit 35dbfa1

Browse files
authored
Merge pull request #85 from WorkflowAI/README-changes
Add demo video to README and update example script
2 parents 6a302ae + 516ed54 commit 35dbfa1

File tree

4 files changed

+98
-17
lines changed

4 files changed

+98
-17
lines changed

README.md

Lines changed: 89 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,77 @@ Official SDK from [WorkflowAI](https://workflowai.com) for Python.
1010

1111
This SDK is designed for Python teams who prefer code-first development. It provides greater control through direct code integration while still leveraging the full power of the WorkflowAI platform, complementing the web-app experience.
1212

13+
#### Try in CursorAI:
14+
```
15+
install `pip workflowai` and from https://docs.workflowai.com/python-sdk/agent build an agent that [add description of the agent you want to build]
16+
```
17+
18+
https://github.com/user-attachments/assets/634c1100-f354-46bc-9aee-92c3f2044cd6
19+
1320
## Key Features
1421

15-
- **Model-agnostic**: Works with all major AI models including OpenAI, Anthropic, Claude, Google/Gemini, Mistral, Deepseek, with a unified interface that makes switching between providers seamless. [View all supported models](https://github.com/WorkflowAI/python-sdk/blob/main/workflowai/core/domain/model.py).
22+
- **Model-agnostic**: Works with all major AI models including OpenAI, Anthropic, Claude, Google/Gemini, Mistral, DeepSeek, Grok with a unified interface that makes switching between providers seamless. [View all supported models](https://github.com/WorkflowAI/python-sdk/blob/main/workflowai/core/domain/model.py).
23+
24+
https://github.com/user-attachments/assets/7259adee-1152-44a4-9a15-78fc0a5935e1
1625

1726
- **Open-source and flexible deployment**: WorkflowAI is fully open-source with flexible deployment options. Run it self-hosted on your own infrastructure for maximum data control, or use the managed [WorkflowAI Cloud](https://docs.workflowai.com/workflowai-cloud/introduction) service for hassle-free updates and automatic scaling.
1827

19-
- **Observability integrated**: Built-in monitoring and logging capabilities that provide insights into your AI workflows, making debugging and optimization straightforward. Learn more about [observability features](https://docs.workflowai.com/concepts/runs).
28+
- **Structured output**: Uses Pydantic models to validate and structure AI responses. WorkflowAI ensures your AI responses always match your defined structure, simplifying integrations, reducing parsing errors, and making your data reliable and ready to use. Learn more about [structured input and output](https://docs.workflowai.com/python-sdk/agent#schema-input-output).
2029

21-
- **Cost tracking**: Automatically calculates and tracks the cost of each AI model run, providing transparency and helping you manage your AI budget effectively. Learn more about [cost tracking](https://docs.workflowai.com/python-sdk/agent#cost-latency).
30+
https://github.com/user-attachments/assets/0d05bf43-abdb-48fa-b96f-a6c8917c5479
2231

23-
- **Type-safe**: Leverages Python's type system to catch errors at development time rather than runtime, ensuring more reliable AI applications.
32+
- **Observability integrated**: Built-in monitoring and logging capabilities that provide insights into your AI workflows, making debugging and optimization straightforward. Learn more about [observability features](https://docs.workflowai.com/concepts/runs).
2433

25-
- **Structured output**: Uses Pydantic models to validate and structure AI responses. WorkflowAI ensures your AI responses always match your defined structure, simplifying integrations, reducing parsing errors, and making your data reliable and ready for use. Learn more about [structured input and output](https://docs.workflowai.com/python-sdk/agent#schema-input-output).
34+
https://github.com/user-attachments/assets/7bc99d61-5c49-4c65-9cf2-36c1c9415559
2635

2736
- **Streaming supported**: Enables real-time streaming of AI responses for low latency applications, with immediate validation of partial outputs. Learn more about [streaming capabilities](https://docs.workflowai.com/python-sdk/agent#streaming).
2837

38+
https://github.com/user-attachments/assets/bcb52412-4dcb-45f8-b812-4275824ed543
39+
2940
- **Provider fallback**: Automatically switches to alternative AI providers when the primary provider fails, ensuring high availability and reliability for your AI applications. This feature allows you to define fallback strategies that maintain service continuity even during provider outages or rate limiting.
3041

31-
- **Built-in tools**: Comes with powerful built-in tools like web search and web browsing capabilities, allowing your agents to access real-time information from the internet. These tools enable your AI applications to retrieve up-to-date data, research topics, and interact with web content without requiring complex integrations. Learn more about [built-in tools](https://docs.workflowai.com/python-sdk/tools).
42+
![provider-fallback](https://github.com/user-attachments/assets/cc493e94-1249-4516-b8d7-b78de7d24eb3)
43+
44+
- **Hosted tools**: Comes with powerful hosted tools like web search and web browsing capabilities, allowing your agents to access real-time information from the internet. These tools enable your AI applications to retrieve up-to-date data, research topics, and interact with web content without requiring complex integrations. Learn more about [hosted tools](https://docs.workflowai.com/python-sdk/tools#hosted-tools).
45+
46+
https://github.com/user-attachments/assets/9e1cabd1-8d1f-4cec-bad5-64871d7f033f
3247

3348
- **Custom tools support**: Easily extend your agents' capabilities by creating custom tools tailored to your specific needs. Whether you need to query internal databases, call external APIs, or perform specialized calculations, WorkflowAI's tool framework makes it simple to augment your AI with domain-specific functionality. Learn more about [custom tools](https://docs.workflowai.com/python-sdk/tools#defining-custom-tools).
3449

50+
```python
51+
# Sync tool
52+
def get_current_time(timezone: Annotated[str, "The timezone to get the current time in. e-g Europe/Paris"]) -> str:
53+
"""Return the current time in the given timezone in iso format"""
54+
return datetime.now(ZoneInfo(timezone)).isoformat()
55+
56+
# Tools can also be async
57+
async def get_latest_pip_version(package_name: Annotated[str, "The name of the pip package to check"]) -> str:
58+
"""Fetch the latest version of a pip package from PyPI"""
59+
url = f"https://pypi.org/pypi/{package_name}/json"
60+
async with httpx.AsyncClient() as client:
61+
response = await client.get(url)
62+
response.raise_for_status()
63+
data = response.json()
64+
return data['info']['version']
65+
66+
@workflowai.agent(
67+
id="research-helper",
68+
tools=[get_current_time, get_latest_pip_version],
69+
model=Model.GPT_4O_LATEST,
70+
)
71+
async def answer_question(_: AnswerQuestionInput) -> AnswerQuestionOutput:
72+
...
73+
```
74+
3575
- **Integrated with WorkflowAI**: The SDK seamlessly syncs with the WorkflowAI web application, giving you access to a powerful playground where you can edit prompts and compare models side-by-side. This hybrid approach combines the flexibility of code-first development with the visual tools needed for effective prompt engineering and model evaluation.
3676

3777
- **Multimodality support**: Build agents that can handle multiple modalities, such as images, PDFs, documents, and audio. Learn more about [multimodal capabilities](https://docs.workflowai.com/python-sdk/multimodality).
3878

39-
- **Caching support**: To save money and improve latency, WorkflowAI supports caching. When enabled, identical requests return cached results instead of making new API calls to AI providers. Learn more about [caching capabilities](https://docs.workflowai.com/python-sdk/agent#cache).
79+
https://github.com/user-attachments/assets/65d0f34e-2bb7-42bf-ab5c-be1cca96a2c6
4080

81+
- **Caching support**: To save money and improve latency, WorkflowAI supports caching. When enabled, identical requests return cached results instead of making new API calls to AI providers. Learn more about [caching capabilities](https://docs.workflowai.com/python-sdk/agent#cache).
4182

83+
- **Cost tracking**: Automatically calculates and tracks the cost of each AI model run, providing transparency and helping you manage your AI budget effectively. Learn more about [cost tracking](https://docs.workflowai.com/python-sdk/agent#cost-latency).
4284

4385
## Get Started
4486

@@ -167,14 +209,51 @@ And the runs executed via the SDK are synced with the web application.
167209

168210
Complete documentation is available at [docs.workflowai.com/python-sdk](https://docs.workflowai.com/python-sdk).
169211

170-
## Example
171-
172-
Examples are available in the [examples](./examples/) directory.
212+
## Examples
213+
214+
- [01_basic_agent.py](./examples/01_basic_agent.py): Demonstrates basic agent creation, input/output models, and cost/latency tracking.
215+
- [02_agent_with_tools.py](./examples/02_agent_with_tools.py): Shows how to use hosted tools (like `@browser-text`) and custom tools with an agent.
216+
- [03_caching.py](./examples/03_caching.py): Illustrates different caching strategies (`auto`, `always`, `never`) for agent runs.
217+
- [04_audio_classifier_agent.py](./examples/04_audio_classifier_agent.py): An agent that analyzes audio files for spam/robocall detection using audio input.
218+
- [05_browser_text_uptime_agent.py](./examples/05_browser_text_uptime_agent.py): Uses the `@browser-text` tool to fetch and extract information from web pages.
219+
- [06_streaming_summary.py](./examples/06_streaming_summary.py): Demonstrates how to stream agent responses in real-time.
220+
- [07_image_agent.py](./examples/07_image_agent.py): An agent that analyzes images to identify cities and landmarks.
221+
- [08_pdf_agent.py](./examples/08_pdf_agent.py): An agent that answers questions based on the content of a PDF document.
222+
- [09_reply.py](./examples/09_reply.py): Shows how to use the `run.reply()` method to have a conversation with an agent, maintaining context.
223+
- [10_calendar_event_extraction.py](./examples/10_calendar_event_extraction.py): Extracts structured calendar event details from text or images.
224+
- [11_ecommerce_chatbot.py](./examples/11_ecommerce_chatbot.py): A chatbot that provides product recommendations based on user queries.
225+
- [12_contextual_retrieval.py](./examples/12_contextual_retrieval.py): Generates concise contextual descriptions for document chunks to improve search retrieval.
226+
- [13_rag.py](./examples/13_rag.py): Demonstrates a RAG (Retrieval-Augmented Generation) pattern using a search tool to answer questions based on a knowledge base.
227+
- [14_templated_instructions.py](./examples/14_templated_instructions.py): Uses Jinja2 templating in agent instructions to adapt behavior based on input variables.
228+
- [15_pii_extraction.py](./examples/15_pii_extraction.py): Extracts and redacts Personal Identifiable Information (PII) from text.
229+
- [15_text_to_sql.py](./examples/15_text_to_sql.py): Converts natural language questions into safe and efficient SQL queries based on a provided database schema.
230+
- [16_multi_model_consensus.py](./examples/16_multi_model_consensus.py): Queries multiple LLMs with the same question and uses another LLM to synthesize a combined answer.
231+
- [17_multi_model_consensus_with_tools.py](./examples/17_multi_model_consensus_with_tools.py): An advanced multi-model consensus agent that uses tools to dynamically decide which models to query.
232+
- [18_flight_info_extraction.py](./examples/18_flight_info_extraction.py): Extracts structured flight information (number, dates, times, airports) from emails.
233+
- [workflows/](./examples/workflows): Contains examples of different workflow patterns (chaining, routing, parallel, orchestrator-worker). See [workflows/README.md](./examples/workflows/README.md) for details.
173234

174235
## Workflows
175236

176237
For advanced workflow patterns and examples, please refer to the [Workflows README](examples/workflows/README.md) for more details.
177238

239+
- [chain.py](./examples/workflows/chain.py): Sequential processing where tasks execute in a fixed sequence, ideal for linear processes.
240+
- [routing.py](./examples/workflows/routing.py): Directs work based on intermediate results to specialized agents, adapting behavior based on context.
241+
- [parallel_processing.py](./examples/workflows/parallel_processing.py): Splits work into independent subtasks that run concurrently for faster processing.
242+
- [orchestrator_worker.py](./examples/workflows/orchestrator_worker.py): An orchestrator plans work, and multiple worker agents execute parts in parallel.
243+
- [evaluator_optimizer.py](./examples/workflows/evaluator_optimizer.py): Employs an iterative feedback loop to evaluate and refine output quality.
244+
- [chain_of_agents.py](./examples/workflows/chain_of_agents.py): Processes long documents sequentially across multiple agents, passing findings along the chain.
245+
- [agent_delegation.py](./examples/workflows/agent_delegation.py): Enables dynamic workflows where one agent invokes other agents through tools based on the task.
246+
247+
## Cursor Integration
248+
249+
Building agents is even easier with Cursor by adding WorkflowAI docs as a documentation source:
250+
1. In Cursor chat, type `@docs`.
251+
2. Select "+ Add new doc" (at the bottom of the list).
252+
3. Add `https://docs.workflowai.com/` as a documentation source.
253+
4. Save the settings.
254+
255+
Now, Cursor will have access to the WorkflowAI docs.
256+
178257
## Contributing
179258

180259
See the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more details. Thank you!

examples/01_basic_agent.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@
2020
class CityInput(BaseModel):
2121
"""Input model for the city-to-capital agent."""
2222

23-
city: str = Field(
24-
description="The name of the city for which to find the country's capital",
25-
examples=["Paris", "New York", "Tokyo"],
26-
)
23+
# For simple input fields like 'city', descriptions and examples add token overhead
24+
# without providing additional context that a modern LLM wouldn't already understand.
25+
# Input fields never need examples since an actual value will be provided at runtime.
26+
city: str = Field()
2727

2828

2929
class CapitalOutput(BaseModel):
3030
"""Output model containing information about the capital city."""
3131

32+
# Fields like country, capital, etc. are self-explanatory to LLMs
33+
# Omitting descriptions and examples for these would reduce token usage
3234
country: str = Field(
3335
description="The country where the input city is located",
3436
examples=["France", "United States", "Japan"],
@@ -45,7 +47,7 @@ class CapitalOutput(BaseModel):
4547

4648
@workflowai.agent(
4749
id="city-to-capital",
48-
model=Model.CLAUDE_3_5_SONNET_LATEST,
50+
model=Model.CLAUDE_3_7_SONNET_LATEST,
4951
)
5052
async def get_capital_info(city_input: CityInput) -> Run[CapitalOutput]:
5153
"""

examples/07_image_agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ async def main():
7474
print(f"Latency: {agent_run.duration_seconds:.2f}s")
7575

7676
# Example using URL for Image
77-
image_url = "https://t4.ftcdn.net/jpg/02/96/15/35/360_F_296153501_B34baBHDkFXbl5RmzxpiOumF4LHGCvAE.jpg"
77+
image_url = "https://workflowai.blob.core.windows.net/workflowai-public/fixtures/paris.jpg"
7878
image = Image(url=image_url)
7979
agent_run = await identify_city_from_image.run(
8080
ImageInput(image=image),

examples/15_pii_extraction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class PIIOutput(BaseModel):
7373

7474
@workflowai.agent(
7575
id="pii-extractor",
76-
model=Model.CLAUDE_3_5_SONNET_LATEST,
76+
model=Model.LLAMA_4_SCOUT_BASIC,
7777
)
7878
async def extract_pii(input_data: PIIInput) -> PIIOutput:
7979
"""

0 commit comments

Comments
 (0)