Преглед изворни кода

feat: add models.dev schema ref for model autocomplete in opencode.json (#12528)

Tommy D. Rossi пре 1 недеља
родитељ
комит
576a681a4f
4 измењених фајлова са 28 додато и 8 уклоњено
  1. 3 0
      bun.lock
  2. 3 1
      package.json
  3. 6 7
      packages/opencode/src/config/config.ts
  4. 16 0
      patches/@standard-community%[email protected]

+ 3 - 0
bun.lock

@@ -497,6 +497,9 @@
     "web-tree-sitter",
     "tree-sitter-bash",
   ],
+  "patchedDependencies": {
+    "@standard-community/[email protected]": "patches/@standard-community%[email protected]",
+  },
   "overrides": {
     "@types/bun": "catalog:",
     "@types/node": "catalog:",

+ 3 - 1
package.json

@@ -100,5 +100,7 @@
     "@types/bun": "catalog:",
     "@types/node": "catalog:"
   },
-  "patchedDependencies": {}
+  "patchedDependencies": {
+    "@standard-community/[email protected]": "patches/@standard-community%[email protected]"
+  }
 }

+ 6 - 7
packages/opencode/src/config/config.ts

@@ -33,6 +33,8 @@ import { proxied } from "@/util/proxied"
 import { iife } from "@/util/iife"
 
 export namespace Config {
+  const ModelId = z.string().meta({ $ref: "https://models.dev/model-schema.json#/$defs/Model" })
+
   const log = Log.create({ service: "config" })
 
   // Managed settings directory for enterprise deployments (highest priority, admin-controlled)
@@ -653,7 +655,7 @@ export namespace Config {
     template: z.string(),
     description: z.string().optional(),
     agent: z.string().optional(),
-    model: z.string().optional(),
+    model: ModelId.optional(),
     subtask: z.boolean().optional(),
   })
   export type Command = z.infer<typeof Command>
@@ -669,7 +671,7 @@ export namespace Config {
 
   export const Agent = z
     .object({
-      model: z.string().optional(),
+      model: ModelId.optional(),
       variant: z
         .string()
         .optional()
@@ -1040,11 +1042,8 @@ export namespace Config {
         .array(z.string())
         .optional()
         .describe("When set, ONLY these providers will be enabled. All other providers will be ignored"),
-      model: z.string().describe("Model to use in the format of provider/model, eg anthropic/claude-2").optional(),
-      small_model: z
-        .string()
-        .describe("Small model to use for tasks like title generation in the format of provider/model")
-        .optional(),
+      model: ModelId.describe("Model to use in the format of provider/model, eg anthropic/claude-2").optional(),
+      small_model: ModelId.describe("Small model to use for tasks like title generation in the format of provider/model").optional(),
       default_agent: z
         .string()
         .optional()

+ 16 - 0
patches/@standard-community%[email protected]

@@ -0,0 +1,16 @@
+diff --git a/dist/vendors/convert.js b/dist/vendors/convert.js
+index 0d615eebfd7cd646937ec1b29f8332db73586ec1..7b146f903c07a9377d676753691cba67781879be 100644
+--- a/dist/vendors/convert.js
++++ b/dist/vendors/convert.js
+@@ -74,7 +74,10 @@ function convertToOpenAPISchema(jsonSchema, context) {
+       $ref: `#/components/schemas/${id}`
+     };
+   } else if (_jsonSchema.$ref) {
+-    const { $ref, $defs } = _jsonSchema;
++    const { $ref, $defs, ...rest } = _jsonSchema;
++    if ($ref.includes("://")) {
++      return Object.keys(rest).length > 0 ? rest : { type: "string" };
++    }
+     const ref = $ref.split("/").pop();
+     context.components.schemas = {
+       ...context.components.schemas,