feat: embedding router

This commit is contained in:
Ran
2026-01-26 05:10:53 +07:00
parent c332ce7749
commit 3ff0e2c4dd
22 changed files with 2572 additions and 392 deletions
+269 -43
View File
@@ -61,6 +61,52 @@ const docTemplate = `{
}
}
},
"/embeddings": {
"post": {
"description": "Create text or multimodal embeddings",
"tags": [
"embeddings"
],
"summary": "Create embeddings",
"parameters": [
{
"description": "Embeddings request",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"501": {
"description": "Not Implemented",
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsResponse"
}
}
}
}
},
"/fs/apply_patch": {
"post": {
"description": "Apply a unified diff patch to a file under the user data mount",
@@ -364,6 +410,46 @@ const docTemplate = `{
}
}
},
"/memory/embed": {
"post": {
"description": "Embed text or multimodal input and upsert into memory store",
"tags": [
"memory"
],
"summary": "Embed and upsert memory",
"parameters": [
{
"description": "Embed upsert request",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/memory.EmbedUpsertRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/memory.EmbedUpsertResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
}
}
}
},
"/memory/memories": {
"get": {
"description": "List memories for a user via memory",
@@ -1044,6 +1130,83 @@ const docTemplate = `{
}
}
},
"handlers.EmbeddingsInput": {
"type": "object",
"properties": {
"image_url": {
"type": "string"
},
"text": {
"type": "string"
},
"video_url": {
"type": "string"
}
}
},
"handlers.EmbeddingsRequest": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"input": {
"$ref": "#/definitions/handlers.EmbeddingsInput"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"handlers.EmbeddingsResponse": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"embedding": {
"type": "array",
"items": {
"type": "number"
}
},
"message": {
"type": "string"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"type": {
"type": "string"
},
"usage": {
"$ref": "#/definitions/handlers.EmbeddingsUsage"
}
}
},
"handlers.EmbeddingsUsage": {
"type": "object",
"properties": {
"image_tokens": {
"type": "integer"
},
"input_tokens": {
"type": "integer"
},
"video_tokens": {
"type": "integer"
}
}
},
"handlers.ErrorResponse": {
"type": "object",
"properties": {
@@ -1216,6 +1379,74 @@ const docTemplate = `{
}
}
},
"memory.EmbedInput": {
"type": "object",
"properties": {
"image_url": {
"type": "string"
},
"text": {
"type": "string"
},
"video_url": {
"type": "string"
}
}
},
"memory.EmbedUpsertRequest": {
"type": "object",
"properties": {
"agent_id": {
"type": "string"
},
"filters": {
"type": "object",
"additionalProperties": true
},
"input": {
"$ref": "#/definitions/memory.EmbedInput"
},
"metadata": {
"type": "object",
"additionalProperties": true
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"run_id": {
"type": "string"
},
"source": {
"type": "string"
},
"type": {
"type": "string"
},
"user_id": {
"type": "string"
}
}
},
"memory.EmbedUpsertResponse": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"item": {
"$ref": "#/definitions/memory.MemoryItem"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
}
}
},
"memory.MemoryItem": {
"type": "object",
"properties": {
@@ -1282,6 +1513,12 @@ const docTemplate = `{
"run_id": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"user_id": {
"type": "string"
}
@@ -1316,18 +1553,15 @@ const docTemplate = `{
"models.AddRequest": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1335,7 +1569,7 @@ const docTemplate = `{
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
},
@@ -1350,19 +1584,6 @@ const docTemplate = `{
}
}
},
"models.ClientType": {
"type": "string",
"enum": [
"openai",
"anthropic",
"google"
],
"x-enum-varnames": [
"ClientTypeOpenAI",
"ClientTypeAnthropic",
"ClientTypeGoogle"
]
},
"models.CountResponse": {
"type": "object",
"properties": {
@@ -1374,18 +1595,15 @@ const docTemplate = `{
"models.GetResponse": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1393,25 +1611,33 @@ const docTemplate = `{
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
},
"models.ModelType": {
"type": "string",
"enum": [
"chat",
"embedding"
],
"x-enum-varnames": [
"ModelTypeChat",
"ModelTypeEmbedding"
]
},
"models.UpdateRequest": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1419,7 +1645,7 @@ const docTemplate = `{
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
}
+269 -43
View File
@@ -50,6 +50,52 @@
}
}
},
"/embeddings": {
"post": {
"description": "Create text or multimodal embeddings",
"tags": [
"embeddings"
],
"summary": "Create embeddings",
"parameters": [
{
"description": "Embeddings request",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"501": {
"description": "Not Implemented",
"schema": {
"$ref": "#/definitions/handlers.EmbeddingsResponse"
}
}
}
}
},
"/fs/apply_patch": {
"post": {
"description": "Apply a unified diff patch to a file under the user data mount",
@@ -353,6 +399,46 @@
}
}
},
"/memory/embed": {
"post": {
"description": "Embed text or multimodal input and upsert into memory store",
"tags": [
"memory"
],
"summary": "Embed and upsert memory",
"parameters": [
{
"description": "Embed upsert request",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/memory.EmbedUpsertRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/memory.EmbedUpsertResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/handlers.ErrorResponse"
}
}
}
}
},
"/memory/memories": {
"get": {
"description": "List memories for a user via memory",
@@ -1033,6 +1119,83 @@
}
}
},
"handlers.EmbeddingsInput": {
"type": "object",
"properties": {
"image_url": {
"type": "string"
},
"text": {
"type": "string"
},
"video_url": {
"type": "string"
}
}
},
"handlers.EmbeddingsRequest": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"input": {
"$ref": "#/definitions/handlers.EmbeddingsInput"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"handlers.EmbeddingsResponse": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"embedding": {
"type": "array",
"items": {
"type": "number"
}
},
"message": {
"type": "string"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"type": {
"type": "string"
},
"usage": {
"$ref": "#/definitions/handlers.EmbeddingsUsage"
}
}
},
"handlers.EmbeddingsUsage": {
"type": "object",
"properties": {
"image_tokens": {
"type": "integer"
},
"input_tokens": {
"type": "integer"
},
"video_tokens": {
"type": "integer"
}
}
},
"handlers.ErrorResponse": {
"type": "object",
"properties": {
@@ -1205,6 +1368,74 @@
}
}
},
"memory.EmbedInput": {
"type": "object",
"properties": {
"image_url": {
"type": "string"
},
"text": {
"type": "string"
},
"video_url": {
"type": "string"
}
}
},
"memory.EmbedUpsertRequest": {
"type": "object",
"properties": {
"agent_id": {
"type": "string"
},
"filters": {
"type": "object",
"additionalProperties": true
},
"input": {
"$ref": "#/definitions/memory.EmbedInput"
},
"metadata": {
"type": "object",
"additionalProperties": true
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
},
"run_id": {
"type": "string"
},
"source": {
"type": "string"
},
"type": {
"type": "string"
},
"user_id": {
"type": "string"
}
}
},
"memory.EmbedUpsertResponse": {
"type": "object",
"properties": {
"dimensions": {
"type": "integer"
},
"item": {
"$ref": "#/definitions/memory.MemoryItem"
},
"model": {
"type": "string"
},
"provider": {
"type": "string"
}
}
},
"memory.MemoryItem": {
"type": "object",
"properties": {
@@ -1271,6 +1502,12 @@
"run_id": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"user_id": {
"type": "string"
}
@@ -1305,18 +1542,15 @@
"models.AddRequest": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1324,7 +1558,7 @@
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
},
@@ -1339,19 +1573,6 @@
}
}
},
"models.ClientType": {
"type": "string",
"enum": [
"openai",
"anthropic",
"google"
],
"x-enum-varnames": [
"ClientTypeOpenAI",
"ClientTypeAnthropic",
"ClientTypeGoogle"
]
},
"models.CountResponse": {
"type": "object",
"properties": {
@@ -1363,18 +1584,15 @@
"models.GetResponse": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1382,25 +1600,33 @@
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
},
"models.ModelType": {
"type": "string",
"enum": [
"chat",
"embedding"
],
"x-enum-varnames": [
"ModelTypeChat",
"ModelTypeEmbedding"
]
},
"models.UpdateRequest": {
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"base_url": {
"type": "string"
},
"client_type": {
"$ref": "#/definitions/models.ClientType"
},
"dimensions": {
"type": "integer"
},
"is_multimodal": {
"type": "boolean"
},
"llm_provider_id": {
"type": "string"
},
"model_id": {
"type": "string"
},
@@ -1408,7 +1634,7 @@
"type": "string"
},
"type": {
"type": "string"
"$ref": "#/definitions/models.ModelType"
}
}
}
+178 -31
View File
@@ -26,6 +26,56 @@ definitions:
version:
type: integer
type: object
handlers.EmbeddingsInput:
properties:
image_url:
type: string
text:
type: string
video_url:
type: string
type: object
handlers.EmbeddingsRequest:
properties:
dimensions:
type: integer
input:
$ref: '#/definitions/handlers.EmbeddingsInput'
model:
type: string
provider:
type: string
type:
type: string
type: object
handlers.EmbeddingsResponse:
properties:
dimensions:
type: integer
embedding:
items:
type: number
type: array
message:
type: string
model:
type: string
provider:
type: string
type:
type: string
usage:
$ref: '#/definitions/handlers.EmbeddingsUsage'
type: object
handlers.EmbeddingsUsage:
properties:
image_tokens:
type: integer
input_tokens:
type: integer
video_tokens:
type: integer
type: object
handlers.ErrorResponse:
properties:
message:
@@ -138,6 +188,51 @@ definitions:
message:
type: string
type: object
memory.EmbedInput:
properties:
image_url:
type: string
text:
type: string
video_url:
type: string
type: object
memory.EmbedUpsertRequest:
properties:
agent_id:
type: string
filters:
additionalProperties: true
type: object
input:
$ref: '#/definitions/memory.EmbedInput'
metadata:
additionalProperties: true
type: object
model:
type: string
provider:
type: string
run_id:
type: string
source:
type: string
type:
type: string
user_id:
type: string
type: object
memory.EmbedUpsertResponse:
properties:
dimensions:
type: integer
item:
$ref: '#/definitions/memory.MemoryItem'
model:
type: string
provider:
type: string
type: object
memory.MemoryItem:
properties:
agentId:
@@ -182,6 +277,10 @@ definitions:
type: string
run_id:
type: string
sources:
items:
type: string
type: array
user_id:
type: string
type: object
@@ -204,20 +303,18 @@ definitions:
type: object
models.AddRequest:
properties:
api_key:
type: string
base_url:
type: string
client_type:
$ref: '#/definitions/models.ClientType'
dimensions:
type: integer
is_multimodal:
type: boolean
llm_provider_id:
type: string
model_id:
type: string
name:
type: string
type:
type: string
$ref: '#/definitions/models.ModelType'
type: object
models.AddResponse:
properties:
@@ -226,16 +323,6 @@ definitions:
model_id:
type: string
type: object
models.ClientType:
enum:
- openai
- anthropic
- google
type: string
x-enum-varnames:
- ClientTypeOpenAI
- ClientTypeAnthropic
- ClientTypeGoogle
models.CountResponse:
properties:
count:
@@ -243,37 +330,41 @@ definitions:
type: object
models.GetResponse:
properties:
api_key:
type: string
base_url:
type: string
client_type:
$ref: '#/definitions/models.ClientType'
dimensions:
type: integer
is_multimodal:
type: boolean
llm_provider_id:
type: string
model_id:
type: string
name:
type: string
type:
type: string
$ref: '#/definitions/models.ModelType'
type: object
models.ModelType:
enum:
- chat
- embedding
type: string
x-enum-varnames:
- ModelTypeChat
- ModelTypeEmbedding
models.UpdateRequest:
properties:
api_key:
type: string
base_url:
type: string
client_type:
$ref: '#/definitions/models.ClientType'
dimensions:
type: integer
is_multimodal:
type: boolean
llm_provider_id:
type: string
model_id:
type: string
name:
type: string
type:
type: string
$ref: '#/definitions/models.ModelType'
type: object
info:
contact: {}
@@ -308,6 +399,36 @@ paths:
summary: Login
tags:
- auth
/embeddings:
post:
description: Create text or multimodal embeddings
parameters:
- description: Embeddings request
in: body
name: payload
required: true
schema:
$ref: '#/definitions/handlers.EmbeddingsRequest'
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handlers.EmbeddingsResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/handlers.ErrorResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/handlers.ErrorResponse'
"501":
description: Not Implemented
schema:
$ref: '#/definitions/handlers.EmbeddingsResponse'
summary: Create embeddings
tags:
- embeddings
/fs/apply_patch:
post:
description: Apply a unified diff patch to a file under the user data mount
@@ -506,6 +627,32 @@ paths:
summary: Add memory
tags:
- memory
/memory/embed:
post:
description: Embed text or multimodal input and upsert into memory store
parameters:
- description: Embed upsert request
in: body
name: payload
required: true
schema:
$ref: '#/definitions/memory.EmbedUpsertRequest'
responses:
"200":
description: OK
schema:
$ref: '#/definitions/memory.EmbedUpsertResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/handlers.ErrorResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/handlers.ErrorResponse'
summary: Embed and upsert memory
tags:
- memory
/memory/memories:
delete:
description: Delete all memories for a user via memory