Skip to content

Commit

Permalink
[Theia AI] Terminal agent records its requests (#14246)
Browse files Browse the repository at this point in the history
* Terminal agent records its requests

fixed #14245

Signed-off-by: Jonas Helming <[email protected]>
  • Loading branch information
JonasHelming authored Oct 3, 2024
1 parent a9b01fe commit ce5e13f
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion packages/ai-terminal/src/browser/ai-terminal-agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@

import {
Agent,
CommunicationRecordingService,
getJsonOfResponse,
isLanguageModelParsedResponse,
LanguageModelRegistry, LanguageModelRequirement,
PromptService
} from '@theia/ai-core/lib/common';
import { ILogger } from '@theia/core';
import { generateUuid, ILogger } from '@theia/core';
import { inject, injectable } from '@theia/core/shared/inversify';
import { z } from 'zod';
import zodToJsonSchema from 'zod-to-json-schema';
Expand All @@ -33,6 +34,8 @@ type Commands = z.infer<typeof Commands>;

@injectable()
export class AiTerminalAgent implements Agent {
@inject(CommunicationRecordingService)
protected recordingService: CommunicationRecordingService;

id = 'Terminal Assistant';
name = 'Terminal Assistant';
Expand Down Expand Up @@ -153,6 +156,18 @@ recent-terminal-contents:
return [];
}

// since we do not actually hold complete conversions, the request/response pair is considered a session
const sessionId = generateUuid();
const requestId = generateUuid();
this.recordingService.recordRequest({
agentId: this.id,
sessionId,
timestamp: Date.now(),
requestId,
request: systemPrompt,
messages: [userPrompt],
});

try {
const result = await lm.request({
messages: [
Expand Down Expand Up @@ -181,12 +196,28 @@ recent-terminal-contents:
// model returned structured output
const parsedResult = Commands.safeParse(result.parsed);
if (parsedResult.success) {
const responseTextfromParsed = JSON.stringify(parsedResult.data.commands);
this.recordingService.recordResponse({
agentId: this.id,
sessionId,
timestamp: Date.now(),
requestId,
response: responseTextfromParsed,
});
return parsedResult.data.commands;
}
}

// fall back to agent-based parsing of result
const jsonResult = await getJsonOfResponse(result);
const responseTextFromJSON = JSON.stringify(jsonResult);
this.recordingService.recordResponse({
agentId: this.id,
sessionId,
timestamp: Date.now(),
requestId,
response: responseTextFromJSON
});
const parsedJsonResult = Commands.safeParse(jsonResult);
if (parsedJsonResult.success) {
return parsedJsonResult.data.commands;
Expand Down

0 comments on commit ce5e13f

Please sign in to comment.