Skip to content

Commit

Permalink
gptplugin support openapi.yaml & ai-plugin.json config
Browse files Browse the repository at this point in the history
  • Loading branch information
nayutah committed Apr 3, 2023
1 parent 1b4b428 commit 63b1506
Show file tree
Hide file tree
Showing 3 changed files with 332 additions and 0 deletions.
306 changes: 306 additions & 0 deletions deploy/chatgpt-retrieval-plugin/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,306 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: gptplugin-config
namespace: {{ .Release.Namespace | quote }}
labels:
{{- include "gptplugin.labels" . | nindent 4 }}

data:
ai-plugin.json: |-
{
"schema_version": "v1",
"name_for_model": "retrieval",
"name_for_human": "Retrieval Plugin",
"description_for_model": "Plugin for searching through the user's documents (such as files, emails, and more) to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be found in their personal information, or asks you to save information for later.",
"description_for_human": "Search through your documents.",
"auth": {
"type": "user_http",
"authorization_type": "bearer"
},
"api": {
"type": "openapi",
"url": "{{- .Values.website.url | default "https://your-app-url.com/.well-known/openapi.yaml"}}",
"has_user_authentication": false
},
"logo_url": "{{- .Values.website.logo_url | default "https://your-app-url.com/.well-known/logo.png"}}",
"contact_email": "{{- .Values.website.contact_email | default "[email protected]"}}",
"legal_info_url": "{{- .Values.website.legal_info_url | default "[email protected]"}}"
}
openapi.yaml: |-
openapi: 3.0.2
info:
title: Retrieval Plugin API
description: A retrieval API for querying and filtering documents based on natural language queries and metadata
version: 1.0.0
servers:
- url: "{{- .Values.servers.url | default "https://your-app-url.com"}}"
paths:
/upsert:
post:
summary: Upsert
description: Save chat information. Accepts an array of documents with text (potential questions + conversation text), metadata (source 'chat' and timestamp, no ID as this will be generated). Confirm with the user before saving, ask for more details/context.
operationId: upsert_upsert_post
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/UpsertRequest"
required: true
responses:
"200":
description: Successful Response
content:
application/json:
schema:
$ref: "#/components/schemas/UpsertResponse"
"422":
description: Validation Error
content:
application/json:
schema:
$ref: "#/components/schemas/HTTPValidationError"
security:
- HTTPBearer: [ ]
/query:
post:
summary: Query
description: Accepts search query objects array each with query and optional filter. Break down complex questions into sub-questions. Refine results by criteria, e.g. time / source, don't do this often. Split queries if ResponseTooLargeError occurs.
operationId: query_query_post
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/QueryRequest"
required: true
responses:
"200":
description: Successful Response
content:
application/json:
schema:
$ref: "#/components/schemas/QueryResponse"
"422":
description: Validation Error
content:
application/json:
schema:
$ref: "#/components/schemas/HTTPValidationError"
security:
- HTTPBearer: [ ]
components:
schemas:
Document:
title: Document
required:
- text
type: object
properties:
id:
title: Id
type: string
text:
title: Text
type: string
metadata:
$ref: "#/components/schemas/DocumentMetadata"
DocumentChunkMetadata:
title: DocumentChunkMetadata
type: object
properties:
source:
$ref: "#/components/schemas/Source"
source_id:
title: Source Id
type: string
url:
title: Url
type: string
created_at:
title: Created At
type: string
author:
title: Author
type: string
document_id:
title: Document Id
type: string
DocumentChunkWithScore:
title: DocumentChunkWithScore
required:
- text
- metadata
- score
type: object
properties:
id:
title: Id
type: string
text:
title: Text
type: string
metadata:
$ref: "#/components/schemas/DocumentChunkMetadata"
embedding:
title: Embedding
type: array
items:
type: number
score:
title: Score
type: number
DocumentMetadata:
title: DocumentMetadata
type: object
properties:
source:
$ref: "#/components/schemas/Source"
source_id:
title: Source Id
type: string
url:
title: Url
type: string
created_at:
title: Created At
type: string
author:
title: Author
type: string
DocumentMetadataFilter:
title: DocumentMetadataFilter
type: object
properties:
document_id:
title: Document Id
type: string
source:
$ref: "#/components/schemas/Source"
source_id:
title: Source Id
type: string
author:
title: Author
type: string
start_date:
title: Start Date
type: string
end_date:
title: End Date
type: string
HTTPValidationError:
title: HTTPValidationError
type: object
properties:
detail:
title: Detail
type: array
items:
$ref: "#/components/schemas/ValidationError"
Query:
title: Query
required:
- query
type: object
properties:
query:
title: Query
type: string
filter:
$ref: "#/components/schemas/DocumentMetadataFilter"
top_k:
title: Top K
type: integer
default: 3
QueryRequest:
title: QueryRequest
required:
- queries
type: object
properties:
queries:
title: Queries
type: array
items:
$ref: "#/components/schemas/Query"
QueryResponse:
title: QueryResponse
required:
- results
type: object
properties:
results:
title: Results
type: array
items:
$ref: "#/components/schemas/QueryResult"
QueryResult:
title: QueryResult
required:
- query
- results
type: object
properties:
query:
title: Query
type: string
results:
title: Results
type: array
items:
$ref: "#/components/schemas/DocumentChunkWithScore"
Source:
title: Source
enum:
- email
- file
- chat
type: string
description: An enumeration.
UpsertRequest:
title: UpsertRequest
required:
- documents
type: object
properties:
documents:
title: Documents
type: array
items:
$ref: "#/components/schemas/Document"
UpsertResponse:
title: UpsertResponse
required:
- ids
type: object
properties:
ids:
title: Ids
type: array
items:
type: string
ValidationError:
title: ValidationError
required:
- loc
- msg
- type
type: object
properties:
loc:
title: Location
type: array
items:
anyOf:
- type: string
- type: integer
msg:
title: Message
type: string
type:
title: Error Type
type: string
securitySchemes:
HTTPBearer:
type: http
scheme: bearer
17 changes: 17 additions & 0 deletions deploy/chatgpt-retrieval-plugin/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ spec:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.registry | default "docker.io" }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
volumeMounts:
- mountPath: /code/.well-known/ai-plugin.json
name: config
subPath: ai-plugin.json
- mountPath: /code/.well-known/openapi.yaml
name: config
subPath: openapi.yaml
ports:
- name: http
containerPort: 8080
Expand Down Expand Up @@ -134,3 +141,13 @@ spec:
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

volumes:
- name: config
configMap:
name: gptplugin-config
items:
- key: ai-plugin.json
path: ai-plugin.json
- key: openapi.yaml
path: openapi.yaml
9 changes: 9 additions & 0 deletions deploy/chatgpt-retrieval-plugin/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,15 @@ service:
type: ClusterIP
port: 8080

servers:
url: https://your-app-url.com

website:
url: https://your-app-url.com/.well-known/openapi.yaml
logo_url: https://your-app-url.com/.well-known/logo.png
contact_email: [email protected]
legal_info_url: [email protected]

datastore:
# in list of (pinecone, weaviate, zilliz, milvus, qdrant, redis)
DATASTORE:
Expand Down

0 comments on commit 63b1506

Please sign in to comment.