move models to hermesllm

This commit is contained in:
Adil Hafeez 2025-06-04 16:36:47 -07:00
parent 0c7aa132ee
commit 6a6afb0888
No known key found for this signature in database
GPG key ID: 9B18EF7691369645
3 changed files with 48 additions and 3 deletions

View file

@ -1,6 +1,6 @@
use bytes::Bytes;
use common::api::open_ai::Models;
use common::configuration::LlmProvider;
use common::configuration::{IntoModels, LlmProvider};
use hermesllm::providers::openai::types::Models;
use http_body_util::{combinators::BoxBody, BodyExt, Full};
use hyper::{Response, StatusCode};
use serde_json;
@ -11,7 +11,7 @@ pub async fn list_models(
) -> Response<BoxBody<Bytes, hyper::Error>> {
let prov = llm_providers.clone();
let providers = (*prov).clone();
let openai_models = Models::from(providers);
let openai_models: Models = providers.into_models();
match serde_json::to_string(&openai_models) {
Ok(json) => {

View file

@ -1,3 +1,4 @@
use hermesllm::providers::openai::types::{ModelDetail, ModelObject, Models};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt::Display;
@ -206,6 +207,30 @@ pub struct LlmProvider {
pub usage: Option<String>,
}
pub trait IntoModels {
fn into_models(self) -> Models;
}
impl IntoModels for Vec<LlmProvider> {
fn into_models(self) -> Models {
let data = self
.iter()
.map(|provider| ModelDetail {
id: provider.name.clone(),
object: "model".to_string(),
created: 0,
owned_by: "system".to_string(),
})
.collect();
Models {
object: ModelObject::List,
data,
}
}
}
impl Default for LlmProvider {
fn default() -> Self {
Self {

View file

@ -202,6 +202,26 @@ impl<'a> TryFrom<&'a [u8]> for SseChatCompletionIter<str::Lines<'a>> {
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelDetail {
pub id: String,
pub object: String,
pub created: usize,
pub owned_by: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ModelObject {
#[serde(rename = "list")]
List,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Models {
pub object: ModelObject,
pub data: Vec<ModelDetail>,
}
#[cfg(test)]
mod tests {
use super::*;