phero
phero copied to clipboard
Cannot return `Promise<ReadableStream<Uint8Array>>` from PheroFn
The following code throws:
import { createService } from '@phero/server'
import { OpenAI, CreateChatCompletionRequest} from 'openai-streams'
async function ChatCompletion(params: CreateChatCompletionRequest): Promise<ReadableStream<Uint8Array>> {
return OpenAI("chat", params)
}
export const AiService = createService({
ChatCompletion,
})
Error I'm getting:
PheroParseError: /<root>/packages/api/src/phero.ts:11:92 - error TS-PheroError:
Array should have a type
11 async function ChatCompletion(params: CreateChatCompletionRequest): Promise<ReadableStream<Uint8Array>> {
~~~~~~~~~~
at generateFromDeclarationWithDeclaration (/<root>/node_modules/@phero/core/dist/generateModel/generateFromDeclaration/generateFromDeclaration.js:75:23)
at generateFromDeclaration (/<root>/node_modules/@phero/core/dist/generateModel/generateFromDeclaration/generateFromDeclaration.js:18:12)
at generateFromTypeReferenceNode (/<root>/node_modules/@phero/core/dist/generateModel/generateFromTypeNode/generateFromTypeReferenceNode.js:8:50)
at generateFromTypeNode (/<root>/node_modules/@phero/core/dist/generateModel/generateFromTypeNode/generateFromTypeNode.js:83:68)
at getUpdatedTypeParams (/<root>/node_modules/@phero/core/dist/generateModel/generateFromDeclaration/generateFromDeclaration.js:153:73)
at generateFromDeclarationWithDeclaration (/<root>/node_modules/@phero/core/dist/generateModel/generateFromDeclaration/generateFromDeclaration.js:63:70)
at generateFromDeclaration (/<root>/node_modules/@phero/core/dist/generateModel/generateFromDeclaration/generateFromDeclaration.js:18:12)
at generateFromTypeReferenceNode (/<root>/node_modules/@phero/core/dist/generateModel/generateFromTypeNode/generateFromTypeReferenceNode.js:8:50)
at generateFromTypeNode (/<root>/node_modules/@phero/core/dist/generateModel/generateFromTypeNode/generateFromTypeNode.js:83:68)
at generateFromReturnType (/<root>/node_modules/@phero/core/dist/generateModel/generateParserModelForFunction.js:27:47) {
node: <ref *4> NodeObject {
pos: 364,
end: 374,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 1,
parent: <ref *3> NodeObject {
pos: 349,
end: 375,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 1,
parent: <ref *2> NodeObject {
pos: 340,
end: 376,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 1,
parent: <ref *1> NodeObject {
pos: 271,
end: 412,
flags: 0,
modifierFlagsCache: 536871424,
transformFlags: 4194689,
parent: SourceFileObject {
pos: 0,
end: 476,
flags: 2048,
modifierFlagsCache: 0,
transformFlags: 4457857,
parent: undefined,
kind: 308,
statements: [Array],
endOfFileToken: [TokenObject],
text: "import { createService } from '@phero/server'\n" +
"import { OpenAI, CreateChatCompletionRequest} from 'openai-streams'\n" +
'async function helloWorld(name: string): Promise<string> {\n' +
' return `Hi there, ${name}!`\n' +
'}\n' +
'\n' +
'export const helloWorldService = createService({\n' +
' helloWorld,\n' +
'})\n' +
'\n' +
'async function ChatCompletion(params: CreateChatCompletionRequest): Promise<ReadableStream<Uint8Array>> {\n' +
' return OpenAI("chat", params)\n' +
'}\n' +
'\n' +
'export const AiService = createService({\n' +
' ChatCompletion,\n' +
'})\n',
fileName: '/<root>/packages/api/src/phero.ts',
path: '/<root>/packages/api/src/phero.ts',
resolvedPath: '/<root>/packages/api/src/phero.ts',
originalFileName: '/<root>/packages/api/src/phero.ts',
languageVersion: 4,
languageVariant: 0,
scriptKind: 3,
isDeclarationFile: false,
hasNoDefaultLib: false,
locals: [Map],
nextContainer: [NodeObject],
endFlowNode: [Object],
nodeCount: 73,
identifierCount: 23,
symbolCount: 16,
parseDiagnostics: [],
bindDiagnostics: [],
bindSuggestionDiagnostics: undefined,
lineMap: [Array],
externalModuleIndicator: [NodeObject],
setExternalModuleIndicator: [Function: callback],
pragmas: Map(0) {},
checkJsDirective: undefined,
referencedFiles: [],
typeReferenceDirectives: [],
libReferenceDirectives: [],
amdDependencies: [],
commentDirectives: undefined,
identifiers: [Map],
packageJsonLocations: undefined,
packageJsonScope: undefined,
imports: [Array],
moduleAugmentations: [],
ambientModuleNames: [],
resolvedModules: [Object],
classifiableNames: [Set],
impliedNodeFormat: undefined,
resolvedTypeReferenceDirectiveNames: undefined,
symbol: [SymbolObject]
},
kind: 259,
symbol: SymbolObject {
id: 0,
mergeId: 0,
flags: 16,
escapedName: 'ChatCompletion',
declarations: [Array],
valueDeclaration: [Circular *1],
parent: undefined,
isReferenced: 2208703
},
localSymbol: undefined,
modifiers: [
[TokenObject],
pos: 271,
end: 278,
hasTrailingComma: false,
transformFlags: 384
],
asteriskToken: undefined,
name: IdentifierObject {
pos: 287,
end: 302,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 0,
parent: [Circular *1],
kind: 79,
escapedText: 'ChatCompletion',
jsDoc: undefined,
flowNode: [Object],
symbol: undefined
},
typeParameters: undefined,
parameters: [
[NodeObject],
pos: 303,
end: 338,
hasTrailingComma: false,
transformFlags: 1
],
type: [Circular *2],
body: NodeObject {
pos: 376,
end: 412,
flags: 32768,
modifierFlagsCache: 0,
transformFlags: 4194432,
parent: [Circular *1],
kind: 238,
statements: [Array],
multiLine: true,
jsDoc: undefined,
locals: undefined,
nextContainer: undefined
},
typeArguments: undefined,
jsDoc: undefined,
locals: Map(1) { 'params' => [SymbolObject] },
nextContainer: undefined,
endFlowNode: undefined,
returnFlowNode: undefined
},
kind: 180,
typeName: IdentifierObject {
pos: 340,
end: 348,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 0,
parent: [Circular *2],
kind: 79,
escapedText: 'Promise',
jsDoc: undefined,
flowNode: { flags: 2 },
symbol: undefined
},
typeArguments: [
[Circular *3],
pos: 349,
end: 375,
hasTrailingComma: false,
transformFlags: 1
]
},
kind: 180,
typeName: IdentifierObject {
pos: 349,
end: 363,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 0,
parent: [Circular *3],
kind: 79,
escapedText: 'ReadableStream',
jsDoc: undefined,
flowNode: { flags: 2 },
symbol: undefined
},
typeArguments: [
[Circular *4],
pos: 364,
end: 374,
hasTrailingComma: false,
transformFlags: 1
],
id: 1633
},
kind: 180,
typeName: IdentifierObject {
pos: 364,
end: 374,
flags: 0,
modifierFlagsCache: 0,
transformFlags: 0,
parent: [Circular *4],
kind: 79,
escapedText: 'Uint8Array',
jsDoc: undefined,
flowNode: { flags: 2 },
symbol: undefined
},
typeArguments: undefined,
id: 1634
}
}