Skip to content
Merged

Add poe #1028

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/main/presenter/configPresenter/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,21 @@ export const DEFAULT_PROVIDERS: LLM_PROVIDER_BASE[] = [
defaultBaseUrl: 'https://openrouter.ai/api/v1/'
}
},
{
id: 'poe',
name: 'Poe',
apiType: 'poe',
apiKey: '',
baseUrl: 'https://api.poe.com/v1',
enable: false,
websites: {
official: 'https://poe.com/',
apiKey: 'https://poe.com/api_key',
docs: 'https://creator.poe.com/docs/external-applications/openai-compatible-api',
models: 'https://api.poe.com/v1/models',
defaultBaseUrl: 'https://api.poe.com/v1'
}
},
{
id: '302ai',
name: '302.AI',
Expand Down
5 changes: 5 additions & 0 deletions src/main/presenter/llmProviderPresenter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import { AihubmixProvider } from './providers/aihubmixProvider'
import { _302AIProvider } from './providers/_302AIProvider'
import { ModelscopeProvider } from './providers/modelscopeProvider'
import { VercelAIGatewayProvider } from './providers/vercelAIGatewayProvider'
import { PoeProvider } from './providers/poeProvider'

// Rate limit configuration interface
interface RateLimitConfig {
Expand Down Expand Up @@ -212,6 +213,8 @@ export class LLMProviderPresenter implements ILlmProviderPresenter {
return new GroqProvider(provider, this.configPresenter)
case 'vercel-ai-gateway':
return new VercelAIGatewayProvider(provider, this.configPresenter)
case 'poe':
return new PoeProvider(provider, this.configPresenter)
case 'aws-bedrock':
return new AwsBedrockProvider(provider, this.configPresenter)
default:
Expand Down Expand Up @@ -264,6 +267,8 @@ export class LLMProviderPresenter implements ILlmProviderPresenter {
return new GrokProvider(provider, this.configPresenter)
case 'vercel-ai-gateway':
return new VercelAIGatewayProvider(provider, this.configPresenter)
case 'poe':
return new PoeProvider(provider, this.configPresenter)
case 'aws-bedrock':
return new AwsBedrockProvider(provider, this.configPresenter)
default:
Expand Down
25 changes: 25 additions & 0 deletions src/main/presenter/llmProviderPresenter/providers/poeProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { LLM_PROVIDER, MODEL_META, IConfigPresenter } from '@shared/presenter'
import { OpenAICompatibleProvider } from './openAICompatibleProvider'

/**
* PoeProvider integrates Poe's OpenAI-compatible API surface with the shared
* BaseLLMProvider contract so the rest of the app can treat it just like
* any other OpenAI-style backend.
*
* Poe exposes hundreds of community and frontier models through a single
* endpoint. We reuse the OpenAICompatibleProvider implementation and only
* tweak metadata so the renderer can present a clearer group name.
*/
export class PoeProvider extends OpenAICompatibleProvider {
constructor(provider: LLM_PROVIDER, configPresenter: IConfigPresenter) {
super(provider, configPresenter)
}

protected async fetchOpenAIModels(options?: { timeout: number }): Promise<MODEL_META[]> {
const models = await super.fetchOpenAIModels(options)
return models.map((model) => ({
...model,
group: 'Poe'
}))
}
}
2 changes: 2 additions & 0 deletions src/renderer/src/components/icons/ModelIcon.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import ppioColorIcon from '@/assets/llm-icons/ppio-color.svg?url'
import tokenfluxColorIcon from '@/assets/llm-icons/tokenflux-color.svg?url'
import moonshotColorIcon from '@/assets/llm-icons/moonshot.svg?url'
import openrouterColorIcon from '@/assets/llm-icons/openrouter.svg?url'
import poeColorIcon from '@/assets/llm-icons/poe-color.svg?url'
import geminiColorIcon from '@/assets/llm-icons/gemini-color.svg?url'
import githubColorIcon from '@/assets/llm-icons/github.svg?url'
import azureOpenaiColorIcon from '@/assets/llm-icons/azure-color.svg?url'
Expand Down Expand Up @@ -119,6 +120,7 @@ const icons = {
qwen: qwenColorIcon,
moonshot: moonshotColorIcon,
openrouter: openrouterColorIcon,
poe: poeColorIcon,
gemini: geminiColorIcon,
github: githubColorIcon,
anthropic: claudeColorIcon,
Expand Down