feat(server): linting and bug fix on llm

This commit is contained in:
Nicholas Tindle
2024-08-16 19:22:12 -05:00
parent dabd2e1610
commit 8c6adaeaa1
4 changed files with 27 additions and 13 deletions

View File

@@ -1,15 +1,15 @@
import enum
import io
import sys
import json
import multiprocessing
import subprocess
import venv
import os
import tempfile
import shutil
import subprocess
import sys
import tempfile
import time
from typing import Any, Union, Dict, List
import venv
from typing import Any, Dict, List, Union
from autogpt_server.data.block import Block, BlockCategory, BlockOutput, BlockSchema
from autogpt_server.data.model import SchemaField
@@ -45,6 +45,7 @@ class FastPythonExecutionBlock(Block):
categories={BlockCategory.BASIC},
input_schema=self.Input,
output_schema=self.Output,
disabled=True,
)
def run(self, input_data: Input) -> BlockOutput:
@@ -122,6 +123,7 @@ class FlexiblePythonExecutionBlock(Block):
categories={BlockCategory.BASIC},
input_schema=self.Input,
output_schema=self.Output,
disabled=True,
)
self.venv_path = tempfile.mkdtemp()
self.create_venv()

View File

@@ -1,5 +1,5 @@
from autogpt_server.data.block import Block, BlockCategory, BlockOutput, BlockSchema
from autogpt_server.data.model import ContributorDetails, SchemaField
from autogpt_server.data.model import ContributorDetails
class ReadCsvBlock(Block):

View File

@@ -1,6 +1,7 @@
import logging
from enum import Enum
from typing import List, NamedTuple
from json import JSONDecodeError
from typing import Any, List, NamedTuple
import anthropic
import ollama
@@ -86,7 +87,7 @@ class ObjectLlmCallBlock(Block):
retry: int = 3
class Output(BlockSchema):
response: dict[str, str]
response: dict[str, Any]
error: str
def __init__(self):
@@ -204,14 +205,16 @@ class ObjectLlmCallBlock(Block):
prompt.append({"role": "user", "content": input_data.prompt})
def parse_response(resp: str) -> tuple[dict[str, str], str | None]:
def parse_response(resp: str) -> tuple[dict[str, Any], str | None]:
try:
parsed = json.loads(resp)
if not isinstance(parsed, dict):
return {}, f"Expected a dictionary, but got {type(parsed)}"
miss_keys = set(input_data.expected_format.keys()) - set(parsed.keys())
if miss_keys:
return parsed, f"Missing keys: {miss_keys}"
return parsed, None
except Exception as e:
except JSONDecodeError as e:
return {}, f"JSON decode error: {e}"
logger.warning(f"LLM request: {prompt}")
@@ -235,7 +238,16 @@ class ObjectLlmCallBlock(Block):
if input_data.expected_format:
parsed_dict, parsed_error = parse_response(response_text)
if not parsed_error:
yield "response", {k: str(v) for k, v in parsed_dict.items()}
yield "response", {
k: (
json.loads(v)
if isinstance(v, str)
and v.startswith("[")
and v.endswith("]")
else (", ".join(v) if isinstance(v, list) else v)
)
for k, v in parsed_dict.items()
}
return
else:
yield "response", {"response": response_text}

View File

@@ -1,7 +1,7 @@
from typing import Any, List, Union, Dict, Optional
import random
from enum import Enum
from collections import defaultdict
from enum import Enum
from typing import Any, Dict, List, Optional, Union
from autogpt_server.data.block import Block, BlockCategory, BlockOutput, BlockSchema
from autogpt_server.data.model import SchemaField