1- import { ILlmProviderPresenter , LLM_PROVIDER , LLMResponse , MODEL_META } from '@shared/presenter'
1+ import {
2+ ILlmProviderPresenter ,
3+ LLM_PROVIDER ,
4+ LLMResponse ,
5+ MODEL_META ,
6+ OllamaModel
7+ } from '@shared/presenter'
28import { BaseLLMProvider } from './baseProvider'
39import { OpenAIProvider } from './providers/openAIProvider'
410import { DeepseekProvider } from './providers/deepseekProvider'
@@ -7,11 +13,13 @@ import { eventBus } from '@/eventbus'
713import { OpenAICompatibleProvider } from './providers/openAICompatibleProvider'
814import { PPIOProvider } from './providers/ppioProvider'
915import { getModelConfig } from './modelConfigs'
10- import { STREAM_EVENTS } from '@/events'
16+ import { OLLAMA_EVENTS , STREAM_EVENTS } from '@/events'
1117import { ConfigPresenter } from '../configPresenter'
1218import { GeminiProvider } from './providers/geminiProvider'
1319import { DEFAULT_PROVIDERS } from '../configPresenter/providers'
1420import { GithubProvider } from './providers/githubProvider'
21+ import { OllamaProvider } from './providers/ollamaProvider'
22+ import { ShowResponse } from 'ollama'
1523// 导入其他provider...
1624
1725// 流的状态
@@ -130,6 +138,9 @@ export class LLMProviderPresenter implements ILlmProviderPresenter {
130138 instance = new GithubProvider ( provider , this . configPresenter )
131139 break
132140 // 添加其他provider的实例化逻辑
141+ case 'ollama' :
142+ instance = new OllamaProvider ( provider , this . configPresenter )
143+ break
133144 default :
134145 instance = new OpenAICompatibleProvider ( provider , this . configPresenter )
135146 break
@@ -438,4 +449,66 @@ export class LLMProviderPresenter implements ILlmProviderPresenter {
438449 const provider = this . getProviderInstance ( providerId )
439450 return provider . summaryTitles ( messages , modelId )
440451 }
452+
453+ // 获取 OllamaProvider 实例
454+ getOllamaProviderInstance ( ) : OllamaProvider | null {
455+ // 检查当前激活的 provider 是否是 ollama
456+ if ( ! this . currentProviderId ) {
457+ return null
458+ }
459+
460+ const currentProvider = this . providers . get ( this . currentProviderId )
461+ if ( ! currentProvider || currentProvider . apiType !== 'ollama' ) {
462+ return null
463+ }
464+
465+ const providerInstance = this . providerInstances . get ( this . currentProviderId )
466+ if ( ! providerInstance || ! ( providerInstance instanceof OllamaProvider ) ) {
467+ return null
468+ }
469+
470+ return providerInstance
471+ }
472+ // ollama api
473+ listOllamaModels ( ) : Promise < OllamaModel [ ] > {
474+ const provider = this . getOllamaProviderInstance ( )
475+ if ( ! provider ) {
476+ throw new Error ( 'Ollama provider not found' )
477+ }
478+ return provider . listModels ( )
479+ }
480+ showOllamaModelInfo ( modelName : string ) : Promise < ShowResponse > {
481+ const provider = this . getOllamaProviderInstance ( )
482+ if ( ! provider ) {
483+ throw new Error ( 'Ollama provider not found' )
484+ }
485+ return provider . showModelInfo ( modelName )
486+ }
487+ listOllamaRunningModels ( ) : Promise < OllamaModel [ ] > {
488+ const provider = this . getOllamaProviderInstance ( )
489+ if ( ! provider ) {
490+ throw new Error ( 'Ollama provider not found' )
491+ }
492+ return provider . listRunningModels ( )
493+ }
494+ pullOllamaModels ( modelName : string ) : Promise < boolean > {
495+ const provider = this . getOllamaProviderInstance ( )
496+ if ( ! provider ) {
497+ throw new Error ( 'Ollama provider not found' )
498+ }
499+ return provider . pullModel ( modelName , ( progress ) => {
500+ console . log ( 'pullOllamaModels' , progress )
501+ eventBus . emit ( OLLAMA_EVENTS . PULL_MODEL_PROGRESS , {
502+ eventId : 'pullOllamaModels' ,
503+ ...progress
504+ } )
505+ } )
506+ }
507+ deleteOllamaModel ( modelName : string ) : Promise < boolean > {
508+ const provider = this . getOllamaProviderInstance ( )
509+ if ( ! provider ) {
510+ throw new Error ( 'Ollama provider not found' )
511+ }
512+ return provider . deleteModel ( modelName )
513+ }
441514}
0 commit comments