Feat/deepseek adapter dropin 14224636701039833263 (#47)

* feat: refactor DeepSeekReasonerAgent as a drop-in replacement for pydantic_ai Agent

This refactor improves the `DeepSeekReasonerAgent` adapter to be a robust, drop-in replacement for native PydanticAI Agents. It brings several enhancements:

1. Re-implemented `run()` to manually inject historical messages (`message_history`) and dependencies, preserving state across workflows.
2. Replaced the simplistic crash loop with an explicit, manual multi-turn retry mechanism. If the Markdown JSON parser fails, it correctly injects the `ValidationError` back into the conversation history and prompts the model to correct its structure up to `retries` times.
3. Designed an elegant proxy `AgentRunResultProxy` to seamlessly wrap `AgentRunResult` outputs. This cleanly passes through downstream calls (e.g., `result.data`, `result.usage()`, `result.all_messages()`) avoiding `AttributeError`s and Monkey-patching.
4. Integrated fallback tool descriptions parsing, dynamically instructing the model on available tools.
5. Adapted `AgentFactory` to correctly propagate `tools` and `retries`.

Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com>

* feat: add deepseek provider option to frontend

- Added 'deepseek' option to `ProvidersSettings.tsx` `<select>`
- Updated frontend Typescript interfaces in `index.ts` to allow 'deepseek' as `provider_type`
- Validated frontend build successful

Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com>

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com>
This commit is contained in:
朝夕 2026-04-28 10:06:33 +08:00 committed by GitHub
parent 5694a30ca8
commit c1af32e604
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 3 additions and 2 deletions

View File

@ -182,6 +182,7 @@ export function ProvidersSettings() {
>
<option value="openai">OpenAI</option>
<option value="gemini">Gemini</option>
<option value="deepseek">DeepSeek</option>
<option value="claude">Claude</option>
<option value="local">Local</option>
</select>

View File

@ -14,7 +14,7 @@ export interface User {
// Provider types
export interface Provider {
provider_type: 'openai' | 'gemini' | 'claude' | 'local';
provider_type: 'openai' | 'gemini' | 'claude' | 'local' | 'deepseek';
provider_title: string;
provider_url?: string;
provider_owner?: string;
@ -25,7 +25,7 @@ export interface Provider {
}
export interface ProviderRegisterRequest {
provider_type: 'openai' | 'gemini' | 'claude' | 'local';
provider_type: 'openai' | 'gemini' | 'claude' | 'local' | 'deepseek';
provider_title: string;
provider_url: string;
provider_apikey: string;