relay_knowledge/adapters/
embedding.rs1use crate::{
4 net::{NetworkRuntime, http},
5 ports::embedding::{
6 EmbeddingFuture, EmbeddingProvider, EmbeddingProviderError, EmbeddingRequest,
7 EmbeddingVector, ProviderRetryClass,
8 },
9 retrieval::{RemoteEmbeddingConfig, provider::embedding_provider_with_qos},
10};
11
12pub struct NetworkEmbeddingProvider {
14 config: RemoteEmbeddingConfig,
15 network: NetworkRuntime,
16}
17
18impl NetworkEmbeddingProvider {
19 pub fn new(config: RemoteEmbeddingConfig, network: NetworkRuntime) -> Self {
20 Self { config, network }
21 }
22}
23
24impl EmbeddingProvider for NetworkEmbeddingProvider {
25 fn embed(&self, request: EmbeddingRequest) -> EmbeddingFuture<'_, Vec<EmbeddingVector>> {
26 Box::pin(async move {
27 let network = self.network.current();
28 let client = http::outbound_json_client(&network.http).map_err(|error| {
29 EmbeddingProviderError {
30 retry: ProviderRetryClass::Permanent,
31 status_code: None,
32 code: "client_build_failed".to_owned(),
33 message: error.to_string(),
34 }
35 })?;
36 embedding_provider_with_qos(
37 self.config.clone(),
38 client,
39 self.network.qos_runtime(),
40 network.qos,
41 )
42 .embed(request)
43 .await
44 })
45 }
46}