Skip to content

Commit a9f32f2

Browse files
committed
v0.0.70
1 parent 356a1a6 commit a9f32f2

File tree

2 files changed

+80
-17
lines changed

2 files changed

+80
-17
lines changed

agixtsdk/__init__.py

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
import tiktoken
2-
import uuid
3-
import requests
4-
import base64
5-
import time
6-
import openai
7-
import requests
8-
import pyotp
9-
from datetime import datetime
10-
from pydub import AudioSegment
11-
from pydantic import BaseModel
121
from typing import (
132
Dict,
143
List,
154
Any,
165
Optional,
176
Callable,
187
Type,
8+
Union,
199
get_args,
2010
get_origin,
21-
Union,
11+
get_type_hints,
2212
)
13+
from pydantic import BaseModel
14+
from pydub import AudioSegment
15+
from datetime import datetime
2316
from enum import Enum
17+
import tiktoken
18+
import requests
2419
import inspect
25-
from typing import get_type_hints
20+
import base64
21+
import openai
22+
import pyotp
23+
import uuid
24+
import time
2625
import json
26+
import os
2727

2828

2929
class ChatCompletions(BaseModel):
@@ -1715,16 +1715,13 @@ def _generate_detailed_schema(self, model: Type[BaseModel], depth: int = 0) -> s
17151715
indent = " " * depth
17161716
for field, field_type in fields.items():
17171717
description = f"{indent}{field}: "
1718-
print(f"Processing field: {field}, type: {field_type}") # Debug print
17191718
origin_type = get_origin(field_type)
17201719
if origin_type is None:
17211720
origin_type = field_type
1722-
print(f"Origin type: {origin_type}") # Debug print
17231721
if inspect.isclass(origin_type) and issubclass(origin_type, BaseModel):
17241722
description += f"Nested Model:\n{self._generate_detailed_schema(origin_type, depth + 1)}"
17251723
elif origin_type == list:
17261724
list_type = get_args(field_type)[0]
1727-
print(f"List type: {list_type}") # Debug print
17281725
if inspect.isclass(list_type) and issubclass(list_type, BaseModel):
17291726
description += f"List of Nested Model:\n{self._generate_detailed_schema(list_type, depth + 1)}"
17301727
elif get_origin(list_type) == Union:
@@ -1861,6 +1858,45 @@ def convert_list_of_dicts(
18611858
mapped_list.append(new_data)
18621859
return mapped_list
18631860

1861+
def create_extension(
1862+
self,
1863+
agent_name: str,
1864+
extension_name: str,
1865+
openapi_json_url: str,
1866+
):
1867+
"""
1868+
Create an AGiXT extension for an OpenAPI specification from a JSON URL.
1869+
1870+
Parameters:
1871+
- extension_name (str): The name of the extension to create.
1872+
- openapi_json_url (str): The URL of the OpenAPI specification in JSON format.
1873+
"""
1874+
print(
1875+
f"Creating AGiXT extension for {extension_name}, this will take some time!"
1876+
)
1877+
chain_name = self.execute_command(
1878+
agent_name=agent_name,
1879+
command_name="Generate Extension from OpenAPI",
1880+
command_args={
1881+
"openapi_json_url": openapi_json_url,
1882+
"extension_name": extension_name,
1883+
},
1884+
conversation_name=f"{extension_name} Extension Generation",
1885+
)
1886+
extension_download = self.run_chain(
1887+
chain_name=chain_name,
1888+
agent_name=agent_name,
1889+
user_input=f"Create an AGiXT extension for {extension_name}.",
1890+
)
1891+
file_name = extension_download.split("/")[-1]
1892+
extension_file = requests.get(extension_download)
1893+
extension_dir = os.path.join(os.getcwd(), "extensions")
1894+
extension_file_path = os.path.join(extension_dir, file_name)
1895+
os.makedirs(extension_dir, exist_ok=True)
1896+
with open(extension_file_path, "wb") as f:
1897+
f.write(extension_file.content)
1898+
return f"{extension_name} extension created and downloaded to {extension_file_path}"
1899+
18641900
def get_dpo_response(
18651901
self,
18661902
agent_name: str,
@@ -2041,3 +2077,30 @@ def get_unique_external_sources(
20412077
return response.json()["external_sources"]
20422078
except Exception as e:
20432079
return self.handle_error(e)
2080+
2081+
2082+
def snake_case(old_str: str = ""):
2083+
if not old_str:
2084+
return ""
2085+
if " " in old_str:
2086+
old_str = old_str.replace(" ", "")
2087+
if "@" in old_str:
2088+
old_str = old_str.replace("@", "_")
2089+
if "." in old_str:
2090+
old_str = old_str.replace(".", "_")
2091+
if "-" in old_str:
2092+
old_str = old_str.replace("-", "_")
2093+
if "&" in old_str:
2094+
old_str = old_str.replace("&", "and")
2095+
if ":" in old_str:
2096+
old_str = old_str.replace(":", "_")
2097+
snake_str = ""
2098+
for i, char in enumerate(old_str):
2099+
if char.isupper():
2100+
if i != 0 and old_str[i - 1].islower():
2101+
snake_str += "_"
2102+
if i != len(old_str) - 1 and old_str[i + 1].islower():
2103+
snake_str += "_"
2104+
snake_str += char.lower()
2105+
snake_str = snake_str.strip("_")
2106+
return snake_str

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
setup(
1010
name="agixtsdk",
11-
version="0.0.69",
11+
version="0.0.70",
1212
description="The AGiXT SDK for Python.",
1313
long_description=long_description,
1414
long_description_content_type="text/markdown",

0 commit comments

Comments
 (0)