mirror of
https://github.com/katanemo/plano.git
synced 2026-05-06 22:32:42 +02:00
* updating the implementation of /v1/chat/completions to use the generic provider interfaces * saving changes, although we will need a small re-factor after this as well * more refactoring changes, getting close * more refactoring changes to avoid unecessary re-direction and duplication * more clean up * more refactoring * more refactoring to clean code and make stream_context.rs work * removing unecessary trait implemenations * some more clean-up * fixed bugs * fixing test cases, and making sure all references to the ChatCOmpletions* objects point to the new types * refactored changes to support enum dispatch * removed the dependency on try_streaming_from_bytes into a try_from trait implementation * updated readme based on new usage * updated code based on code review comments --------- Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-2.local> Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-4.local>
40 lines
1.3 KiB
Rust
40 lines
1.3 KiB
Rust
use bytes::Bytes;
|
|
use common::configuration::{IntoModels, LlmProvider};
|
|
use hermesllm::apis::openai::Models;
|
|
use http_body_util::{combinators::BoxBody, BodyExt, Full};
|
|
use hyper::{Response, StatusCode};
|
|
use serde_json;
|
|
use std::sync::Arc;
|
|
|
|
pub async fn list_models(
|
|
llm_providers: Arc<tokio::sync::RwLock<Vec<LlmProvider>>>,
|
|
) -> Response<BoxBody<Bytes, hyper::Error>> {
|
|
let prov = llm_providers.read().await;
|
|
let providers = prov.clone();
|
|
let openai_models: Models = providers.into_models();
|
|
|
|
match serde_json::to_string(&openai_models) {
|
|
Ok(json) => {
|
|
let body = Full::new(Bytes::from(json))
|
|
.map_err(|never| match never {})
|
|
.boxed();
|
|
Response::builder()
|
|
.status(StatusCode::OK)
|
|
.header("Content-Type", "application/json")
|
|
.body(body)
|
|
.unwrap()
|
|
}
|
|
Err(_) => {
|
|
let body = Full::new(Bytes::from_static(
|
|
b"{\"error\":\"Failed to serialize models\"}",
|
|
))
|
|
.map_err(|never| match never {})
|
|
.boxed();
|
|
Response::builder()
|
|
.status(StatusCode::INTERNAL_SERVER_ERROR)
|
|
.header("Content-Type", "application/json")
|
|
.body(body)
|
|
.unwrap()
|
|
}
|
|
}
|
|
}
|