feat: merge geekan:dev

This commit is contained in:
莘权 马 2024-01-11 17:09:01 +08:00
commit cbad5170ac
25 changed files with 83 additions and 630 deletions

View file

@ -8,7 +8,6 @@
import pytest
from metagpt.configs.llm_config import LLMType
from metagpt.llm import LLM
from metagpt.memory.brain_memory import BrainMemory
from metagpt.schema import Message
@ -46,7 +45,7 @@ def test_extract_info(input, tag, val):
@pytest.mark.asyncio
@pytest.mark.parametrize("llm", [LLM(provider=LLMType.OPENAI)]) # , LLM(provider=LLMType.METAGPT)
@pytest.mark.parametrize("llm", [LLM()])
async def test_memory_llm(llm):
memory = BrainMemory()
for i in range(500):

View file

@ -12,7 +12,7 @@ from tests.metagpt.provider.mock_llm_config import (
@pytest.mark.asyncio
async def test_aask_code():
llm = LLM(name="gpt3t")
llm = LLM()
msg = [{"role": "user", "content": "Write a python hello world code."}]
rsp = await llm.aask_code(msg) # -> {'language': 'python', 'code': "print('Hello, World!')"}
@ -24,7 +24,7 @@ async def test_aask_code():
@pytest.mark.asyncio
async def test_aask_code_str():
llm = LLM(name="gpt3t")
llm = LLM()
msg = "Write a python hello world code."
rsp = await llm.aask_code(msg) # -> {'language': 'python', 'code': "print('Hello, World!')"}
assert "language" in rsp
@ -34,7 +34,7 @@ async def test_aask_code_str():
@pytest.mark.asyncio
async def test_aask_code_message():
llm = LLM(name="gpt3t")
llm = LLM()
msg = UserMessage("Write a python hello world code.")
rsp = await llm.aask_code(msg) # -> {'language': 'python', 'code': "print('Hello, World!')"}
assert "language" in rsp

View file

@ -10,7 +10,10 @@ from pydantic import BaseModel
from metagpt.config2 import Config
from metagpt.configs.llm_config import LLMType
from metagpt.context import ContextMixin
from tests.metagpt.provider.mock_llm_config import mock_llm_config
from tests.metagpt.provider.mock_llm_config import (
mock_llm_config,
mock_llm_config_proxy,
)
def test_config_1():
@ -21,9 +24,9 @@ def test_config_1():
def test_config_from_dict():
cfg = Config(llm={"default": mock_llm_config})
cfg = Config(llm=mock_llm_config)
assert cfg
assert cfg.llm["default"].api_key == "mock_api_key"
assert cfg.llm.api_key == "mock_api_key"
class ModelX(ContextMixin, BaseModel):
@ -47,11 +50,11 @@ def test_config_mixin_1():
def test_config_mixin_2():
i = Config(llm={"default": mock_llm_config})
j = Config(llm={"new": mock_llm_config})
i = Config(llm=mock_llm_config)
j = Config(llm=mock_llm_config_proxy)
obj = ModelX(config=i)
assert obj._config == i
assert obj._config.llm["default"] == mock_llm_config
assert obj._config.llm == mock_llm_config
obj.set_config(j)
# obj already has a config, so it will not be set
@ -60,16 +63,16 @@ def test_config_mixin_2():
def test_config_mixin_3():
"""Test config mixin with multiple inheritance"""
i = Config(llm={"default": mock_llm_config})
j = Config(llm={"new": mock_llm_config})
i = Config(llm=mock_llm_config)
j = Config(llm=mock_llm_config_proxy)
obj = ModelY(config=i)
assert obj._config == i
assert obj._config.llm["default"] == mock_llm_config
assert obj._config.llm == mock_llm_config
obj.set_config(j)
# obj already has a config, so it will not be set
assert obj._config == i
assert obj._config.llm["default"] == mock_llm_config
assert obj._config.llm == mock_llm_config
assert obj.a == "a"
assert obj.b == "b"

View file

@ -49,13 +49,14 @@ class MockSearchEnine:
async def test_search_engine(search_engine_type, run_func: Callable, max_results: int, as_string: bool, aiohttp_mocker):
# Prerequisites
cache_json_path = None
# FIXME: 不能使用全局的config而是要自己实例化对应的config
if search_engine_type is SearchEngineType.SERPAPI_GOOGLE:
assert config.search["serpapi"]
assert config.search
cache_json_path = search_cache_path / f"serpapi-metagpt-{max_results}.json"
elif search_engine_type is SearchEngineType.DIRECT_GOOGLE:
assert config.search["google"]
assert config.search
elif search_engine_type is SearchEngineType.SERPER_GOOGLE:
assert config.search["serper"]
assert config.search
cache_json_path = search_cache_path / f"serper-metagpt-{max_results}.json"
if cache_json_path:

View file

@ -1,38 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2023/5/1 11:19
@Author : alexanderwu
@File : test_config.py
@Modified By: mashenquan, 2013/8/20, Add `test_options`; remove global configuration `CONFIG`, enable configuration support for business isolation.
"""
from pathlib import Path
import pytest
from metagpt.config import Config
def test_config_class_get_key_exception():
with pytest.raises(Exception) as exc_info:
config = Config()
config.get("wtf")
assert str(exc_info.value) == "Key 'wtf' not found in environment variables or in the YAML file"
def test_config_yaml_file_not_exists():
# FIXME: 由于这里是单例所以会导致Config重新创建失效。后续要将Config改为非单例模式。
_ = Config("wtf.yaml")
# with pytest.raises(Exception) as exc_info:
# config.get("OPENAI_BASE_URL")
# assert str(exc_info.value) == "Set OPENAI_API_KEY or Anthropic_API_KEY first"
def test_options():
filename = Path(__file__).resolve().parent.parent.parent.parent / "config/config.yaml"
config = Config(filename)
assert config.options
if __name__ == "__main__":
test_options()