Skip to main content

tokn_provider_deepseek/
lib.rs

1pub mod auth;
2pub mod deepseek;
3
4pub use tokn_catalogue as catalogue;
5pub use tokn_core::provider::{
6  error, AuthKind, Endpoint, HeaderPatchCtx, Provider, ProviderInfo, RequestCtx, Result, TemplateVars, ID_DEEPSEEK,
7};
8pub use tokn_core::{account as config, provider, util};
9
10pub use deepseek::*;
11
12use std::sync::Arc;
13use tokn_auth::descriptor::{EndpointSpec, ProviderDescriptor};
14use tokn_auth::provider::CredentialFlavor;
15
16pub static DEFAULT_ENDPOINTS: &[Endpoint] = &[Endpoint::ChatCompletions, Endpoint::Messages];
17
18pub static DESCRIPTOR: ProviderDescriptor = ProviderDescriptor {
19  id: ID_DEEPSEEK,
20  display_name: "DeepSeek",
21  hosts: &["api.deepseek.com"],
22  base_url: deepseek::DEFAULT_BASE_URL,
23  credentials: &[CredentialFlavor::ApiKey],
24  endpoints: &[
25    EndpointSpec {
26      endpoint: Endpoint::ChatCompletions,
27      method: "POST",
28      path: "/v1/chat/completions",
29      aliases: &["/chat/completions"],
30    },
31    EndpointSpec {
32      endpoint: Endpoint::Messages,
33      method: "POST",
34      path: "/v1/messages",
35      aliases: &["/anthropic/v1/messages"],
36    },
37  ],
38  model_endpoint_rules: Some(&[]),
39  rewrites: &[],
40  auth_urls: &[],
41  matches_url,
42  validate,
43  build,
44  build_auth: Some(crate::auth::provider_auth),
45};
46
47pub fn matches_url(host: &str, _path: &str, _id: &'static str) -> bool {
48  DESCRIPTOR.hosts.contains(&host)
49}
50
51pub fn validate(account: &tokn_core::account::AccountConfig) -> tokn_core::provider::Result<()> {
52  deepseek::DeepSeekProvider::validate_account(account)
53}
54
55pub fn build(
56  account: Arc<tokn_core::account::AccountConfig>,
57) -> tokn_core::provider::Result<Arc<dyn tokn_core::provider::Provider>> {
58  Ok(Arc::new(deepseek::DeepSeekProvider::from_account(account)?))
59}