Source code for agent.providers.deepseek
"""
DeepSeek provider adapter.
Uses OpenAI-compatible API.
"""
from collections.abc import AsyncIterator, Iterator
from typing import Any # noqa: F811
from agent.messages import AgentRequest
from agent.providers.base import BaseProvider
from agent.providers.registry import ProviderRegistry
from agent.response import AgentResponse
from agent.stream import StreamEvent
from agent.types.config import ProviderCapabilities
# DeepSeek uses OpenAI-compatible API
try:
from agent.providers.openai import HAS_OPENAI, OpenAIProvider
except ImportError:
HAS_OPENAI = False
OpenAIProvider: Any = None
[docs]
class DeepSeekProvider(BaseProvider):
"""
DeepSeek provider adapter.
Uses the OpenAI-compatible API with DeepSeek's endpoint.
"""
name = "deepseek"
capabilities = ProviderCapabilities(
streaming=True,
tools=True,
structured_output=True,
json_mode=True,
vision=False, # DeepSeek doesn't support vision yet
system_messages=True,
batch=False,
native_schema_output=False,
)
DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1"
def __init__(
self,
api_key: str | None = None,
base_url: str | None = None,
timeout: float = 120.0,
max_retries: int = 2,
**kwargs: Any,
):
if not HAS_OPENAI:
raise ImportError(
"OpenAI package not installed (required for DeepSeek). "
"Install with: pip install agent-core-py[deepseek]"
)
super().__init__(
api_key=api_key,
base_url=base_url or self.DEEPSEEK_BASE_URL,
timeout=timeout,
max_retries=max_retries,
**kwargs,
)
# Use OpenAI provider with DeepSeek endpoint
# Default to deepseek-chat if no model specified
if "model" not in kwargs:
kwargs["model"] = "deepseek-chat"
assert OpenAIProvider is not None
self._openai_provider = OpenAIProvider(
api_key=api_key,
base_url=base_url or self.DEEPSEEK_BASE_URL,
timeout=timeout,
max_retries=max_retries,
**kwargs,
)
# Override provider name in responses
self._openai_provider.name = self.name
[docs]
def run(self, request: AgentRequest) -> AgentResponse:
"""Execute a synchronous request."""
response = self._openai_provider.run(request)
response.provider = self.name
return response
[docs]
async def run_async(self, request: AgentRequest) -> AgentResponse:
"""Execute an asynchronous request."""
response = await self._openai_provider.run_async(request)
response.provider = self.name
return response
[docs]
def stream(self, request: AgentRequest) -> Iterator[StreamEvent]:
"""Execute a streaming request."""
yield from self._openai_provider.stream(request)
[docs]
async def stream_async(self, request: AgentRequest) -> AsyncIterator[StreamEvent]:
"""Execute an async streaming request."""
async for event in self._openai_provider.stream_async(request):
yield event
# Register the provider
ProviderRegistry.register("deepseek", DeepSeekProvider)