diff --git a/solutions/68ce8e2b06888ba023bf2212_GigaChat_api/README.md b/solutions/68ce8e2b06888ba023bf2212_GigaChat_api/README.md new file mode 100644 index 0000000..d41aabf --- /dev/null +++ b/solutions/68ce8e2b06888ba023bf2212_GigaChat_api/README.md @@ -0,0 +1,148 @@ +# GigaChat API – Function Calling Demo + +A lightweight Python demo that shows how to interact with the **Sberbank GigaChat** REST API using the *Function Calling* feature. +The script sends a user prompt, receives a response from the model, detects if it requests a function call, executes the local function, and feeds the result back into the conversation. + +> **⚠️ Important** – Replace `YOUR_GIGACHAT_API_KEY` in `client.py` with your real GigaChat API key before running. + +--- + +## Table of Contents + +- [What It Does](#what-it-does) +- [Prerequisites](#prerequisites) +- [Installation](#installation) +- [Running the Demo](#running-the-demo) + - [Single Prompt Example](#single-prompt-example) + - [Interactive Session](#interactive-session) +- [Example Usage](#example-usage) +- [Extending with More Functions](#extending-with-more-functions) + +--- + +## What It Does + +1. **Sends a user prompt** to GigaChat via the `/chat` endpoint. +2. **Parses the model’s response** for a `function_call`. +3. If a function call is detected: + - Extracts the function name and arguments. + - Executes the corresponding local Python function (currently only `calculate_sum`). + - Sends the function result back to GigaChat as part of the conversation. +4. Prints the final assistant message. + +--- + +## Prerequisites + +| Component | Minimum Version | +|-----------|-----------------| +| Python | 3.11+ | +| pip | – | + +The demo uses only standard libraries (`json`, `time`) and the third‑party package: + +```bash +pip install requests +``` + +No external services (Ollama, Qdrant, etc.) are required. + +--- + +## Installation + +1. **Clone the repository** (or copy the files into a folder): + + ```bash + git clone https://github.com/your-username/gigachat-function-calling.git + cd gigachat-function-calling + ``` + +2. **Create a virtual environment** (recommended): + + ```bash + python -m venv .venv + source .venv/bin/activate # On Windows: .venv\Scripts\activate + ``` + +3. **Install dependencies**: + + ```bash + pip install -r requirements.txt + ``` + +> `requirements.txt` contains only `requests`. + +--- + +## Running the Demo + +### Single Prompt Example + +```bash +python client.py "What is 12 plus 30?" +``` + +The script will: +- Send `"What is 12 plus 30?"` to GigaChat. +- Detect that the model wants to call `calculate_sum(a=12, b=30)`. +- Execute the function locally and return the result (`42`) back to the model. +- Print the final assistant response. + +### Interactive Session + +If you run the script without arguments, it will start an interactive prompt: + +```bash +python client.py +``` + +You can then type any question or request. The session continues until you exit (Ctrl‑C). + +--- + +## Example Usage + +**Command** + +```bash +python client.py "Add 7 and 15." +``` + +**Output** + +``` +User: Add 7 and 15. +Assistant: Sure! Let me calculate that for you... +Function call detected: calculate_sum(a=7, b=15) +Result of calculate_sum(7, 15): 22 +Assistant: The sum of 7 and 15 is 22. Is there anything else I can help with? +``` + +--- + +## Extending with More Functions + +1. **Define a new function** in `client.py`: + + ```python + def get_current_time() -> str: + return time.strftime("%Y-%m-%d %H:%M:%S") + ``` + +2. **Add it to the `FUNCTION_MAP`:** + + ```python + FUNCTION_MAP = { + "calculate_sum": calculate_sum, + "get_current_time": get_current_time, + } + ``` + +3. **Update the model’s function schema** (if you control the prompt or system message) so GigaChat knows about the new function. + +The script will automatically detect and execute any function present in `FUNCTION_MAP`. + +--- + +Happy coding! 🚀 \ No newline at end of file