Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions python/packages/core/agent_framework/_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,9 @@ def _tools_to_dict( # pyright: ignore[reportUnusedFunction]
if isinstance(tool_item, FunctionTool):
results.append(tool_item.to_json_schema_spec())
continue
if isinstance(tool_item, BaseModel):
results.append(tool_item.model_dump(exclude_none=True))
continue
if isinstance(tool_item, SerializationMixin):
results.append(tool_item.to_dict())
continue
Expand Down
14 changes: 14 additions & 0 deletions python/packages/core/tests/core/test_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,26 @@
from agent_framework._tools import (
_parse_annotation,
_parse_inputs,
_tools_to_dict,
)
from agent_framework.observability import OtelAttr

# region FunctionTool and tool decorator tests


def test_tools_to_dict_supports_pydantic_tool_models() -> None:
"""Pydantic-based tool specs are serialized without logging parse warnings."""

class ProviderTool(BaseModel):
kind: str
enabled: bool = True
note: str | None = None

result = _tools_to_dict([ProviderTool(kind="google_search")])

assert result == [{"kind": "google_search", "enabled": True}]


def test_tool_decorator():
"""Test the tool decorator."""

Expand Down
3 changes: 2 additions & 1 deletion python/packages/gemini/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# Gemini Package (agent-framework-gemini)

Integration with Google's Gemini API via the `google-genai` SDK.
Integration with Google's Gemini Developer API and Vertex AI via the `google-genai` SDK.

## Core Classes

- **`RawGeminiChatClient`** - Lightweight chat client without any layers, for custom pipeline composition
- **`GeminiChatClient`** - Full-featured chat client with function invocation, middleware, and telemetry
- **`GeminiChatOptions`** - Options TypedDict for Gemini-specific parameters
- **`GeminiSettings`** - Settings loaded from environment variables
- **`GoogleGeminiSettings`** - SDK-standard `GOOGLE_*` settings loaded from environment variables
- **`ThinkingConfig`** - Configuration for extended thinking

## Gemini-specific Options
Expand Down
21 changes: 19 additions & 2 deletions python/packages/gemini/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,28 @@ The Gemini integration enables Microsoft Agent Framework applications to call Go

## Authentication

Obtain an API key from [Google AI Studio](https://aistudio.google.com/apikey) and set it via environment variable:
The connector supports both `google-genai` authentication modes.

### Gemini Developer API

Obtain an API key from [Google AI Studio](https://aistudio.google.com/apikey) and set either the package-prefixed or SDK-standard environment variable:

```bash
export GEMINI_API_KEY="your-api-key"
export GEMINI_MODEL="gemini-2.5-flash"
# or: export GOOGLE_API_KEY="your-api-key"
export GEMINI_MODEL="gemini-2.5-flash-lite"
# or: export GOOGLE_MODEL="gemini-2.5-flash-lite"
```

### Vertex AI

Set the standard Vertex AI environment variables used by `google-genai`:

```bash
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_LOCATION="global"
export GOOGLE_MODEL="gemini-2.5-flash-lite"
```

## Examples
Expand Down
10 changes: 9 additions & 1 deletion python/packages/gemini/agent_framework_gemini/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@

import importlib.metadata

from ._chat_client import GeminiChatClient, GeminiChatOptions, GeminiSettings, RawGeminiChatClient, ThinkingConfig
from ._chat_client import (
GeminiChatClient,
GeminiChatOptions,
GeminiSettings,
GoogleGeminiSettings,
RawGeminiChatClient,
ThinkingConfig,
)

try:
__version__ = importlib.metadata.version(__name__)
Expand All @@ -13,6 +20,7 @@
"GeminiChatClient",
"GeminiChatOptions",
"GeminiSettings",
"GoogleGeminiSettings",
"RawGeminiChatClient",
"ThinkingConfig",
"__version__",
Expand Down
Loading
Loading