diff --git a/core/llm/autodetect.ts b/core/llm/autodetect.ts index 8232f82887..f8a8a61e8a 100644 --- a/core/llm/autodetect.ts +++ b/core/llm/autodetect.ts @@ -65,6 +65,7 @@ const PROVIDER_SUPPORTS_IMAGES: string[] = [ "sagemaker", "continue-proxy", "openrouter", + "geekai", "vertexai", "azure", "scaleway", diff --git a/core/llm/llms/GeekAI.ts b/core/llm/llms/GeekAI.ts new file mode 100644 index 0000000000..c6981c943e --- /dev/null +++ b/core/llm/llms/GeekAI.ts @@ -0,0 +1,18 @@ +import { LLMOptions } from "../../index.js"; +import { osModelsEditPrompt } from "../templates/edit.js"; + +import OpenAI from "./OpenAI.js"; + +class GeekAI extends OpenAI { + static providerName = "geekai"; + static defaultOptions: Partial = { + apiBase: "https://geekai.dev/api/v1/", + model: "gpt-4o-mini", + promptTemplates: { + edit: osModelsEditPrompt, + }, + useLegacyCompletionsEndpoint: false, + }; +} + +export default GeekAI; \ No newline at end of file diff --git a/core/llm/llms/index.ts b/core/llm/llms/index.ts index 20bc8b710f..1a3c8cf086 100644 --- a/core/llm/llms/index.ts +++ b/core/llm/llms/index.ts @@ -22,6 +22,7 @@ import Fireworks from "./Fireworks"; import Flowise from "./Flowise"; import FreeTrial from "./FreeTrial"; import FunctionNetwork from "./FunctionNetwork"; +import GeekAI from "./GeekAI"; import Gemini from "./Gemini"; import Groq from "./Groq"; import HuggingFaceInferenceAPI from "./HuggingFaceInferenceAPI"; @@ -88,6 +89,7 @@ export const LLMClasses = [ Azure, WatsonX, OpenRouter, + GeekAI, Nvidia, Vllm, SambaNova, diff --git a/docs/docs/customize/model-providers/more/geekai.md b/docs/docs/customize/model-providers/more/geekai.md new file mode 100644 index 0000000000..25ec50fe2c --- /dev/null +++ b/docs/docs/customize/model-providers/more/geekai.md @@ -0,0 +1,21 @@ +# GeekAI + +GeekAI is a unified interface for commercial and open-source models, giving you access to the best models at the lower prices than offically. You can sign up [here](https://geekai.dev/login), create your API key on the [keys page](https://geekai.dev/user/api_keys), and then choose a model from the [list of supported models](https://geekai.dev/models). + +Change `~/.continue/config.json` to look like the following. + +```json title="config.json" +{ + "models": [ + { + "title": "Claude 3.5 Sonnet", + "provider": "geekai", + "model": "claude-3-5-sonnet-latest", + "apiBase": "https://geekai.dev/api/v1", + "apiKey": "..." + } + ] +} +``` + +Learn more about available settings [here](https://geekai.dev/docs/api). diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index c97113a0a2..d5160d1526 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -373,6 +373,10 @@ const config = { to: "/customize/model-providers/more/openrouter", from: "/reference/Model Providers/openrouter", }, + { + to: "/customize/model-providers/more/geekai", + from: "/reference/Model Providers/geekai", + }, { to: "/customize/model-providers/more/replicatellm", from: "/reference/Model Providers/replicatellm", diff --git a/docs/i18n/zh-CN/docusaurus-plugin-content-docs/current/customize/model-providers/more/geekai.md b/docs/i18n/zh-CN/docusaurus-plugin-content-docs/current/customize/model-providers/more/geekai.md new file mode 100644 index 0000000000..b6026723ff --- /dev/null +++ b/docs/i18n/zh-CN/docusaurus-plugin-content-docs/current/customize/model-providers/more/geekai.md @@ -0,0 +1,21 @@ +# GeekAI + +GeekAI 是一个多块好省的 AI 模型评测与代理平台,可以自动为你的应用场景调度最便宜可用的 AI 模型。你可以在 [这里](https://geekai.dev/login) 注册,在 [令牌管理页面](https://geekai.dev/user/api_keys) 创建你的 API key ,然后从 [模型广场](https://geekai.dev/models) 中选择一个模型(通过模型名称)。 + +修改 `~/.continue/config.json` 如下: + +```json title="config.json" +{ + "models": [ + { + "title": "Claude 3.5 Sonnet", + "provider": "geekai", + "model": "claude-3-5-sonnet-latest", + "apiBase": "https://geekai.dev/api/v1", + "apiKey": "..." + } + ] +} +``` + +你可以在 [API文档](https://geekai.dev/docs/api) 了解更多可用的设置。 diff --git a/extensions/vscode/config_schema.json b/extensions/vscode/config_schema.json index 2b12cf21e2..8168b869fe 100644 --- a/extensions/vscode/config_schema.json +++ b/extensions/vscode/config_schema.json @@ -94,7 +94,10 @@ "type": "string" } }, - "required": ["cert", "key"] + "required": [ + "cert", + "key" + ] }, "RequestOptions": { "title": "RequestOptions", @@ -186,6 +189,7 @@ "huggingface-inference-api", "llama.cpp", "replicate", + "geekai", "gemini", "lmstudio", "llamafile", @@ -244,6 +248,7 @@ "### Msty\nMsty is the simplest way to get started with online or local LLMs on all desktop platforms - Windows, Mac, and Linux. No fussing around, one-click and you are up and running. To get started, follow these steps:\n1. Download from [Msty.app](https://msty.app/), open the application, and click 'Setup Local AI'.\n2. Go to the Local AI Module page and download a model of your choice.\n3. Once the model has finished downloading, you can start asking questions through Continue.\n> [Reference](https://continue.dev/docs/reference/Model%20Providers/Msty)", "### IBM watsonx\nwatsonx, developed by IBM, offers a variety of pre-trained AI foundation models that can be used for natural language processing (NLP), computer vision, and speech recognition tasks.", "### OpenRouter\nOpenRouter offers a single API to access almost any language model. To get started, obtain an API key from [their console](https://openrouter.ai/settings/keys).", + "### GeekAI\nLike OpenRouter, GeekAI also offers a single API to access almost any language model but with lower cost. To get started, obtain an API key from [their console](https://geekai.dev/user/api_keys).", "### NVIDIA NIMs\nNVIDIA offers a single API to access almost any language model. To find out more, visit the [LLM APIs Documentation](https://docs.api.nvidia.com/nim/reference/llm-apis).\nFor information specific to getting a key, please check out the [docs here](https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#option-1-from-api-catalog)", "### vLLM\nvLLM is a highly performant way of hosting LLMs for a team. To get started, follow their [quickstart](https://docs.vllm.ai/en/latest/getting_started/quickstart.html) to set up your server.", "### Cerebras\nCerebras Inference uses specialized silicon to provides superfast inference. To get started, get your API keys from [their console](https://cloud.cerebras.ai/).", @@ -421,7 +426,10 @@ "title": "Api Type", "markdownDescription": "OpenAI API type, either `openai` or `azure`", "x-intellij-html-description": "OpenAI API type, either openai or azure", - "enum": ["openai", "azure"] + "enum": [ + "openai", + "azure" + ] }, "apiVersion": { "title": "Api Version", @@ -444,7 +452,11 @@ } } }, - "required": ["title", "provider", "model"], + "required": [ + "title", + "provider", + "model" + ], "allOf": [ { "if": { @@ -454,7 +466,9 @@ } }, "not": { - "required": ["provider"] + "required": [ + "provider" + ] } }, "then": { @@ -487,46 +501,67 @@ ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { - "required": ["apiKey"] + "required": [ + "apiKey" + ] } }, { "if": { "properties": { "provider": { - "enum": ["bedrockimport"] + "enum": [ + "bedrockimport" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { - "required": ["modelArn"] + "required": [ + "modelArn" + ] } }, { "if": { "properties": { "provider": { - "enum": ["huggingface-tgi", "huggingface-inference-api"] + "enum": [ + "huggingface-tgi", + "huggingface-inference-api" + ] } } }, "then": { - "required": ["apiBase"] + "required": [ + "apiBase" + ] }, - "required": ["provider"] + "required": [ + "provider" + ] }, { "if": { "properties": { "provider": { - "enum": ["openai"] + "enum": [ + "openai" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -546,10 +581,14 @@ "if": { "properties": { "provider": { - "enum": ["cloudflare"] + "enum": [ + "cloudflare" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -607,10 +646,14 @@ "if": { "properties": { "provider": { - "enum": ["openai"] + "enum": [ + "openai" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -642,17 +685,24 @@ "if": { "properties": { "provider": { - "enum": ["xAI"] + "enum": [ + "xAI" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { "model": { "anyOf": [ { - "enum": ["grok-beta", "AUTODETECT"] + "enum": [ + "grok-beta", + "AUTODETECT" + ] }, { "type": "string" @@ -666,10 +716,14 @@ "if": { "properties": { "provider": { - "enum": ["replicate"] + "enum": [ + "replicate" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -703,10 +757,14 @@ "if": { "properties": { "provider": { - "enum": ["free-trial"] + "enum": [ + "free-trial" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -730,7 +788,9 @@ "if": { "properties": { "provider": { - "enum": ["openai"] + "enum": [ + "openai" + ] }, "apiType": { "not": { @@ -738,7 +798,9 @@ } } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -805,10 +867,14 @@ "if": { "properties": { "provider": { - "enum": ["anthropic"] + "enum": [ + "anthropic" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -849,15 +915,22 @@ "if": { "properties": { "provider": { - "enum": ["cohere"] + "enum": [ + "cohere" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { "model": { - "enum": ["command-r", "command-r-plus"] + "enum": [ + "command-r", + "command-r-plus" + ] } } } @@ -866,10 +939,14 @@ "if": { "properties": { "provider": { - "enum": ["bedrock"] + "enum": [ + "bedrock" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -894,10 +971,14 @@ "if": { "properties": { "provider": { - "enum": ["sagemaker"] + "enum": [ + "sagemaker" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -911,10 +992,14 @@ "if": { "properties": { "provider": { - "enum": ["gemini"] + "enum": [ + "gemini" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -946,10 +1031,14 @@ "if": { "properties": { "provider": { - "enum": ["together"] + "enum": [ + "together" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -987,10 +1076,14 @@ "if": { "properties": { "provider": { - "enum": ["novita"] + "enum": [ + "novita" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1025,10 +1118,14 @@ "if": { "properties": { "provider": { - "enum": ["deepinfra"] + "enum": [ + "deepinfra" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1052,7 +1149,9 @@ ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1106,10 +1205,14 @@ "if": { "properties": { "provider": { - "enum": ["ollama"] + "enum": [ + "ollama" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1166,10 +1269,14 @@ "if": { "properties": { "provider": { - "enum": ["mistral"] + "enum": [ + "mistral" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1191,23 +1298,34 @@ "if": { "properties": { "provider": { - "enum": ["vertexai"] + "enum": [ + "vertexai" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { - "required": ["projectId", "region"] + "required": [ + "projectId", + "region" + ] } }, { "if": { "properties": { "provider": { - "enum": ["moonshot"] + "enum": [ + "moonshot" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1233,10 +1351,14 @@ "if": { "properties": { "provider": { - "enum": ["deepseek"] + "enum": [ + "deepseek" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1253,7 +1375,10 @@ } }, "model": { - "enum": ["deepseek-chat", "deepseek-coder"] + "enum": [ + "deepseek-chat", + "deepseek-coder" + ] } } } @@ -1262,10 +1387,14 @@ "if": { "properties": { "provider": { - "enum": ["groq"] + "enum": [ + "groq" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1290,10 +1419,14 @@ "if": { "properties": { "provider": { - "enum": ["siliconflow"] + "enum": [ + "siliconflow" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1317,10 +1450,14 @@ "if": { "properties": { "provider": { - "enum": ["scaleway"] + "enum": [ + "scaleway" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1349,15 +1486,21 @@ "if": { "properties": { "provider": { - "enum": ["fireworks"] + "enum": [ + "fireworks" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { "model": { - "enum": ["starcoder-7b"] + "enum": [ + "starcoder-7b" + ] } } } @@ -1369,20 +1512,29 @@ "const": "azure" } }, - "required": ["apiType"] + "required": [ + "apiType" + ] }, "then": { - "required": ["deployment", "apiBase"] + "required": [ + "deployment", + "apiBase" + ] } }, { "if": { "properties": { "provider": { - "enum": ["openai"] + "enum": [ + "openai" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1399,7 +1551,9 @@ "const": "llamafile" } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1413,15 +1567,22 @@ "if": { "properties": { "provider": { - "enum": ["cerebras"] + "enum": [ + "cerebras" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { "model": { - "enum": ["llama3.1-8b", "llama3.1-70b"] + "enum": [ + "llama3.1-8b", + "llama3.1-70b" + ] } } } @@ -1430,10 +1591,14 @@ "if": { "properties": { "provider": { - "enum": ["text-gen-webui"] + "enum": [ + "text-gen-webui" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1447,10 +1612,14 @@ "if": { "properties": { "provider": { - "enum": ["flowise"] + "enum": [ + "flowise" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1477,7 +1646,10 @@ "type": "string" } }, - "required": ["key", "value"] + "required": [ + "key", + "value" + ] } }, "additionalFlowiseConfiguration": { @@ -1496,7 +1668,10 @@ "description": "Configuration Property value" } }, - "required": ["key", "value"] + "required": [ + "key", + "value" + ] } }, "model": { @@ -1576,10 +1751,14 @@ "if": { "properties": { "provider": { - "enum": ["watsonx"] + "enum": [ + "watsonx" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1615,24 +1794,36 @@ ] } }, - "required": ["apiBase", "apiKey", "apiVersion"] + "required": [ + "apiBase", + "apiKey", + "apiVersion" + ] } }, { "if": { "properties": { "provider": { - "enum": ["sambanova"] + "enum": [ + "sambanova" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { "model": { "anyOf": [ { - "enum": ["llama3.1-8b", "llama3.1-70b", "llama3.1-405b"] + "enum": [ + "llama3.1-8b", + "llama3.1-70b", + "llama3.1-405b" + ] }, { "type": "string" @@ -1647,10 +1838,14 @@ "if": { "properties": { "provider": { - "enum": ["ask-sage"] + "enum": [ + "ask-sage" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -1705,7 +1900,9 @@ "type": "string" } }, - "required": ["default"] + "required": [ + "default" + ] }, "SlashCommand": { "title": "SlashCommand", @@ -1762,7 +1959,9 @@ "if": { "properties": { "name": { - "enum": ["issue"] + "enum": [ + "issue" + ] } } }, @@ -1775,17 +1974,23 @@ "description": "Enter the URL of the GitHub repository for which you want to generate the issue." } }, - "required": ["repositoryUrl"] + "required": [ + "repositoryUrl" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["edit"] + "enum": [ + "edit" + ] } } }, @@ -1811,7 +2016,9 @@ "if": { "properties": { "name": { - "enum": ["share"] + "enum": [ + "share" + ] } } }, @@ -1833,7 +2040,9 @@ "if": { "properties": { "name": { - "enum": ["commit"] + "enum": [ + "commit" + ] } } }, @@ -1852,7 +2061,10 @@ } } ], - "required": ["name", "description"] + "required": [ + "name", + "description" + ] }, "CustomCommand": { "title": "CustomCommand", @@ -1871,7 +2083,11 @@ "type": "string" } }, - "required": ["name", "prompt", "description"] + "required": [ + "name", + "prompt", + "description" + ] }, "ContextProviderWithParams": { "title": "ContextProviderWithParams", @@ -1958,7 +2174,9 @@ "if": { "properties": { "name": { - "enum": ["discord"] + "enum": [ + "discord" + ] } } }, @@ -1991,11 +2209,15 @@ "description": "The name of the channel" } }, - "required": ["id"] + "required": [ + "id" + ] } } }, - "required": ["discordKey"] + "required": [ + "discordKey" + ] } } }, @@ -2004,14 +2226,18 @@ { "properties": { "params": { - "required": ["guildId"] + "required": [ + "guildId" + ] } } }, { "properties": { "params": { - "required": ["channels"] + "required": [ + "channels" + ] } } } @@ -2024,7 +2250,9 @@ "if": { "properties": { "name": { - "enum": ["google"] + "enum": [ + "google" + ] } } }, @@ -2037,17 +2265,23 @@ "description": "Your API key for https://serper.dev in order to get Google search results" } }, - "required": ["serperApiKey"] + "required": [ + "serperApiKey" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["web"] + "enum": [ + "web" + ] } } }, @@ -2070,7 +2304,9 @@ "if": { "properties": { "name": { - "enum": ["open"] + "enum": [ + "open" + ] } } }, @@ -2092,7 +2328,9 @@ "if": { "properties": { "name": { - "enum": ["repo-map"] + "enum": [ + "repo-map" + ] } } }, @@ -2114,7 +2352,9 @@ "if": { "properties": { "name": { - "enum": ["debugger"] + "enum": [ + "debugger" + ] } } }, @@ -2137,7 +2377,9 @@ "if": { "properties": { "name": { - "enum": ["diff"] + "enum": [ + "diff" + ] } } }, @@ -2159,7 +2401,9 @@ "if": { "properties": { "name": { - "enum": ["issue"] + "enum": [ + "issue" + ] } } }, @@ -2188,24 +2432,37 @@ "type": { "type": "string", "description": "The type of issues to search for", - "enum": ["open", "closed", "all"] + "enum": [ + "open", + "closed", + "all" + ] } }, - "required": ["owner", "repo"] + "required": [ + "owner", + "repo" + ] } } }, - "required": ["repos"] + "required": [ + "repos" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["database"] + "enum": [ + "database" + ] } } }, @@ -2226,7 +2483,12 @@ "connection_type": { "type": "string", "description": "The type of database (e.g., 'postgres', 'mysql')", - "enum": ["postgres", "mysql", "sqlite", "mssql"] + "enum": [ + "postgres", + "mysql", + "sqlite", + "mssql" + ] }, "connection": { "type": "object", @@ -2259,21 +2521,31 @@ "required": [] } }, - "required": ["name", "connection_type", "connection"] + "required": [ + "name", + "connection_type", + "connection" + ] } } }, - "required": ["connections"] + "required": [ + "connections" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["gitlab-mr"] + "enum": [ + "gitlab-mr" + ] } } }, @@ -2294,17 +2566,23 @@ "description": "If you have code selected, filters out comments that aren't related to the selection." } }, - "required": ["token"] + "required": [ + "token" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["jira"] + "enum": [ + "jira" + ] } } }, @@ -2351,17 +2629,24 @@ ] } }, - "required": ["domain", "token"] + "required": [ + "domain", + "token" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["http"] + "enum": [ + "http" + ] } } }, @@ -2379,10 +2664,14 @@ "type": "object" } }, - "required": ["url"] + "required": [ + "url" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { @@ -2514,17 +2803,27 @@ "type": "integer" } }, - "required": ["host", "port", "user", "password", "database"] + "required": [ + "host", + "port", + "user", + "password", + "database" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["greptile"] + "enum": [ + "greptile" + ] } } }, @@ -2545,17 +2844,24 @@ "type": "string" } }, - "required": ["GreptileToken", "GithubToken"] + "required": [ + "GreptileToken", + "GithubToken" + ] } }, - "required": ["params"] + "required": [ + "params" + ] } }, { "if": { "properties": { "name": { - "enum": ["commit"] + "enum": [ + "commit" + ] } } }, @@ -2578,11 +2884,15 @@ } } }, - "required": ["params"] + "required": [ + "params" + ] } } ], - "required": ["name"] + "required": [ + "name" + ] }, "SerializedContinueConfig": { "title": "config.json", @@ -2616,7 +2926,10 @@ "description": "Only use local crawling for this documentation site" } }, - "required": ["title", "startUrl"] + "required": [ + "title", + "startUrl" + ] } }, "allowAnonymousTelemetry": { @@ -2800,7 +3113,9 @@ "type": "string" } }, - "required": ["provider"], + "required": [ + "provider" + ], "allOf": [ { "if": { @@ -2815,20 +3130,28 @@ ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { - "required": ["apiKey"] + "required": [ + "apiKey" + ] } }, { "if": { "properties": { "provider": { - "enum": ["sagemaker"] + "enum": [ + "sagemaker" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -2836,17 +3159,23 @@ "description": "SageMaker endpoint name" } }, - "required": ["model"] + "required": [ + "model" + ] } }, { "if": { "properties": { "provider": { - "enum": ["vertexai"] + "enum": [ + "vertexai" + ] } }, - "required": ["provider"] + "required": [ + "provider" + ] }, "then": { "properties": { @@ -2861,7 +3190,11 @@ "default": "text-embedding-004" } }, - "required": ["projectId", "model", "region"] + "required": [ + "projectId", + "model", + "region" + ] } } ] @@ -2885,16 +3218,22 @@ "type": "object" } }, - "required": ["name"], + "required": [ + "name" + ], "allOf": [ { "if": { "properties": { "name": { - "enum": ["cohere"] + "enum": [ + "cohere" + ] } }, - "required": ["name"] + "required": [ + "name" + ] }, "then": { "properties": { @@ -2917,7 +3256,9 @@ "type": "string" } }, - "required": ["apiKey"] + "required": [ + "apiKey" + ] } } } @@ -2926,10 +3267,14 @@ "if": { "properties": { "name": { - "enum": ["llm"] + "enum": [ + "llm" + ] } }, - "required": ["name"] + "required": [ + "name" + ] }, "then": { "properties": { @@ -2940,7 +3285,9 @@ "type": "string" } }, - "required": ["modelTitle"] + "required": [ + "modelTitle" + ] } } } @@ -2949,10 +3296,14 @@ "if": { "properties": { "name": { - "enum": ["voyage"] + "enum": [ + "voyage" + ] } }, - "required": ["name"] + "required": [ + "name" + ] }, "then": { "properties": { @@ -2971,7 +3322,9 @@ ] } }, - "required": ["apiKey"] + "required": [ + "apiKey" + ] } } } @@ -2980,10 +3333,14 @@ "if": { "properties": { "name": { - "enum": ["bedrock"] + "enum": [ + "bedrock" + ] } }, - "required": ["name"] + "required": [ + "name" + ] }, "then": { "properties": { @@ -2991,10 +3348,15 @@ "type": "object", "properties": { "model": { - "enum": ["cohere.rerank-v3-5:0", "amazon.rerank-v1:0"] + "enum": [ + "cohere.rerank-v3-5:0", + "amazon.rerank-v1:0" + ] } }, - "required": ["model"] + "required": [ + "model" + ] } } } @@ -3003,10 +3365,14 @@ "if": { "properties": { "name": { - "enum": ["huggingface-tei"] + "enum": [ + "huggingface-tei" + ] } }, - "required": ["name"] + "required": [ + "name" + ] }, "then": { "properties": { @@ -3026,12 +3392,17 @@ "default": false }, "truncation_direction": { - "enum": ["Right", "Left"], + "enum": [ + "Right", + "Left" + ], "description": "Whether to truncate sequences from the left or right.", "default": "Right" } }, - "required": ["apiBase"] + "required": [ + "apiBase" + ] } }, "if": { @@ -3042,7 +3413,9 @@ } }, "then": { - "required": ["truncation_direction"] + "required": [ + "truncation_direction" + ] } } } @@ -3105,7 +3478,11 @@ "description": "An optional template string to be used for autocomplete. It will be rendered with the Mustache templating language, and is passed the 'prefix' and 'suffix' variables." }, "multilineCompletions": { - "enum": ["always", "never", "auto"], + "enum": [ + "always", + "never", + "auto" + ], "description": "If set to true, Continue will only complete a single line at a time." }, "useCache": { @@ -3130,7 +3507,10 @@ "type": "object", "properties": { "codeBlockToolbarPosition": { - "enum": ["top", "bottom"], + "enum": [ + "top", + "bottom" + ], "default": "top", "description": "Whether to show the copy and apply code buttons at the top or bottom of code blocks in the sidebar." }, @@ -3161,7 +3541,10 @@ "properties": { "provider": { "type": "string", - "enum": ["posthog", "logstash"], + "enum": [ + "posthog", + "logstash" + ], "description": "The 3rd party analytics provider to use.", "default": "posthog", "markdownEnumDescriptions": [ @@ -3177,30 +3560,40 @@ "description": "The client key to use for analytics" } }, - "required": ["provider"], + "required": [ + "provider" + ], "allOf": [ { "if": { "properties": { "provider": { - "enum": ["posthog"] + "enum": [ + "posthog" + ] } } }, "then": { - "required": ["clientKey"] + "required": [ + "clientKey" + ] } }, { "if": { "properties": { "provider": { - "enum": ["logstash"] + "enum": [ + "logstash" + ] } } }, "then": { - "required": ["url"] + "required": [ + "url" + ] } } ] @@ -3272,7 +3665,10 @@ "default": false } }, - "required": ["prompt", "title"] + "required": [ + "prompt", + "title" + ] }, "description": "Quick actions are a way to add custom commands to the Code Lens of function and class declarations." }, @@ -3318,7 +3714,9 @@ "properties": { "type": { "type": "string", - "enum": ["stdio"] + "enum": [ + "stdio" + ] }, "command": { "type": "string" @@ -3337,40 +3735,56 @@ "description": "Environment variables to pass to the command" } }, - "required": ["type", "command", "args"] + "required": [ + "type", + "command", + "args" + ] }, { "type": "object", "properties": { "type": { "type": "string", - "enum": ["websocket"] + "enum": [ + "websocket" + ] }, "url": { "type": "string", "format": "uri" } }, - "required": ["type", "url"] + "required": [ + "type", + "url" + ] }, { "type": "object", "properties": { "type": { "type": "string", - "enum": ["sse"] + "enum": [ + "sse" + ] }, "url": { "type": "string", "format": "uri" } }, - "required": ["type", "url"] + "required": [ + "type", + "url" + ] } ] } }, - "required": ["transport"] + "required": [ + "transport" + ] } } } @@ -3378,4 +3792,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/openai-adapters/README.md b/packages/openai-adapters/README.md index b84b198e7f..110ccc335f 100644 --- a/packages/openai-adapters/README.md +++ b/packages/openai-adapters/README.md @@ -37,6 +37,7 @@ They are concerned with: - [x] Deepseek - [ ] Flowise - [x] Function Network +- [x] GeekAI - [x] Gemini - [x] Groq - [ ] HuggingFace Inference API diff --git a/packages/openai-adapters/src/index.ts b/packages/openai-adapters/src/index.ts index 094920e63b..21d9e5abb6 100644 --- a/packages/openai-adapters/src/index.ts +++ b/packages/openai-adapters/src/index.ts @@ -59,6 +59,8 @@ export function constructLlmApi(config: LLMConfig): BaseLlmApi | undefined { return openAICompatible("http://127.0.0.1:5000/v1/", config); case "openrouter": return openAICompatible("https://openrouter.ai/api/v1/", config); + case "geekai": + return openAICompatible("https://geekai.dev/api/v1/", config); case "cerebras": return openAICompatible("https://api.cerebras.ai/v1/", config); case "kindo": diff --git a/packages/openai-adapters/src/types.ts b/packages/openai-adapters/src/types.ts index c86d63abfc..78dc88949f 100644 --- a/packages/openai-adapters/src/types.ts +++ b/packages/openai-adapters/src/types.ts @@ -50,6 +50,7 @@ export const OpenAIConfigSchema = BasePlusConfig.extend({ z.literal("kindo"), z.literal("msty"), z.literal("openrouter"), + z.literal("geekai"), z.literal("sambanova"), z.literal("text-gen-webui"), z.literal("vllm"),