|
Download docs/local-development.md from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 4.89 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/docs/local-development.md
- Command line
-
hf download hf://SaylorTwift/gemini-cli/docs/local-development.md
-
curl -L -o local-development.md https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/docs/local-development.md
4.89 kB
| # Local development guide | |
| This guide provides instructions for setting up and using local development | |
| features for Gemini CLI. | |
| ## Tracing | |
| Gemini CLI uses OpenTelemetry (OTel) to record traces that help you debug agent | |
| behavior. Traces instrument key events like model calls, tool scheduler | |
| operations, and tool calls. | |
| Traces provide deep visibility into agent behavior and help you debug complex | |
| issues. They are captured automatically when you enable telemetry. | |
| ### View traces | |
| You can view traces using Genkit Developer UI, Jaeger, or Google Cloud. | |
| #### Use Genkit | |
| Genkit provides a web-based UI for viewing traces and other telemetry data. | |
| 1. **Start the Genkit telemetry server:** | |
| Run the following command to start the Genkit server: | |
| ```bash | |
| npm run telemetry -- --target=genkit | |
| ``` | |
| The script will output the URL for the Genkit Developer UI. For example: | |
| `Genkit Developer UI: http://localhost:4000` | |
| 2. **Run Gemini CLI:** | |
| In a separate terminal, run your Gemini CLI command: | |
| ```bash | |
| gemini | |
| ``` | |
| 3. **View the traces:** | |
| Open the Genkit Developer UI URL in your browser and navigate to the | |
| **Traces** tab to view the traces. | |
| #### Use Jaeger | |
| You can view traces in the Jaeger UI for local development. | |
| 1. **Start the telemetry collector:** | |
| Run the following command in your terminal to download and start Jaeger and | |
| an OTel collector: | |
| ```bash | |
| npm run telemetry -- --target=local | |
| ``` | |
| This command configures your workspace for local telemetry and provides a | |
| link to the Jaeger UI (usually `http://localhost:16686`). | |
| - **Collector logs:** `~/.gemini/tmp/<projectHash>/otel/collector.log` | |
| 2. **Run Gemini CLI:** | |
| In a separate terminal, run your Gemini CLI command: | |
| ```bash | |
| gemini | |
| ``` | |
| 3. **View the traces:** | |
| After running your command, open the Jaeger UI link in your browser to view | |
| the traces. | |
| #### Use Google Cloud | |
| You can use an OpenTelemetry collector to forward telemetry data to Google Cloud | |
| Trace for custom processing or routing. | |
| <!-- prettier-ignore --> | |
| > [!WARNING] | |
| > Ensure you complete the | |
| > [Google Cloud telemetry prerequisites](./cli/telemetry.md#prerequisites) | |
| > (Project ID, authentication, IAM roles, and APIs) before using this method. | |
| 1. **Configure `.gemini/settings.json`:** | |
| ```json | |
| { | |
| "telemetry": { | |
| "enabled": true, | |
| "target": "gcp", | |
| "useCollector": true | |
| } | |
| } | |
| ``` | |
| 2. **Start the telemetry collector:** | |
| Run the following command to start a local OTel collector that forwards to | |
| Google Cloud: | |
| ```bash | |
| npm run telemetry -- --target=gcp | |
| ``` | |
| The script outputs links to view traces, metrics, and logs in the Google | |
| Cloud Console. | |
| - **Collector logs:** `~/.gemini/tmp/<projectHash>/otel/collector-gcp.log` | |
| 3. **Run Gemini CLI:** | |
| In a separate terminal, run your Gemini CLI command: | |
| ```bash | |
| gemini | |
| ``` | |
| 4. **View logs, metrics, and traces:** | |
| After sending prompts, view your data in the Google Cloud Console. See the | |
| [telemetry documentation](./cli/telemetry.md#view-google-cloud-telemetry) | |
| for links to Logs, Metrics, and Trace explorers. | |
| For more detailed information on telemetry, see the | |
| [telemetry documentation](./cli/telemetry.md). | |
| ### Instrument code with traces | |
| You can add traces to your own code for more detailed instrumentation. | |
| Adding traces helps you debug and understand the flow of execution. Use the | |
| `runInDevTraceSpan` function to wrap any section of code in a trace span. | |
| Here is a basic example: | |
| ```typescript | |
| import { runInDevTraceSpan } from '@google/gemini-cli-core'; | |
| import { GeminiCliOperation } from '@google/gemini-cli-core/lib/telemetry/constants.js'; | |
| await runInDevTraceSpan( | |
| { | |
| operation: GeminiCliOperation.ToolCall, | |
| attributes: { | |
| [GEN_AI_AGENT_NAME]: 'gemini-cli', | |
| }, | |
| }, | |
| async ({ metadata }) => { | |
| // metadata allows you to record the input and output of the | |
| // operation as well as other attributes. | |
| metadata.input = { key: 'value' }; | |
| // Set custom attributes. | |
| metadata.attributes['custom.attribute'] = 'custom.value'; | |
| // Your code to be traced goes here. | |
| try { | |
| const output = await somethingRisky(); | |
| metadata.output = output; | |
| return output; | |
| } catch (e) { | |
| metadata.error = e; | |
| throw e; | |
| } | |
| }, | |
| ); | |
| ``` | |
| In this example: | |
| - `operation`: The operation type of the span, represented by the | |
| `GeminiCliOperation` enum. | |
| - `metadata.input`: (Optional) An object containing the input data for the | |
| traced operation. | |
| - `metadata.output`: (Optional) An object containing the output data from the | |
| traced operation. | |
| - `metadata.attributes`: (Optional) A record of custom attributes to add to the | |
| span. | |
| - `metadata.error`: (Optional) An error object to record if the operation fails. | |