Show HN: Python package for interfacing with ChatGPT with minimized complexity
github.com
github.com
Totally agree with the project goals, it seems too many other packages are created by people who are researchers (or enthusiasts) first and software developers second, and it shows.
I see you're using Pydantic. I've recently been playing with using pydantic to implement chatgpt functions, making it a bit easier to define functions (tools) with more control over the attributes, like this:
class SearchWeb(pydantic.BaseModel):
"""
Docstring description to help GPT figure out what this does, like functions in your library.
"""
query: str = pydantic.Field(description="More info so GPT understands how to use this param")
def handle(self):
# my wrapper will call this to implement the tool after the arguments are parsed
# at this point you can be sure self.query is correct and has passed any validation you might have
It's definitely more verbose than the function definitions you have now, but you get schema definition for free, and is more strict about option parsing. It also makes it easy to throw errors back at GPT if it hallucinated some parameters incorrectly....aaaanyways, great work there, I'll be following the progress!
I whipped up an example doing something similar last Friday using a decorator, inspect, ast and __doc__ usage: https://gist.github.com/kordless/7d306b0646bf0b56c44ebca2b8e.... The example pulls top results from Algoia's HN search and then chains them into another prompt for GPT-X. The blog post is here: https://www.featurebase.com/blog/function-integration-in-ope...
Currently integrating this approach into PythonGPT[1], which will build a function on the fly, extract the method info, then call the code in exec(). I would label it "very dangerous"...
That post let me know that pydantic's schema() function actually worked to produce a valid JSON schema, so I was able to optimize from there. (there may be a few optimizations still to be done: schema() also returns an unnecessary title field and I need to experiment if I need to remove it)
It's just that these packages/libraries/frameworks are often in what I'd describe as "proof of concept" phase, not very developer-friendly (as in user-friendly for people wanting to try it out), missing docs, not handling errors, and not being written in a maintainable way.
So I think a "second generation" of tools/libraries, that are basically product-level quality, bringing on your work and focusing on those non-core-tech aspects of the experience, will be a next step to bring AI to the (developer) masses. Tools such as this package.
Why can I use the GPT-4 API through the ChatGPT UI, but not any other way?
It's fine if not, I can imagine you want to keep it as simple as possible and outsource it to the library user.
I just wasted a couple hours the other week due to langchainjs defaulting to retrying errors which were ultimately caused by timeouts and would never complete.
Seems like everyone has to roll their own on this and it’s much nicer to have smooth tooling for it.
Is there some JavaScript/Typescript alternatives to Langchain?
https://aider.chat/examples/2048-game.html
Here a link to aider with more info:
I take it that asking things about the repository with gpt3.5-turbo-16k is not possible without adding each file separately?
Just to test I generated ctags for my smallish Rust project and noticed it comes to around 10k tokens according to https://platform.openai.com/tokenizer.
I don't have GPT-4 API access yet but it appears it would get quite expensive with the 32k context.
Improving and deepening support for the 3.5 models is probably my top priority next effort. Previously, they were barely useful for editing code. The 16k context window and functions support may have shifted that balance, so I need to dig in more.
One other thing to note is that aider now distills the repo map to fit within a token budget. The default is 1k tokens, specified via `--map-tokens`. It tries to use the budget to convey the most important parts of the repo map to GPT. So in theory, even very large repos should get a useful map.
- https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake
- https://twitter.com/jerryjliu0/status/1636728577524916225?s=20 (GPT repo loader)
FWIW there's tons of tools you could use to do this. GitHub Copilot is pretty close to being a comprehensive solution as well.I'd love to change this to use the new function logic in chatgpt