remove get_result method and improve gpt_v_generator.py and test_gpt_v_generator.py.

This commit is contained in:
mannaandpoem 2024-02-05 21:48:59 +08:00
parent 23c27627ce
commit 6015c16618
3 changed files with 88 additions and 85 deletions

View file

@ -5,36 +5,91 @@
@Author : mannaandpoem
@File : test_gpt_v_generator.py
"""
from pathlib import Path
import pytest
from metagpt import logs
from metagpt.const import METAGPT_ROOT
from metagpt.tools.libs.gpt_v_generator import GPTvGenerator
@pytest.fixture
def mock_webpages(mocker):
def mock_webpage_filename_with_styles_and_scripts(mocker):
mock_data = """```html\n<html>\n<script src="scripts.js"></script>
<link rel="stylesheet" href="styles.css(">\n</html>\n```\n
```css\n.class { ... }\n```\n
```javascript\nfunction() { ... }\n```\n"""
mocker.patch("metagpt.tools.libs.gpt_v_generator.GPTvGenerator.generate_webpages", return_value=mock_data)
<link rel="stylesheet" href="styles.css">\n</html>\n```\n
```css\n/* styles.css */\n```\n
```javascript\n// scripts.js\n```\n"""
mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=mock_data)
return mocker
def test_vision_generate_webpages(mock_webpages):
image_path = "image.png"
@pytest.fixture
def mock_webpage_filename_with_style_and_script(mocker):
mock_data = """```html\n<html>\n<script src="script.js"></script>
<link rel="stylesheet" href="style.css">\n</html>\n```\n
```css\n/* style.css */\n```\n
```javascript\n// script.js\n```\n"""
mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=mock_data)
return mocker
@pytest.fixture
def mock_image_layout(mocker):
image_layout = "The layout information of the sketch image is ..."
mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=image_layout)
return mocker
@pytest.fixture
def image_path():
return f"{METAGPT_ROOT}/docs/resources/workspace/content_rec_sys/resources/competitive_analysis.png"
@pytest.mark.asyncio
async def test_generate_webpages_with_suffix_s(mock_webpage_filename_with_styles_and_scripts, image_path):
generator = GPTvGenerator()
rsp = generator.generate_webpages(image_path=image_path)
rsp = await generator.generate_webpages(image_path=image_path)
logs.logger.info(rsp)
assert "html" in rsp
assert "css" in rsp
assert "javascript" in rsp
def test_save_webpages(mock_webpages):
image_path = "image.png"
@pytest.mark.asyncio
async def test_generate_webpages_without_suffix_s(mock_webpage_filename_with_style_and_script, image_path):
generator = GPTvGenerator()
webpages = generator.generate_webpages(image_path)
rsp = await generator.generate_webpages(image_path=image_path)
logs.logger.info(rsp)
assert "html" in rsp
assert "css" in rsp
assert "javascript" in rsp
@pytest.mark.asyncio
async def test_save_webpages_with_suffix_s(mock_webpage_filename_with_styles_and_scripts, image_path):
generator = GPTvGenerator()
webpages = await generator.generate_webpages(image_path)
webpages_dir = generator.save_webpages(image_path=image_path, webpages=webpages)
logs.logger.info(webpages_dir)
assert webpages_dir.exists()
@pytest.mark.asyncio
async def test_save_webpages_without_suffix_s(mock_webpage_filename_with_style_and_script, image_path):
generator = GPTvGenerator()
webpages = await generator.generate_webpages(image_path)
webpages_dir = generator.save_webpages(image_path=image_path, webpages=webpages)
logs.logger.info(webpages_dir)
assert webpages_dir.exists()
@pytest.mark.asyncio
async def test_analyze_layout(mock_image_layout, image_path):
layout = await GPTvGenerator().analyze_layout(Path(image_path))
logs.logger.info(layout)
assert layout
if __name__ == "__main__":
pytest.main([__file__, "-s"])