* fix(deepseek): route messages api through anthropic config
Add a DeepSeek-specific Anthropic Messages config so deepseek/... models use the native messages endpoint and preserve thinking blocks. Strip Anthropic custom tool type markers that DeepSeek rejects while keeping hosted tool types intact.
* fix(deepseek): normalize anthropic messages api base
Handle OpenAI-style DeepSeek api_base values ending in /v1 or /v1/messages by stripping those suffixes before adding the /anthropic messages path.
* chore(deepseek): format messages transformation
* chore(deepseek): add test package markers
* fix(deepseek): tighten anthropic url path check and fall back to DEEPSEEK_API_BASE
Author: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
* fix(tests): normalize smart quotes in realtime guardrail refusal check
gpt-realtime nondeterministically returns refusals with Unicode curly
apostrophes (e.g. 'I’m sorry, but I can’t assist with that.'), but the
safe_markers tuple in test_text_message_blocked_by_guardrail_no_ai_response
only contains straight ASCII apostrophes. The substring match then fails
even though the response is a clear refusal, flipping CI red.
Normalize the AI text to ASCII quotes before the marker check so both
straight and curly variants count as safe outcomes.
* fix(deepseek): drop redundant anthropic v1/messages endswith check
* fix(deepseek): strip /beta suffix in anthropic messages URL normalization
Co-authored-by: Yassin Kortam <yassin@berri.ai>
---------
Co-authored-by: Felipe Rodrigues Gare Carnielli <felipe.gare@hotmail.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Yassin Kortam <yassin@berri.ai>