添加provider工厂和Ollama支持

- 实现ProviderFactory用于构建不同类型的provider适配器
- 添加EnvironmentCredentialResolver用于解析环境变量中的凭证
- 实现OllamaProvider支持本地模型调用
- 实现OpenAICompatibleProvider支持OpenAI兼容接口
- 在AgentRuntime中添加对ProviderError的处理
- 更新Message结构体添加tool_calls字段
- 实现provider配置的增删改查API端点
- 添加provider注册表的replace方法
- 添加HTTP基础类和工具参数解码功能
- 更新依赖添加httpx库
- 添加相关单元测试验证provider适配器功能
```
This commit is contained in:
2026-08-27 14:16:57 +08:00
parent b71984d951
commit 1741f7b1aa
18 changed files with 794 additions and 20 deletions
+14 -5
View File
@@ -20,6 +20,7 @@ from app.contracts import (
ToolResult,
)
from app.providers.registry import ProviderRegistry
from app.providers.base import ProviderError
class AgentRunNotFoundError(LookupError):
@@ -141,6 +142,8 @@ class AgentRuntime:
self._finish_cancelled(record)
except TimeoutError:
self._fail(record, "AGENT_TIMEOUT", "Agent run exceeded its timeout.")
except ProviderError as exc:
self._fail(record, exc.code, exc.message)
except Exception as exc:
self._fail(record, "AGENT_FAILED", str(exc))
@@ -183,12 +186,18 @@ class AgentRuntime:
return
if turn.tool_calls:
for provider_call in turn.tool_calls:
call = ToolCall(
tool_call_id=provider_call.tool_call_id,
name=provider_call.name,
arguments=provider_call.arguments,
calls = [
ToolCall(
tool_call_id=item.tool_call_id,
name=item.name,
arguments=item.arguments,
)
for item in turn.tool_calls
]
messages.append(
Message(role=MessageRole.assistant, content=turn.text or "", tool_calls=calls)
)
for call in calls:
result = await self._execute_tool(record, call)
record.run.tool_results.append(result)
messages.append(