From 5ee970e173c3ab7b674fe4b8a5dc1431f9c9affe Mon Sep 17 00:00:00 2001 From: itsrubberduck Date: Tue, 16 Sep 2025 13:36:34 +0200 Subject: [PATCH] even more reduced llm costs but with variables --- server/utils/openai.ts | 82 +++++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 28 deletions(-) diff --git a/server/utils/openai.ts b/server/utils/openai.ts index 3c64567..cbd177e 100644 --- a/server/utils/openai.ts +++ b/server/utils/openai.ts @@ -33,34 +33,54 @@ export interface LLMDecision { radio_check?: boolean } +// Extrahiere verwendete Variablen aus Templates +function extractTemplateVariables(text?: string): string[] { + if (!text) return [] + const matches = text.match(/\{([^}]+)\}/g) || [] + return matches.map(match => match.slice(1, -1)) // Remove { } +} + // Optimierte aber ausreichende Eingabe für gute Entscheidungen function optimizeInputForLLM(input: LLMDecisionInput) { - // Nur relevante Candidate-Daten (reduziert aber nicht zu stark) - const candidates = input.candidates.map(c => ({ - id: c.id, - role: c.state.role, - phase: c.state.phase, - say_tpl: c.state.say_tpl ? c.state.say_tpl.substring(0, 100) : undefined // Gekürzt auf 100 Zeichen - })) + // Sammle alle verfügbaren Variablen aus dem Decision Tree + const availableVariables = [ + 'callsign', 'dest', 'dep', 'runway', 'squawk', 'sid', 'transition', + 'initial_altitude_ft', 'climb_altitude_ft', 'cruise_flight_level', + 'taxi_route', 'stand', 'gate', 'atis_code', 'qnh_hpa', + 'ground_freq', 'tower_freq', 'departure_freq', 'approach_freq', 'handoff_freq', + 'star', 'approach_type', 'remarks', 'acf_type' + ] - // Wichtige Variablen für Context - const essentials = { - callsign: input.variables.callsign, - dep: input.variables.dep, - dest: input.variables.dest, - runway: input.variables.runway, - squawk: input.variables.squawk, - current_unit: input.flags.current_unit, - in_air: input.flags.in_air - } + // Relevante Candidate-Daten mit Template-Variablen + const candidates = input.candidates.map(c => { + const templateVars = extractTemplateVariables(c.state.say_tpl) + return { + id: c.id, + role: c.state.role, + phase: c.state.phase, + template_vars: templateVars // Welche Variablen dieser State verwendet + } + }) + + // Sammle alle Template-Variablen aus den Candidates + const candidateVars = new Set() + candidates.forEach(c => c.template_vars?.forEach(v => candidateVars.add(v))) return { state_id: input.state_id, current_phase: input.state.phase, current_role: input.state.role, candidates: candidates, - context: essentials, - pilot_utterance: input.pilot_utterance + available_variables: availableVariables, // Alle verfügbaren Variablen + candidate_variables: Array.from(candidateVars), // Variablen die Candidates verwenden + pilot_utterance: input.pilot_utterance, + // Nur aktueller Context ohne Werte (für Token-Sparen) + context: { + callsign: input.variables.callsign, + current_unit: input.flags.current_unit, + in_air: input.flags.in_air, + phase: input.state.phase + } } } @@ -97,21 +117,27 @@ export async function routeDecision(input: LLMDecisionInput): Promise