Arize-ai/openinference - Open Source PR Review Scorecard

OpenTelemetry Instrumentation for AI Observability

C-Rank Grade: S (Elite) - 70/100

External PR Merge Rate: 69%

Response Time: -

First Timer Success: 63%

Frequently Asked Questions

Is Arize-ai/openinference welcoming to first-time open-source contributors?

Arize-ai/openinference has a recorded first-timer success rate of 63.0%. Repositories ranked S typically provide actionable feedback during code reviews and actively nurture new community contributors.

How fast can I expect code review feedback on my pull request?

Maintainers in Arize-ai/openinference respond to incoming external pull requests in approximately 0.0 hours on average. Keeping PRs focused on single tasks and ensuring tests pass helps maintainers review faster.

What does the 70.2 C-Rank™ score (S Tier) represent?

The C-Rank™ system evaluates GitHub projects on a 0–100 scale using real data: PR merge rates, review turnaround time, active maintainer presence, and first-time contributor success. A score of 70.2 places Arize-ai/openinference in the S tier.

What is the external contributor pull request merge rate for Arize-ai/openinference?

The external contributor pull request merge rate for Arize-ai/openinference is 69.3%, based on public PR activity from non-core contributors.

Are there Good First Issues available in Arize-ai/openinference?

Arize-ai/openinference currently has 9 active issue(s) tagged with beginner-friendly labels like "good first issue", "beginner", or "up-for-grabs".

Arize-ai
Arize-ai/openinferenceS•Elite1.3k
GitHub
Back to Explorer
Arize-ai

Arize-ai/openinference

1,259
Active (30d)S•Elite(70/100)Python

OpenTelemetry Instrumentation for AI Observability

GitHub
Compare••
Jump to:

AI Maintainer Review Guidelines

Review Persona

Strict Quality Architect

Warmth Score
6.9/10
Patience Score
7.4/10
Nitpick Rate
39%

Balanced & professional review environment in Arize-ai/openinference. Maintains strict focus on technical quality and test standards.

Top PR Submission Do's

  • •Add unit tests with >80% coverage for modified code paths
  • •Use conventional commit messages and clean branch names
  • •Link relevant GitHub issue ID in PR description pre-flight checklist

Top PR Friction Pitfalls (Don'ts)

  • •Do not submit unlinked PRs without referencing an existing issue
  • •Do not mix refactoring and feature logic into a single commit
  • •Do not ping maintainers repeatedly within 24 hours of opening
Response Velocity
-
No reviewer activity recorded

Average Response Latency

Tracks hours until a maintainer leaves a review, comment, or PR response.

Merge Efficiency
69.3%
Moderate PR acceptance rate

External Acceptance Rate

Percentage of community pull requests successfully merged into main.

First-Timer Success
63.0%
Strong first-timer PR acceptance rate

First PR Conversion

Rate at which developers submitting their first repository PR succeed.

Active Maintainers
44 core
Highly collaborative maintainer core
Diagnostic Health HUD
69.3%
Merge Gauge
63.0%
1st-Timer
Community Vibe47/100

Embed C-Rank Badge

Show contributors that your repository actively reviews and merges external pull requests.

GetMerged C-Rank badge for Arize-ai/openinference
[![GetMerged C-Rank](https://getmerged.abhishekco.de/api/badge/Arize-ai/openinference)](https://getmerged.abhishekco.de/Arize-ai/openinference?utm_source=github&utm_medium=badge)

Active Good First Issues (5)

View on GitHub

Describe the bug For converse and converse_stream, openinference-instrumentation-bedrock builds llm.invocation_parameters only from inferenceConfig (_converse_attributes.py). Two problems: Model-specific parameters are dropped. Converse passes parameters that are not in inferenceConfig through additionalModelRequestFields (e.g. top_k for Anthropic models; inferenceConfig has no top_k). These are sent to the model but never recorded. A response field is mixed into the request parameters. When the response arrives, the code copies inferenceConfig and then adds the response's stop reason to it: llm_attributes["invocation_parameters"] = dict(request_data["inferenceConfig"]) if "inferenceConfig" in request_data else {} llm_attributes["invocation_parameters"]["stop_reason"] = stop_reason So llm.invocation_parameters contains "stop_reason": "end_turn", which was not a request parameter (it is already recorded as llm.finish_reason). To Reproduce Self-contained: a botocore before-send h

📅 Opened Oct 5, 2026💬 2 comments
Quality: 65/100Contribute

Describe the bug With openinference-instrumentation-bedrock, the LLM span of converse_stream and invoke_model_with_response_stream is only ended when the event stream is read to the end. If the application stops early (break out of the loop, close() the stream, or simply drops it), the span is never ended, even after garbage collection, so it is never exported. Both streams are wrapped in _EventStream (utils/__init__.py); the span is ended by the callback only when the iterator raises StopIteration or an exception. Neither _EventStream nor _Iterator overrides close() or has a finalizer, so an early exit, an explicit close() (forwarded straight to botocore's EventStream), or garbage collection never ends the span. Same class of bug as #3790 (openai), #3784 (cohere), #3930 (anthropic) and #3931 (google-genai). To Reproduce Self-contained: a botocore before-send hook answers the requests with real AWS event-stream framing (no AWS account or network needed). import base64, gc, json, loggin

📅 Opened Oct 5, 2026💬 2 comments
Quality: 65/100Contribute

Describe the bug boto3 documents the body of invoke_model / invoke_model_with_response_stream as "bytes or seekable file-like object". openinference-instrumentation-bedrock parses it with json.loads(kwargs["body"]), which only accepts str / bytes: invoke_model_with_response_stream: _InvokeModelWithResponseStream.handle_response (_wrappers.py) calls json.loads(kwargs["body"]) after the wrapped call has returned. With a file-like body the request has already been sent (and billed), then TypeError: the JSON object must be str, bytes or bytearray, not BytesIO is raised into the application, which never gets the response stream. The span is started with end_on_exit=False, so it is never ended either. invoke_model: the same json.loads in _model_invocation_wrapper is inside a try/except, so the call succeeds, but no input is recorded, is_claude_message_api stays False, and the Anthropic response is then not recognised, so the output is not recorded either. The module docstring and comments

📅 Opened Oct 5, 2026💬 2 comments
Quality: 65/100Contribute

Describe the bug With @arizeai/openinference-instrumentation-openai-agents (0.3.2, also main), the span the processor creates for a function tool is never made active, so spans created while the tool runs (HTTP calls, database or RPC clients, any other instrumentation) are not its children. Inside the tool's execute, trace.getActiveSpan() is undefined, and a span started there begins a new trace. OpenInferenceTracingProcessor.onSpanStart builds a parent context and calls this.oiTracer.startSpan(...) (js/packages/openinference-instrumentation-openai-agents/src/processor.ts, around line 1225), keeping the span in a private otelSpans map; nothing calls context.with or attaches the context. The Python processor does attach it (_processor.py, line 180: self._tokens[span.span_id] = attach(set_span_in_context(otel_span)), detached in on_span_end), so in Python such child spans nest under the tool span. To Reproduce A scripted model (no API key, no network) calls one tool, which starts a span:

📅 Opened Oct 2, 2026💬 1 comment
Quality: 60/100Contribute

Summary get_llm_input_message_attributes yields a list-valued content straight into the string-typed message.content span attribute. The repo's own GenAI translation then renders it with str(), so the span reports the user's message as a Python repr: input: [{"role": "user", "content": [{"type": "text", "text": "hello"}]}] span: gen_ai.input.messages -> ... "content": "[{'type': 'text', 'text': 'hello'}]" With string content the same call produces "content": "hello". Where python/openinference-instrumentation/src/openinference/instrumentation/_attributes.py:680-681: if (content := message.get("content")) is not None: yield f"{base_key}.{message_index}.{MESSAGE_CONTENT}", content No type check. The contract it violates is declared in the same package, _types.py:87-92: class Message(TypedDict) declares content: str, contents: "Sequence[MessageContent]", tool_call_id: str, tool_calls: "Sequence[ToolCall]" — so contents is already the declared channel for content blocks. _genai_c

📅 Opened Sep 28, 2026💬 1 comment
Quality: 50/100Contribute
Looking for more Python beginner tasks?Explore Python GFI

Contributor Community Vibe Feedback

Rate what actually matters after opening a pull request here.

Have you contributed to this repo?

Rate your first-hand PR experience (review speed, maintainer responsiveness, and onboarding ease) to help other contributors.

3 ratings required
Maintainer helpfulness
Review speed
Beginner friendliness

Contributor Compatibility & Review Speed Analysis for Arize-ai/openinference

When evaluating whether to contribute to Arize-ai/openinference, response velocity and maintainer engagement are crucial. GetMerged continuously tracks pull request trajectories, first-comment latency, and code review rounds to help developers avoid submitting pull requests to backlogged repositories.

Currently, maintainers of Arize-ai/openinference acknowledge new external contributions in approximately -. Out of all submitted pull requests from non-core authors in the last 180-day window, 69.3% were successfully merged into the primary branch.

Frequently Asked Questions - Contributing to Arize-ai/openinference

01

Is Arize-ai/openinference welcoming to first-time open-source contributors?

Arize-ai/openinference has a recorded first-timer success rate of 63.0%. Repositories ranked Elite typically provide actionable feedback during code reviews and actively nurture new community contributors.

02

How fast can I expect code review feedback on my pull request?

The initial maintainer response time averages ~-. Keeping PRs scoped to single concerns and ensuring CI checks succeed will optimize review turnaround.

03

What does the 70.2 C-Rank™ score represent?

The C-Rank™ index scores repositories on a 0 to 100 scale using an objective formula: external PR merge rates, initial response speed, active maintainer count, and first-time contributor retention. A score of 70.2 places Arize-ai/openinference in the Elite tier.

04

What is the external contributor pull request merge rate for Arize-ai/openinference?

The external pull request merge rate is 69.3%. GetMerged isolates non-core community contributions so external developers get an accurate benchmark of PR acceptance probability.

05

Are there beginner Good First Issues open in Arize-ai/openinference?

Yes, Arize-ai/openinference currently has 9 active issue(s) tagged with beginner-friendly labels. You can inspect these directly from the repository issues tab.

GetMerged C-Rank™ Indexing Standard

All metrics displayed for Arize-ai/openinference are automatically retrieved via the public GitHub API and recalculated daily. Insider pull requests submitted by repository owners or organization members are excluded from merge rate calculations to preserve objective external contributor statistics.