Skip to main content

The easiest way to develop AI-Powered applications

Project description

AI Powered

codecov

Motivation

Currently, AI (primarily referring to Large Language Models) has reached a stage of considerable practicality, yet many traditional software applications have not yet benefited from it. This project aims to provide convenient tools for integrating AI capabilities into various software.

With these tools, you don't need to redesign the entire software to leverage AI capabilities, nor do you need to add any user-visible functional modules. As long as you find that a function in your project could potentially be better answered by AI, you can replace its implementation with AI.

Usage

Installation is done by pip install ai_powered or poetry add ai_powered.

It provides the following tools:

@ai_powered Decorator

This decorator imbues your function signature with an AI implementation, which reads the docstring and invokes LLM to obtain the function's return value

from ai_powered import ai_powered

@ai_powered
def get_python_expression(expr: str) -> str:
    """ Convert the user-input mathematical expression into a valid Python expression """

You can also use more complex data structures in parameters and return values, but make sure they have complete type annotations

@dataclass
class UserInfo:
    name: str
    country: Optional[str]
    age: Optional[int]

@ai_powered
def extract_user_info(raw_text: str) -> UserInfo:
    ''' Extract user information from this self-introduction '''

More examples can be found here

@make_tool Decorator

This decorator converts ordinary Python functions into tools that can be used by the function calling feature of LLM.

from ai_powered import make_tool
import openai

@make_tool
def calculator(python_expression: str) -> str:
    ''' Evaluate a Python expression (only support built-in functions), which can be used to solve mathematical problems. '''
    return safe_eval(python_expression)

client = openai.OpenAI()
response = client.chat.completions.create(
    model = "gpt-4o-mini",
    messages = self.conversation,
    tools = [ calculator.schema() ],
    tool_choice = calculator.choice()
)

ChatBot

This class implements an AI chatbot. You can inherit from it to create your own ChatBot subclass, specifying the system prompts and tools to use. It will help you handle the complex process of tool invocation.

class MyChatBot (ChatBot):
    system_prompt = '''
    Please answer the user's questions. If any calculations are required, use the calculator available in the tool. It supports complex Python expressions. When using it, make sure to convert the user's mathematical expression to a valid Python expression. Do not use any undefined functions; if the user's expression includes function calls, convert them to Python's built-in functions or syntax.
    '''
    tools = (calculator,)

if __name__ == "__main__":
    bot = MyChatBot()
    print(bot.chat('hello, please tell me the result of 2^10 + 3^4'))
    print(bot.chat('and what is above result divided by 2?'))
    print(f"{bot.conversation =}")

More examples can be found here

Current Limitations and Future Plans

  • Currently, only a Python implementation is provided, but in fact, this model can be replicated in any other language that supports runtime type annotations.
  • At present, OpenAI's function calling capability cannot recognize references in the schema, so problems may arise when types become complex enough to generate references. This can be alleviated with deref, but when encountering recursive types, ref has to be kept, so this issue may ultimately require LLM providers to add such data in their training datasets to truly resolve the problem.
  • The data generated by the current LLM does not strictly adhere to the provided JSON Schema 100% of the time. The error rate may decrease as LLM providers continue to train, but in the end, we may need to introduce a retry mechanism to get it to approach 100% correctness (a retry mechanism is currently being planned).

Regarding Code Contribution

  1. The project will always be open source, but I haven't decided which open-source license to use yet. If you don't mind this, you can directly PR; otherwise, we might need to discuss the license issue first.
  2. Currently, all code is under strict mode type checking, and any type errors will be blocked by GitHub Actions. We do not recommend using Any or #type: ignore unless absolutely necessary.
  3. Test coverage will be continuously monitored. It is recommended to always provide tests for your code, and even prepare the tests before coding.
  4. Regarding the development environment, it is recommended to install nix and direnv so that you automatically get a usable development environment. Of course, poetry shell is also a good choice (if you are already using poetry).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_powered-0.2.3.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_powered-0.2.3-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file ai_powered-0.2.3.tar.gz.

File metadata

  • Download URL: ai_powered-0.2.3.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.11.9 Linux/6.9.7-zen1

File hashes

Hashes for ai_powered-0.2.3.tar.gz
Algorithm Hash digest
SHA256 3ad3e00c1a627880119e1a97315b7993e19b67f1f47ba1dc5f35f812898a12b0
MD5 ef3e634ac0639764e68cbb3c70679e6a
BLAKE2b-256 daca1b94026ed8f7e5f49cd3329fe68bb1ce04284be54ba6bc4c7b566e802624

See more details on using hashes here.

File details

Details for the file ai_powered-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: ai_powered-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 14.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.11.9 Linux/6.9.7-zen1

File hashes

Hashes for ai_powered-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4f0a44ec1fb86054f5f484b1ea7b297e9b69b37c9abb17bf15d2b4b116bab1c0
MD5 f981789d06288b8380c7a2939df88e6f
BLAKE2b-256 a330076ef330a9b9a5d8579b728246a212a4b61ca189968fa2575ede98d41672

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page