temp
This commit is contained in:
63
src/provider/chat.ts
Normal file
63
src/provider/chat.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
export * from './core/index.ts';
|
||||
import { BaseChat } from './core/chat.ts';
|
||||
|
||||
import { Ollama } from './chat-adapter/ollama.ts';
|
||||
import { SiliconFlow } from './chat-adapter/siliconflow.ts';
|
||||
import { Custom } from './chat-adapter/custom.ts';
|
||||
import { Volces } from './chat-adapter/volces.ts';
|
||||
import { DeepSeek } from './chat-adapter/deepseek.ts';
|
||||
import { ModelScope } from './chat-adapter/model-scope.ts';
|
||||
import { ChatMessage } from './core/type.ts';
|
||||
|
||||
export const OllamaProvider = Ollama;
|
||||
export const SiliconFlowProvider = SiliconFlow;
|
||||
export const CustomProvider = Custom;
|
||||
export const VolcesProvider = Volces;
|
||||
export const DeepSeekProvider = DeepSeek;
|
||||
export const ModelScopeProvider = ModelScope;
|
||||
|
||||
export const ChatProviderMap = {
|
||||
Ollama: OllamaProvider,
|
||||
SiliconFlow: SiliconFlowProvider,
|
||||
Custom: CustomProvider,
|
||||
Volces: VolcesProvider,
|
||||
DeepSeek: DeepSeekProvider,
|
||||
ModelScope: ModelScopeProvider,
|
||||
BaseChat: BaseChat,
|
||||
};
|
||||
|
||||
type ProviderManagerConfig = {
|
||||
provider: string;
|
||||
model: string;
|
||||
apiKey: string;
|
||||
baseURL?: string;
|
||||
};
|
||||
export class ProviderManager {
|
||||
provider: BaseChat;
|
||||
constructor(config: ProviderManagerConfig) {
|
||||
const { provider, model, apiKey, baseURL } = config;
|
||||
const Provider = ChatProviderMap[provider] as typeof BaseChat;
|
||||
if (!Provider) {
|
||||
throw new Error(`Provider ${provider} not found`);
|
||||
}
|
||||
const providerConfig = {
|
||||
model,
|
||||
apiKey,
|
||||
baseURL,
|
||||
};
|
||||
if (!providerConfig.baseURL) {
|
||||
delete providerConfig.baseURL;
|
||||
}
|
||||
this.provider = new Provider(providerConfig);
|
||||
}
|
||||
static async createProvider(config: ProviderManagerConfig) {
|
||||
if (!config.baseURL) {
|
||||
delete config.baseURL;
|
||||
}
|
||||
const pm = new ProviderManager(config);
|
||||
return pm.provider;
|
||||
}
|
||||
async chat(messages: ChatMessage[]) {
|
||||
return this.provider.chat(messages);
|
||||
}
|
||||
}
|
||||
@@ -1,63 +1,3 @@
|
||||
export * from './core/index.ts';
|
||||
import { BaseChat } from './core/chat.ts';
|
||||
export * from './chat.ts';
|
||||
|
||||
import { Ollama } from './chat-adapter/ollama.ts';
|
||||
import { SiliconFlow } from './chat-adapter/siliconflow.ts';
|
||||
import { Custom } from './chat-adapter/custom.ts';
|
||||
import { Volces } from './chat-adapter/volces.ts';
|
||||
import { DeepSeek } from './chat-adapter/deepseek.ts';
|
||||
import { ModelScope } from './chat-adapter/model-scope.ts';
|
||||
import { ChatMessage } from './core/type.ts';
|
||||
|
||||
export const OllamaProvider = Ollama;
|
||||
export const SiliconFlowProvider = SiliconFlow;
|
||||
export const CustomProvider = Custom;
|
||||
export const VolcesProvider = Volces;
|
||||
export const DeepSeekProvider = DeepSeek;
|
||||
export const ModelScopeProvider = ModelScope;
|
||||
|
||||
export const ProviderMap = {
|
||||
Ollama: OllamaProvider,
|
||||
SiliconFlow: SiliconFlowProvider,
|
||||
Custom: CustomProvider,
|
||||
Volces: VolcesProvider,
|
||||
DeepSeek: DeepSeekProvider,
|
||||
ModelScope: ModelScopeProvider,
|
||||
BaseChat: BaseChat,
|
||||
};
|
||||
|
||||
type ProviderManagerConfig = {
|
||||
provider: string;
|
||||
model: string;
|
||||
apiKey: string;
|
||||
baseURL?: string;
|
||||
};
|
||||
export class ProviderManager {
|
||||
provider: BaseChat;
|
||||
constructor(config: ProviderManagerConfig) {
|
||||
const { provider, model, apiKey, baseURL } = config;
|
||||
const Provider = ProviderMap[provider] as typeof BaseChat;
|
||||
if (!Provider) {
|
||||
throw new Error(`Provider ${provider} not found`);
|
||||
}
|
||||
const providerConfig = {
|
||||
model,
|
||||
apiKey,
|
||||
baseURL,
|
||||
};
|
||||
if (!providerConfig.baseURL) {
|
||||
delete providerConfig.baseURL;
|
||||
}
|
||||
this.provider = new Provider(providerConfig);
|
||||
}
|
||||
static async createProvider(config: ProviderManagerConfig) {
|
||||
if (!config.baseURL) {
|
||||
delete config.baseURL;
|
||||
}
|
||||
const pm = new ProviderManager(config);
|
||||
return pm.provider;
|
||||
}
|
||||
async chat(messages: ChatMessage[]) {
|
||||
return this.provider.chat(messages);
|
||||
}
|
||||
}
|
||||
export * from './knowledge.ts';
|
||||
@@ -1,9 +1,9 @@
|
||||
import { BaseChat, BaseChatOptions } from '../core/chat.ts';
|
||||
import { EmbeddingMessage } from '../core/type.ts';
|
||||
|
||||
export type KnowledgeOptions<T = Record<string, string>> = BaseChatOptions<
|
||||
export type KnowledgeOptions<T = Record<string, any>> = BaseChatOptions<
|
||||
{
|
||||
embeddingModel: string;
|
||||
embeddingModel?: string;
|
||||
splitSize?: number; // 分块大小 默认 2000
|
||||
splitOverlap?: number; // 分块重叠 默认 200
|
||||
batchSize?: number; // 批量大小 默认 4, 4*2000=8000
|
||||
24
src/provider/knowledge-adapter/siliconflow.ts
Normal file
24
src/provider/knowledge-adapter/siliconflow.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { KnowledgeBase, KnowledgeOptions } from './knowledge-base.ts';
|
||||
|
||||
export class SiliconFlowKnowledge extends KnowledgeBase {
|
||||
static BASE_URL = 'https://api.siliconflow.com/v1';
|
||||
constructor(options: KnowledgeOptions) {
|
||||
super({ ...options, baseURL: options?.baseURL ?? SiliconFlowKnowledge.BASE_URL });
|
||||
}
|
||||
|
||||
async rerank(data: RerankOptions) {
|
||||
return this.openai.post('/rerank', {
|
||||
body: data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export type RerankOptions = {
|
||||
model: string;
|
||||
query: string;
|
||||
documents: string[];
|
||||
top_n?: number;
|
||||
return_documents?: boolean;
|
||||
max_chunks_per_doc?: number;
|
||||
overlap_tokens?: number;
|
||||
};
|
||||
6
src/provider/knowledge.ts
Normal file
6
src/provider/knowledge.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { SiliconFlowKnowledge } from './knowledge-adapter/siliconflow.ts';
|
||||
import { KnowledgeBase, KnowledgeOptions } from './knowledge-adapter/knowledge-base.ts';
|
||||
import { RerankOptions } from './knowledge-adapter/siliconflow.ts';
|
||||
export { KnowledgeBase, KnowledgeOptions, RerankOptions };
|
||||
|
||||
export { SiliconFlowKnowledge };
|
||||
Reference in New Issue
Block a user