File size: 1,539 Bytes
3d700dd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import { LLMMetadataClient } from "@openhands/typescript-client/clients";
import { loadAgentServerInfo } from "../agent-server-compatibility";
import { getAgentServerClientOptions } from "../agent-server-client-options";
import { ModelsResponse, WebClientConfig } from "./option.types";
class OptionService {
static async getModels(): Promise<ModelsResponse> {
const llmClient = new LLMMetadataClient(getAgentServerClientOptions());
const [models, verifiedByProvider, providers] = await Promise.all([
llmClient.getModels(),
llmClient.getVerifiedModels(),
llmClient.getProviders(),
]);
const verifiedProviders = Object.keys(verifiedByProvider ?? {}).sort();
const verifiedModels = verifiedProviders.flatMap(
(provider) => verifiedByProvider[provider] ?? [],
);
return {
models: models ?? [],
verified_models: verifiedModels,
verified_providers:
providers?.filter((provider) => verifiedProviders.includes(provider)) ??
verifiedProviders,
default_model: verifiedModels[0] ?? models?.[0] ?? "",
};
}
static async getConfig(): Promise<WebClientConfig> {
await loadAgentServerInfo();
return {
feature_flags: {
hide_llm_settings: false,
hide_users_page: true,
},
providers_configured: [],
maintenance_start_time: null,
recaptcha_site_key: null,
faulty_models: [],
error_message: null,
updated_at: new Date().toISOString(),
};
}
}
export default OptionService;
|