rework types

This commit is contained in:
Dax Raad
2025-05-29 10:21:59 -04:00
parent d70201cd93
commit 33a831d2be
12 changed files with 494 additions and 432 deletions

View File

@@ -1,135 +0,0 @@
import z from "zod";
const ToolCall = z
.object({
state: z.literal("call"),
step: z.number().optional(),
toolCallId: z.string(),
toolName: z.string(),
args: z.record(z.string(), z.any()),
})
.openapi({
ref: "Session.Message.ToolInvocation.ToolCall",
});
const ToolPartialCall = z
.object({
state: z.literal("partial-call"),
step: z.number().optional(),
toolCallId: z.string(),
toolName: z.string(),
args: z.record(z.string(), z.any()),
})
.openapi({
ref: "Session.Message.ToolInvocation.ToolPartialCall",
});
const ToolResult = z
.object({
state: z.literal("result"),
step: z.number().optional(),
toolCallId: z.string(),
toolName: z.string(),
args: z.record(z.string(), z.any()),
result: z.string(),
})
.openapi({
ref: "Session.Message.ToolInvocation.ToolResult",
});
const ToolInvocation = z
.discriminatedUnion("state", [ToolCall, ToolPartialCall, ToolResult])
.openapi({
ref: "Session.Message.ToolInvocation",
});
export type ToolInvocation = z.infer<typeof ToolInvocation>;
const TextPart = z
.object({
type: z.literal("text"),
text: z.string(),
})
.openapi({
ref: "Session.Message.Part.Text",
});
const ReasoningPart = z
.object({
type: z.literal("reasoning"),
text: z.string(),
providerMetadata: z.record(z.any()).optional(),
})
.openapi({
ref: "Session.Message.Part.Reasoning",
});
const ToolInvocationPart = z
.object({
type: z.literal("tool-invocation"),
toolInvocation: ToolInvocation,
})
.openapi({
ref: "Session.Message.Part.ToolInvocation",
});
const SourceUrlPart = z
.object({
type: z.literal("source-url"),
sourceId: z.string(),
url: z.string(),
title: z.string().optional(),
providerMetadata: z.record(z.any()).optional(),
})
.openapi({
ref: "Session.Message.Part.SourceUrl",
});
const FilePart = z
.object({
type: z.literal("file"),
mediaType: z.string(),
filename: z.string().optional(),
url: z.string(),
})
.openapi({
ref: "Session.Message.Part.File",
});
const StepStartPart = z
.object({
type: z.literal("step-start"),
})
.openapi({
ref: "Session.Message.Part.StepStart",
});
const Part = z
.discriminatedUnion("type", [
TextPart,
ReasoningPart,
ToolInvocationPart,
SourceUrlPart,
FilePart,
StepStartPart,
])
.openapi({
ref: "Session.Message.Part",
});
export const SessionMessage = z
.object({
id: z.string(),
role: z.enum(["system", "user", "assistant"]),
parts: z.array(Part),
metadata: z.object({
time: z.object({
created: z.number(),
completed: z.number().optional(),
}),
sessionID: z.string(),
tool: z.record(z.string(), z.any()),
}),
})
.openapi({
ref: "Session.Message",
});

View File

@@ -9,7 +9,7 @@ import { z } from "zod";
import "zod-openapi/extend";
import { Config } from "../app/config";
import { LLM } from "../llm/llm";
import { SessionMessage } from "./message";
import { Message } from "../session/message";
const SessionInfo = Session.Info.openapi({
ref: "Session.Info",
@@ -40,6 +40,7 @@ export namespace Server {
version: "1.0.0",
description: "opencode api",
},
openapi: "3.0.0",
},
}),
)
@@ -120,7 +121,7 @@ export namespace Server {
description: "Successfully created session",
content: {
"application/json": {
schema: resolver(SessionMessage.array()),
schema: resolver(Message.Info.array()),
},
},
},
@@ -194,7 +195,7 @@ export namespace Server {
description: "Chat with a model",
content: {
"application/json": {
schema: resolver(SessionMessage),
schema: resolver(Message.Info),
},
},
},
@@ -206,7 +207,7 @@ export namespace Server {
sessionID: z.string(),
providerID: z.string(),
modelID: z.string(),
parts: SessionMessage.shape.parts,
parts: Message.Part.array(),
}),
),
async (c) => {
@@ -252,6 +253,7 @@ export namespace Server {
version: "1.0.0",
description: "opencode api",
},
openapi: "3.0.0",
},
});
return result;