diff options
| author | sigoden <sigoden@gmail.com> | 2024-05-01 06:01:10 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-01 06:01:10 +0800 |
| commit | 5eae392dbd4fc789829ac2f47a24614dbc5db5e9 (patch) | |
| tree | 331aded9b1badd5b66eb6b7afbbbe8f8227b87b8 | |
| parent | 8aa18b59f5be467fcadc9aa679bce58d66e62793 (diff) | |
| download | aichat-5eae392dbd4fc789829ac2f47a24614dbc5db5e9.tar.gz | |
refactore: add models for openai-compatible platforms (#471)
| -rw-r--r-- | config.example.yaml | 57 | ||||
| -rw-r--r-- | models.yaml | 355 | ||||
| -rw-r--r-- | src/client/bedrock.rs | 12 | ||||
| -rw-r--r-- | src/client/common.rs | 3 | ||||
| -rw-r--r-- | src/client/prompt_format.rs | 4 |
5 files changed, 348 insertions, 83 deletions
diff --git a/config.example.yaml b/config.example.yaml index 47f644a..ea9e2fa 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -70,6 +70,7 @@ clients: # See https://docs.mistral.ai/ - type: openai-compatible name: mistral + api_base: https://api.mistral.ai/v1 api_key: xxx # ENV: {client}_API_KEY # See https://docs.cohere.com/docs/the-cohere-platform @@ -77,11 +78,15 @@ clients: api_key: xxx # ENV: {client}_API_KEY # See https://docs.perplexity.ai/docs/getting-started - - type: perplexity + - type: openai-compatible + name: perplexity + api_base: https://api.perplexity.ai api_key: pplx-xxx # ENV: {client}_API_KEY # See https://console.groq.com/docs/quickstart - - type: groq + - type: openai-compatible + name: groq + api_base: https://api.groq.com/openai/v1 api_key: gsk_xxx # ENV: {client}_API_KEY # See https://github.com/jmorganca/ollama @@ -137,71 +142,43 @@ clients: api_key: sk-xxx # ENV: {client}_API_KEY # See https://platform.moonshot.cn/docs/intro - - type: moonshot + - type: openai-compatible + name: moonshot + api_base: https://api.moonshot.cn/v1 api_key: sk-xxx # ENV: {client}_API_KEY # See https://docs.endpoints.anyscale.com/ - type: openai-compatible name: anyscale + api_base: https://api.endpoints.anyscale.com/v1 api_key: xxx # ENV: {client}_API_KEY - models: - # https://docs.endpoints.anyscale.com/text-generation/query-a-model#select-a-model - - name: meta-llama/Meta-Llama-3-70B-Instruct - max_input_tokens: 8192 - input_price: 1 - output_price: 1 # See https://deepinfra.com/docs - type: openai-compatible name: deepinfra + api_base: https://api.deepinfra.com/v1/openai api_key: xxx # ENV: {client}_API_KEY - models: - # https://deepinfra.com/models - - name: meta-llama/Meta-Llama-3-70B-Instruct - max_input_tokens: 8192 - input_price: 0.59 - output_price: 0.79 # See https://readme.fireworks.ai/docs/quickstart - type: openai-compatible name: fireworks + api_base: https://api.fireworks.ai/inference/v1 api_key: xxx # ENV: {client}_API_KEY - models: - # https://fireworks.ai/models - - name: accounts/fireworks/models/llama-v3-70b-instruct - max_input_tokens: 8192 - input_price: 0.9 - output_price: 0.9 # See https://openrouter.ai/docs#quick-start - type: openai-compatible name: openrouter + api_base: https://openrouter.ai/api/v1 api_key: xxx # ENV: {client}_API_KEY - models: - # https://openrouter.ai/docs#models - - name: meta-llama/llama-3-70b-instruct - max_input_tokens: 8192 - input_price: 0.81 - output_price: 0.81 # See https://octo.ai/docs/getting-started/quickstart - type: openai-compatible name: octoai + api_base: https://text.octoai.run/v1 api_key: xxx # ENV: {client}_API_KEY - models: - # https://octo.ai/docs/getting-started/inference-models - - name: meta-llama-3-70b-instruct - max_input_tokens: 8192 - input_price: 0.86 - output_price: 0.86 # See https://docs.together.ai/docs/quickstart - type: openai-compatible name: together - api_key: xxx # ENV: {client}_API_KEY - models: - # https://docs.together.ai/docs/inference-models - - name: meta-llama/Llama-3-70b-chat-hf - max_input_tokens: 8192 - input_price: 0.9 - output_price: 0.9
\ No newline at end of file + api_base: https://api.together.xyz/v1 + api_key: xxx # ENV: {client}_API_KEY
\ No newline at end of file diff --git a/models.yaml b/models.yaml index cca234c..5b57dae 100644 --- a/models.yaml +++ b/models.yaml @@ -1,7 +1,3 @@ -# NOTES: -# - This model list is scheduled to be updated with each new aichat release. Please do not submit PR to add new models. -# - This model list does not include models officially marked as legacy or beta. - - platform: openai # docs: # - https://platform.openai.com/docs/models @@ -129,10 +125,6 @@ max_input_tokens: 32000 input_price: 2 output_price: 6 - - name: mistral-medium-latest - max_input_tokens: 32000 - input_price: 2.7 - output_price: 8.1 - name: mistral-large-latest max_input_tokens: 32000 input_price: 8 @@ -310,16 +302,6 @@ input_price: 0.25 output_price: 1.25 supports_vision: true - - name: meta.llama2-13b-chat-v1 - max_input_tokens: 4096 - max_output_tokens: 2048 - input_price: 0.75 - output_price: 1 - - name: meta.llama2-70b-chat-v1 - max_input_tokens: 4096 - max_output_tokens: 2048 - input_price: 1.95 - output_price: 2.56 - name: meta.llama3-8b-instruct-v1:0 max_input_tokens: 8192 max_output_tokens: 4096 @@ -351,21 +333,23 @@ # - https://developers.cloudflare.com/workers-ai/models/ # - https://developers.cloudflare.com/workers-ai/platform/pricing/ # notes: - # - get max_output_tokens info from models doc + # - unable to get max_output_tokens info models: - - name: '@cf/meta/llama-2-7b-chat-fp16' - max_input_tokens: 3072 - max_output_tokens: 2500 - input_price: 0.56 - output_price: 6.6 - - name: '@cf/meta/llama-2-7b-chat-int8' - max_input_tokens: 2048 - max_output_tokens: 1800 - input_price: 0.16 - output_price: 0.24 - - name: '@cf/mistral/mistral-7b-instruct-v0.1' - input_price: 0.11 - output_price: 0.19 + - name: '@cf/meta/llama-3-8b-instruct' + max_input_tokens: 4096 + max_output_tokens: 4096 + - name: '@cf/mistral/mistral-7b-instruct-v0.2-lora' + max_input_tokens: 4096 + max_output_tokens: 4096 + - name: '@cf/google/gemma-7b-it-lora' + max_input_tokens: 4096 + max_output_tokens: 4096 + - name: '@cf/qwen/qwen1.5-14b-chat-awq' + max_input_tokens: 4096 + max_output_tokens: 4096 + - name: '@hf/nexusflow/starling-lm-7b-beta' + max_input_tokens: 4096 + max_output_tokens: 4096 - platform: replicate # docs: @@ -482,3 +466,310 @@ max_input_tokens: 128000 input_price: 8.4 output_price: 8.4 + +- platform: anyscale + # docs: + # - https://docs.endpoints.anyscale.com/text-generation/query-a-model/#select-a-model + # - https://docs.endpoints.anyscale.com/pricing + models: + - name: meta-llama/Meta-Llama-3-8B-Instruct + max_input_tokens: 8192 + input_price: 0.15 + output_price: 0.15 + - name: meta-llama/Meta-Llama-3-70B-Instruct + max_input_tokens: 8192 + input_price: 1.0 + output_price: 1.0 + - name: codellama/CodeLlama-70b-Instruct-hf + max_input_tokens: 4096 + input_price: 1.0 + output_price: 1.0 + - name: mistralai/Mistral-7B-Instruct-v0.1 + max_input_tokens: 16384 + input_price: 0.15 + output_price: 0.15 + - name: mistralai/Mixtral-8x7B-Instruct-v0.1 + max_input_tokens: 32768 + input_price: 0.50 + output_price: 0.50 + - name: mistralai/Mixtral-8x22B-Instruct-v0.1 + max_input_tokens: 65536 + input_price: 0.90 + output_price: 0.90 + - name: google/gemma-7b-it + max_input_tokens: 8192 + input_price: 0.15 + output_price: 0.15 + +- platform: deepinfra + # docs: + # - https://deepinfra.com/models + # - https://deepinfra.com/pricing + models: + - name: meta-llama/Meta-Llama-3-8B-Instruct + max_input_tokens: 8192 + input_price: 0.08 + output_price: 0.08 + - name: meta-llama/Meta-Llama-3-70B-Instruct + max_input_tokens: 8192 + input_price: 0.59 + output_price: 0.79 + - name: mistralai/Mistral-7B-Instruct-v0.2 + max_input_tokens: 32768 + input_price: 0.07 + output_price: 0.07 + - name: mistralai/Mixtral-8x7B-Instruct-v0.1 + max_input_tokens: 32768 + input_price: 0.24 + output_price: 0.24 + - name: mistralai/Mixtral-8x22B-Instruct-v0.1 + max_input_tokens: 65536 + input_price: 0.65 + output_price: 0.65 + - name: google/gemma-1.1-7b-it + max_input_tokens: 8192 + input_price: 0.07 + output_price: 0.07 + - name: databricks/dbrx-instruct + max_input_tokens: 32768 + input_price: 0.6 + output_price: 0.6 + - name: 01-ai/Yi-34B-Chat + max_input_tokens: 4096 + input_price: 0.6 + output_price: 0.6 + +- platform: fireworks + # docs: + # - https://fireworks.ai/models + # - https://fireworks.ai/pricing + models: + - name: accounts/fireworks/models/llama-v3-8b-instruct + max_input_tokens: 8192 + input_price: 0.2 + output_price: 0.2 + - name: accounts/fireworks/models/llama-v3-70b-instruct + max_input_tokens: 8192 + input_price: 0.9 + output_price: 0.9 + - name: accounts/fireworks/models/mistral-7b-instruct-v0p2 + max_input_tokens: 32768 + input_price: 0.2 + output_price: 0.2 + - name: accounts/fireworks/models/mixtral-8x7b-instruct + max_input_tokens: 32768 + input_price: 0.5 + output_price: 0.5 + - name: accounts/fireworks/models/mixtral-8x22b-instruct + max_input_tokens: 65536 + input_price: 0.9 + output_price: 0.9 + - name: accounts/fireworks/models/qwen-72b-chat + max_input_tokens: 4096 + input_price: 0.9 + output_price: 0.9 + - name: accounts/fireworks/models/gemma-7b-it + max_input_tokens: 8192 + input_price: 0.2 + output_price: 0.2 + - name: accounts/fireworks/models/dbrx-instruct + max_input_tokens: 32768 + input_price: 1.6 + output_price: 1.6 + +- platform: openrouter + # docs: + # - https://openrouter.ai/docs#models + models: + - name: meta-llama/llama-3-8b-instruct + max_input_tokens: 8192 + input_price: 0.1 + output_price: 0.1 + - name: meta-llama/llama-3-8b-instruct:nitro + max_input_tokens: 8192 + input_price: 0.2 + output_price: 0.2 + - name: meta-llama/llama-3-8b-instruct:extended + max_input_tokens: 16384 + input_price: 0.275 + output_price: 0.283 + - name: meta-llama/llama-3-70b-instruct + max_input_tokens: 8192 + input_price: 0.81 + output_price: 0.81 + - name: meta-llama/llama-3-70b-instruct:nitro + max_input_tokens: 8192 + input_price: 0.9 + output_price: 0.9 + - name: mistralai/mistral-7b-instruct:free + max_input_tokens: 32768 + input_price: 0.0 + output_price: 0.0 + - name: codellama/codellama-70b-instruct + max_input_tokens: 2048 + input_price: 0.81 + output_price: 0.81 + - name: google/gemma-7b-it:free + max_input_tokens: 8192 + input_price: 0.0 + output_price: 0.0 + - name: 01-ai/yi-34b-chat + max_input_tokens: 4096 + input_price: 0.72 + output_price: 0.72 + - name: openai/gpt-3.5-turbo + max_input_tokens: 16385 + input_price: 0.5 + output_price: 1.5 + - name: openai/gpt-4-turbo + max_input_tokens: 128000 + input_price: 10 + output_price: 30 + supports_vision: true + - name: openai/gpt-4-turbo-preview + max_input_tokens: 128000 + input_price: 10 + output_price: 30 + - name: gpt-4-vision-preview + max_input_tokens: 128000 + max_output_tokens: 4096 + input_price: 10 + output_price: 30 + supports_vision: true + - name: openai/gpt-4 + max_input_tokens: 8192 + input_price: 30 + output_price: 60 + - name: openai/gpt-4-32k + max_input_tokens: 32768 + input_price: 60 + output_price: 120 + - name: google/gemini-pro + max_input_tokens: 91728 + input_price: 0.125 + output_price: 0.375 + - name: google/gemini-pro-vision + max_input_tokens: 45875 + input_price: 0.125 + output_price: 0.375 + supports_vision: true + - name: google/gemini-pro-1.5 + max_input_tokens: 2800000 + input_price: 2.5 + output_price: 7.5 + supports_vision: true + - name: anthropic/claude-3-opus + max_input_tokens: 200000 + input_price: 15 + output_price: 75 + supports_vision: true + - name: anthropic/claude-3-sonnet + max_input_tokens: 200000 + input_price: 3 + output_price: 15 + supports_vision: true + - name: anthropic/claude-3-haiku + max_input_tokens: 200000 + input_price: 0.25 + output_price: 1.25 + supports_vision: true + - name: mistralai/mixtral-8x7b-instruct + max_input_tokens: 32768 + input_price: 0.24 + output_price: 0.24 + - name: mistralai/mixtral-8x22b-instruct + max_input_tokens: 65536 + input_price: 0.65 + output_price: 0.65 + - name: mistralai/mistral-small + max_input_tokens: 32000 + input_price: 2 + output_price: 6 + - name: mistralai/mistral-large + max_input_tokens: 32000 + input_price: 8 + output_price: 24 + - name: databricks/dbrx-instruct + max_input_tokens: 32768 + input_price: 0.6 + output_price: 0.6 + - name: cohere/command-r + max_input_tokens: 128000 + input_price: 0.5 + output_price: 1.5 + - name: cohere/command-r-plus + max_input_tokens: 128000 + input_price: 3 + output_price: 15 + +- platform: octoai + # docs: + # - https://octo.ai/docs/getting-started/inference-models + # - https://octo.ai/pricing/text-gen-solution/ + models: + - name: meta-llama-3-8b-instruct + max_input_tokens: 8192 + input_price: 0.13 + output_price: 0.13 + - name: meta-llama-3-70b-instruct + max_input_tokens: 8192 + input_price: 0.86 + output_price: 0.86 + - name: mistral-7b-instruct + max_input_tokens: 32768 + input_price: 0.13 + output_price: 0.13 + - name: mixtral-8x7b-instruct + max_input_tokens: 32768 + input_price: 0.34 + output_price: 0.34 + - name: mixtral-8x22b-instruct + max_input_tokens: 65536 + input_price: 0.86 + output_price: 0.86 + +- platform: together + # docs: + # - https://docs.together.ai/docs/inference-models + # - https://www.together.ai/pricing + models: + - name: meta-llama/Llama-3-8b-chat-hf + max_input_tokens: 8000 + input_price: 0.2 + output_price: 0.2 + - name: meta-llama/Llama-3-70b-chat-hf + max_input_tokens: 8000 + input_price: 0.9 + output_price: 0.9 + - name: mistralai/Mistral-7B-Instruct-v0.2 + max_input_tokens: 32768 + input_price: 0.2 + output_price: 0.2 + - name: mistralai/Mixtral-8x7B-Instruct-v0.1 + max_input_tokens: 32768 + input_price: 0.9 + output_price: 0.9 + - name: mistralai/Mixtral-8x22B-Instruct-v0.1 + max_input_tokens: 65536 + input_price: 1.2 + output_price: 1.2 + - name: google/gemma-7b-it + max_input_tokens: 8192 + input_price: 0.2 + output_price: 0.2 + - name: Qwen/Qwen1.5-72B-Chat + max_input_tokens: 32768 + input_price: 0.9 + output_price: 0.9 + - name: databricks/dbrx-instruct + max_input_tokens: 32768 + input_price: 1.2 + output_price: 1.2 + - name: zero-one-ai/Yi-34B-Chat + max_input_tokens: 4096 + input_price: 0.8 + output_price: 0.8 + - name: allenai/OLMo-7B-Instruct + max_input_tokens: 2048 + input_price: 0.2 + output_price: 0.2 diff --git a/src/client/bedrock.rs b/src/client/bedrock.rs index fb4dad8..d6ab696 100644 --- a/src/client/bedrock.rs +++ b/src/client/bedrock.rs @@ -2,7 +2,7 @@ use super::claude::{claude_build_body, claude_extract_completion}; use super::{ catch_error, generate_prompt, BedrockClient, Client, CompletionDetails, ExtraConfig, Model, ModelConfig, PromptAction, PromptFormat, PromptKind, SendData, SseHandler, - LLAMA2_PROMPT_FORMAT, LLAMA3_PROMPT_FORMAT, + LLAMA3_PROMPT_FORMAT, MISTRAL_PROMPT_FORMAT, }; use crate::utils::{base64_decode, encode_uri, hex_encode, hmac_sha256, sha256}; @@ -140,7 +140,7 @@ async fn send_message( match model_category { ModelCategory::Anthropic => claude_extract_completion(&data), - ModelCategory::MetaLlama2 | ModelCategory::MetaLlama3 => llama_extract_completion(&data), + ModelCategory::MetaLlama3 => llama_extract_completion(&data), ModelCategory::Mistral => mistral_extrat_completion(&data), } } @@ -183,7 +183,7 @@ async fn send_message_streaming( } } } - ModelCategory::MetaLlama2 | ModelCategory::MetaLlama3 => { + ModelCategory::MetaLlama3 => { if let Some(text) = data["generation"].as_str() { handler.text(text)?; } @@ -220,7 +220,6 @@ fn build_body(data: SendData, model: &Model, model_category: &ModelCategory) -> body["anthropic_version"] = "bedrock-2023-05-31".into(); Ok(body) } - ModelCategory::MetaLlama2 => meta_llama_build_body(data, model, LLAMA2_PROMPT_FORMAT), ModelCategory::MetaLlama3 => meta_llama_build_body(data, model, LLAMA3_PROMPT_FORMAT), ModelCategory::Mistral => mistral_build_body(data, model), } @@ -256,7 +255,7 @@ fn mistral_build_body(data: SendData, model: &Model) -> Result<Value> { top_p, stream: _, } = data; - let prompt = generate_prompt(&messages, LLAMA2_PROMPT_FORMAT)?; + let prompt = generate_prompt(&messages, MISTRAL_PROMPT_FORMAT)?; let mut body = json!({ "prompt": prompt }); if let Some(v) = model.max_output_tokens { @@ -294,7 +293,6 @@ fn mistral_extrat_completion(data: &Value) -> Result<(String, CompletionDetails) #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum ModelCategory { Anthropic, - MetaLlama2, MetaLlama3, Mistral, } @@ -305,8 +303,6 @@ impl FromStr for ModelCategory { fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { if s.starts_with("anthropic.") { Ok(ModelCategory::Anthropic) - } else if s.starts_with("meta.llama2") { - Ok(ModelCategory::MetaLlama2) } else if s.starts_with("meta.llama3") { Ok(ModelCategory::MetaLlama3) } else if s.starts_with("mistral") { diff --git a/src/client/common.rs b/src/client/common.rs index 91d6bca..e889bc8 100644 --- a/src/client/common.rs +++ b/src/client/common.rs @@ -390,10 +390,11 @@ pub fn create_openai_compatible_client_config(client: &str) -> Result<Option<(St .find(|(name, _)| client == *name) { None => Ok(None), - Some((name, _)) => { + Some((name, api_base)) => { let mut config = json!({ "type": "openai-compatible", "name": name, + "api_base": api_base, }); let prompts = if ALL_CLIENT_MODELS.iter().any(|v| &v.platform == name) { vec![("api_key", "API Key:", false, PromptKind::String)] diff --git a/src/client/prompt_format.rs b/src/client/prompt_format.rs index fca87ac..61647a8 100644 --- a/src/client/prompt_format.rs +++ b/src/client/prompt_format.rs @@ -22,7 +22,7 @@ pub const GENERIC_PROMPT_FORMAT: PromptFormat<'static> = PromptFormat { end: "### Assistant\n", }; -pub const LLAMA2_PROMPT_FORMAT: PromptFormat<'static> = PromptFormat { +pub const MISTRAL_PROMPT_FORMAT: PromptFormat<'static> = PromptFormat { begin: "", system_pre_message: "[INST] <<SYS>>", system_post_message: "<</SYS>> [/INST]", @@ -136,7 +136,7 @@ pub fn smart_prompt_format(model_name: &str) -> PromptFormat<'static> { || model_name.contains("mistral") || model_name.contains("mixtral") { - LLAMA2_PROMPT_FORMAT + MISTRAL_PROMPT_FORMAT } else if model_name.contains("phi3") || model_name.contains("phi-3") { PHI3_PROMPT_FORMAT } else if model_name.contains("command-r") { |
