Skip to content

Instantly share code, notes, and snippets.

View lmolkova's full-sized avatar

Liudmila Molkova lmolkova

View GitHub Profile
@lmolkova
lmolkova / http_live_check.rego
Created April 30, 2025 16:23
http_live_check.rego
package live_check_advice
import rego.v1
required_attributes := [
"http.request.method",
"server.address",
"server.port",
"url.full",
]
@lmolkova
lmolkova / gen_ai_models.py
Last active May 13, 2025 17:16
gen_ai_models.py
import json
from typing import Annotated, Any, List, Literal, Optional, Union
from pydantic import BaseModel, Field
class ChatMessage(BaseModel):
role: str
class FunctionCall(BaseModel):
name: str
arguments: Optional[Any]
@lmolkova
lmolkova / request_options.md
Last active March 5, 2025 22:08
RequestOptions usage and mutability

RequestOptions scenarios

These are the scenarios we support today, not necessarily the ones we have to provide in the final design.

  1. Users can provide static (for a group of operations) configuration. E.g.: configure custom logger for all requests peformed in scope of this API call

  2. Provide dynamic (per-request) configuration. E.g. set request body or operation-specific context

So RequestOptions is a mix of (usually) per-request and (usually) static config.

@lmolkova
lmolkova / GenAIEventsILogger.cs
Last active October 16, 2024 22:50
.NET events
private string GetFinishReason(ChatFinishReason finishReason) => finishReason switch
{
ChatFinishReason.Stop => "stop",
ChatFinishReason.Length => "length",
ChatFinishReason.ToolCalls => "tool_calls",
// ...
_ => finishReason.ToString(),
};
private void LogChoice(ChatCompletion message)
import json
import os
import time
from typing import override
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
#HTTPXClientInstrumentor().instrument()
from openai import AssistantEventHandler
from openai.types.beta.threads.runs import RunStep
public class Main {
public static void main(String[] args) throws IOException {
var logProvider = SdkLoggerProvider.builder()
.addLogRecordProcessor(SimpleLogRecordProcessor.create(OtlpGrpcLogRecordExporter.getDefault())).build();
EventLoggerProvider eventLoggerProvider = SdkEventLoggerProvider.create(logProvider);
var logger = eventLoggerProvider.get("test-logger");
var event = new GenAIChoice()
.setId(1)
let get_role = (event_name:string) {
iff(event_name == "gen_ai.choice", "assistant", split(event_name, ".")[1])
};
let gen_ai_spans = dependencies
| where isnotnull(customDimensions["gen_ai.system"])
| project
operation_ParentId,
operation_Id,
id,
duration,
@lmolkova
lmolkova / openai_try_events.py
Created August 28, 2024 00:48
Python events openai
# set OPENAI_API_KEY
# install otel-api and otel-sdk from main
# install opentelemetry-instrumentation-openai from https://github.com/lmolkova/opentelemetry-python-contrib/tree/openai-events
from time import time_ns
from openai import OpenAI
from typing import Optional
from opentelemetry import trace, _logs, _events
import opentelemetry.sdk