diff options
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | config.example.yaml | 10 | ||||
| -rw-r--r-- | src/client/mod.rs | 7 | ||||
| -rw-r--r-- | src/client/openai_compatible.rs (renamed from src/client/localai.rs) | 12 |
4 files changed, 19 insertions, 14 deletions
@@ -3,7 +3,7 @@ [](https://github.com/sigoden/aichat/actions/workflows/ci.yaml) [](https://crates.io/crates/aichat) -All-in-one CLI tool for 10+ AI platforms, including OpenAI, Gemini, Claude, Mistral, LocalAI, Ollama, VertexAI, Ernie, Qianwen... +All-in-one CLI tool for 10+ AI platforms, including OpenAI, Gemini, Claude, Mistral, Ollama, VertexAI, Ernie, Qianwen, Moonshot... Command Mode: @@ -47,7 +47,7 @@ Download it from [GitHub Releases](https://github.com/sigoden/aichat/releases), - Gemini (free, vision) - Claude: Claude2/Claude3 (paid) - Mistral (paid) - - LocalAI (free, local, vision) + - OpenAI-Compatible (local) - Ollama (free, local) - Azure-OpenAI (paid) - VertexAI: Gemini-1/Gemini-1.5 (paid, vision) diff --git a/config.example.yaml b/config.example.yaml index 8f8e22a..b7ce1d9 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -40,15 +40,15 @@ clients: # See https://docs.anthropic.com/claude/reference/getting-started-with-the-api - type: claude - api_key: sk-xxx + api_key: sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - type: mistral api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - # Any openai-compatible API providers or https://github.com/go-skynet/LocalAI - - type: localai + # Any openai-compatible API providers + - type: openai-compatible # Renamed from localai api_base: http://localhost:8080/v1 - api_key: xxx + api_key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx chat_endpoint: /chat/completions # Optional field models: - name: llama2 @@ -95,4 +95,4 @@ clients: # See https://platform.moonshot.cn/docs/intro - type: moonshot - api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file + api_key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file diff --git a/src/client/mod.rs b/src/client/mod.rs index 7c7cfba..37775f3 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -12,7 +12,12 @@ register_client!( (gemini, "gemini", GeminiConfig, GeminiClient), (claude, "claude", ClaudeConfig, ClaudeClient), (mistral, "mistral", MistralConfig, MistralClient), - (localai, "localai", LocalAIConfig, LocalAIClient), + ( + openai_compatible, + "openai-compatible", + OpenAICompatibleConfig, + OpenAICompatibleClient + ), (ollama, "ollama", OllamaConfig, OllamaClient), ( azure_openai, diff --git a/src/client/localai.rs b/src/client/openai_compatible.rs index 0e9db0e..ec3333c 100644 --- a/src/client/localai.rs +++ b/src/client/openai_compatible.rs @@ -1,5 +1,5 @@ use super::openai::{openai_build_body, OPENAI_TOKENS_COUNT_FACTORS}; -use super::{ExtraConfig, LocalAIClient, Model, ModelConfig, PromptType, SendData}; +use super::{ExtraConfig, Model, ModelConfig, OpenAICompatibleClient, PromptType, SendData}; use crate::utils::PromptKind; @@ -9,7 +9,7 @@ use reqwest::{Client as ReqwestClient, RequestBuilder}; use serde::Deserialize; #[derive(Debug, Clone, Deserialize)] -pub struct LocalAIConfig { +pub struct OpenAICompatibleConfig { pub name: Option<String>, pub api_base: String, pub api_key: Option<String>, @@ -18,9 +18,9 @@ pub struct LocalAIConfig { pub extra: Option<ExtraConfig>, } -openai_compatible_client!(LocalAIClient); +openai_compatible_client!(OpenAICompatibleClient); -impl LocalAIClient { +impl OpenAICompatibleClient { config_get_fn!(api_key, get_api_key); pub const PROMPTS: [PromptType<'static>; 4] = [ @@ -35,7 +35,7 @@ impl LocalAIClient { ), ]; - pub fn list_models(local_config: &LocalAIConfig) -> Vec<Model> { + pub fn list_models(local_config: &OpenAICompatibleConfig) -> Vec<Model> { let client_name = Self::name(local_config); local_config @@ -65,7 +65,7 @@ impl LocalAIClient { let url = format!("{}{chat_endpoint}", self.config.api_base); - debug!("LocalAI Request: {url} {body}"); + debug!("OpenAICompatible Request: {url} {body}"); let mut builder = client.post(url).json(&body); if let Some(api_key) = api_key { |
