Skip to content

An example of non-working spec #40

@WiZeYAR

Description

@WiZeYAR

Pantsbuild fails to generate:

pants venv
19:45:21.10 [INFO] Completed: Scheduling: Test binary /usr/bin/bash.
19:45:21.11 [INFO] Completed: Scheduling: Test binary /home/wize/.nix-profile/bin/bash.
19:45:21.11 [INFO] Completed: Scheduling: Test binary /run/current-system/sw/bin/bash.
19:45:21.11 [INFO] Completed: Scheduling: Test binary /nix/store/2j7r5np0vaz4cnqkymp1mqivmjj1x9xl-bash-interactive-5.3p3/bin/bash.
19:45:21.11 [INFO] Completed: Scheduling: Test binary /nix/store/cl2gkgnh26mmpka81pc2g5bzjfrili92-bash-5.3p3/bin/bash.
19:45:21.13 [INFO] Completed: Scheduling: Resolving plugins: asyncapi_python[codegen]==0.3.0rc10
19:45:21.16 [INFO] Completed: Scheduling: Extracting plugin locations
19:45:22.89 [INFO] Completed: Scheduling: Find interpreter for constraints: CPython==3.12.*
19:45:22.89 [INFO] Completed: Scheduling: Get interpreter version
19:45:23.11 [INFO] Completed: Scheduling: Build pex for resolve `python-default`
19:45:24.36 [INFO] Completed: Scheduling: Find interpreter for constraints: CPython>=3.10
19:45:24.36 [INFO] Completed: Scheduling: Building asyncapi-python-codegen.pex with 1 requirement: asyncapi-python[codegen]==0.3.0rc10
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit.old:asyncapi_alit_envoy_telegram.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/nslv:asyncapi_nslv_bot_telegram.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit.old:asyncapi_alit_store_message.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit.old:asyncapi_alit_auth.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/nslv:asyncapi_nslv_envoy_telegram.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit.old:asyncapi_alit_dashboard.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit:asyncapi_alit_nexus.
19:45:24.37 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit.old:asyncapi_alit_debug.
19:45:25.34 [INFO] Completed: Generating Python sources from src/asyncapi/alit:asyncapi_alit_voice.
19:45:25.34 [INFO] Completed: Scheduling: Generating Python sources from src/asyncapi/alit:asyncapi_alit_voice.
19:45:25.35 [ERROR] 1 Exception encountered:

Engine traceback:
  in `export` goal

ProcessExecutionFailure: Process 'Generating Python sources from src/asyncapi/alit:asyncapi_alit_voice.' failed with exit code 1.
stdout:
Generating code from alit/service.voice.asyncapi.yaml to _generated_files/asyncapi_alit_voice...
Parsing alit/service.voice.asyncapi.yaml...

❌ Document validation failed:

  ❌ Parameter 'destination' location path 'destination' not found in all message schemas. Missing in: VoiceAudioChunk
    at $.channels.voiceAudioChunk.parameters.destination.location
    💡 Add 'destination' field to all message payloads in this channel


stderr:
Error: Document validation failed with 1 error(s):

❌ Parameter 'destination' location path 'destination' not found in all message schemas. Missing in: VoiceAudioChunk
    at $.channels.voiceAudioChunk.parameters.destination.location
    💡 Add 'destination' field to all message payloads in this channel



Use `--keep-sandboxes=on_failure` to preserve the process chroot for inspection.
asyncapi: "3.0.0"
info:
  title: AsyncAPI Voice Service
  version: 0.1.0

operations:
  onNexusStream:
    action: receive
    channel:
      $ref: "./commons.nexus.asyncapi.yaml#/channels/stream"

  dispatchChunk:
    action: send
    channel:
      $ref: "#/channels/voiceAudioChunk"

channels:
  voiceAudioChunk:
    address: alit.srv.voice.chunk.{destination}
    parameters:
      destination:
        location: "$message.payload#/destination"
    messages:
      VoiceAudioChunk:
        payload:
          $ref: "#/components/schemas/VoiceAudioChunk"
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: alit.srv.voice.chunk
          type: topic
          durable: true
          autoDelete: false
          vhost: /

components:
  schemas:
    VoiceAudioChunk:
      type: object
      properties:
        dest: { type: string }
        sessionId: { type: string }
        audioBytes:
          type: string
          format: byte
          description: "Base64 encoded audio data (Opus format)"
        format: { type: string, enum: [opus], description: "Audio format" }
        sampleRate: { type: integer, description: "Sample rate in Hz" }
      required: [destination, sessionId, audioBytes, format, sampleRate]
asyncapi: "3.0.0"
info:
  title: Common types/channels for Nexus Service
  version: 0.1.0

channels:
  request:
    address: alit.srv.nexus.request.{sessionId}
    parameters:
      sessionId: { $ref: "#/components/parameters/sessionId" }
    messages:
      NexusRequest: { payload: { $ref: "#/components/schemas/NexusRequest" } }
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: alit.srv.nexus.request
          type: topic
          durable: true
          autoDelete: false
          vhost: /

  response:
    messages:
      NexusResponse: { payload: { $ref: "#/components/schemas/NexusResponse" } }
    bindings:
      amqp:
        exchange:
          name: alit.srv.nexus.response
          type: topic
          durable: true
          autoDelete: false
          vhost: /

  stream:
    address: alit.srv.nexus.stream.{sessionId}.{destination}
    parameters:
      sessionId: { $ref: "#/components/parameters/sessionId" }
      destination: { $ref: "#/components/parameters/destination" }
    messages:
      StreamingAgentEvent:
        payload:
          $ref: "#/components/schemas/StreamingAgentEvent"
    bindings:
      amqp:
        exchange:
          name: alit.srv.nexus.stream
          type: topic
          durable: true
          autoDelete: false
          vhost: /

components:
  parameters:
    sessionId: { location: "$message.payload#/sessionId" }
    destination: { location: "$message.payload#/destination" }
  schemas:
    NexusRequest:
      type: object
      properties:
        appName: { type: string }
        userId: { type: string }
        sessionId: { type: string }
        newMessage: { $ref: "#/components/schemas/Message" }
        streamingDestinations:
          type: array
          items: { type: string }
      required: [appName, userId, sessionId, newMessage]

    NexusResponse:
      type: object
      properties:
        sessionId: { type: string }
        events:
          type: array
          items: { $ref: "#/components/schemas/AgentEvent" }
      required: [sessionId, events]

    Actions:
      type: object
      properties:
        stateDelta: { type: object, additionalProperties: true }
        artifactDelta: { type: object, additionalProperties: true }
        requestedAuthConfigs: { type: object, additionalProperties: true }

    StreamingAgentEvent:
      type: object
      properties:
        sessionId: { type: string }
        destination: { type: string }
        event: { $ref: "#/components/schemas/AgentEvent" }
      required: [sessionId, destination, event]

    AgentEvent:
      type: object
      properties:
        content: { $ref: "#/components/schemas/MultiPartContent" }
        invocationId: { type: string }
        author: { type: string }
        actions: { $ref: "#/components/schemas/Actions" }
        longRunningToolIds:
          type: array
          items: { type: string }
        id: { type: string }
        timestamp: { type: number, format: float }
      required: [content, invocationId, author, actions, id, timestamp]

    Message:
      type: object
      properties:
        id: { type: string, nullable: true }
        role: { type: string, enum: [user, model, tool, system] }
        content: { $ref: "#/components/schemas/MultiPartContent" }
        timestamp: { type: number, format: float, nullable: true }
        metadata: { type: object, nullable: true, additionalProperties: true }
      required: [role, content]

    MultiPartContent:
      type: object
      properties:
        parts:
          type: array
          items:
            oneOf:
              - { $ref: "#/components/schemas/TextPart" }
              - { $ref: "#/components/schemas/InlineDataPart" }
              - { $ref: "#/components/schemas/FunctionCallPart" }
          minItems: 1

    TextPart:
      type: object
      properties:
        text: { type: string }
        thought: { enum: [true] }
      required: [text]

    InlineDataPart:
      type: object
      properties:
        inline_data: { type: object, additionalProperties: true }
      required: [inline_data]

    FunctionCallPart:
      type: object
      properties:
        function_call:
          type: object
          properties:
            name: { type: string }
            args: { type: object, additionalProperties: true }
          required: [name, args]
      required: [function_call]

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions