feat: merge send18

This commit is contained in:
莘权 马 2023-12-14 22:59:41 +08:00
parent 7effe7f74c
commit ea21217a69
54 changed files with 366 additions and 930 deletions

View file

@ -24,6 +24,6 @@ class WebBrowserEngineType(Enum):
CUSTOM = "custom"
@classmethod
def _missing_(cls, key):
"""缺省类型转换"""
def __missing__(cls, key):
"""Default type conversion"""
return cls.CUSTOM

View file

@ -22,6 +22,6 @@ async def post_greeting(name: str) -> str:
if __name__ == "__main__":
app = connexion.AioHttpApp(__name__, specification_dir='../../.well-known/')
app = connexion.AioHttpApp(__name__, specification_dir="../../.well-known/")
app.add_api("openapi.yaml", arguments={"title": "Hello World Example"})
app.run(port=8080)

View file

@ -8,18 +8,13 @@
"""
import asyncio
import base64
import os
import sys
from pathlib import Path
from typing import List, Dict
from typing import Dict, List
import aiohttp
import requests
from pydantic import BaseModel
from metagpt.config import CONFIG, Config
sys.path.append(str(Path(__file__).resolve().parent.parent.parent)) # fix-bug: No module named 'metagpt'
from metagpt.logs import logger
@ -38,9 +33,7 @@ class MetaGPTText2Image:
:return: The image data is returned in Base64 encoding.
"""
headers = {
"Content-Type": "application/json"
}
headers = {"Content-Type": "application/json"}
dims = size_type.split("x")
data = {
"prompt": text,

View file

@ -8,26 +8,23 @@
For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`
"""
import asyncio
import os
from pathlib import Path
from typing import List
import aiohttp
import requests
from pydantic import BaseModel
import sys
from metagpt.config import CONFIG, Config
sys.path.append(str(Path(__file__).resolve().parent.parent.parent)) # fix-bug: No module named 'metagpt'
from metagpt.logs import logger
class Embedding(BaseModel):
"""Represents an embedding vector returned by embedding endpoint."""
object: str # The object type, which is always "embedding".
embedding: List[
float] # The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.
float
] # The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.
index: int # The index of the embedding in the list of embeddings.
@ -58,10 +55,7 @@ class OpenAIText2Embedding:
:return: A json object of :class:`ResultEmbedding` class if successful, otherwise `{}`.
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.openai_api_key}"
}
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {self.openai_api_key}"}
data = {"input": text, "model": model}
try:
async with aiohttp.ClientSession() as session:

View file

@ -6,21 +6,14 @@ import asyncio
import base64
import io
import json
import os
from os.path import join
from typing import List
from aiohttp import ClientSession
from PIL import Image, PngImagePlugin
<<<<<<< HEAD
from metagpt.config import CONFIG
=======
from metagpt.config import Config
from metagpt.logs import logger
>>>>>>> send18/dev
# from metagpt.const import WORKSPACE_ROOT
from metagpt.const import SD_OUTPUT_FILE_REPO
from metagpt.logs import logger
payload = {
@ -84,14 +77,10 @@ class SDEngine:
return self.payload
def _save(self, imgs, save_name=""):
<<<<<<< HEAD
save_dir = CONFIG.workspace_path / "resources" / "SD_Output"
=======
save_dir = CONFIG.get_workspace() / "resources" / "SD_Output"
>>>>>>> send18/dev
if not os.path.exists(save_dir):
os.makedirs(save_dir, exist_ok=True)
batch_decode_base64_to_image(imgs, save_dir, save_name=save_name)
save_dir = CONFIG.workspace_path / SD_OUTPUT_FILE_REPO
if not save_dir.exists():
save_dir.mkdir(parents=True, exist_ok=True)
batch_decode_base64_to_image(imgs, str(save_dir), save_name=save_name)
async def run_t2i(self, prompts: List):
# Asynchronously run the SD API for multiple prompts

View file

@ -20,16 +20,16 @@ class WebBrowserEngine:
engine: WebBrowserEngineType | None = None,
run_func: Callable[..., Coroutine[Any, Any, WebPage | list[WebPage]]] | None = None,
):
engine = engine or options.get("web_browser_engine")
engine = engine or CONFIG.web_browser_engine
if engine is None:
raise NotImplementedError
if WebBrowserEngineType(engine) is WebBrowserEngineType.PLAYWRIGHT:
module = "metagpt.tools.web_browser_engine_playwright"
run_func = importlib.import_module(module).PlaywrightWrapper(options=options).run
run_func = importlib.import_module(module).PlaywrightWrapper().run
elif WebBrowserEngineType(engine) is WebBrowserEngineType.SELENIUM:
module = "metagpt.tools.web_browser_engine_selenium"
run_func = importlib.import_module(module).SeleniumWrapper(options=options).run
run_func = importlib.import_module(module).SeleniumWrapper().run
elif WebBrowserEngineType(engine) is WebBrowserEngineType.CUSTOM:
run_func = run_func
else:
@ -53,8 +53,6 @@ if __name__ == "__main__":
import fire
async def main(url: str, *urls: str, engine_type: Literal["playwright", "selenium"] = "playwright", **kwargs):
return await WebBrowserEngine(options=CONFIG.options, engine=WebBrowserEngineType(engine_type), **kwargs).run(
url, *urls
)
return await WebBrowserEngine(engine=WebBrowserEngineType(engine_type), **kwargs).run(url, *urls)
fire.Fire(main)

View file

@ -9,13 +9,13 @@ import asyncio
import importlib
from concurrent import futures
from copy import deepcopy
from typing import Literal, Dict
from typing import Dict, Literal
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from metagpt.config import Config
from metagpt.config import CONFIG
from metagpt.utils.parse_html import WebPage
@ -41,11 +41,11 @@ class SeleniumWrapper:
executor: futures.Executor | None = None,
) -> None:
if browser_type is None:
browser_type = options.get("selenium_browser_type")
browser_type = CONFIG.selenium_browser_type
self.browser_type = browser_type
launch_kwargs = launch_kwargs or {}
if options.get("global_proxy") and "proxy-server" not in launch_kwargs:
launch_kwargs["proxy-server"] = options.get("global_proxy")
if CONFIG.global_proxy and "proxy-server" not in launch_kwargs:
launch_kwargs["proxy-server"] = CONFIG.global_proxy
self.executable_path = launch_kwargs.pop("executable_path", None)
self.launch_args = [f"--{k}={v}" for k, v in launch_kwargs.items()]
@ -123,8 +123,6 @@ if __name__ == "__main__":
import fire
async def main(url: str, *urls: str, browser_type: str = "chrome", **kwargs):
return await SeleniumWrapper(options=Config().runtime_options,
browser_type=browser_type,
**kwargs).run(url, *urls)
return await SeleniumWrapper(browser_type=browser_type, **kwargs).run(url, *urls)
fire.Fire(main)