Files
NotesAgentic/backend/app/providers/base.py
T
admin 1741f7b1aa 添加provider工厂和Ollama支持
- 实现ProviderFactory用于构建不同类型的provider适配器
- 添加EnvironmentCredentialResolver用于解析环境变量中的凭证
- 实现OllamaProvider支持本地模型调用
- 实现OpenAICompatibleProvider支持OpenAI兼容接口
- 在AgentRuntime中添加对ProviderError的处理
- 更新Message结构体添加tool_calls字段
- 实现provider配置的增删改查API端点
- 添加provider注册表的replace方法
- 添加HTTP基础类和工具参数解码功能
- 更新依赖添加httpx库
- 添加相关单元测试验证provider适配器功能
```
2026-08-27 14:16:57 +08:00

38 lines
1.0 KiB
Python

from collections.abc import AsyncIterator
from dataclasses import dataclass, field
from typing import Protocol
from app.contracts import ModelEvent, ModelInfo, ModelRequest
class ProviderError(RuntimeError):
def __init__(self, code: str, message: str) -> None:
super().__init__(message)
self.code = code
self.message = message
@dataclass(slots=True)
class ProviderToolCall:
tool_call_id: str
name: str
arguments: dict[str, object] = field(default_factory=dict)
@dataclass(slots=True)
class ProviderTurn:
text: str | None = None
tool_calls: list[ProviderToolCall] = field(default_factory=list)
input_tokens: int = 0
output_tokens: int = 0
class ModelProvider(Protocol):
async def complete(self, request: ModelRequest) -> ProviderTurn: ...
def stream(self, request: ModelRequest) -> AsyncIterator[ModelEvent]: ...
async def list_models(self) -> list[ModelInfo]: ...
async def test_connection(self, model: str | None = None) -> tuple[bool, str]: ...