Expand description
Capability adapters for the Converge runtime.
Providers produce observations, never decisions. Converge converges; providers adapt.
This crate provides capability adapters (providers) that connect Converge
workflows to external systems. Providers implement traits defined in
converge-core and return structured observations with provenance.
§What Is a Provider?
A provider is an adapter that:
- Implements capability traits (
LlmProvider,Embedding,VectorRecall, etc.) - Returns observations (not facts, not decisions)
- Includes provenance metadata for tracing
- Is stateless (no hidden lifecycle state)
A provider is NOT:
- An agent (agents live in
converge-core) - Orchestration (no workflows, no scheduling)
- Domain logic (business rules live in
converge-domain)
§Available Providers
§Remote Providers
AnthropicProvider- Claude API (Anthropic)OpenAiProvider- GPT-4, GPT-3.5 (OpenAI)GeminiProvider- Gemini Pro (Google)- [
PerplexityProvider] - Perplexity AI - [
QwenProvider] - Qwen models (Alibaba Cloud) OpenRouterProvider- Multi-provider aggregator- [
MinMaxProvider] -MinMaxAI - [
GrokProvider] - Grok (xAI) - [
MistralProvider] - Mistral AI - [
DeepSeekProvider] -DeepSeekAI - [
BaiduProvider] - Baidu ERNIE - [
ZhipuProvider] - Zhipu GLM - [
KimiProvider] - Kimi (Moonshot AI) - [
ApertusProvider] - Apertus (Switzerland, EU digital sovereignty)
§Local Providers
- [
OllamaProvider] - Local models via Ollama (Qwen, Llama, Mistral, etc.)
§Prompt Structuring
This crate provides provider-specific prompt structuring and optimization:
ProviderPromptBuilder: Builds prompts optimized for specific providersStructuredResponseParser: Parses structured responses (XML/JSON)- Helper functions:
build_claude_prompt,build_openai_prompt
§Examples
§Using Anthropic (Claude)
ⓘ
use converge_provider::{AnthropicProvider, build_claude_prompt, StructuredResponseParser};
use converge_traits::llm::{LlmProvider, LlmRequest};
use converge_core::prompt::{AgentRole, OutputContract, PromptContext};
use converge_core::context::ContextKey;
let provider = AnthropicProvider::from_env("claude-sonnet-4-6")?;
// Build optimized prompt with XML structure
let prompt = build_claude_prompt(
AgentRole::Proposer,
"extract-competitors",
PromptContext::new(),
OutputContract::new("proposed-fact", ContextKey::Competitors),
vec![],
);
let response = provider.complete(&LlmRequest::new(prompt))?;
// Parse structured XML response
let proposals = StructuredResponseParser::parse_claude_xml(
&response,
ContextKey::Competitors,
"anthropic",
);§Using OpenAI
ⓘ
use converge_provider::OpenAiProvider;
use converge_traits::llm::{LlmProvider, LlmRequest};
let provider = OpenAiProvider::from_env("gpt-4")?;
let response = provider.complete(&LlmRequest::new("Hello!"))?;§Using OpenRouter (Multi-Provider)
ⓘ
use converge_provider::OpenRouterProvider;
use converge_traits::llm::{LlmProvider, LlmRequest};
// Access any provider through OpenRouter
let provider = OpenRouterProvider::from_env("anthropic/claude-3-opus")?;
let response = provider.complete(&LlmRequest::new("Hello!"))?;Re-exports§
pub use contract::CallTimer;pub use contract::Capability;pub use contract::ProviderCallContext;pub use contract::ProviderMeta;pub use contract::ProviderObservation;pub use contract::Region;pub use contract::TokenUsage;pub use contract::canonical_hash;pub use llm::AnthropicBackend;pub use brave::BraveCapability;pub use brave::BraveSearchError;pub use brave::BraveSearchProvider;pub use brave::BraveSearchRequest;pub use brave::BraveSearchResponse;pub use brave::BraveSearchResult;pub use ocr::OcrProvider;pub use ocr::OcrRequest;pub use ocr::OcrResult;pub use ocr::OcrError;pub use ocr::OcrInput;pub use ocr::OcrOutputFormat;pub use ocr::OcrTable;pub use ocr::OcrImage;pub use ocr::OcrSpan;pub use ocr::OcrProvenance;pub use ocr::OcrPreprocessing;pub use ocr::OcrConfidence;pub use ocr::compute_hash;pub use ocr::with_trace_hashes;pub use ocr::MistralOcrProvider;pub use ocr::DeepSeekOcrProvider;pub use ocr::LightOnOcrProvider;pub use ocr::TesseractOcrProvider;pub use ocr::TesseractConfig;pub use ocr::TesseractOutputFormat;pub use tools::GraphQlConfig;pub use tools::GraphQlConverter;pub use tools::GraphQlOperationType;pub use tools::InputSchema;pub use tools::InlineToolConfig;pub use tools::McpClient;pub use tools::McpClientBuilder;pub use tools::McpServerConfig;pub use tools::McpTransport;pub use tools::McpTransportType;pub use tools::OpenApiConfig;pub use tools::OpenApiConverter;pub use tools::ParsedToolCall;pub use tools::SourceFilter;pub use tools::ToolAwareProvider;pub use tools::ToolAwareResponse;pub use tools::ToolCall;pub use tools::ToolDefinition;pub use tools::ToolError;pub use tools::ToolErrorKind;pub use tools::ToolFormat;pub use tools::ToolHandler;pub use tools::ToolRegistry;pub use tools::ToolResult;pub use tools::ToolResultContent;pub use tools::ToolSource;pub use tools::ToolsConfig;pub use tools::ToolsConfigError;
Modules§
- brave
- Brave Search API provider.
- contract
- Provider contract types for structured observations and call context.
- embedding
- Embedding provider implementations for Converge.
- graph
- Graph store implementations for Converge.
- llm
- LLM Backend implementations for the unified
LlmBackendtrait. - ocr
- OCR / Document AI providers.
- registry_
loader - YAML-based model registry loader.
- reranker
- Reranker provider implementations for Converge.
- tools
- Tool abstractions for MCP, OpenAPI, and GraphQL integration.
- vector
- Vector store implementations for Converge.
Structs§
- Anthropic
Provider - Anthropic Claude API provider.
- Capability
Registry - Unified capability registry.
- Capability
Requirements - Requirements for capability selection.
- Chat
Completion Request - OpenAI-compatible chat completion request.
- Chat
Completion Response - OpenAI-compatible chat completion response.
- Chat
Message - OpenAI-compatible message format.
- Chat
Usage - OpenAI-compatible usage statistics.
- Fake
Provider - A deterministic provider for testing.
- Fitness
Breakdown - Breakdown of fitness score components.
- Gemini
Provider - Google Gemini API provider.
- Http
Provider Config - Base configuration for HTTP-based LLM providers.
- Model
Metadata - Model metadata for selection.
- Model
Selector - Model selector that matches requirements to models.
- Open
AiProvider OpenAIGPT API provider.- Open
AiStyle Error - OpenAI-compatible error response format.
- Open
AiStyle Error Detail - Error detail in OpenAI-compatible format.
- Open
Router Provider OpenRouterAPI provider.- Provider
Prompt Builder - Provider-specific prompt builder.
- Provider
Registry - Runtime provider registry that tracks available providers and allows dynamic metadata updates.
- Search
Provider Meta - Web search provider metadata for agent selection.
- Selection
Result - Result of model selection with detailed information.
- Structured
Response Parser - Parser for structured LLM responses.
- WebSearch
Requirements - Requirements for selecting a web search provider.
Enums§
- Rejection
Reason - Reason why a model was rejected during selection.
Traits§
- Open
AiCompatible Provider - Helper for providers that use OpenAI-compatible API.
Functions§
- build_
claude_ prompt - Helper function to build a prompt for Claude with XML optimization.
- build_
openai_ prompt - Helper function to build a prompt for
OpenAIwith JSON optimization. - can_
create_ provider - Checks if a provider can be created (has required API keys).
- chat_
response_ to_ llm_ response - Converts an OpenAI-compatible response to
LlmResponse. - create_
provider - Creates a provider instance from provider name and model ID.
- create_
tool_ aware_ provider - Creates a tool-aware provider that wraps an LLM provider with tool calling capabilities.
- handle_
openai_ style_ error - Handles HTTP error responses for OpenAI-compatible providers.
- is_
brave_ available - Checks if Brave Search is available.
- is_
provider_ available - Checks if a provider is available (has API key set).
- make_
chat_ completion_ request - Makes an OpenAI-compatible chat completion request.
- parse_
finish_ reason - Converts a finish reason string to
FinishReasonenum.