Lots of improvements; the highlights are provider-agnostic model configuration backed by pydantic_ai, email ingestion, and a major infrastructure overhaul.
- Fixed a number of bugs that affected the core query algorithms
- Provider-agnostic chat and embedding model configuration via new
model_adaptersmodule backed by pydantic_ai (#200):- Use
provider:modelspec strings, e.g.create_chat_model("openai:gpt-4o"). - Replace
AsyncEmbeddingModelwithIEmbedder/IEmbeddingModelprotocols andCachingEmbeddingModel. - Add
OPENAI_MODELandOPENAI_EMBEDDING_MODELenvvars to override the default chat and embedding models.
- Use
- Split
interfaces.pyinto separate modules (interfaces_core,_indexes,_search,_serialization,_storage) (Bernhard Merkle, #118). - Make remaining storage-provider APIs async
(
get/set_conversation_metadata,is_source_ingested, etc.) (#196). - Fix listeners/recipients confusion in podcast metadata serialization (#174).
- Implement
SqliteRelatedTermsIndex.serialize()(Rajiv Singh, #115).
- New tools/ingest_email.py tool to ingest email into a SQLite-backed conversation database (#111).
- Add tools/mail/outlook_dump.py to dump Outlook/Microsoft 365 email via the Graph API (Bernhard Merkle, #199).
- Add tools/mail/mbox_dump.py to convert mbox files for ingestion (Bernhard Merkle, #198).
- Consolidate mail dump tools under tools/mail/ with shared README.md (Bernhard Merkle).
- Various ergonomic improvements and fixes (#162, #168, #170).
- Add conversation history to tools/query.py for pronoun/reference resolution across multi-turn queries (Rajiv Singh, #117).
- Add tools/load_json.py to load JSON-serialized index data
into a SQLite database; remove
--podcastflag from tools/query.py (#164).
- Improve docs for Azure env vars (#175).
- Add AgentCon 2026 presentation and demo videos (Bernhard Merkle, #194, #202).
- VS Code / Pyright plugin setup instructions (Bernhard Merkle, #150).
- Changes pyproject.toml to use uv more idiomatically.
- Local devs write
uv syncinstead ofuv sync --extra dev. - From PyPI (with uv or pip) you can use
typeagent[dev]to install the dev dependencies with the package.
- Local devs write
- Move typeagent/ to src/typeagent/ (Bernhard Merkle, #139).
- Move tests and test data to tests/ directory (Bernhard Merkle, #144).
- Move ancillary dirs into subdirs (Bernhard Merkle, #145).
- Introduce
isortfor import sorting. - Make pyright error on unused variables and imports (#129).
- Add readline support on Windows (#152, Bernhard Merkle).
- Enhance release script to update uv.lock and create release PR (Rajiv Singh, #169).
General cleanup and fixes, and the following notable improvements:
- Document
AZURE_OPENAI_ENDPOINT_EMBEDDING(Gwyneth Peña-Siguenza). - Add link to PyBay 2025 talk video.
- Simplify
load_dotenv(). - Split embedding requests that are too large (Raphael Wirth).
- Overhaul conversation metadata in storage providers.
- Add extra optional keyword parameters to
create_conversation(). - Add
Quantifierto ingestion schema in addition toQuantity. - Extract knowledge concurrently (max 4 by default) (Kevin Turcios).
- Fixes for
get_multiple()implementations. - Tweak defaults in
ConversationSettings.
- Pass LLM requests to MCP client instead of calling the OpenAI API.
- Add
--databaseoption to MCP server.
- The tools/query.py tool now supports
@-commands. Try@help. - Add tools/ingest_podcast.py (a tool that ingests podcasts).
- Fix coverage support for MCP server test.
- Use an updated "Adrian Tchaikovsky" podcast data dump (Rob Gruen).
- Fix Windows testing issues. Run CI on Windows too (Raphael Wirth).
- Run tests in CI using secrets stored in repo (Rob Gruen).
- Migrate package build from setuptools to uv_build.
- Add
install-libatomictarget toMakefile(Bernhard Merkle).
Brown bag release!
- Put
blackback with the runtime dependencies (it's used for debug output).
- Limit dependencies to what's needed at runtime;
dev dependencies can be installed separately with
uv sync --extra dev. - Add
endpoint_envvararg toAsyncEmbeddingModelto allow configuring a non-standard embedding service.
- First public release, for PyBay '25 talk