Skip to main content

provider_adapter/
provider_adapter.rs

1use serde_json::json;
2use va_ai_api_bridge::{
3    DeepSeekBridgeSettings, OpenAiChatTranslator, OpenAiResponsesTranslator, ProviderBridgeAdapter,
4    ProviderBridgeAdapterConfig, ProviderRequestSource, WireProtocol, WireTranslator,
5};
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let original_responses_body = json!({
9        "model": "deepseek-v4-pro",
10        "input": [
11            {
12                "type": "message",
13                "role": "user",
14                "content": [
15                    { "type": "input_text", "text": "Call lookup_bridge_fact, then answer." }
16                ]
17            }
18        ],
19        "tools": [{
20            "type": "function",
21            "name": "lookup_bridge_fact",
22            "description": "Look up a bridge fact.",
23            "parameters": {
24                "type": "object",
25                "properties": {
26                    "topic": { "type": "string" }
27                },
28                "required": ["topic"]
29            }
30        }],
31        "tool_choice": "required"
32    });
33
34    let universal = OpenAiResponsesTranslator.decode_request(original_responses_body.clone())?;
35    let mut chat_body = OpenAiChatTranslator.encode_request(&universal)?;
36
37    let mut adapter = ProviderBridgeAdapter::for_provider(
38        "deepseek",
39        WireProtocol::OpenAiChat,
40        ProviderBridgeAdapterConfig {
41            deepseek: DeepSeekBridgeSettings {
42                thinking: true,
43                replay_reasoning_content: true,
44            },
45            ..ProviderBridgeAdapterConfig::default()
46        },
47    );
48    adapter.prepare_chat_request(
49        ProviderRequestSource::OpenAiResponses,
50        &original_responses_body,
51        &mut chat_body,
52    );
53
54    println!("{}", serde_json::to_string_pretty(&chat_body)?);
55    Ok(())
56}