DeepSeek keeps it simple - two models, clear names. No "gpt-4-turbo-preview-0613-with-experimental-function-calling-v2" bullshit.
deepseek-chat - The Basic One
Your standard chat model that doesn't overthink everything. Works like GPT-4 but cheaper and faster. I use it for code reviews, explaining functions, basic debugging. Handles JSON mode without randomly wrapping everything in markdown code blocks like Claude does.
Function calling is solid. Better than GPT-4 at following schemas actually.
deepseek-reasoner - The One That Shows Its Work
This is why I switched. When I'm stuck on a problem for hours, 7 extra seconds doesn't matter. What matters is not having to guess why the AI is wrong.
Had this recursive thing that was totally fucked. Spent way too long on it. o1 gave me some useless "try this" bullshit with zero explanation. DeepSeek actually walked through the logic and showed me where I was hitting stack limits.
The reasoning traces are massive - like walls of text explaining every step. But when you're debugging production at midnight and need to understand why something's broken, that context saves your ass.
OpenAI Compatibility (Actually Works)
Drop-in replacement. Literally just:
client = OpenAI(
base_url="https://api.deepseek.com",
api_key="your-deepseek-key"
)
My entire codebase worked instantly. No parameter incompatibilities or weird edge cases.
Found out the hard way that reasoner can't do function calls. My entire agent framework just... stopped working. Took me 3 hours to figure out why. If you need tools, use deepseek-chat.
Automatic Caching Actually Works
The caching is automatic and aggressive. Same system prompt across thousands of requests? Those tokens cost $0.07 per million instead of $0.55.
My OpenAI bill was getting stupid expensive - maybe $150+ on bad days for batch document processing. DeepSeek cut that way down, like $30-40 on most days, sometimes less if the caching hits right.
The trick: put your repeated stuff (system prompts, examples) at the start of your messages. Cached segments have to be prefixes.