phi-core 0.10.0

Simple, effective agent loop with tool execution and event streaming
Documentation
# Multi-Provider Configuration
#
# Demonstrates multiple LLM providers with the {{...}} ID reference protocol.
# Provider instances use {{%name%}} (no recreation if exists) or {{name}} (recreate).
# Agent instances reference providers via {{provider.name}} or {{name}} if unique.

# ── Default provider (Anthropic) ──────────────────────────────────────────
[provider]
model = "claude-sonnet-4-20250514"
name = "Claude Sonnet 4"
api_key = "${ANTHROPIC_API_KEY}"
api = "anthropic_messages"
provider = "anthropic"

[provider.cost]
input_per_million = 3.0
output_per_million = 15.0
cache_read_per_million = 0.3
cache_write_per_million = 3.75

# ── OpenAI ────────────────────────────────────────────────────────────────
[[provider.instances]]
id = "{{%openai%}}"
description = "OpenAI GPT-4o provider"
name = "GPT-4o"
model = "gpt-4o"
api_key = "${OPENAI_API_KEY}"
api = "openai_completions"
url = "https://api.openai.com/v1"

# ── OpenRouter ────────────────────────────────────────────────────────────
[[provider.instances]]
id = "{{%openrouter%}}"
description = "OpenRouter multi-model gateway"
name = "OpenRouter"
model = "anthropic/claude-sonnet-4"
api_key = "${OPENROUTER_API_KEY}"
api = "openai_completions"
url = "https://openrouter.ai/api/v1"
provider = "openrouter"

# ── Google Gemini ─────────────────────────────────────────────────────────
[[provider.instances]]
id = "{{%gemini%}}"
description = "Google Gemini 2.5 Flash provider"
name = "Gemini 2.5 Flash"
model = "gemini-2.5-flash"
api_key = "${GOOGLE_API_KEY}"
api = "google_generative_ai"

# ── Ollama (local) ────────────────────────────────────────────────────────
[[provider.instances]]
id = "{{%ollama%}}"
description = "Local Ollama instance for development"
name = "Ollama Llama 3.2"
model = "llama3.2"
api = "openai_completions"
url = "http://localhost:11434/v1"
api_key = "not-needed"
provider = "ollama"

# ── Agent profile ─────────────────────────────────────────────────────────
[agent.profile]
name = "multi-provider-agent"
system_prompt = "You are a helpful assistant."
thinking_level = "medium"

# ── Agent instances using different providers ─────────────────────────────
[[agent.instances]]
name = "cloud-agent"
system_prompt = "You are a cloud-powered assistant."
provider = "{{provider.openai}}"       # qualified reference to OpenAI instance

[[agent.instances]]
name = "local-agent"
system_prompt = "You are a local development assistant."
provider = "{{ollama}}"                # unqualified — uniquely resolves

[[agent.instances]]
name = "gemini-agent"
provider = "{{provider.gemini}}"