phero icon indicating copy to clipboard operation
phero copied to clipboard

Cannot return `Promise<ReadableStream<Uint8Array>>` from PheroFn

Open helmturner opened this issue 1 year ago • 0 comments

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
  }
}

helmturner avatar May 20 '23 07:05 helmturner