Skip to content

boykopovar/aiodeepseek

Repository files navigation

aiodeepseek

Python Platform Async DeepSeek

A high-performance async Python client for the private DeepSeek API. Supports streaming, image uploads, multi-turn conversations, and new account registration.

➡️ Russian documentation: docs/ru/README.md

Installation

pip install aiodeepseek

A C++ extension build requires a compiler with AVX2 support and pybind11. More details are in docs/en/pow.md. You can also download a prebuilt release.


Quick start

Email/password authentication

import asyncio
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(
            email="myname@example.com",
            password="password123"
    ) as client:
        result = await client.ask("Hello!")
        print(result.text)

asyncio.run(main())

Token authentication

import asyncio
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(token="YOUR_TOKEN") as client:
        result = await client.ask("Hello!")
        print(result.text)

asyncio.run(main())

Streaming a response

import asyncio
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(token="YOUR_TOKEN") as client:
        async for chunk in client.ask_stream(
                prompt="Tell me about Python"
        ):
            print(chunk, end="", flush=True)

asyncio.run(main())

Multi-turn conversation

import asyncio
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(token="YOUR_TOKEN") as client:
        chat = client.new_conversation()
        print((await chat.ask("What is your name?")).text)
        print((await chat.ask("What can you do?")).text)

asyncio.run(main())

Image upload

import asyncio
from pathlib import Path
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(token="YOUR_TOKEN") as client:
        img = await client.upload_image(Path("photo.jpg"))
        result = await client.ask("What is in the photo?", image=img)
        print(result.text)

asyncio.run(main())

or by passing Path | bytes directly to ask:

import asyncio
from pathlib import Path
from aiodeepseek import DeepSeekClient

async def main():
    async with DeepSeekClient(token="YOUR_TOKEN") as client:
        result = await client.ask(
            prompt="What is in the photo?",
            image=Path("photo.jpg")
        )
        print(result.text)

asyncio.run(main())

New account registration

import asyncio
from aiodeepseek import DeepSeekClient

async def main():
    await DeepSeekClient.send_reg_code("myname@example.com")
    code = input("Code from the email: ")
    token = await DeepSeekClient.confirm_reg_code("myname@example.com", "password123", code)
    print("Token:", token)

asyncio.run(main())

Model types

from aiodeepseek import DeepSeekClient
from aiodeepseek.types.enums import ModelType

async with DeepSeekClient(token="...", model=ModelType.VISION) as client:
    ...
Value Description
ModelType.DEFAULT Standard language model
ModelType.EXPERT Deep reasoning model
ModelType.VISION Model with machine vision support

Error handling

import asyncio
from aiodeepseek import DeepSeekClient
from aiodeepseek.types.exceptions import AuthorizationError, DeepSeekError

async def main():
    try:
        async with DeepSeekClient(token="invalid") as client:
            await client.ask("Hello")
    except AuthorizationError:
        print("Token is invalid")
    except DeepSeekError as e:
        print(f"API error: {e}")

asyncio.run(main())

Proof-of-Work

Before every request, the client automatically solves the PoW challenge issued by the DeepSeek server. Typical difficulty is 144,000 iterations. The calculation is implemented in C++ using AVX2, which keeps it barely noticeable in practice. More details are in docs/en/pow.md.


Documentation


Requirements

  • Python 3.9+
  • aiohttp >= 3.9
  • A C++17 compiler with AVX2 (to build the extension) or manually downloaded wheels.