tokn_provider_deepseek/
lib.rs1pub 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}