llama.cpp/examples/openai/README.md

2.3 KiB

examples.openai: OpenAI API-compatible server + agent / tools examples

A simple Python server that sits above the C++ ../server and offers improved OAI compatibility.

Usage

Run a simple test:

# Spawns a Python server (which spawns a C++ Server) then hits it w/ a tool-calling request
examples/openai/test.sh

To simply run the Python server (+ C++ server under the hood):

python -m examples.openai

Tools usage (WIP)

git clone https://github.com/NousResearch/Hermes-Function-Calling examples/openai/hermes_function_calling

Then edit examples/agents/hermes_function_calling/utils.py:

log_folder = os.environ.get('LOG_FOLDER', os.path.join(script_dir, "inference_logs"))

Then run tools in a sandbox:

REQUIREMENTS_FILE=<( cat examples/agents/hermes_function_calling/requirements.txt | grep -vE "bitsandbytes|flash-attn" ) \
  examples/agents/run_sandboxed_tools.sh \
    examples/agents/hermes_function_calling/functions.py \
    -e LOG_FOLDER=/data/inference_logs

TODO: reactor that reads OpenAPI definitions and does the tool calling

Features

The new examples/openai/server.py:

  • Uses llama.cpp C++ server as a backend (spawns it or connects to existing)

  • Uses actual jinja2 chat templates read from the models

  • Supports grammar-constrained output for both JSON response format and tool calls

  • Tool calling “works” w/ all models (even non-specialized ones like Mixtral 7x8B)

    • Optimised support for Functionary & Nous Hermes, easy to extend to other tool-calling fine-tunes

TODO

  • Support tool result messages

  • Reactor /

  • Embedding endpoint w/ distinct server subprocess

  • Automatic/manual session caching

    • Spawns the main C++ CLI under the hood

    • Support precaching long prompts from CLI

    • Instant incremental inference in long threads

  • Improve examples/agent:

    • Interactive agent CLI that auto-discovers tools from OpenAPI endpoints

    • Script that wraps any Python source as a container-sandboxed OpenAPI endpoint (allowing running ~unsafe code w/ tools)

    • Basic memory / RAG / python interpreter tools

  • Follow-ups

    • Remove OAI support from server

    • Remove non-Python json schema to grammar converters

    • Reach out to frameworks to advertise new option.