Upload File and Upload Skill
The Go SDK provides top-level helpers for uploading files and skills through provider upload APIs:
ai.UploadFile(...)ai.UploadSkill(...)
Both helpers accept either:
- A provider upload API directly (
provider.FilesAPI/provider.SkillsAPI) - A provider implementing
Files()/Skills()
UploadFile
result, err := ai.UploadFile(ctx, ai.UploadFileOptions{
API: openaiProvider,
Data: []byte("hello world"),
Filename: "hello.txt",
MediaType: "text/plain",
ProviderOptions: map[string]interface{}{
"openai": map[string]interface{}{"purpose": "assistants"},
},
})
if err != nil {
panic(err)
}
fileID := result.ProviderReference["openai"]
UploadFile normalizes shorthand data inputs ([]byte, string) into types.FileData, resolves the target files API, and auto-detects media type when omitted. String data is treated as a TypeScript-compatible base64 data string and decoded by the provider upload implementation.
Use the returned provider reference in later prompts without downloading or inlining the file:
result, err := ai.GenerateText(ctx, ai.GenerateTextOptions{
Model: model,
Messages: []types.Message{
{
Role: types.RoleUser,
Content: []types.ContentPart{
types.TextContent{Text: "Summarize this file."},
types.FileContent{
MediaType: upload.MediaType,
Filename: upload.Filename,
FileData: types.FileData{
Type: types.FileDataTypeReference,
Reference: upload.ProviderReference,
MediaType: upload.MediaType,
},
},
},
},
},
})
See examples/upload-file/provider-reference for a complete upload-then-reference flow.
UploadSkill
result, err := ai.UploadSkill(ctx, ai.UploadSkillOptions{
API: openaiProvider,
DisplayTitle: "My Skill",
Files: []ai.UploadSkillFile{
{Path: "index.ts", Data: []byte("export default {}")},
{Path: "README.md", Data: "# Skill"},
},
})
if err != nil {
panic(err)
}
skillID := result.ProviderReference["openai"]
UploadSkill normalizes shorthand file data and delegates to the provider skills API.