Skip to content

answerrocket/skill-framework

Repository files navigation

This is a framework for creating AnswerRocket skills. It provides decorators and utilities for turning your code into something that can be invoked by our platform.

Install

pip install skill-framework[ui] to install the library with the local preview server

pip install skill-framework for a plain install

There are three command line utilities installed along with this library:

package-skill <your_entry_file>.py - packages your skill for upload to your AnswerRocket environment. This will generate a manifest file from the @skill-annotated function in the file and then combine everything into a zip archive. This utility will honor a .gitignore file if one is present in the project root.

preview-server - runs a local preview server to view rendered layouts locally.

init-skill <skill_name> to bootstrap a new skill. This will create the following:

. ├── .gitignore ├── resources/ ├── .previews/ └── <skill_name>.py 

resources/ can be used for static resources that may be referenced by your layouts. The preview server can serve content from this directory

.previews/ is where generated preview layouts will be stored for viewing with the preview server

The .gitignore file will be pre-populated with entries common to python projects, along with the .preview directory. If you already have one, this script will not replace it.

A skill needs to have a @skill decorated entry point, like this:

fromskill_frameworkimportskill, SkillInput, SkillParameter, SkillOutput, SkillVisualization@skill(name="my_skill",description="This is an example skill",parameters=[SkillParameter(name="dim",constrained_to="dimensions" ) ])defmy_skill(parameters: SkillInput): # you can access arguments to your parameters extracted from# natural language queries via the arguments field# other run-specific context will also be provided on this object# everything here is just a mocked up example, you can form the parts of the response# in any way that makes sense for your skill.data=get_some_data(parameters) visualization=create_visualization(data) narrative=create_narrative(data) prompt=create_chat_response_prompt(data, narrative) returnSkillOutput( final_prompt=prompt, narrative=narrative, visualizations=[visualization], ) defget_some_data(params): # use the client to get some data from a datasetpassdefcreate_visualization(data) ->SkillVisualization: # embed the data into a json layout payloadpassdefcreate_narrative(data) ->str: # make some description of the data to appear as the narrative part of the responsepassdefcreate_chat_response_prompt(data, narrative) ->str: # use the data and narrative to create a prompt for the model that will generate the response# in the chat windowpass

You can generate a preview for viewing with the preview-server by passing your skill's output to preview_skill:

fromskill_frameworkimportskill, SkillParameterfromskill_framework.testingimportSkillTestContext@skill(name="my skill",parameters=[SkillParameter(name="metric", ) ])defmy_skill(skill_input): passif__name__=='__main__': withSkillTestContext(my_skill) asctx: # this utility will write the output to where the local preview server expects itctx.preview_run({'metric': 'sales'})

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 6