mirror of
https://github.com/openai/codex.git
synced 2026-04-30 19:32:04 +03:00
turn start and complete
This commit is contained in:
@@ -147,7 +147,8 @@ pub struct AppInvocation {
|
||||
|
||||
pub enum AnalyticsInput {
|
||||
CodexThreadInitialized(CodexThreadInitializedInput),
|
||||
TurnEvent(TurnEventInput),
|
||||
TurnStarted(TurnStartedInput),
|
||||
TurnCompleted(TurnCompletedInput),
|
||||
SkillInvoked(SkillInvokedInput),
|
||||
AppMentioned(AppMentionedInput),
|
||||
AppUsed(AppUsedInput),
|
||||
@@ -155,10 +156,15 @@ pub enum AnalyticsInput {
|
||||
PluginStateChanged(PluginStateChangedInput),
|
||||
}
|
||||
|
||||
pub struct TurnEventInput {
|
||||
pub struct TurnStartedInput {
|
||||
pub tracking: TrackEventsContext,
|
||||
pub turn_event: CodexTurnEvent,
|
||||
}
|
||||
|
||||
pub struct TurnCompletedInput {
|
||||
pub turn_id: String,
|
||||
}
|
||||
|
||||
pub struct SkillInvokedInput {
|
||||
pub tracking: TrackEventsContext,
|
||||
pub invocations: Vec<SkillInvocation>,
|
||||
@@ -195,12 +201,17 @@ pub enum PluginState {
|
||||
#[derive(Default)]
|
||||
pub struct AnalyticsReducer {
|
||||
threads: HashMap<String, ThreadState>,
|
||||
turns: HashMap<String, TurnState>,
|
||||
}
|
||||
|
||||
struct ThreadState {
|
||||
_initialized_input: CodexThreadInitializedInput,
|
||||
}
|
||||
|
||||
struct TurnState {
|
||||
started_input: TurnStartedInput,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct AnalyticsEventsQueue {
|
||||
sender: mpsc::Sender<AnalyticsInput>,
|
||||
@@ -326,13 +337,19 @@ impl AnalyticsEventsClient {
|
||||
}));
|
||||
}
|
||||
|
||||
pub fn track_turn_event(&self, tracking: TrackEventsContext, turn_event: CodexTurnEvent) {
|
||||
self.record(AnalyticsInput::TurnEvent(TurnEventInput {
|
||||
pub fn track_turn_started(&self, tracking: TrackEventsContext, turn_event: CodexTurnEvent) {
|
||||
self.record(AnalyticsInput::TurnStarted(TurnStartedInput {
|
||||
tracking,
|
||||
turn_event,
|
||||
}));
|
||||
}
|
||||
|
||||
pub fn track_turn_completed(&self, turn_id: String) {
|
||||
self.record(AnalyticsInput::TurnCompleted(TurnCompletedInput {
|
||||
turn_id,
|
||||
}));
|
||||
}
|
||||
|
||||
pub fn track_plugin_installed(&self, plugin: PluginTelemetryMetadata) {
|
||||
self.record(AnalyticsInput::PluginStateChanged(
|
||||
PluginStateChangedInput {
|
||||
@@ -545,8 +562,11 @@ impl AnalyticsReducer {
|
||||
AnalyticsInput::CodexThreadInitialized(input) => {
|
||||
self.ingest_thread_initialized(input, out);
|
||||
}
|
||||
AnalyticsInput::TurnEvent(input) => {
|
||||
self.ingest_turn_event(input, out);
|
||||
AnalyticsInput::TurnStarted(input) => {
|
||||
self.ingest_turn_started(input);
|
||||
}
|
||||
AnalyticsInput::TurnCompleted(input) => {
|
||||
self.ingest_turn_completed(input, out);
|
||||
}
|
||||
AnalyticsInput::SkillInvoked(input) => {
|
||||
self.ingest_skill_invoked(input, out).await;
|
||||
@@ -582,11 +602,27 @@ impl AnalyticsReducer {
|
||||
));
|
||||
}
|
||||
|
||||
fn ingest_turn_event(&mut self, input: TurnEventInput, out: &mut Vec<TrackEventRequest>) {
|
||||
let TurnEventInput {
|
||||
fn ingest_turn_started(&mut self, input: TurnStartedInput) {
|
||||
self.turns.insert(
|
||||
input.tracking.turn_id.clone(),
|
||||
TurnState {
|
||||
started_input: input,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn ingest_turn_completed(
|
||||
&mut self,
|
||||
input: TurnCompletedInput,
|
||||
out: &mut Vec<TrackEventRequest>,
|
||||
) {
|
||||
let Some(TurnState { started_input }) = self.turns.remove(&input.turn_id) else {
|
||||
return;
|
||||
};
|
||||
let TurnStartedInput {
|
||||
tracking,
|
||||
turn_event,
|
||||
} = input;
|
||||
} = started_input;
|
||||
out.push(TrackEventRequest::TurnEvent(Box::new(
|
||||
CodexTurnEventRequest {
|
||||
event_type: "codex_turn_event",
|
||||
|
||||
Reference in New Issue
Block a user