provider_adapter/
provider_adapter.rs1use 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}